about summary refs log tree commit diff
path: root/usth/ICT2.7/P3L1 Software Architecture Subtitles/2 - Interview with Nenad Medvidovic - lang_en_vs6.srt
blob: 40fa57cd301fc176f073a08aacc2d43dff45418f (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
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
1
00:00:00,220 --> 00:00:02,900
Because the topic of today's lecture is software architecture,

2
00:00:02,900 --> 00:00:05,390
it seemed appropriate to start the lesson by asking a

3
00:00:05,390 --> 00:00:08,960
world expert on this topic, what is software architecture, and

4
00:00:08,960 --> 00:00:11,570
why it is important. To do that, let's fly to

5
00:00:11,570 --> 00:00:14,910
California, and more precisely, Los Angeles, and visit Professor

6
00:00:14,910 --> 00:00:19,540
Nenad Medvidovic. Hi, I'm here visiting Professor Nenad Medvidovic from

7
00:00:19,540 --> 00:00:22,310
the University of Southern California. And Neno is one of

8
00:00:22,310 --> 00:00:25,250
the world experts in software architecture, actually one of the

9
00:00:25,250 --> 00:00:28,300
authors of, of a recent book which is, sort of the

10
00:00:28,300 --> 00:00:31,660
book in software architecture. What I would like to discuss with

11
00:00:31,660 --> 00:00:34,500
Neno is the concept of software architecture and its importance. Because

12
00:00:34,500 --> 00:00:37,520
people are very familiar with the idea and the cost of the

13
00:00:37,520 --> 00:00:41,240
design. And software architecture is something is very related to that,

14
00:00:41,240 --> 00:00:43,690
but is less known. So I would like for Nenad to

15
00:00:43,690 --> 00:00:46,350
elaborate on that, and tell us why is it important to

16
00:00:46,350 --> 00:00:49,880
focus also on this specific you know, architectural aspects of the software.

17
00:00:49,880 --> 00:00:50,380
>> When you

18
00:00:50,380 --> 00:00:53,220
build any software system, even a simple, relatively simple

19
00:00:53,220 --> 00:00:56,840
one. You're going to go through, a process of making

20
00:00:56,840 --> 00:01:00,070
many, many design decisions. Hundreds or thousands sometimes even tens

21
00:01:00,070 --> 00:01:03,140
of thousands of design decisions, so any program that you

22
00:01:03,140 --> 00:01:06,090
write at some point you get to deciding what

23
00:01:06,090 --> 00:01:09,385
the interface of a particular method is going to be.

24
00:01:09,385 --> 00:01:12,170
Are you're going to put in a parameter that is

25
00:01:12,170 --> 00:01:15,530
an integer or a float. When you're writing your routine

26
00:01:15,530 --> 00:01:17,400
about some sort you have to decide whether you're

27
00:01:17,400 --> 00:01:18,900
going to use a static data structure or a

28
00:01:18,900 --> 00:01:22,410
dynamic data structure. All these things are design decisions.

29
00:01:22,410 --> 00:01:25,770
Many of them however, will typically, in the average

30
00:01:25,770 --> 00:01:29,030
case, not really impact the success of your system

31
00:01:29,030 --> 00:01:31,640
and the long term well-being of your system. But

32
00:01:31,640 --> 00:01:35,390
typically the things that software engineers start struggling with

33
00:01:35,390 --> 00:01:40,760
are other design decisions. Design decisions that are the equivalent

34
00:01:40,760 --> 00:01:42,080
of load baring walls in a building

35
00:01:42,080 --> 00:01:42,660
>> Mm hm

36
00:01:42,660 --> 00:01:43,950
>> These are the things that, if you

37
00:01:43,950 --> 00:01:45,960
don't get them right, or if you compromise

38
00:01:45,960 --> 00:01:50,190
them, will in fact potentially impact how the

39
00:01:50,190 --> 00:01:54,300
system operates. They might result in failures of different

40
00:01:54,300 --> 00:01:56,780
kinds. They may result in a system that

41
00:01:56,780 --> 00:01:59,460
is not easily maintainable and so forth. In

42
00:01:59,460 --> 00:02:01,680
a sense, to make a long story short,

43
00:02:01,680 --> 00:02:05,888
architectural design decisions are really the principle design decisions

44
00:02:05,888 --> 00:02:07,900
in your system. These are the things that are

45
00:02:07,900 --> 00:02:10,550
very important. All of the other design decisions you

46
00:02:10,550 --> 00:02:13,520
could sort of tag with being important, but they're

47
00:02:13,520 --> 00:02:17,730
sort of below this very important or highly important threshold.

48
00:02:17,730 --> 00:02:21,400
>> So if you need to change a low level design decision, sometimes

49
00:02:21,400 --> 00:02:23,970
it's kind of easy to do. It might change a little structure. Is it

50
00:02:23,970 --> 00:02:27,140
the case that you know, being the architecture is sort of the pillar of

51
00:02:27,140 --> 00:02:29,020
the software, is that going to be much

52
00:02:29,020 --> 00:02:32,380
more difficult to change an architectural decision?

53
00:02:32,380 --> 00:02:34,400
And architecture is deemed to be you know,

54
00:02:34,400 --> 00:02:36,120
say if you start with the wrong architecture the

55
00:02:36,120 --> 00:02:39,510
software is going to, you know, necessarily be unsuccessful.

56
00:02:39,510 --> 00:02:41,320
Or you can also do something that is better.

57
00:02:41,320 --> 00:02:46,070
>> A system could be successful and very poorly architected. Just

58
00:02:46,070 --> 00:02:50,630
like a building or an airplane or a car, any other

59
00:02:50,630 --> 00:02:54,700
engineering artifact could be successful but poorly architected. So success we

60
00:02:54,700 --> 00:02:57,440
can separated from this, but the, the point that you make in

61
00:02:57,440 --> 00:03:00,530
asking this question is an important one. The

62
00:03:00,530 --> 00:03:04,260
non-architectural design decisions, should be on the

63
00:03:04,260 --> 00:03:06,250
average, there are exceptions and we need to

64
00:03:06,250 --> 00:03:09,580
acknowledge that there is no one size fits all

65
00:03:09,580 --> 00:03:11,640
type of solution for anything in software engineering

66
00:03:11,640 --> 00:03:15,060
really. But on the average, the non-architectural design decisions,

67
00:03:15,060 --> 00:03:17,650
should be much easier to make. So the

68
00:03:17,650 --> 00:03:22,600
scale of the consequences of making such a change.

69
00:03:22,600 --> 00:03:25,880
Really can vary from very minor, highly localized

70
00:03:25,880 --> 00:03:29,670
to very important and sometimes, even system wide.

71
00:03:29,670 --> 00:03:33,570
>> To conclude, I just like to ask you about some concept that is

72
00:03:33,570 --> 00:03:35,110
we here about a lot. Which is

73
00:03:35,110 --> 00:03:37,430
architectural erosion. Since, we're talking about in with

74
00:03:37,430 --> 00:03:39,760
fine architecture and software evolution. So, what is,

75
00:03:39,760 --> 00:03:42,090
exactly, an architectural erosion and why does that

76
00:03:42,090 --> 00:03:47,600
happen? So, to go back to our non software metaphors. Imagine you buy a car.

77
00:03:47,600 --> 00:03:49,810
And your car has four wheels, it has a steering wheel, it has

78
00:03:49,810 --> 00:03:53,700
a nice chassis, it looks pretty nice. At one point, you end up

79
00:03:53,700 --> 00:03:54,950
replacing its 150 horsepower engine with

80
00:03:54,950 --> 00:03:56,800
a 250 horsepower engine because that's what

81
00:03:56,800 --> 00:04:01,510
you want. And you start putting a spoiler on the back of the car

82
00:04:01,510 --> 00:04:04,680
and then you replace the headlights. And then you replace the side view

83
00:04:04,680 --> 00:04:08,000
mirrors with smaller ones because you want your car to be more aerodynamic.

84
00:04:08,000 --> 00:04:10,620
And then you start tinkering with other things, like you cut the, maybe

85
00:04:10,620 --> 00:04:13,380
the roof of the car because you want to turn it into a convertible,

86
00:04:13,380 --> 00:04:15,990
et cetera. And in the end, what you have is

87
00:04:15,990 --> 00:04:19,810
a car that is still your car. Looks very different, It's

88
00:04:19,810 --> 00:04:23,650
structural and behavioral properties are very different And, what you

89
00:04:23,650 --> 00:04:27,260
might find is that the car doesn't handle nearly as well.

90
00:04:27,260 --> 00:04:29,670
For example, in a very sharp turn it might not

91
00:04:29,670 --> 00:04:31,910
be able to negotiate a steep hill as well. Because you

92
00:04:31,910 --> 00:04:35,760
pretty much changed it all along the way. Architectural erosion in

93
00:04:35,760 --> 00:04:38,620
the case of a software system is the exact same thing

94
00:04:38,620 --> 00:04:41,480
with one huge caveat. Very few, if any of us,

95
00:04:41,480 --> 00:04:44,970
will ever put a new engine into our car or tinker

96
00:04:44,970 --> 00:04:47,390
with the structural soundness of the car by cutting off the

97
00:04:47,390 --> 00:04:50,260
roof etc. In a software system we do it all the

98
00:04:50,260 --> 00:04:53,530
time. We'll add a feature. We'll change one bit of the

99
00:04:53,530 --> 00:04:57,088
user interface here. We'll port it to a new platform, some

100
00:04:57,088 --> 00:05:00,990
kind of a, a mobile platform, for example. And pretty soon,

101
00:05:00,990 --> 00:05:03,750
what you end up with is really a software system that,

102
00:05:03,750 --> 00:05:06,990
that is maybe a distant relative of your original

103
00:05:06,990 --> 00:05:10,500
system. It is a mutant in many ways, because often

104
00:05:10,500 --> 00:05:12,986
times these little tinkerings happen on a one off

105
00:05:12,986 --> 00:05:15,610
basis. There is no over-arching vision of how you should

106
00:05:15,610 --> 00:05:19,060
do this. So, you are basically going through a

107
00:05:19,060 --> 00:05:21,980
subsequent set of steps where you are making locally optimal

108
00:05:21,980 --> 00:05:25,240
decisions for any one of these changes and what

109
00:05:25,240 --> 00:05:29,140
you might end up finding is that the globally optimal

110
00:05:29,140 --> 00:05:32,100
behavior of the system is badly compromised. The structural

111
00:05:32,100 --> 00:05:34,952
soundness in a sense of the system badly compromised.

112
00:05:34,952 --> 00:05:38,510
The non-functional properties of the system could be seriously

113
00:05:38,510 --> 00:05:42,390
affected. This is how security flaws creep into systems. This

114
00:05:42,390 --> 00:05:44,250
is how reliability flaws. This is how we use

115
00:05:44,250 --> 00:05:48,420
the usability of a system often times suffers. And most

116
00:05:48,420 --> 00:05:50,920
importantly for software engineers, the people who actually build the

117
00:05:50,920 --> 00:05:54,950
software, the maintainability of the system becomes a huge problem.

118
00:05:54,950 --> 00:05:59,130
Because now you're looking at this thing, it's got all these various appendages,

119
00:05:59,130 --> 00:06:03,170
its original design has pretty badly eroded and yet somehow you have to

120
00:06:03,170 --> 00:06:06,850
figure out how to keep fixing it. Making sure that it operates in

121
00:06:06,850 --> 00:06:11,380
a continuous fashion because many of these systems live for 20, 30, 40 years.

122
00:06:11,380 --> 00:06:13,840
>> Thank you so much for your insight; it is a perfect

123
00:06:13,840 --> 00:06:16,500
introduction for our lesson. So we'll get to the lesson now. And.

124
00:06:16,500 --> 00:06:17,920
>> Thank you very much.

125
00:06:17,920 --> 00:06:18,300
>> Thank you.