573 lines
13 KiB
Plaintext
573 lines
13 KiB
Plaintext
1
|
|
00:00:00,150 --> 00:00:02,106
|
|
First, let me start by asking a couple of very
|
|
|
|
2
|
|
00:00:02,106 --> 00:00:04,820
|
|
natural questions that you might have when considering whether to take
|
|
|
|
3
|
|
00:00:04,820 --> 00:00:07,800
|
|
this course. The first one is what is software engineering.
|
|
|
|
4
|
|
00:00:07,800 --> 00:00:10,050
|
|
And the second, very related one, is why do we need
|
|
|
|
5
|
|
00:00:10,050 --> 00:00:12,430
|
|
it? So what I did was actually to go out
|
|
|
|
6
|
|
00:00:12,430 --> 00:00:15,430
|
|
and ask some of the main experts in the field, both
|
|
|
|
7
|
|
00:00:15,430 --> 00:00:18,290
|
|
in academia and industry, these very questions and let's see what
|
|
|
|
8
|
|
00:00:18,290 --> 00:00:22,160
|
|
they said. What is software engineering and why is it important?
|
|
|
|
9
|
|
00:00:23,170 --> 00:00:25,150
|
|
>> Okay, can I start with another question?
|
|
|
|
10
|
|
00:00:25,150 --> 00:00:26,020
|
|
>> Of course.
|
|
|
|
11
|
|
00:00:26,020 --> 00:00:31,290
|
|
>> Okay, first what is a computer? It's a programmable device. So the essence
|
|
|
|
12
|
|
00:00:31,290 --> 00:00:34,730
|
|
of computing is programming. So program development
|
|
|
|
13
|
|
00:00:34,730 --> 00:00:37,240
|
|
is basically the most essential use of the
|
|
|
|
14
|
|
00:00:37,240 --> 00:00:41,010
|
|
computer. So software engineering is the discipline
|
|
|
|
15
|
|
00:00:41,010 --> 00:00:44,850
|
|
that investigates program development. So, how can it
|
|
|
|
16
|
|
00:00:44,850 --> 00:00:47,390
|
|
been done more efficiently? What's the best
|
|
|
|
17
|
|
00:00:47,390 --> 00:00:50,170
|
|
way of doing program development? And how can
|
|
|
|
18
|
|
00:00:50,170 --> 00:00:53,140
|
|
you develop reliable programs? So that's how I would define
|
|
|
|
19
|
|
00:00:53,140 --> 00:00:55,060
|
|
it. But I consider any
|
|
|
|
20
|
|
00:00:55,060 --> 00:00:57,345
|
|
software development activity software engineering activity
|
|
|
|
21
|
|
00:00:58,825 --> 00:01:04,239
|
|
>> Software engineering is the systematic application of methods to build
|
|
|
|
22
|
|
00:01:04,239 --> 00:01:07,884
|
|
software in a rigorous way. And I think one of the
|
|
|
|
23
|
|
00:01:07,884 --> 00:01:11,196
|
|
aspects that I like to bring into the notion of software
|
|
|
|
24
|
|
00:01:11,196 --> 00:01:15,228
|
|
engineering is that it's something that involves not only kind of
|
|
|
|
25
|
|
00:01:15,228 --> 00:01:18,612
|
|
technically building the system but understanding the
|
|
|
|
26
|
|
00:01:18,612 --> 00:01:22,317
|
|
requirements, working with stake holders. Trying to
|
|
|
|
27
|
|
00:01:22,317 --> 00:01:28,232
|
|
find a solution that balances all of the stakeholder needs in order to deliver
|
|
|
|
28
|
|
00:01:28,232 --> 00:01:34,338
|
|
the software thats tested and its rigorous to meet the needs of a stakeholder.
|
|
|
|
29
|
|
00:01:34,338 --> 00:01:37,656
|
|
Well, software engineering is the whole process
|
|
|
|
30
|
|
00:01:37,656 --> 00:01:41,460
|
|
of creation of software using engineering principles.
|
|
|
|
31
|
|
00:01:41,460 --> 00:01:42,886
|
|
>> My view is kind of a holistic
|
|
|
|
32
|
|
00:01:42,886 --> 00:01:45,490
|
|
view and I think about it from the perspective
|
|
|
|
33
|
|
00:01:45,490 --> 00:01:49,440
|
|
of how is software engineering different from programming.
|
|
|
|
34
|
|
00:01:49,440 --> 00:01:52,940
|
|
So, I think that research about programming is all
|
|
|
|
35
|
|
00:01:52,940 --> 00:01:57,550
|
|
about the create part of software. And that
|
|
|
|
36
|
|
00:01:57,550 --> 00:02:00,270
|
|
software engineering is about the entire life cycle. So,
|
|
|
|
37
|
|
00:02:00,270 --> 00:02:03,070
|
|
that's one aspect. And the other aspect of the
|
|
|
|
38
|
|
00:02:03,070 --> 00:02:07,350
|
|
definition is it's about quality, the quality of software.
|
|
|
|
39
|
|
00:02:07,350 --> 00:02:12,330
|
|
Software engineering even considers things long after you ship which we all know
|
|
|
|
40
|
|
00:02:12,330 --> 00:02:18,310
|
|
is one of the, it is the largest economic piece of software development.
|
|
|
|
41
|
|
00:02:18,310 --> 00:02:22,990
|
|
>> So, improve, software engineering process
|
|
|
|
42
|
|
00:02:22,990 --> 00:02:26,440
|
|
for better software productivity and quality.
|
|
|
|
43
|
|
00:02:26,440 --> 00:02:32,472
|
|
>> The set of activities that one engages in when building software
|
|
|
|
44
|
|
00:02:32,472 --> 00:02:39,634
|
|
systems or software products. It's fundamentally a venue-creating
|
|
|
|
45
|
|
00:02:39,634 --> 00:02:45,492
|
|
activity. It involves social processes.
|
|
|
|
46
|
|
00:02:45,492 --> 00:02:47,247
|
|
>> Software engineering is the act
|
|
|
|
47
|
|
00:02:47,247 --> 00:02:49,652
|
|
of many people working together and putting
|
|
|
|
48
|
|
00:02:49,652 --> 00:02:52,057
|
|
together many versions of large and complex
|
|
|
|
49
|
|
00:02:52,057 --> 00:02:57,110
|
|
systems. And our world depends on software,
|
|
|
|
50
|
|
00:02:57,110 --> 00:02:58,910
|
|
software is immensely complex and we need
|
|
|
|
51
|
|
00:02:58,910 --> 00:03:01,700
|
|
many, many smart people to build these things.
|
|
|
|
52
|
|
00:03:01,700 --> 00:03:05,610
|
|
>> Well, engineering I think is the activity of envisioning and
|
|
|
|
53
|
|
00:03:05,610 --> 00:03:10,180
|
|
realizing valuable new functions with sufficient
|
|
|
|
54
|
|
00:03:10,180 --> 00:03:13,500
|
|
and justifiable confidence that the resulting
|
|
|
|
55
|
|
00:03:13,500 --> 00:03:18,190
|
|
system will have all of the critical quality attributes that are necessary
|
|
|
|
56
|
|
00:03:18,190 --> 00:03:22,140
|
|
for the system to be a success. And software engineering is the
|
|
|
|
57
|
|
00:03:22,140 --> 00:03:24,790
|
|
activity of doing this not only for
|
|
|
|
58
|
|
00:03:24,790 --> 00:03:27,550
|
|
the software components of engineering systems but
|
|
|
|
59
|
|
00:03:28,830 --> 00:03:31,740
|
|
for the system overall, given that it's
|
|
|
|
60
|
|
00:03:31,740 --> 00:03:35,500
|
|
so heavily reliant on it's underlying software technologies.
|
|
|
|
61
|
|
00:03:35,500 --> 00:03:40,440
|
|
>> So, I would say software engineering is the
|
|
|
|
62
|
|
00:03:40,440 --> 00:03:44,070
|
|
kind of art and practice of building software systems.
|
|
|
|
63
|
|
00:03:44,070 --> 00:03:47,610
|
|
>> Software engineering, in a nutshell, is a set of
|
|
|
|
64
|
|
00:03:47,610 --> 00:03:52,140
|
|
methods and principles and techniques that we have developed to enable us to
|
|
|
|
65
|
|
00:03:53,220 --> 00:03:57,830
|
|
engineer, or build, large software systems that
|
|
|
|
66
|
|
00:03:59,090 --> 00:04:03,960
|
|
outstrip or outpace one engineer's or even a small
|
|
|
|
67
|
|
00:04:03,960 --> 00:04:08,900
|
|
team of engineer's ability or abilities to understand
|
|
|
|
68
|
|
00:04:08,900 --> 00:04:13,330
|
|
and construct and maintain
|
|
|
|
69
|
|
00:04:13,330 --> 00:04:17,339
|
|
over time. So it requires a lot of people, it requires a long,
|
|
|
|
70
|
|
00:04:17,339 --> 00:04:21,820
|
|
term investment by an organization or a number of organizations, and often times
|
|
|
|
71
|
|
00:04:21,820 --> 00:04:28,040
|
|
it requires support for systems that that are intended for one purpose but end
|
|
|
|
72
|
|
00:04:28,040 --> 00:04:33,930
|
|
up getting used for many additional purposes in addition to the original one.
|
|
|
|
73
|
|
00:04:33,930 --> 00:04:38,656
|
|
>> Software engineering is about building and constructing very large-scale
|
|
|
|
74
|
|
00:04:38,656 --> 00:04:42,800
|
|
high-quality systems, so the high quality is the big issue.
|
|
|
|
75
|
|
00:04:42,800 --> 00:04:46,268
|
|
>> Software engineering is engineering discipline of developing
|
|
|
|
76
|
|
00:04:46,268 --> 00:04:52,800
|
|
software-based systems, usually embedded into larger systems composed of
|
|
|
|
77
|
|
00:04:52,800 --> 00:04:58,544
|
|
hardware and and humans [LAUGH] and business
|
|
|
|
78
|
|
00:04:58,544 --> 00:05:04,943
|
|
processes and processes in general. And why is that important?
|
|
|
|
79
|
|
00:05:04,943 --> 00:05:06,971
|
|
Well, because software is pervasive in all industry sectors
|
|
|
|
80
|
|
00:05:06,971 --> 00:05:09,001
|
|
and therefore systems must be reliable, safe and secure.
|
|
|
|
81
|
|
00:05:09,001 --> 00:05:13,232
|
|
>> Why can't we just get that by sitting down and writing software?
|
|
|
|
82
|
|
00:05:13,232 --> 00:05:16,697
|
|
>> Well, you could if software was small and
|
|
|
|
83
|
|
00:05:16,697 --> 00:05:20,162
|
|
simple enough to be developed by one or two
|
|
|
|
84
|
|
00:05:20,162 --> 00:05:25,360
|
|
people together in a room. But software development now
|
|
|
|
85
|
|
00:05:25,360 --> 00:05:31,550
|
|
is distributed, involves teams of people with different backgrounds
|
|
|
|
86
|
|
00:05:31,550 --> 00:05:37,450
|
|
who have to communicate with each other. It also involves customers,
|
|
|
|
87
|
|
00:05:37,450 --> 00:05:42,512
|
|
clients, users. Software engineers have to work with
|
|
|
|
88
|
|
00:05:42,512 --> 00:05:47,462
|
|
hardware engineers, with domain experts and therefore,
|
|
|
|
89
|
|
00:05:47,462 --> 00:05:52,233
|
|
well, no, we can't simply sit down and start coding.
|
|
|
|
90
|
|
00:05:52,233 --> 00:05:57,380
|
|
>> Software engineering is mostly being able
|
|
|
|
91
|
|
00:05:57,380 --> 00:06:02,775
|
|
to program. And you need to be able to put big
|
|
|
|
92
|
|
00:06:02,775 --> 00:06:06,920
|
|
systems together so that they actually work. That's my simple definition.
|
|
|
|
93
|
|
00:06:06,920 --> 00:06:09,210
|
|
>> And if you don't use software engineering practices,
|
|
|
|
94
|
|
00:06:09,210 --> 00:06:10,670
|
|
you're not going to be able to put them together?
|
|
|
|
95
|
|
00:06:10,670 --> 00:06:13,290
|
|
>> Well, you're not going to be able to reliably
|
|
|
|
96
|
|
00:06:13,290 --> 00:06:16,160
|
|
put them together. So basically, you could maybe hack something up,
|
|
|
|
97
|
|
00:06:16,160 --> 00:06:18,750
|
|
but it's not going to necessarily stand the test of time.
|
|
|
|
98
|
|
00:06:18,750 --> 00:06:21,221
|
|
If somebody wants to change it it's probably going to break.
|
|
|
|
99
|
|
00:06:21,221 --> 00:06:24,140
|
|
>> It's important
|
|
|
|
100
|
|
00:06:24,140 --> 00:06:29,700
|
|
because if you don't think about how you're building this system and
|
|
|
|
101
|
|
00:06:29,700 --> 00:06:31,600
|
|
how you're trading off different aspects,
|
|
|
|
102
|
|
00:06:31,600 --> 00:06:35,580
|
|
like performance and scalability and reliability, then
|
|
|
|
103
|
|
00:06:35,580 --> 00:06:39,900
|
|
it's going to end up breaking or not lasting very long or not,
|
|
|
|
104
|
|
00:06:39,900 --> 00:06:42,900
|
|
not doing everything that you want it to do, or being really expensive.
|
|
|
|
105
|
|
00:06:43,960 --> 00:06:45,800
|
|
>> If it's not done in a principled way it will
|
|
|
|
106
|
|
00:06:45,800 --> 00:06:49,220
|
|
be bad and every user will suffer. That's why we need
|
|
|
|
107
|
|
00:06:49,220 --> 00:06:49,970
|
|
software engineering.
|
|
|
|
108
|
|
00:06:49,970 --> 00:06:56,252
|
|
>> Why is it important? Because, I mean these two goal, productivity, faster,
|
|
|
|
109
|
|
00:06:56,252 --> 00:06:59,480
|
|
in developing software. And higher quality
|
|
|
|
110
|
|
00:06:59,480 --> 00:07:03,551
|
|
would be apparently important. Software is everywhere.
|
|
|
|
111
|
|
00:07:03,551 --> 00:07:08,260
|
|
>> It's important because we use software in everyday life. Everything's
|
|
|
|
112
|
|
00:07:08,260 --> 00:07:14,120
|
|
built on software systems. And these are ubiquitous across our society.
|
|
|
|
113
|
|
00:07:14,120 --> 00:07:14,300
|
|
>> It's
|
|
|
|
114
|
|
00:07:14,300 --> 00:07:20,820
|
|
important because software is everywhere around us and the way we build it,
|
|
|
|
115
|
|
00:07:20,820 --> 00:07:26,910
|
|
and the way we maintain it, is something that determines almost a basic
|
|
|
|
116
|
|
00:07:26,910 --> 00:07:33,940
|
|
quality of life nowadays. And getting that software right can make a difference,
|
|
|
|
117
|
|
00:07:33,940 --> 00:07:39,590
|
|
oftentimes, between a really fun product and one that you won't like to use
|
|
|
|
118
|
|
00:07:40,640 --> 00:07:45,750
|
|
a reasonably successful company, or one that fails. And in
|
|
|
|
119
|
|
00:07:45,750 --> 00:07:49,690
|
|
more extreme cases even the difference between life and death,
|
|
|
|
120
|
|
00:07:49,690 --> 00:07:51,510
|
|
if you think about the software that runs in the
|
|
|
|
121
|
|
00:07:51,510 --> 00:07:56,380
|
|
airplane on which many of you fly on a regular basis.
|
|
|
|
122
|
|
00:07:56,380 --> 00:08:00,790
|
|
>> There are programs out there that if they screw up we are all screwed.
|
|
|
|
123
|
|
00:08:00,790 --> 00:08:02,440
|
|
>> Software engineering is crucially
|
|
|
|
124
|
|
00:08:02,440 --> 00:08:06,460
|
|
important because it's the engineering discipline
|
|
|
|
125
|
|
00:08:06,460 --> 00:08:10,250
|
|
that is uniquely capable of carrying out
|
|
|
|
126
|
|
00:08:10,250 --> 00:08:13,848
|
|
the engineering mission for software reliant systems.
|
|
|
|
127
|
|
00:08:13,848 --> 00:08:17,620
|
|
>> In the U.S we've all seen an unfortunate example with
|
|
|
|
128
|
|
00:08:17,620 --> 00:08:23,032
|
|
a system that went badly wrong in healthcare.gov and that system wasn't
|
|
|
|
129
|
|
00:08:23,032 --> 00:08:26,740
|
|
engineered correctly. And I think if we look at the reasons for
|
|
|
|
130
|
|
00:08:26,740 --> 00:08:32,350
|
|
that, they stem back to somewhere at the intersection between requirements and
|
|
|
|
131
|
|
00:08:32,350 --> 00:08:37,470
|
|
architecture and politics and project management, and all of these things are
|
|
|
|
132
|
|
00:08:37,470 --> 00:08:43,270
|
|
important concepts that have to go into the software engineering mix.
|
|
|
|
133
|
|
00:08:43,270 --> 00:08:45,570
|
|
>> It would end up in lots and lots of chaos because people
|
|
|
|
134
|
|
00:08:45,570 --> 00:08:47,220
|
|
wouldn't know how to organize themselves and
|
|
|
|
135
|
|
00:08:47,220 --> 00:08:49,400
|
|
wouldn't know how to organize software. Many
|
|
|
|
136
|
|
00:08:49,400 --> 00:08:53,830
|
|
of software engineering has very simple rules that you need to apply properly in
|
|
|
|
137
|
|
00:08:53,830 --> 00:08:57,280
|
|
order to get things done. And people who look at these rules and think,
|
|
|
|
138
|
|
00:08:57,280 --> 00:09:01,050
|
|
these rules are so super simple. This is totally obvious. But once
|
|
|
|
139
|
|
00:09:01,050 --> 00:09:05,495
|
|
you try to apply them, you'll find out they're not obvious at all.
|
|
|
|
140
|
|
00:09:05,495 --> 00:09:07,670
|
|
>> Now that we've heard these experts, let me show you an
|
|
|
|
141
|
|
00:09:07,670 --> 00:09:10,080
|
|
example that illustrates what can happen
|
|
|
|
142
|
|
00:09:10,080 --> 00:09:12,410
|
|
when software engineering practices are not suitably
|
|
|
|
143
|
|
00:09:15,310 --> 00:09:24,010
|
|
applied. [NOISE].
|
|
|