1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
|
1
00:00:00,210 --> 00:00:02,770
Now to drive home some of the points that I just
2
00:00:02,770 --> 00:00:05,920
made, I would like to show you a few real world examples
3
00:00:05,920 --> 00:00:09,150
of architectures that kind of went astray. The first example I
4
00:00:09,150 --> 00:00:11,970
want to use is an example from the Linux kernel. Actually, from
5
00:00:11,970 --> 00:00:15,260
an earlier version of the Linux kernel. A research group studied
6
00:00:15,260 --> 00:00:17,020
the documentation of Linux, and also
7
00:00:17,020 --> 00:00:19,440
interviewed several Linux developers. And by
8
00:00:19,440 --> 00:00:21,710
doing that, they were able to come up with a software
9
00:00:21,710 --> 00:00:25,260
architecture of Linux at different levels of obstruction. So the one that
10
00:00:25,260 --> 00:00:27,365
I'm showing you here on the left, is the
11
00:00:27,365 --> 00:00:31,120
software architecture at the level of Linux's main subsystems. So
12
00:00:31,120 --> 00:00:34,540
this is the prescriptive architecture of Linux at the level
13
00:00:34,540 --> 00:00:38,060
of Linux's main subsystems. So the researchers, after identifying this
14
00:00:38,060 --> 00:00:40,420
architecture, they showed it to the developers, and the
15
00:00:40,420 --> 00:00:43,180
developers agreed that, that was indeed the architecture of the
16
00:00:43,180 --> 00:00:46,540
system. The researchers then studied the source code of Linux
17
00:00:46,540 --> 00:00:50,380
and reverse engineered its actual architecture. So the architecture as
18
00:00:50,380 --> 00:00:54,020
implemented, it's descriptive architecture. And this one here, on the
19
00:00:54,020 --> 00:00:56,610
right, is the result. And as you can see, they found
20
00:00:56,610 --> 00:01:00,940
a number of differences or violations between the prescriptive architecture and
21
00:01:00,940 --> 00:01:04,080
the descriptive architecture. In particular, if we look at this architecture,
22
00:01:04,080 --> 00:01:06,820
we can see that pretty much everything talks to everything else,
23
00:01:06,820 --> 00:01:09,010
which is, in general, not a good thing. And in addition
24
00:01:09,010 --> 00:01:11,890
to that, there are also several things that don't really make
25
00:01:11,890 --> 00:01:15,630
much sense. For example the library calls the file system and
26
00:01:15,630 --> 00:01:19,290
also the network interface which doesn't make much sense. Another thing
27
00:01:19,290 --> 00:01:21,850
that is kind of weird is the fact that file system
28
00:01:21,850 --> 00:01:25,250
calls the kernel initialization code. Which is also a little bit
29
00:01:25,250 --> 00:01:28,100
weird. So basically, the bottom line here is that not even
30
00:01:28,100 --> 00:01:32,020
the developers realized how the actual architecture of the system was,
31
00:01:32,020 --> 00:01:35,170
and how it was different from the architecture they have conceived.
32
00:01:35,170 --> 00:01:37,870
And in fact another interesting thing here is the reaction of
33
00:01:37,870 --> 00:01:41,020
the developers when they were shown the actual architecture. So basically
34
00:01:41,020 --> 00:01:44,110
they justified the differences by saying things such as, well you
35
00:01:44,110 --> 00:01:47,120
know it had to be done fast, and therefore I changed it
36
00:01:47,120 --> 00:01:50,110
and then I didn't have time to go back and update the documentation
37
00:01:50,110 --> 00:01:52,800
and things of this sort. And by the way these are exactly some
38
00:01:52,800 --> 00:01:55,640
of the reasons that we mentioned early on in the lesson for the
39
00:01:55,640 --> 00:01:58,410
discrepancy between prescriptive and descriptive software
40
00:01:58,410 --> 00:01:59,990
architecture. So one last thing that I
41
00:01:59,990 --> 00:02:02,840
want to mention here as an aside and we can get back to
42
00:02:02,840 --> 00:02:06,495
that later is the fact that you can probably clearly show how representing
43
00:02:06,495 --> 00:02:10,880
software architectures graphically can be extremely useful, because it allows
44
00:02:10,880 --> 00:02:14,140
for easily seeing the structure of the system. Look at different
45
00:02:14,140 --> 00:02:17,140
views identify problematic points and so on. And we will see
46
00:02:17,140 --> 00:02:19,740
how that can be useful in many cases also later on.
|