about summary refs log tree commit diff
path: root/usth/ICT2.7/P3L1 Software Architecture Subtitles/11 - Real World Example - lang_en_vs6.srt
blob: 4e64d4a5381f48d04c14c629181a13901e6fc7ab (plain) (blame)
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.