1
0
Fork 0

[usth/ICT2.7] Remove Udacity transcribes

This commit is contained in:
Nguyễn Gia Phong 2020-07-19 20:34:40 +07:00
parent dc6f57c3af
commit 8a7dfa0972
341 changed files with 0 additions and 43428 deletions

View File

@ -1,40 +0,0 @@
1
00:00:00,350 --> 00:00:03,570
Hi, everybody, and welcome to the first lesson
2
00:00:03,570 --> 00:00:07,970
of the Software Engineering Course. In this introductory lesson
3
00:00:07,970 --> 00:00:09,820
I will first provide an overview of the
4
00:00:09,820 --> 00:00:13,100
whole course and then try to answer two important
5
00:00:13,100 --> 00:00:16,630
questions about software engineering, which are, what is
6
00:00:16,630 --> 00:00:20,310
software engineering and why do we need it? And
7
00:00:20,310 --> 00:00:22,370
to spice up the content a bit I
8
00:00:22,370 --> 00:00:25,480
will also interview several experts in the software engineering
9
00:00:25,480 --> 00:00:30,080
field from both academia and industry and ask them these
10
00:00:30,080 --> 00:00:34,410
very questions. So without any further ado, let's begin the lesson.

View File

@ -1,108 +0,0 @@
1
00:00:00,060 --> 00:00:01,970
Now that we saw how software engineering was born and we
2
00:00:01,970 --> 00:00:04,580
saw some of the problems that led to the birth of software
3
00:00:04,580 --> 00:00:07,020
engineering. Let's see how we can do better. How can we
4
00:00:07,020 --> 00:00:10,580
preform software development in a smarter, in a better way, a more
5
00:00:10,580 --> 00:00:13,150
successful way? So what I'm going to show here is the
6
00:00:13,150 --> 00:00:14,730
way I see software development. To
7
00:00:14,730 --> 00:00:17,080
me software development is fundementally going
8
00:00:17,080 --> 00:00:21,150
from an abstract idea in somebody's head, for example, the customer's head,
9
00:00:21,150 --> 00:00:25,300
to a concrete system that actually implements that idea and hopefully it
10
00:00:25,300 --> 00:00:27,640
does it in the right way. And this is a very
11
00:00:27,640 --> 00:00:31,290
complex process. It can be overwhelming. So, unless we are talking about
12
00:00:31,290 --> 00:00:34,800
the trivial system, it's very complex for us to keep in mind
13
00:00:34,800 --> 00:00:37,020
all the different aspects of the systems, and to do all the
14
00:00:37,020 --> 00:00:40,270
different steps required to build this system, automatically. So that's when
15
00:00:40,270 --> 00:00:43,630
software processes come to the rescue. So what is a software process?
16
00:00:43,630 --> 00:00:46,380
A software process is nothing else but a way of breaking down
17
00:00:46,380 --> 00:00:50,320
this otherwise unmanageable task into smaller steps. In smaller steps that we
18
00:00:50,320 --> 00:00:53,270
can handle. And that can be tackled individually. So having a
19
00:00:53,270 --> 00:00:56,580
software process is of fundamental importance for several reasons. First of
20
00:00:56,580 --> 00:00:59,530
all, for non-trivial systems, you can't just do it by getting
21
00:00:59,530 --> 00:01:01,680
it, by just sitting down and developing. What you have to
22
00:01:01,680 --> 00:01:04,629
do instead is to break down the complexity in a systematic
23
00:01:04,629 --> 00:01:08,250
way. So software processes are normally systematic. And you need to
24
00:01:08,250 --> 00:01:11,370
break down this complexity, in a more or less formal way.
25
00:01:11,370 --> 00:01:15,800
So software processes are also a formal, or semiformal, way of
26
00:01:15,800 --> 00:01:19,120
discussing, or describing, how software should be developed.
27
00:01:19,120 --> 00:01:21,370
So what are the steps involved in developing software?

View File

@ -1,96 +0,0 @@
1
00:00:00,200 --> 00:00:02,580
One thing you need to know right away about software processes
2
00:00:02,580 --> 00:00:05,750
is that there's not just one single process, but there are multiple,
3
00:00:05,750 --> 00:00:08,840
possible processes, depending on your context, depending on the kind of
4
00:00:08,840 --> 00:00:11,535
applications that you are developing. In this course, we are going to try
5
00:00:11,535 --> 00:00:14,760
to cover the spectrum of the possible processes, as much as
6
00:00:14,760 --> 00:00:18,900
possible, by focusing on four main software processes. The first one is
7
00:00:18,900 --> 00:00:22,480
what we call normally the waterfall process. And, we call it waterfall
8
00:00:22,480 --> 00:00:25,490
because in the process we go from one phase to the other
9
00:00:25,490 --> 00:00:28,300
in the same way in which water follows the flow
10
00:00:28,300 --> 00:00:30,910
in a waterfall. The second process that we consider is what
11
00:00:30,910 --> 00:00:34,580
we call evolutionary prototyping, and in this case, instead of
12
00:00:34,580 --> 00:00:37,790
following this set of rigid steps, all we're trying to do
13
00:00:37,790 --> 00:00:40,930
is to start with an initial prototype and evolve it
14
00:00:40,930 --> 00:00:43,670
based on the feedback from the customer. We will then move
15
00:00:43,670 --> 00:00:47,150
towards a slightly more formal process, which is the rational unified
16
00:00:47,150 --> 00:00:50,590
process or the unified software process. And this is a kind
17
00:00:50,590 --> 00:00:53,040
of project heavily based on the use of UML, so we
18
00:00:53,040 --> 00:00:56,263
will also cover UML when discussing this kind of project. Finally,
19
00:00:56,263 --> 00:00:58,680
the fourth kind of process we will consider is the family
20
00:00:58,680 --> 00:01:01,670
of agile software processes. And these are processes in which we
21
00:01:01,670 --> 00:01:04,280
sacrifice the discipline a little bi,t in order to be more
22
00:01:04,280 --> 00:01:07,380
flexible and be more able to account for changes and in
23
00:01:07,380 --> 00:01:10,760
particular for changes in requirements. We are going to cover each
24
00:01:10,760 --> 00:01:14,620
one of these four processes extensively in the rest of the class.

View File

@ -1,32 +0,0 @@
1
00:00:00,110 --> 00:00:01,450
So, now before we actually jump to the
2
00:00:01,450 --> 00:00:03,410
discussion of software processes I want to ask you
3
00:00:03,410 --> 00:00:05,770
a couple of preliminary questions. The first one is,
4
00:00:05,770 --> 00:00:08,140
what is the largest software system on which you
5
00:00:08,140 --> 00:00:10,860
had worked? And you should enter here the size.
6
00:00:10,860 --> 00:00:12,850
And the second question I'm going to ask is how
7
00:00:12,850 --> 00:00:15,070
many LOC or how many lines of code per
8
00:00:15,070 --> 00:00:17,380
day you were producing when working on this system?

View File

@ -1,16 +0,0 @@
1
00:00:00,110 --> 00:00:01,620
We're going to go back to these two questions
2
00:00:01,620 --> 00:00:03,260
and to your answers later. But I wanted to
3
00:00:03,260 --> 00:00:05,810
gather this information beforehand, so that your answers are
4
00:00:05,810 --> 00:00:08,590
not biased, they're not influenced by this subsequent discussion.

View File

@ -1,24 +0,0 @@
1
00:00:00,090 --> 00:00:03,200
So now I want to ask you one additional question, which is how many lines
2
00:00:03,200 --> 00:00:05,030
of code a day do you think professional
3
00:00:05,030 --> 00:00:07,370
software engineers produce? Do you think they produce
4
00:00:07,370 --> 00:00:12,160
25 lines of code? Between 25 and 50? Between 50 and 100? Between 100 and 1000?
5
00:00:12,160 --> 00:00:13,720
Or more than 1000 a day? And remember
6
00:00:13,720 --> 00:00:16,379
that here we're talking about professional software engineers.

View File

@ -1,32 +0,0 @@
1
00:00:00,180 --> 00:00:03,450
Studies has shown that, on average, developers produce between
2
00:00:03,450 --> 00:00:07,030
50 and 100 lines of code a day. And that
3
00:00:07,030 --> 00:00:09,530
might not seem much. Why, why only 50 to
4
00:00:09,530 --> 00:00:11,580
100 lines of code in a whole day? And the
5
00:00:11,580 --> 00:00:14,350
answer is because coding is not everything. When you
6
00:00:14,350 --> 00:00:17,020
develop a system writing code is not the only thing
7
00:00:17,020 --> 00:00:18,890
you have to do. It's not the only activity that
8
00:00:18,890 --> 00:00:20,800
you have to perform. And that's a very important point.

View File

@ -1,100 +0,0 @@
1
00:00:00,110 --> 00:00:03,730
In fact, software processes are normally characterized by several phases, what
2
00:00:03,730 --> 00:00:07,240
we call the software phases, and only one of these phases is
3
00:00:07,240 --> 00:00:09,970
mainly focused on coding. The other phases are meant to support
4
00:00:09,970 --> 00:00:13,440
other parts of software development. The first of these phases is called
5
00:00:13,440 --> 00:00:16,110
requirements engineering and that's the phase in which we talk to
6
00:00:16,110 --> 00:00:19,640
the customer, to the stakeholders, whoever we are building the software for.
7
00:00:19,640 --> 00:00:22,120
And we try to understand what kind of system we need
8
00:00:22,120 --> 00:00:25,650
to build. Then we use this information to define our design and
9
00:00:25,650 --> 00:00:28,840
the design is the high-level structure, that then can become more
10
00:00:28,840 --> 00:00:31,800
and more detailed, of our software system. Once we've defined our
11
00:00:31,800 --> 00:00:34,180
design we can actually move to the next phase, which is
12
00:00:34,180 --> 00:00:37,480
the implementation, in which we write code that implements the design which
13
00:00:37,480 --> 00:00:40,630
we just defined. After implementing the code, we need to verify
14
00:00:40,630 --> 00:00:43,510
and validate the code. We need to make sure that the code
15
00:00:43,510 --> 00:00:46,930
behaves as intended. And finally, we need to maintain the code.
16
00:00:46,930 --> 00:00:48,992
And maintenance involves several activities like,
17
00:00:48,992 --> 00:00:50,980
for example, adding new functionality or
18
00:00:50,980 --> 00:00:54,568
eliminating bugs from the code or responding to problems that
19
00:00:54,568 --> 00:00:57,420
were reported from the field after we released the software.
20
00:00:57,420 --> 00:00:59,020
We will look at all of these activities and of
21
00:00:59,020 --> 00:01:01,670
the software development process in detail, in the rest of the
22
00:01:01,670 --> 00:01:03,610
class. And for each activity, we will look at the
23
00:01:03,610 --> 00:01:06,460
fundamental principles and how it is done currently. And in
24
00:01:06,460 --> 00:01:08,780
some cases, we will also look at some advance ways
25
00:01:08,780 --> 00:01:11,680
to do it. For example, more research approaches for that activity.

View File

@ -1,160 +0,0 @@
1
00:00:00,072 --> 00:00:02,960
We will also look at how tools can improve software phases,
2
00:00:02,960 --> 00:00:06,660
the software activities, and can support software development tasks in general.
3
00:00:06,660 --> 00:00:08,890
And this is something that I will repeat over and over
4
00:00:08,890 --> 00:00:12,340
in the class, tools and automation are fundamental, in software engineering.
5
00:00:12,340 --> 00:00:15,910
And they're fundamental for improving productivity, not only efficiency but also
6
00:00:15,910 --> 00:00:19,820
effectiveness of our activities in the software development process. So let
7
00:00:19,820 --> 00:00:22,110
me go back to one of the diagrams that I showed
8
00:00:22,110 --> 00:00:25,170
you before. If you remember we had this qualititive diagram in which
9
00:00:25,170 --> 00:00:27,170
we were showing that one of the issues that led to the
10
00:00:27,170 --> 00:00:30,350
software crisis was the fact that developers' productivity was not able to
11
00:00:30,350 --> 00:00:33,580
keep up with the software size and complexity, with the growth in
12
00:00:33,580 --> 00:00:36,750
the importance and the complexity of software. What tools can help us
13
00:00:36,750 --> 00:00:40,150
to do is to change this and basically move this curve from
14
00:00:40,150 --> 00:00:43,950
this original position up here. So that it gets closer and closer
15
00:00:43,950 --> 00:00:45,970
to what we need to develop the software that we need to
16
00:00:45,970 --> 00:00:50,230
build. So let me discuss examples on how tools can improve productivity.
17
00:00:50,230 --> 00:00:52,970
For example, if we are talking about development, think about
18
00:00:52,970 --> 00:00:54,890
what kind of improvement it was to go from punch
19
00:00:54,890 --> 00:00:58,440
cards to modern IDEs. If we're talking about languages, think
20
00:00:58,440 --> 00:01:02,210
about of how much more productive developers became when going from
21
00:01:02,210 --> 00:01:05,830
writing machine code to writing code in high-level languages. And
22
00:01:05,830 --> 00:01:08,750
finally, if we talk about debugging, which is a very important
23
00:01:08,750 --> 00:01:12,140
and expensive activity, moving from the use of print lines
24
00:01:12,140 --> 00:01:16,060
to the use of symbolic debuggers dramatically improve the effectiveness and
25
00:01:16,060 --> 00:01:18,810
efficiency of development. And these are just some of the
26
00:01:18,810 --> 00:01:21,050
tools that we will discuss in the rest of the class
27
00:01:21,050 --> 00:01:23,350
and notice that we will also use the tools in practice.
28
00:01:23,350 --> 00:01:26,290
So we will use the tools before projects and also during
29
00:01:26,290 --> 00:01:30,153
the lessons and for assignments. In particular, we will use
30
00:01:30,153 --> 00:01:33,920
three main kinds of tools. The first type is IDE's. And
31
00:01:33,920 --> 00:01:37,140
I'm pretty sure you're familiar with IDE's. These are integrated development
32
00:01:37,140 --> 00:01:41,250
environments. So, advanced editors in which you can write, compile, run,
33
00:01:41,250 --> 00:01:43,950
and debug and even test your code. We'll also use a
34
00:01:43,950 --> 00:01:48,190
version control system, systems that allow you to save, and restore, and
35
00:01:48,190 --> 00:01:51,750
check the differences between different versions of the code, in particular
36
00:01:51,750 --> 00:01:53,950
we will be working with git. We will also be looking at
37
00:01:53,950 --> 00:01:57,460
other kinds of tools like coverage and verification tools. These are
38
00:01:57,460 --> 00:02:00,310
tools that can help you during testing and I'm a big fan
39
00:02:00,310 --> 00:02:02,710
of these tools, so I'm really going to stress the usefulness
40
00:02:02,710 --> 00:02:05,530
of these tools and how you should use them in your development.

View File

@ -1,572 +0,0 @@
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].

View File

@ -1,32 +0,0 @@
1
00:00:00,110 --> 00:00:01,940
Now that you watched this small video, I like
2
00:00:01,940 --> 00:00:03,660
to ask you, what is this? Do you think
3
00:00:03,660 --> 00:00:06,330
it's fireworks for the 4th of July celebration, or
4
00:00:06,330 --> 00:00:08,280
maybe it was a flare gun in action, or
5
00:00:08,280 --> 00:00:10,240
maybe again it was the explosion of the Ariane
6
00:00:10,240 --> 00:00:12,280
five rocket due to a software error. What do
7
00:00:12,280 --> 00:00:14,190
you think? And in case it helps, I'm also
8
00:00:14,190 --> 00:00:16,450
going to show you an actual picture of this event.

View File

@ -1,48 +0,0 @@
1
00:00:00,100 --> 00:00:02,600
As you probably guessed, these are not fireworks for the 4th of
2
00:00:02,600 --> 00:00:06,670
July but, rather, the explosion of the Ariane 5, which happened 30 seconds
3
00:00:06,670 --> 00:00:09,250
or so after takeoff due to a software error. And this is
4
00:00:09,250 --> 00:00:12,020
just an example of what can go wrong when we don't build software
5
00:00:12,020 --> 00:00:15,600
and we don't test and verify and perform quality assurance of software
6
00:00:15,600 --> 00:00:18,540
in the right way, and quite an expensive one. In fact, to develop
7
00:00:18,540 --> 00:00:21,250
and to build the Ariane 5 it took 10 years. The cost
8
00:00:21,250 --> 00:00:25,240
was around $7 billion and there were $500 million of cargo on board.
9
00:00:25,240 --> 00:00:27,280
Luckily, at least there were no humans on the
10
00:00:27,280 --> 00:00:29,400
rocket. And you can find more details in case
11
00:00:29,400 --> 00:00:31,610
you're interested about the Ariane 5 accident in the
12
00:00:31,610 --> 00:00:33,230
lesson notes. I put a couple of links there.

View File

@ -1,80 +0,0 @@
1
00:00:00,140 --> 00:00:02,469
And even if we don't go to these extreme examples, I'm
2
00:00:02,469 --> 00:00:04,380
sure that you have all experienced
3
00:00:04,380 --> 00:00:06,540
software problems, typically manifested in what
4
00:00:06,540 --> 00:00:09,630
we call a crash. And that crash might happen while you're
5
00:00:09,630 --> 00:00:13,230
finishing your homework or that three-page long email that you were preparing
6
00:00:13,230 --> 00:00:15,900
for the last two hours. But why's it so difficult to
7
00:00:15,900 --> 00:00:20,220
build software, or better, why's it so difficult to build good software?
8
00:00:20,220 --> 00:00:22,200
And how can we do it? This is exactly the topic
9
00:00:22,200 --> 00:00:25,190
of this class. And the reason why software engineering is a fundamental
10
00:00:25,190 --> 00:00:28,330
discipline in computer science. To motivate that, in this class, we
11
00:00:28,330 --> 00:00:32,259
will study a set of methodologies, techniques, and tools, that will help
12
00:00:32,259 --> 00:00:35,150
us build high quality software that does what it's supposed to
13
00:00:35,150 --> 00:00:38,540
do. And therefore, makes our customers happy. And that does it within
14
00:00:38,540 --> 00:00:42,375
the given time and money constraints. So within the budget that
15
00:00:42,375 --> 00:00:44,300
is allocated for the software. Before
16
00:00:44,300 --> 00:00:46,222
jumping into today's software engineering techniques
17
00:00:46,222 --> 00:00:48,010
though, let me take a step back and look at how
18
00:00:48,010 --> 00:00:50,240
we got here, as I believe it is very important to have
19
00:00:50,240 --> 00:00:52,690
some historical perspective on how this discipline was
20
00:00:52,690 --> 00:00:54,840
born and how it was developed over the years.

View File

@ -1,208 +0,0 @@
1
00:00:00,072 --> 00:00:02,190
To do that we'll have to go back in time to
2
00:00:02,190 --> 00:00:05,280
the late 60s. So what was happening in the 60s? Well for
3
00:00:05,280 --> 00:00:08,410
example the first man landed on the moon. That was also
4
00:00:08,410 --> 00:00:11,720
time when Woodstock took place and also the time when the first
5
00:00:11,720 --> 00:00:16,149
60 second picture from Polaroid was created. Concurrently to these events,
6
00:00:16,149 --> 00:00:18,910
which you probably didn't witness in first person, that was also the
7
00:00:18,910 --> 00:00:22,280
time when people started to realize that they were not able
8
00:00:22,280 --> 00:00:25,610
to build the software they needed. This happened for several reasons and
9
00:00:25,610 --> 00:00:29,220
resulted in what we call the software crisis. So let's
10
00:00:29,220 --> 00:00:31,820
look at some of the most important reasons behind this
11
00:00:31,820 --> 00:00:35,760
crisis. The first cause was the rising demand for software.
12
00:00:35,760 --> 00:00:38,500
Now you're used to see software everywhere: in your phone,
13
00:00:38,500 --> 00:00:41,530
in your car, even your washing machine. Before the 60s,
14
00:00:41,530 --> 00:00:44,590
however, the size and complexity of software was very limited
15
00:00:44,590 --> 00:00:47,580
and hardware components were really dominating the scene. Then things
16
00:00:47,580 --> 00:00:51,490
started to change and software started to be increasingly prevalent.
17
00:00:51,490 --> 00:00:53,940
So we move from a situation where everything was mostly
18
00:00:53,940 --> 00:00:57,380
hardware to a situation in which software became more and more
19
00:00:57,380 --> 00:01:00,660
important. To give an example, I'm going to show you the growth
20
00:01:00,660 --> 00:01:04,080
in the software demand at NASA along those years. And in
21
00:01:04,080 --> 00:01:07,610
particular, from the 1950s to more or less 2000. And this
22
00:01:07,610 --> 00:01:10,350
is just a qualitative plot but that's more or less the
23
00:01:10,350 --> 00:01:13,880
ways things went. So the demand for software in NASA grow
24
00:01:13,880 --> 00:01:16,930
exponentially. And the same happened in a lot of other companies.
25
00:01:16,930 --> 00:01:19,020
For example, just to cite one, for Boeing. So the
26
00:01:19,020 --> 00:01:22,350
amount of software on airplanes became larger and larger. The
27
00:01:22,350 --> 00:01:26,170
second cause for the software crisis was the increasing amount
28
00:01:26,170 --> 00:01:30,210
of development effort needed due to the increase of product complexity.
29
00:01:30,210 --> 00:01:34,260
Unfortunately, software complexity does not increase linearly with size. It
30
00:01:34,260 --> 00:01:36,170
is not the same thing to write software for a
31
00:01:36,170 --> 00:01:39,410
class exercise or a small project, or a temp project,
32
00:01:39,410 --> 00:01:41,970
than it is to build a software for a word processor,
33
00:01:41,970 --> 00:01:45,950
an operating system, a distributed system, or even more complex and larger
34
00:01:45,950 --> 00:01:49,390
system. And what I'm giving here is just an indicative size for
35
00:01:49,390 --> 00:01:52,643
the software so the class exercise might be 100 lines of code,
36
00:01:52,643 --> 00:01:55,600
the small project might be 1000 lines of code, in the other thousand
37
00:01:55,600 --> 00:01:58,328
lines of code, and so on and so forth. For the former,
38
00:01:58,328 --> 00:02:01,510
the heroic effort of an individual developer can get the job done.
39
00:02:01,510 --> 00:02:03,850
So that's what we call a programming effort. If you're a good
40
00:02:03,850 --> 00:02:07,340
programmer, you can go sit down and do it, right. For the latter,
41
00:02:07,340 --> 00:02:09,330
this is not possible. This is what we called the
42
00:02:09,330 --> 00:02:13,810
software engineering effort. In fact, no matter how much programming languages,
43
00:02:13,810 --> 00:02:17,280
development environments, and software tools improve, developers could not keep
44
00:02:17,280 --> 00:02:20,220
up with increasing software size and complexity. Which leads us to
45
00:02:20,220 --> 00:02:22,280
the third problem that I want to mention and the
46
00:02:22,280 --> 00:02:25,020
third reason for the software crisis. And this cause is the
47
00:02:25,020 --> 00:02:28,790
slow developer's productivity growth. So let me show this again
48
00:02:28,790 --> 00:02:32,243
with a qualitative diagram. And this is taken from the IEEE
49
00:02:32,243 --> 00:02:35,550
Software Magazine. And what I'm showing here is the growth in
50
00:02:35,550 --> 00:02:39,930
software size and complexity over time, and how the developers' productivity
51
00:02:39,930 --> 00:02:43,800
really couldn't keep up with this additional software complexity, which resulted
52
00:02:43,800 --> 00:02:47,170
in this gap between what was needed and what was actually available.

View File

@ -1,44 +0,0 @@
1
00:00:00,078 --> 00:00:02,480
So now let's take a quick break and have a recap
2
00:00:02,480 --> 00:00:05,300
of what we just discussed. I want you to think about what
3
00:00:05,300 --> 00:00:07,850
are the major causes of the software crisis. I'm going to provide you
4
00:00:07,850 --> 00:00:10,250
a set of possibilities and I would like for you to mark
5
00:00:10,250 --> 00:00:14,160
all that apply. Was that increasing costs of computers? Was it increasing
6
00:00:14,160 --> 00:00:17,990
product complexity, or maybe the lack of programmers? Or was it, instead,
7
00:00:17,990 --> 00:00:20,000
this slow programmers productivity growth? The
8
00:00:20,000 --> 00:00:21,540
lack of funding for software engineering
9
00:00:21,540 --> 00:00:25,210
research? The rise in demand for software? And finally, was it maybe
10
00:00:25,210 --> 00:00:26,500
the lack of caffeine in software
11
00:00:26,500 --> 00:00:29,570
development organizations? Again, mark all that apply.

View File

@ -1,52 +0,0 @@
1
00:00:00,090 --> 00:00:02,440
So, if you think about what we just discussed. Definitely one
2
00:00:02,440 --> 00:00:06,210
of the causes was the increasing product complexity. Products were becoming more
3
00:00:06,210 --> 00:00:09,510
and more complex and software was replacing more and more, what
4
00:00:09,510 --> 00:00:11,860
was before, provided by hardware components.
5
00:00:11,860 --> 00:00:14,160
Slow productivity growth was another problem,
6
00:00:14,160 --> 00:00:17,350
because programmers could not keep up with the additional complexity of
7
00:00:17,350 --> 00:00:19,720
the software that they had to develop. I would like to say
8
00:00:19,720 --> 00:00:22,480
there was lack of funding for software engineering research because I'm
9
00:00:22,480 --> 00:00:25,230
a software engineering researcher, but that was not one of the reasons
10
00:00:25,230 --> 00:00:27,200
for the software crisis. Instead, it was
11
00:00:27,200 --> 00:00:30,140
the rising demand for software. Again, more
12
00:00:30,140 --> 00:00:32,060
and more software was being required and
13
00:00:32,060 --> 00:00:33,850
more and more software was replacing hardware.

View File

@ -1,116 +0,0 @@
1
00:00:00,120 --> 00:00:03,220
After recapping the three major issues that characterize a software crisis
2
00:00:03,220 --> 00:00:05,626
let's see what was the evidence that there was indeed a
3
00:00:05,626 --> 00:00:07,900
crisis. So what I want to discuss now is the result
4
00:00:07,900 --> 00:00:11,060
of a study performed by Davis in 1990s. So in even
5
00:00:11,060 --> 00:00:13,670
more recent times than the 60s and the 70s. And the
6
00:00:13,670 --> 00:00:17,280
study was performed on nine software projects that were totaling a
7
00:00:17,280 --> 00:00:20,990
cost around $7 million and I'm going to show you how this
8
00:00:20,990 --> 00:00:25,190
projects went using this representation, this pi representation, in which I'm
9
00:00:25,190 --> 00:00:27,520
going to discuss what each of the segment of the
10
00:00:27,520 --> 00:00:30,010
pi represent. So let's start looking at the first one.
11
00:00:30,010 --> 00:00:32,920
This is a software that was usable as delivered. Other
12
00:00:32,920 --> 00:00:36,590
software was delivered, and usable, either after some changes or
13
00:00:36,590 --> 00:00:41,080
after some major modifications, so within additional costs involved.
14
00:00:41,080 --> 00:00:43,530
But the striking piece of information here is that the
15
00:00:43,530 --> 00:00:46,890
vast majority of the software, so these two slices, were
16
00:00:46,890 --> 00:00:50,250
software that was either delivered but never successfully used or
17
00:00:50,250 --> 00:00:53,730
software that was not even delivered. And this corresponded
18
00:00:53,730 --> 00:00:57,500
to five over the seven total million dollars for
19
00:00:57,500 --> 00:01:00,050
all the projects. So clearly, this shows a pretty
20
00:01:00,050 --> 00:01:03,910
grim picture for software development and its success. In short,
21
00:01:03,910 --> 00:01:06,410
there was clear evidence the software was becoming to
22
00:01:06,410 --> 00:01:08,990
difficult too build and that the software industry was facing
23
00:01:08,990 --> 00:01:11,190
a crisis. And this is what led to the
24
00:01:11,190 --> 00:01:15,130
NATO Software Engineering Conference that was held in January 1969,
25
00:01:15,130 --> 00:01:19,100
which is what we can consider the birth of software engineering. And what
26
00:01:19,100 --> 00:01:23,080
I'm showing here is a drawing of the proceedings for that conference. And if
27
00:01:23,080 --> 00:01:26,020
you look at the class notes you can see a link to the actual
28
00:01:26,020 --> 00:01:27,640
proceedings, in case you are interested in
29
00:01:27,640 --> 00:01:29,180
looking at the issues that were discussed.

View File

@ -1,163 +0,0 @@
1
00:00:00,430 --> 00:00:06,300
Hi, in the last lesson we provided an overview of the course and motivated the
2
00:00:06,300 --> 00:00:09,570
need for software engineering. In this lesson,
3
00:00:09,570 --> 00:00:13,090
we will present and start discussing several traditional
4
00:00:13,090 --> 00:00:16,090
software engineering life cycle models. We will
5
00:00:16,090 --> 00:00:18,790
talk about their main advantages, and also about
6
00:00:18,790 --> 00:00:21,840
their shortcomings. We will also talk about
7
00:00:21,840 --> 00:00:25,720
classic mistakes in software engineering that is well
8
00:00:25,720 --> 00:00:29,530
known ineffective development practices, that when
9
00:00:29,530 --> 00:00:32,590
followed, tend to lead to better results. And
10
00:00:32,590 --> 00:00:35,120
covering those, will hopefully help us to avoid
11
00:00:35,120 --> 00:00:38,350
them in the future. And because in this
12
00:00:38,350 --> 00:00:41,290
lesson, I will discuss some fundamental aspects of
13
00:00:41,290 --> 00:00:44,730
software engineering, to suitably introduce these topics, I
14
00:00:44,730 --> 00:00:47,110
went to the University of Southern California, to
15
00:00:47,110 --> 00:00:50,300
interview one of the fathers of software engineering;
16
00:00:50,300 --> 00:00:53,070
Professor Barry Boehm.
17
00:00:53,070 --> 00:00:59,060
>> A well, a software life cycle is a sequence of, of decisions that you
18
00:00:59,060 --> 00:01:01,895
make, and it's fundamentally those decisions are
19
00:01:01,895 --> 00:01:05,280
going to be part of the history of the
20
00:01:05,280 --> 00:01:09,500
software that. You are going to build that other people are going to use, and
21
00:01:09,500 --> 00:01:15,330
the process model is basically answering the question of what do I do next and
22
00:01:15,330 --> 00:01:20,550
how long shall I do it for. And again, because there are a lot of different ways
23
00:01:20,550 --> 00:01:24,220
you can make that decision, you need to
24
00:01:24,220 --> 00:01:27,640
figure out which models are good for which particular
25
00:01:27,640 --> 00:01:31,475
situations. So, for example, we've, written a book
26
00:01:31,475 --> 00:01:34,846
that's called Balancing Agility and Discipline. It says under
27
00:01:34,846 --> 00:01:37,835
what conditions should you use agile methods, under
28
00:01:37,835 --> 00:01:40,824
which conditions should you invest more time in analyzing
29
00:01:40,824 --> 00:01:44,826
the situation and planning what you're going to do and the like. And so,
30
00:01:44,826 --> 00:01:49,866
typically if the project is, is small where it's three to ten
31
00:01:49,866 --> 00:01:55,271
people, agile works pretty well. If it's 300
32
00:01:55,271 --> 00:02:00,545
people, then I think we don't want to go that way. If the affect of
33
00:02:00,545 --> 00:02:05,960
the defect is loss of comfort or limited funds, then agile is fine,
34
00:02:05,960 --> 00:02:11,184
but if it is a loss of life, then you don't. On the other hand if, if
35
00:02:11,184 --> 00:02:13,776
you have a situation where you have lot
36
00:02:13,776 --> 00:02:17,745
of unpredictable change, you really don't want to spend
37
00:02:17,745 --> 00:02:23,439
a lot of time writing plans and lots of documents. In some cases you may have a
38
00:02:23,439 --> 00:02:26,907
project where you want to do waterfall in
39
00:02:26,907 --> 00:02:31,140
some parts and agile in others. So, these are
40
00:02:31,140 --> 00:02:36,180
the kind of things that, that make the choice of life cycle process
41
00:02:36,180 --> 00:02:41,409
model very important and very interesting as a subject of research.

View File

@ -1,79 +0,0 @@
1
00:00:00,240 --> 00:00:02,600
At this point, you know the possible activities, the
2
00:00:02,600 --> 00:00:06,520
possible phases performed during the software development process. But there
3
00:00:06,520 --> 00:00:08,710
this something that we still haven't discussed, which is
4
00:00:08,710 --> 00:00:11,910
very important. And that is how should we put these
5
00:00:11,910 --> 00:00:14,990
activities together to develop software? And this all comes
6
00:00:14,990 --> 00:00:18,360
down to the concept of software process model. Also called
7
00:00:18,360 --> 00:00:21,520
software lifecycle model. And what this is, is a
8
00:00:21,520 --> 00:00:25,470
prescriptive model of what should happen from the very beginning
9
00:00:25,470 --> 00:00:28,960
to the very end. Of a software development process. The
10
00:00:28,960 --> 00:00:31,360
main function of the life cycle model is to determine
11
00:00:31,360 --> 00:00:34,290
the order of the different activities so that we know
12
00:00:34,290 --> 00:00:37,920
which activities should come first and which ones should follow. Another
13
00:00:37,920 --> 00:00:40,910
important function of the life cycle model is to determine
14
00:00:40,910 --> 00:00:45,290
the transition criteria between activities. So, when we can go from
15
00:00:45,290 --> 00:00:48,000
one phase to the subsequent one. In other words, what
16
00:00:48,000 --> 00:00:50,840
the model should describe is what should we do next and
17
00:00:50,840 --> 00:00:53,450
how long should we continue to do it for each activity
18
00:00:53,450 --> 00:00:56,290
in the model. Now lets see a few traditional software process
19
00:00:56,290 --> 00:00:58,920
models. I will discuss them here at the high level and
20
00:00:58,920 --> 00:01:02,000
then revisit some of these models in the different mini courses.

View File

@ -1,95 +0,0 @@
1
00:00:00,070 --> 00:00:02,830
The first model we want to discuss is the grandfather of
2
00:00:02,830 --> 00:00:05,900
all life cycle models. And it is the waterfall model. In
3
00:00:05,900 --> 00:00:08,890
the waterfall model the project progresses to an orderly sequence of
4
00:00:08,890 --> 00:00:13,040
steps. From the initial software concept, down until the final phase.
5
00:00:13,040 --> 00:00:16,110
Which is system testing. And at the end of each phase
6
00:00:16,110 --> 00:00:18,510
there will be a review to determine whether the project is
7
00:00:18,510 --> 00:00:22,120
ready to advance to the next phase. The pure waterfall model
8
00:00:22,120 --> 00:00:25,340
performs well for softer products in which there is a stable
9
00:00:25,340 --> 00:00:28,400
product definition. The domain is well known and the technologies
10
00:00:28,400 --> 00:00:31,220
involved are well understood. In these kind of domains, the
11
00:00:31,220 --> 00:00:34,350
waterfall model helps you to find errors in the early,
12
00:00:34,350 --> 00:00:37,180
local stages of the projects. If you remember what we discussed,
13
00:00:37,180 --> 00:00:39,950
this is the place where we want to find errors,
14
00:00:39,950 --> 00:00:43,440
not down here because finding them here will reduce the cost
15
00:00:43,440 --> 00:00:47,160
of our overall software development. The main advantage of the
16
00:00:47,160 --> 00:00:50,930
waterfall model is that it allows you to find errors early.
17
00:00:50,930 --> 00:00:53,910
However, the main disadvantages of the waterfall model arise
18
00:00:53,910 --> 00:00:56,550
from the fact that it is not flexible. Normally,
19
00:00:56,550 --> 00:00:59,520
it is difficult to fully specify requirements at the
20
00:00:59,520 --> 00:01:02,470
beginning of a project. And this lack of flexibility is
21
00:01:02,470 --> 00:01:04,800
far from ideal when dealing with project in which
22
00:01:04,800 --> 00:01:07,310
requirements change, the developers are not domain experts or
23
00:01:07,310 --> 00:01:11,130
the technology used are new and evolving, that is
24
00:01:11,130 --> 00:01:14,440
it is less than ideal for most real world projects.

View File

@ -1,191 +0,0 @@
1
00:00:00,120 --> 00:00:02,600
The next model that we will discuss is the spiral
2
00:00:02,600 --> 00:00:05,630
model, which was first described by Barry Boehm, which is
3
00:00:05,630 --> 00:00:08,010
the professor that we interviewed at the beginning of this
4
00:00:08,010 --> 00:00:12,240
lesson. In his paper from 1986 that was entitled A Spiral
5
00:00:12,240 --> 00:00:15,730
Model of Software Development and Enhancement. And one of the
6
00:00:15,730 --> 00:00:18,520
main characteristics of that paper is that it was describing the
7
00:00:18,520 --> 00:00:21,670
spiral model using a diagram, which is the one that
8
00:00:21,670 --> 00:00:25,130
I'm showing you here, and this diagram has become very very
9
00:00:25,130 --> 00:00:27,950
popular, and you probably saw it either in this
10
00:00:27,950 --> 00:00:30,400
form or one of the many variations of the
11
00:00:30,400 --> 00:00:32,680
diagram. So I'm not going to discuss all of
12
00:00:32,680 --> 00:00:34,770
the details of the spiral model, but I just want to
13
00:00:34,770 --> 00:00:37,510
give you an idea of its main characteristics. The
14
00:00:37,510 --> 00:00:41,580
spiral model is an incremental risk-oriented lifecycle model that has
15
00:00:41,580 --> 00:00:46,330
four main phases listed here: determine objectives, identify and
16
00:00:46,330 --> 00:00:51,180
resolve risks, development and tests, and plan the next iteration.
17
00:00:51,180 --> 00:00:53,690
A software project will go through these four phases in
18
00:00:53,690 --> 00:00:57,020
an iterative way. In the first phase, the requirements will
19
00:00:57,020 --> 00:00:59,470
be gathered. In the second phase, the risks and the
20
00:00:59,470 --> 00:01:04,010
alternate solutions will be identified, and a prototype will be produced.
21
00:01:04,010 --> 00:01:06,190
Software and tests for the software are produced in the
22
00:01:06,190 --> 00:01:09,210
development and test phase, which is the third step of the
23
00:01:09,210 --> 00:01:12,830
process. Finally, in the fourth phase, the output of the
24
00:01:12,830 --> 00:01:16,880
project, so far, is evaluated, and the next iteration is planned.
25
00:01:16,880 --> 00:01:19,960
So basically, what the spiral process prescribes is a
26
00:01:19,960 --> 00:01:23,262
way of developing software by going through these phases in
27
00:01:23,262 --> 00:01:26,020
an iterative way, in which we learn more and more
28
00:01:26,020 --> 00:01:29,420
of the software, we identify more and more, and account
29
00:01:29,420 --> 00:01:32,250
for, more and more risks and we go more
30
00:01:32,250 --> 00:01:36,000
and more towards our final solution, our final release. There
31
00:01:36,000 --> 00:01:38,930
are several advantages of using a spiral model. The first
32
00:01:38,930 --> 00:01:41,930
one is that the extensive risk analysis does reduce the
33
00:01:41,930 --> 00:01:44,140
chances of the project to fail. So there is a
34
00:01:44,140 --> 00:01:48,300
risk reduction advantage. The second advantage is that functionality can be
35
00:01:48,300 --> 00:01:51,190
added at a later phase because of the iterative nature of
36
00:01:51,190 --> 00:01:55,175
the process. And finally, software is produced early in the software
37
00:01:55,175 --> 00:01:58,260
lifecycle. So, at any iteration, we have something to show
38
00:01:58,260 --> 00:02:01,300
for our development. We don't wait until the end before producing
39
00:02:01,300 --> 00:02:03,790
something. And then of course there's also the advantage that we
40
00:02:03,790 --> 00:02:07,190
can get early feedback from the customer about what we produced.
41
00:02:07,190 --> 00:02:09,000
The main disadvantages on the other hand of
42
00:02:09,000 --> 00:02:11,870
the spiral model, are that the risk analysis requires
43
00:02:11,870 --> 00:02:16,560
a highly specific expertise. And unfortunately, the whole success
44
00:02:16,560 --> 00:02:19,260
of the process is highly dependent on risk analysis.
45
00:02:19,260 --> 00:02:21,580
So risk analysis has to be done right.
46
00:02:21,580 --> 00:02:24,510
And finally the spiral model is way more complex
47
00:02:24,510 --> 00:02:27,180
than other models, like for example, the water fall
48
00:02:27,180 --> 00:02:29,760
model. And therefore it can be costly to implement.

View File

@ -1,167 +0,0 @@
1
00:00:00,080 --> 00:00:02,430
The next process model I want to discuss is evolutionary
2
00:00:02,430 --> 00:00:05,786
prototyping, which works in four main phases. We start
3
00:00:05,786 --> 00:00:08,393
from an initial concept, then we design and implement
4
00:00:08,393 --> 00:00:11,509
a prototype based on this initial concept, refine the prototype
5
00:00:11,509 --> 00:00:14,002
until it is acceptable, and finally we complete and
6
00:00:14,002 --> 00:00:17,550
release the prototype. Therefore, when developing a system using
7
00:00:17,550 --> 00:00:22,330
evolutionary prototyping, the system is continually refined and rebuilt.
8
00:00:22,330 --> 00:00:25,340
So it is an ideal process when not all requirements
9
00:00:25,340 --> 00:00:28,330
are well understood. Which is a very common situation. So, looking
10
00:00:28,330 --> 00:00:30,370
at this in a little more details, what happens is that
11
00:00:30,370 --> 00:00:33,760
developers start by developing the parts of the system that they
12
00:00:33,760 --> 00:00:37,690
understand, instead of working on developing a whole system, including parts
13
00:00:37,690 --> 00:00:40,520
that might not be very clear at that stage. The partial
14
00:00:40,520 --> 00:00:43,900
system is then shown to the customer and the customer feedback
15
00:00:43,900 --> 00:00:47,480
is used to drive the next iteration, in which either changes
16
00:00:47,480 --> 00:00:50,340
are made to the current features or new features are added.
17
00:00:50,340 --> 00:00:53,060
So, either the current prototype is improved or the
18
00:00:53,060 --> 00:00:56,270
prototype is extended. And finally, when the customer agrees that
19
00:00:56,270 --> 00:00:58,980
the prototype is good enough, the developers will complete all
20
00:00:58,980 --> 00:01:01,410
the remaining work on the system and release the prototype
21
00:01:01,410 --> 00:01:03,930
as the final product. So let's discuss as we did
22
00:01:03,930 --> 00:01:06,780
for the previous process models, what are the main advantages
23
00:01:06,780 --> 00:01:10,580
and disadvantages of evolutionary prototyping. In this case, the main
24
00:01:10,580 --> 00:01:15,440
advantage is the immediate feedback. Developers get feedback immediately as
25
00:01:15,440 --> 00:01:17,560
soon as they produce a prototype and they show it to
26
00:01:17,560 --> 00:01:21,050
the customer and therefore, the risk of implementing the wrong system is
27
00:01:21,050 --> 00:01:25,150
minimized. The main negative is the fact that it's difficult to plan.
28
00:01:25,150 --> 00:01:29,070
When using evolutionary prototype it is difficult to plan in advance how
29
00:01:29,070 --> 00:01:31,240
long the development is going to take, because we don't know how
30
00:01:31,240 --> 00:01:34,550
many iterations will be needed. And another drawback is that it can
31
00:01:34,550 --> 00:01:37,120
easily become an excuse to do kind of do cut and fix
32
00:01:37,120 --> 00:01:40,530
kind of approaches in which we hack something together, fix the main
33
00:01:40,530 --> 00:01:43,640
issues when the customer gives us feedback, and then continue this
34
00:01:43,640 --> 00:01:46,780
way, until the final product is something that is kind of
35
00:01:46,780 --> 00:01:49,830
working, but it's not really a product of high quality. Something
36
00:01:49,830 --> 00:01:51,910
else I want to point out before we move to the next
37
00:01:51,910 --> 00:01:54,490
software process model is that there are many different kinds of
38
00:01:54,490 --> 00:01:56,700
prototyping, so evolutionary prototyping is just
39
00:01:56,700 --> 00:01:58,010
one of them. For example, throwaway
40
00:01:58,010 --> 00:02:02,100
prototyping is another kind of prototyping in which the prototype is
41
00:02:02,100 --> 00:02:05,580
just used to gather requirements, but is thrown away at the end
42
00:02:05,580 --> 00:02:08,710
of the requirements gathering, instead of being evolved as it happens here.

View File

@ -1,167 +0,0 @@
1
00:00:00,080 --> 00:00:02,430
O próximo modelo que eu quero discutir é prototipagem
2
00:00:02,430 --> 00:00:05,786
evolutiva, que funciona em quatro fases principais. Nós começamos
3
00:00:05,786 --> 00:00:08,393
por um conceito inicial, então nós desenhamos e criamos
4
00:00:08,393 --> 00:00:11,509
um protótipo baseado neste conceito inicial, refinamos o protótipo
5
00:00:11,509 --> 00:00:14,002
até que ele se torne aceitável e finalmente nós completamos e
6
00:00:14,002 --> 00:00:17,550
liberamos o protótipo. Desta maneira, quando desenvolvemos um sistema usando
7
00:00:17,550 --> 00:00:22,330
prototipagem evolutiva, o sistema é constantemente refinado e refeito.
8
00:00:22,330 --> 00:00:25,340
Então este é o processo ideal quando nem todos os requisitos
9
00:00:25,340 --> 00:00:28,330
estão bem compreendidos. O que é uma situação bastante usual. Então, olhando
10
00:00:28,330 --> 00:00:30,370
para isso um pouco mais detalhadamente, o que ocorre é que
11
00:00:30,370 --> 00:00:33,760
os desenvolvedores começam no desenvolvimento das partes do sistema que eles
12
00:00:33,760 --> 00:00:37,690
compreendem, ao invés de trabalhar no desenvolvimento do sistema com um tido, incluindo as
13
00:00:37,690 --> 00:00:40,520
parte que não estão ainda muito claras. O sistema
14
00:00:40,520 --> 00:00:43,900
parcial é então mostrado ao cliente e a opinião do cliente
15
00:00:43,900 --> 00:00:47,480
é usada para guiar a próxima iteração, na qual tanto modificações
16
00:00:47,480 --> 00:00:50,340
são feitas nas atuais feições, como novas feições são adicionadas.
17
00:00:50,340 --> 00:00:53,060
Assim, ou o protótipo atual é melhorado ou o
18
00:00:53,060 --> 00:00:56,270
protótipo é aumentado. E finalmente, quando o cliente concorda de
19
00:00:56,270 --> 00:00:58,980
que o protótipo está suficientemente bom, os desenvolvedores irão completar todo
20
00:00:58,980 --> 00:01:01,410
o trabalho faltante no sistema e liberar o protótipo
21
00:01:01,410 --> 00:01:03,930
como o produto final. Então vamos discutir como fizemos
22
00:01:03,930 --> 00:01:06,780
para os modelos de processos anteriores, quais são as principais vantagens
23
00:01:06,780 --> 00:01:10,580
e desvantagens de prototipagem evolutiva. Neste caso, a principal
24
00:01:10,580 --> 00:01:15,440
vantagem é apreciação imediada. Os desenvolvedores recebem a opinião imediatamente,
25
00:01:15,440 --> 00:01:17,560
tão logo eles produziram o protótipo e o mostraram para o
26
00:01:17,560 --> 00:01:21,050
cliente e desta maneira, o risco de implementar erradamente o sistema é
27
00:01:21,050 --> 00:01:25,150
minimizado. O principal ponto negativo é que isso é difícil de planejar.
28
00:01:25,150 --> 00:01:29,070
Quando é usada a prototipagem evolutiva é difícil de antecipar por
29
00:01:29,070 --> 00:01:31,240
quanto tempo o desenvolvimento irá levar, porquê nós não sabemos quantas
30
00:01:31,240 --> 00:01:34,550
iterações serão necessárias. E outro inconveniente é que isso pode facilmente
31
00:01:34,550 --> 00:01:37,120
se tornar uma desculpa para começar a fazer aquele tipo de abordagem de
32
00:01:37,120 --> 00:01:40,530
"corte-e-correção" na qual nós começamos a enjambrar as coisas, corrigir os
33
00:01:40,530 --> 00:01:43,640
principais defeitos quando o cliente nos dá sua opinião e então continuamos desta
34
00:01:43,640 --> 00:01:46,780
maneira, até que o produto final se torne tipo algo que
35
00:01:46,780 --> 00:01:49,830
funciona, mas que não é de fato um produto de alta qualidade. Outra coisa
36
00:01:49,830 --> 00:01:51,910
que eu quero apontar antes de irmos ao próximo
37
00:01:51,910 --> 00:01:54,490
modelo de criação de software é que existem diversas maneiras de
38
00:01:54,490 --> 00:01:56,700
prototipagem, então a prototipagem evolutiva é apenas
39
00:01:56,700 --> 00:01:58,010
uma delas. Por exemplo, prototipagem
40
00:01:58,010 --> 00:02:02,100
descartável é outra maneira de prototipagem na qual o protótipo é
41
00:02:02,100 --> 00:02:05,580
usado apenas para coletar requisitos, mas é descartado ao final
42
00:02:05,580 --> 00:02:08,710
da coleta de requisitos, ao invés de ser evoluído, como ocorre aqui.

View File

@ -1,111 +0,0 @@
1
00:00:00,070 --> 00:00:02,969
There are two more software process models that I want to cover, so
2
00:00:02,969 --> 00:00:06,120
bear with me. The first one is the Rational Unified software Process
3
00:00:06,120 --> 00:00:09,500
or IUP, which is s a very popular one based on UML.
4
00:00:09,500 --> 00:00:12,620
RUP works in an iterative way, which means it that it performs different
5
00:00:12,620 --> 00:00:16,360
iterations. And at each iteration, it performs four phases. So what I'm
6
00:00:16,360 --> 00:00:19,030
showing you here, is a high level view of the process. And I
7
00:00:19,030 --> 00:00:21,630
don't want you to focus on all the different details, because we
8
00:00:21,630 --> 00:00:25,170
will discuss these details later on, in a lesson that is actually dedicated
9
00:00:25,170 --> 00:00:27,470
to RUP. What I want to give you now, is just the
10
00:00:27,470 --> 00:00:31,020
gist of how this works. So, in each one of these four
11
00:00:31,020 --> 00:00:34,680
phases, which I'm going to describe in a second. We perform standard software
12
00:00:34,680 --> 00:00:38,060
engineering activities, the ones that we just discussed. And we do them
13
00:00:38,060 --> 00:00:41,320
to different extent, based on the phase in which we are.
14
00:00:41,320 --> 00:00:44,841
In particular, in the inception phase the work is mostly to sculpt
15
00:00:44,841 --> 00:00:47,940
the system. So basically figuring out what is the scope of the
16
00:00:47,940 --> 00:00:50,220
work, what is the scope of the project, what is the domain.
17
00:00:50,220 --> 00:00:52,670
So that we can be able to perform initial cost
18
00:00:52,670 --> 00:00:56,190
and budget estimates. The operational phase is the phase in which
19
00:00:56,190 --> 00:00:59,910
we focus on the domain analysis and define the basic architecture
20
00:00:59,910 --> 00:01:03,030
for the system. So this is a phase in which analysis
21
00:01:03,030 --> 00:01:06,290
and design are particularly paramount. Then there is a construction phase,
22
00:01:06,290 --> 00:01:09,250
which is where the bulk of the development actually occurs. And
23
00:01:09,250 --> 00:01:11,640
as you can see here, is where most of the implementation
24
00:01:11,640 --> 00:01:15,280
happens. And finally, the transition phase is the phase in which
25
00:01:15,280 --> 00:01:18,090
the system goes from development into production, so that
26
00:01:18,090 --> 00:01:20,380
it becomes available to users. And of course, this is
27
00:01:20,380 --> 00:01:22,480
the phase in which the other activities in software
28
00:01:22,480 --> 00:01:25,710
development become less relevant and deployment becomes the main one.

View File

@ -1,111 +0,0 @@
1
00:00:00,070 --> 00:00:02,969
Existem ainda dois outros processos de modelagem de software que eu gostaria de tratar, então
2
00:00:02,969 --> 00:00:06,120
me acompanhem. O primeiro é o Processo Unificado Racional
3
00:00:06,120 --> 00:00:09,500
ou RUP que é um dos mais populares baseados em UML.
4
00:00:09,500 --> 00:00:12,620
RUP opera de uma maneira iterativa, o que significa que ocorrem diversas
5
00:00:12,620 --> 00:00:16,360
iterações. E em cada iteração, são desenvolvidas quatro fases. Então o que eu
6
00:00:16,360 --> 00:00:19,030
estou lhe mostrando aqui, é uma vista panorâmica do processo. E eu
7
00:00:19,030 --> 00:00:21,630
não quero que você foque em todos os detalhes, porquê nós
8
00:00:21,630 --> 00:00:25,170
iremos discutir estes detalhes mais tarde, numa lição que é de fato dedicada
9
00:00:25,170 --> 00:00:27,470
ao RUP. O que eu quero lhe dar agora, é apenas a
10
00:00:27,470 --> 00:00:31,020
essência de como isso funciona. Então, em cada um dessas quatro
11
00:00:31,020 --> 00:00:34,680
fases, que eu irei descrever em breve... Nós desenvolvemos atividades
12
00:00:34,680 --> 00:00:38,060
de engenharia de software padrões, as que nós já discutimos. E nós as fazemos
13
00:00:38,060 --> 00:00:41,320
para diferentes amplitudes, baseadas na fase em que nos encontramos.
14
00:00:41,320 --> 00:00:44,841
Em particular, na fase de Concepção (Iniciação) o trabalho será sobretudo de esculpir
15
00:00:44,841 --> 00:00:47,940
o sistema. E basicamente ilustrando o escopo do
16
00:00:47,940 --> 00:00:50,220
trabalho, qual será o escopo do projeto, qual é o domínio.
17
00:00:50,220 --> 00:00:52,670
E então nós seremos capazes de saber o custo inicial
18
00:00:52,670 --> 00:00:56,190
e fazer um orçamento. A fase de Elaboração é a fase na qual
19
00:00:56,190 --> 00:00:59,910
nós focamos na análise de domínio e definimos a arquitetura de base
20
00:00:59,910 --> 00:01:03,030
do sistema. Então esta é a fase na qual a análise
21
00:01:03,030 --> 00:01:06,290
e o projeto se tornam proeminentes. E então ocorre a fase de Construção,
22
00:01:06,290 --> 00:01:09,250
na qual o desenvolvimento massivo de fato ocorre. E
23
00:01:09,250 --> 00:01:11,640
como você pode ver aqui, é onde a maior parte da implementação
24
00:01:11,640 --> 00:01:15,280
ocorre. E finalmente, a fase de Transição é a fase na qual
25
00:01:15,280 --> 00:01:18,090
o sistema passa do desenvolvimento para a produção, e então
26
00:01:18,090 --> 00:01:20,380
ele se torna disponível aos usuários. E é claro, esta é
27
00:01:20,380 --> 00:01:22,480
a fase na qual as outras atividades em desenvolvimento de
28
00:01:22,480 --> 00:01:25,710
software se tornam menos relevantes e a entrega se torna a principal.

View File

@ -1,123 +0,0 @@
1
00:00:00,150 --> 00:00:02,300
The next type of software process models that I
2
00:00:02,300 --> 00:00:06,300
want to discuss are Agile Software Development Processes. And this
3
00:00:06,300 --> 00:00:08,470
is a group of software development methods that are
4
00:00:08,470 --> 00:00:12,620
based on highly iterative and incremental development. And in particular,
5
00:00:12,620 --> 00:00:16,000
I'm going to discuss Test Driven Development or TDD. The
6
00:00:16,000 --> 00:00:18,490
space on the iteration of three main phases. In
7
00:00:18,490 --> 00:00:20,970
the first one that we mark as red, we
8
00:00:20,970 --> 00:00:25,350
write test cases that encode our requirements, and for which
9
00:00:25,350 --> 00:00:29,180
we haven't written code yet. And therefore, they will fail, obviously.
10
00:00:29,180 --> 00:00:31,800
So we're in this sort of red or fail phase. From
11
00:00:31,800 --> 00:00:34,830
this phase, we move to this phase, in which after we
12
00:00:34,830 --> 00:00:37,970
write the just enough code to make the test cases pass.
13
00:00:37,970 --> 00:00:40,670
We have a set of test cases that are all passing.
14
00:00:40,670 --> 00:00:43,810
And therefore, we can consider this as the green phase. We
15
00:00:43,810 --> 00:00:46,930
had enough code to make the test cases pass because the
16
00:00:46,930 --> 00:00:50,520
test cases encode our requirements. We have just written enough code to
17
00:00:50,520 --> 00:00:53,940
satisfy our requirements. When we do this over time though,
18
00:00:53,940 --> 00:00:57,080
what happens is that the structure of the code deteriorates, because
19
00:00:57,080 --> 00:00:59,100
we keep adding pieces. So that's why we have the
20
00:00:59,100 --> 00:01:02,540
first step, which is refactoring. In this step, we modify the
21
00:01:02,540 --> 00:01:05,724
code, and we will talk about refactoring extensively. We'll devote
22
00:01:05,724 --> 00:01:08,190
one lesson to it. We modify the code to make it
23
00:01:08,190 --> 00:01:12,650
more readable, more maintainable. In general, we modify to improve the
24
00:01:12,650 --> 00:01:15,560
design of the code. And after this phase, we will go
25
00:01:15,560 --> 00:01:17,670
back to writing more test cases for
26
00:01:17,670 --> 00:01:19,730
new requirements, write code that makes these
27
00:01:19,730 --> 00:01:24,870
test cases pass, and so on. So we'll continue to iterate among these phases. And
28
00:01:24,870 --> 00:01:26,500
also, in this case, we will talk
29
00:01:26,500 --> 00:01:29,390
about Agile Software Processes. And in particular,
30
00:01:29,390 --> 00:01:32,250
about extreme programming, or XP, and Scrum
31
00:01:32,250 --> 00:01:35,349
in more details, in minor course number four.

View File

@ -1,123 +0,0 @@
1
00:00:00,150 --> 00:00:02,300
O próximo tipo de modelos de processo para software que eu
2
00:00:02,300 --> 00:00:06,300
gostaria de discutir são os Processos Ágil de Desenvolvimento de Software. E este
3
00:00:06,300 --> 00:00:08,470
é um grupo de métodos de desenvolvimento de software que são
4
00:00:08,470 --> 00:00:12,620
baseados em desenvolvimento incremental e altamente iterativo. E em particular,
5
00:00:12,620 --> 00:00:16,000
eu irei discutir é o Desenvolvimento Orientado a Testes, ou TDD. O
6
00:00:16,000 --> 00:00:18,490
espaço na interação de três fases principais. Na
7
00:00:18,490 --> 00:00:20,970
primeira delas que iremos marcar em vermelho, nós
8
00:00:20,970 --> 00:00:25,350
escrevemos casos de teste que codificam nossos requisitos, e para os quais
9
00:00:25,350 --> 00:00:29,180
nós ainda não escrevemos o código. E obviamente, em seguida eles irão falhar.
10
00:00:29,180 --> 00:00:31,800
E então nós iremos cair neste tipo de fase vermelha, ou de falha. Desta
11
00:00:31,800 --> 00:00:34,830
fase, nós passamos para esta outra fase, a qual ocorre depois de nós
12
00:00:34,830 --> 00:00:37,970
escrevermos código suficiente para que os casos de teste aprovem.
13
00:00:37,970 --> 00:00:40,670
Nós temos um conjunto de casos de testes em que todos aprovaram.
14
00:00:40,670 --> 00:00:43,810
E em segunda, nós podemos considerar isso como a fase verde. Nós
15
00:00:43,810 --> 00:00:46,930
temos código suficiente para fazer os casos de teste aprovarem porquê os
16
00:00:46,930 --> 00:00:50,520
casos de teste codificam nossos requisitos. Nós escrevemos código suficiente para
17
00:00:50,520 --> 00:00:53,940
satisfazer nossos requisitos. Quando nós seguimos com isso ao longo do tempo,
18
00:00:53,940 --> 00:00:57,080
o que ocorre é que a estrutura do código deteriora, porquê
19
00:00:57,080 --> 00:00:59,100
nós continuamos adicionando partes! E esta é a razão de nós termos o
20
00:00:59,100 --> 00:01:02,540
primeiro passo, que é a Refatoração. Neste passo, nós modificamos o
21
00:01:02,540 --> 00:01:05,724
código, e nós iremos falar extensamente sobre refatoração. Nós iremos dedicar
22
00:01:05,724 --> 00:01:08,190
uma aula para isso. Nós modificamos o código para o tornar mais
23
00:01:08,190 --> 00:01:12,650
legível, mais fácil de dar manutenção. Em geral, nós modificamos para aprimorar a
24
00:01:12,650 --> 00:01:15,560
concepção do código. E depois desta fase, nós iremos tornar a
25
00:01:15,560 --> 00:01:17,670
escrever mais casos de teste para
26
00:01:17,670 --> 00:01:19,730
novos requisitos... escrever código que faz com que
27
00:01:19,730 --> 00:01:24,870
esses casos de teste aprovem e assim em diante. E então nós iremos continuar a iterar ao entre essas fases. E
28
00:01:24,870 --> 00:01:26,500
também, neste caso, nós iremos falar
29
00:01:26,500 --> 00:01:29,390
sobre Processos Ágil de Desenvolvimento de Software. E em particular, em
30
00:01:29,390 --> 00:01:32,250
Programação Extrema, ou XP e SCRUM
31
00:01:32,250 --> 00:01:35,349
mais detalhadamente, no subcurso número quatro.

View File

@ -1,179 +0,0 @@
1
00:00:00,100 --> 00:00:02,860
We just saw several software process models, and there
2
00:00:02,860 --> 00:00:06,330
are many, many more. And because these process models define
3
00:00:06,330 --> 00:00:09,330
the master plan for our project, the specific process
4
00:00:09,330 --> 00:00:12,220
model that we choose has as much influence over a
5
00:00:12,220 --> 00:00:15,700
project's success as any other major planning decision that
6
00:00:15,700 --> 00:00:18,610
we make. Therefore, it is very important that we pick
7
00:00:18,610 --> 00:00:22,100
the appropriate model for our development process. Picking an appropriate
8
00:00:22,100 --> 00:00:25,100
model can ensure the success of a project. On the
9
00:00:25,100 --> 00:00:27,830
contrary, if we choose the wrong model, that can be a
10
00:00:27,830 --> 00:00:31,010
constant source of problems and ultimately, it can make the project
11
00:00:31,010 --> 00:00:33,830
fail. So how can we choose the right model for a
12
00:00:33,830 --> 00:00:36,310
project? To be able to do so, we have to take into
13
00:00:36,310 --> 00:00:40,490
consideration many factors. In particular, we need to be aware of
14
00:00:40,490 --> 00:00:44,390
what level of understanding we have of the requirements. Do we understand
15
00:00:44,390 --> 00:00:46,720
all the requirements? Are we going to be able to collect all
16
00:00:46,720 --> 00:00:50,430
the requirements in advance, or collecting requirements is going to be hard and
17
00:00:50,430 --> 00:00:53,460
therefore, we might want to follow a process that is more flexible
18
00:00:53,460 --> 00:00:57,470
with that respect. Another important point is the expected lifetime of the
19
00:00:57,470 --> 00:01:00,300
project. Is this a quick project that we are putting together for
20
00:01:00,300 --> 00:01:03,100
a specific purpose or something that's going to last for for a number
21
00:01:03,100 --> 00:01:05,910
of years and that we're going to maintain over all those years?
22
00:01:05,910 --> 00:01:08,380
That's going to make a difference in the way we decide to develop
23
00:01:08,380 --> 00:01:12,190
that project. Also, what is the level of risk involved? Do we
24
00:01:12,190 --> 00:01:15,530
know the domain very well? Do we know exactly the technologies involved?
25
00:01:15,530 --> 00:01:19,100
Well, if so, we might go with a more traditional process. Otherwise,
26
00:01:19,100 --> 00:01:21,902
we might want to be more agile, more flexible. It is also
27
00:01:21,902 --> 00:01:24,900
very important to know the schedule constraints. How much time, how many
28
00:01:24,900 --> 00:01:28,640
resources do we have for this project? What is the expected interaction
29
00:01:28,640 --> 00:01:31,870
with the management and the customer? In particular for this ladder, there
30
00:01:31,870 --> 00:01:34,840
are many processes that rely on the fact that there can be
31
00:01:34,840 --> 00:01:38,310
a continuous interaction with the customer. If that interaction is not there,
32
00:01:38,310 --> 00:01:41,230
there's no way we are going to be able to use these processes.
33
00:01:41,230 --> 00:01:44,580
Conversely, there are processes that don't require the presence of the customer
34
00:01:44,580 --> 00:01:47,868
at all, except for the initial phase and maybe some checking points and
35
00:01:47,868 --> 00:01:51,020
so if the customer is very inaccessible, we might want to follow
36
00:01:51,020 --> 00:01:53,740
one of those processes, instead of one of the more demanding ones in
37
00:01:53,740 --> 00:01:57,340
terms of customer's time. Finally, it is important to take into account
38
00:01:57,340 --> 00:02:00,450
the level of the expertise of the people involved. Do we have people
39
00:02:00,450 --> 00:02:02,730
that know the technologies that we're using? Do we know people that
40
00:02:02,730 --> 00:02:04,590
know a specific kind of process?
41
00:02:04,590 --> 00:02:06,930
Some processes require some specific expertise and
42
00:02:06,930 --> 00:02:09,320
we're not going to be able to follow that process if we don't
43
00:02:09,320 --> 00:02:12,410
have the right expertise. So we need to take into account all of
44
00:02:12,410 --> 00:02:15,570
these aspects, and sometimes more, in order to be able to make
45
00:02:15,570 --> 00:02:19,560
the right decision and pick the right software process model for our project.

View File

@ -1,35 +0,0 @@
1
00:00:00,090 --> 00:00:02,080
Now before we move to the last part of the lesson, let's
2
00:00:02,080 --> 00:00:04,939
have a quick quiz on software process models to make sure that
3
00:00:04,939 --> 00:00:06,640
we are all on the same page. So I am going to
4
00:00:06,640 --> 00:00:10,320
ask you two questions. The first question is which of the following models
5
00:00:10,320 --> 00:00:14,330
is most suitable to develop a software control system? And when you
6
00:00:14,330 --> 00:00:17,700
think about the software control system, you can think about for example
7
00:00:17,700 --> 00:00:21,150
the control system for the software in an airplane. Would you rather
8
00:00:21,150 --> 00:00:22,860
use a pure waterfall model? Test
9
00:00:22,860 --> 00:00:25,840
driven development? Or an evolutionary prototyping approach?

View File

@ -1,47 +0,0 @@
1
00:00:00,080 --> 00:00:02,980
This is the context in which, typically, a pure
2
00:00:02,980 --> 00:00:06,310
waterfall process will work well. Why? Well, because it's a
3
00:00:06,310 --> 00:00:10,160
context in which requirements are usually well understood. The
4
00:00:10,160 --> 00:00:13,020
domain is well understood, so that kind of system has
5
00:00:13,020 --> 00:00:15,900
been built many times before. And also, it's a
6
00:00:15,900 --> 00:00:19,510
system in which we don't expect requirements to change dramatically
7
00:00:19,510 --> 00:00:23,180
over time. Therefore, a waterfall model, in which we collect
8
00:00:23,180 --> 00:00:25,140
all the requirements at the beginning and then we move
9
00:00:25,140 --> 00:00:28,280
to the subsequent phases might be the most appropriate one. Probably
10
00:00:28,280 --> 00:00:30,800
we don't want to do evolutionary prototyping in the case of
11
00:00:30,800 --> 00:00:34,130
the control system for an airplane. Same thing holds for TDD,
12
00:00:34,130 --> 00:00:36,460
so we want to be a little more rigorous in those cases.

View File

@ -1,11 +0,0 @@
1
00:00:00,110 --> 00:00:03,580
The second question I want to ask you is which model is the most suitable if you
2
00:00:03,580 --> 00:00:06,660
expect mid-course corrections? Would you rather use a
3
00:00:06,660 --> 00:00:10,430
pure waterfall model, a spiral model, or evolutionary prototyping?

View File

@ -1,75 +0,0 @@
1
00:00:00,160 --> 00:00:02,650
As we just heard from Professor Bohem, software
2
00:00:02,650 --> 00:00:05,970
engineering is an important and critical discipline, concerned
3
00:00:05,970 --> 00:00:09,100
with cost effective software development. We also heard
4
00:00:09,100 --> 00:00:11,170
that this is based on a systematic approach
5
00:00:11,170 --> 00:00:14,580
that uses appropriate tools and techniques, operates under
6
00:00:14,580 --> 00:00:18,130
specific development constraints. And most importantly, follows a
7
00:00:18,130 --> 00:00:20,890
process. As we discussed in the previous lesson,
8
00:00:20,890 --> 00:00:25,770
the software development process contains fundamental activities, or phases.
9
00:00:25,770 --> 00:00:28,480
Since we will discuss several processes, I'm going to remind
10
00:00:28,480 --> 00:00:31,150
you what these phases are. We start with requirements
11
00:00:31,150 --> 00:00:33,630
engineering, followed by design,
12
00:00:33,630 --> 00:00:36,980
implementation, verification and validation, and
13
00:00:36,980 --> 00:00:40,950
finally maintenance. Note that we will revisit each of
14
00:00:40,950 --> 00:00:43,940
these phases and devote an entire lesson or more
15
00:00:43,940 --> 00:00:46,160
to each phase. So what I want to do next
16
00:00:46,160 --> 00:00:48,210
is simply to give you a quick overview of
17
00:00:48,210 --> 00:00:51,020
what these phases are. Note also that for now
18
00:00:51,020 --> 00:00:54,330
I will follow a very traditional take on these topics. Later on in the
19
00:00:54,330 --> 00:00:58,260
class we will see how things can change and did change over the years.

View File

@ -1,67 +0,0 @@
1
00:00:00,150 --> 00:00:02,860
In this case, I think about the spiral model,
2
00:00:02,860 --> 00:00:06,610
and evolutionary prototyping model will work. Definitely you don't want to
3
00:00:06,610 --> 00:00:09,110
have a pure water from water. Why? Well because it
4
00:00:09,110 --> 00:00:11,940
is very expensive with a pure waterfall model to make
5
00:00:11,940 --> 00:00:15,460
changes during the course of the project, especially changes
6
00:00:15,460 --> 00:00:17,860
that involve requirements. Why? Because we saw that it can
7
00:00:17,860 --> 00:00:20,440
be very expensive. Whereas with the spiral model, we saw
8
00:00:20,440 --> 00:00:25,220
that being iterative, we can actually make correction throughout development.
9
00:00:25,220 --> 00:00:28,840
Similarly, with evolutionary prototyping, we keep evolving our system
10
00:00:28,840 --> 00:00:32,170
based on the customer feedback. And therefore, if something changes,
11
00:00:32,170 --> 00:00:33,810
we will get feedback right away, and we will
12
00:00:33,810 --> 00:00:36,230
be able to adapt. So the key thing here is
13
00:00:36,230 --> 00:00:39,060
that anything that is iterative works better in the
14
00:00:39,060 --> 00:00:43,400
case of changing environments. So, situations in which your requirements,
15
00:00:43,400 --> 00:00:46,720
the situation, the project might change. Whereas waterfall is
16
00:00:46,720 --> 00:00:50,410
more appropriate for situations in which the requirements are stable,
17
00:00:50,410 --> 00:00:53,760
we know the domain, and possibly we also know the technologies involved.

View File

@ -1,67 +0,0 @@
1
00:00:00,070 --> 00:00:02,650
Now that we discussed softer process models, there is
2
00:00:02,650 --> 00:00:05,100
another important point I want to cover, because it's going to
3
00:00:05,100 --> 00:00:08,970
be useful for your projects. Documenting the activities carried out
4
00:00:08,970 --> 00:00:11,660
during the different phases of the softer lifecycle, is a
5
00:00:11,660 --> 00:00:14,960
very important task. The documents that we produce are used
6
00:00:14,960 --> 00:00:18,270
for different purposes, such as communicative details of the software
7
00:00:18,270 --> 00:00:21,650
systems. To difference the colors, ensure the correct implementation of
8
00:00:21,650 --> 00:00:25,630
the system, facilitate maintenance, and so on. There are standardized
9
00:00:25,630 --> 00:00:29,230
document that are provided by IEEE that you can use
10
00:00:29,230 --> 00:00:32,680
for this purpose. However, they're kind of heavyweight. So for the
11
00:00:32,680 --> 00:00:35,090
project in this class, when we will need them, I will
12
00:00:35,090 --> 00:00:38,760
rather use this lightweight documents. That we created by modifying the
13
00:00:38,760 --> 00:00:41,730
original ones, and make them a little simpler. In this,
14
00:00:41,730 --> 00:00:44,700
our documents are actually used, while teaching this class in the
15
00:00:44,700 --> 00:00:47,600
past. So they're well tested and work well for the kind
16
00:00:47,600 --> 00:00:50,730
of projects that we will perform. I provide information on how
17
00:00:50,730 --> 00:00:52,880
to access these documents in the class notes.

View File

@ -1,163 +0,0 @@
1
00:00:00,120 --> 00:00:02,000
Now we get to the final part of the lesson.
2
00:00:02,000 --> 00:00:04,810
And in this part I want to talk about well known,
3
00:00:04,810 --> 00:00:09,230
ineffective development practices. These practices, when followed, tend to lead
4
00:00:09,230 --> 00:00:13,245
to predictably bad results. So let's look at some examples of
5
00:00:13,245 --> 00:00:17,130
these classic mistakes. And we're going to start with mistakes
6
00:00:17,130 --> 00:00:20,660
involving people. And notice that there is a long list. So
7
00:00:20,660 --> 00:00:23,100
I'm going to discuss just a few of those mistakes.
8
00:00:23,100 --> 00:00:25,215
And I'm going to point you to more information on this
9
00:00:25,215 --> 00:00:27,550
topic in the class notes. And some of these mistakes are
10
00:00:27,550 --> 00:00:30,020
actually kind of entertaining. So I'll recommend that you look at
11
00:00:30,020 --> 00:00:33,210
the class notes and go in more depth in this list.
12
00:00:33,210 --> 00:00:35,550
So the first people mistake I want to mention is the
13
00:00:35,550 --> 00:00:38,945
one that I define, heroics. And this refers to too much
14
00:00:38,945 --> 00:00:43,480
emphasis on can do attitudes, so this idea that one person
15
00:00:43,480 --> 00:00:46,330
by himself or by herself can do everything and can make
16
00:00:46,330 --> 00:00:50,422
the difference in the whole project. And unfortunately, this encourages extreme
17
00:00:50,422 --> 00:00:53,950
risk taking and discourages cooperation, which is plain bad for
18
00:00:53,950 --> 00:00:56,610
the project. For example, it might force people not to
19
00:00:56,610 --> 00:00:59,600
report schedule slips. It might force people to take on
20
00:00:59,600 --> 00:01:02,210
on too much responsibility. And normally, and I saw it
21
00:01:02,210 --> 00:01:05,600
happen many times, the final result is a failure. So
22
00:01:05,600 --> 00:01:08,410
what you want when you're developing a larger project, is
23
00:01:08,410 --> 00:01:11,710
actually to apply soft engineering principles. Have teams, have team
24
00:01:11,710 --> 00:01:15,580
work, and have cooperation among the different team members, without pointing
25
00:01:15,580 --> 00:01:18,830
too much on single individuals. Another classic mistake
26
00:01:18,830 --> 00:01:22,140
is to not create the right working environment. We
27
00:01:22,140 --> 00:01:24,900
all like to work in nice environments. And there
28
00:01:24,900 --> 00:01:27,790
is strong evidence that the working environments can play
29
00:01:27,790 --> 00:01:30,670
a big role in productivity. There is evidence
30
00:01:30,670 --> 00:01:34,280
that productivity increases when the workplace is nice, quiet,
31
00:01:34,280 --> 00:01:37,950
warm, and welcoming. Finally, some of the most important
32
00:01:37,950 --> 00:01:41,480
people relating mistakes are due to poor people management.
33
00:01:41,480 --> 00:01:44,540
For example, lack of leaderships, or leadership that is
34
00:01:44,540 --> 00:01:47,920
exercised using the wrong means in the wrong way, which
35
00:01:47,920 --> 00:01:50,280
can lead to very unhappy personnel and therefore, low
36
00:01:50,280 --> 00:01:54,190
productivity, or even people leaving teams. Another classic example of
37
00:01:54,190 --> 00:01:57,370
poor management is adding people to a project that
38
00:01:57,370 --> 00:02:01,600
is behind schedule, which never works. Why it doesn't work?
39
00:02:01,600 --> 00:02:03,440
Because these new people need to be brought up to
40
00:02:03,440 --> 00:02:06,520
speed, and that causes further delays rather than improving the
41
00:02:06,520 --> 00:02:08,280
situation with the project schedule.

View File

@ -1,79 +0,0 @@
1
00:00:00,080 --> 00:00:03,770
Another type of classic mistakes are process-related mistakes. And also
2
00:00:03,770 --> 00:00:05,850
in this case, these kind of mistakes can be due
3
00:00:05,850 --> 00:00:08,970
to many reasons. And they are of many types. One
4
00:00:08,970 --> 00:00:12,310
typical example are scheduling issues, which are due to the fact
5
00:00:12,310 --> 00:00:15,180
of being unable to come up with a realistic schedule.
6
00:00:15,180 --> 00:00:17,750
So to have an overly optimistic schedule. And this can be
7
00:00:17,750 --> 00:00:21,230
because we underestimate the effort involved in different parts of
8
00:00:21,230 --> 00:00:25,010
the project. Because we overestimate the ability of the people involved.
9
00:00:25,010 --> 00:00:27,600
Because we overestimate the importance, for example, of the use
10
00:00:27,600 --> 00:00:29,640
of tools. But no matter what the reason is, the
11
00:00:29,640 --> 00:00:32,840
result is typically that the projects end up being late,
12
00:00:32,840 --> 00:00:35,580
which is a very common situation. So this is somehow
13
00:00:35,580 --> 00:00:39,020
related to planning. And in general, planning is a fundamental
14
00:00:39,020 --> 00:00:42,720
factor in software processes and in software development. Mistakes in
15
00:00:42,720 --> 00:00:46,120
planning, such as insufficient planning or abandoning planning due to
16
00:00:46,120 --> 00:00:50,190
pressure, usually lead inexorably to failure. And speaking of failures,
17
00:00:50,190 --> 00:00:53,040
often there are unforeseen failures. Such as
18
00:00:53,040 --> 00:00:55,410
failures on the constructor's end, for example,
19
00:00:55,410 --> 00:00:56,920
that might lead to low quality or
20
00:00:56,920 --> 00:01:00,580
late deliverables, which ultimately affects the downstream activities.

View File

@ -1,87 +0,0 @@
1
00:00:00,090 --> 00:00:01,970
The third category of mistakes that I want to
2
00:00:01,970 --> 00:00:04,970
mention is product-related mistakes. A
3
00:00:04,970 --> 00:00:07,360
typical example of product-related mistake
4
00:00:07,360 --> 00:00:11,010
is gold plating of requirements. And what that means is
5
00:00:11,010 --> 00:00:13,710
basically is that it's very common for projects to have
6
00:00:13,710 --> 00:00:17,230
more requirements than they actually need. For example, marketing might
7
00:00:17,230 --> 00:00:19,090
want to add more features than the ones that are
8
00:00:19,090 --> 00:00:21,460
actually needed by the users. And of course having more
9
00:00:21,460 --> 00:00:25,720
requirements lengthens the project's schedule in a totally unnecessary way.
10
00:00:25,720 --> 00:00:29,250
Feature creep is another common mistake and consists in
11
00:00:29,250 --> 00:00:32,140
adding more and more features to a product that were
12
00:00:32,140 --> 00:00:34,650
not initially planned and are not really needed in most
13
00:00:34,650 --> 00:00:38,360
cases. And here there is evidence that the average project
14
00:00:38,360 --> 00:00:41,180
experiences about a 25% growth in the number of
15
00:00:41,180 --> 00:00:44,330
features over its lifetime which can clearly highly effect The
16
00:00:44,330 --> 00:00:47,580
project schedule. Finally, if you're working on a project that
17
00:00:47,580 --> 00:00:50,760
strains the limits of computer science. For example, because you
18
00:00:50,760 --> 00:00:53,350
need to develop new algorithms for the project, or you have
19
00:00:53,350 --> 00:00:56,670
to use new techniques. Then that project might be more research than
20
00:00:56,670 --> 00:00:58,450
actual development. And therefore, it
21
00:00:58,450 --> 00:01:00,600
should be managed accordingly. For example,
22
00:01:00,600 --> 00:01:03,910
by taking into account that you will have a highly unpredictable schedule.

View File

@ -1,95 +0,0 @@
1
00:00:00,080 --> 00:00:02,360
The final type of classic mistakes that I want
2
00:00:02,360 --> 00:00:06,470
to mention are technology related mistakes. One typical mistake
3
00:00:06,470 --> 00:00:09,990
in this context is the silver-bullet syndrome. What does
4
00:00:09,990 --> 00:00:13,340
that mean? Well, the silver-bullet syndrome refers to situations
5
00:00:13,340 --> 00:00:15,900
in which there is too much reliance on the
6
00:00:15,900 --> 00:00:19,950
advertised benefits of some previously unused technology. For example,
7
00:00:19,950 --> 00:00:21,980
a new technology. And the problem here is that
8
00:00:21,980 --> 00:00:25,140
we cannot expect technology alone to solve our software
9
00:00:25,140 --> 00:00:27,810
development issues. So we should not rely too
10
00:00:27,810 --> 00:00:31,020
much on technology alone. Another typical mistake is to
11
00:00:31,020 --> 00:00:33,700
switch or add tools in the middle of
12
00:00:33,700 --> 00:00:36,010
a project. And sometimes it can make sense to
13
00:00:36,010 --> 00:00:38,620
upgrade a tool, but introducing new tools, which
14
00:00:38,620 --> 00:00:41,650
can have a steep learning curve, has almost always
15
00:00:41,650 --> 00:00:46,290
negative effects. Finally, a common unforgivable mistake is
16
00:00:46,290 --> 00:00:50,230
the lack of an automated version control system for
17
00:00:50,230 --> 00:00:53,480
your code and for your various artifacts. Manual and
18
00:00:53,480 --> 00:00:56,700
ad hoc solutions are just not an option. It is
19
00:00:56,700 --> 00:00:59,270
way too easy to make mistakes, use out of
20
00:00:59,270 --> 00:01:02,600
date versions, be unable to find a previous working version,
21
00:01:02,600 --> 00:01:05,030
and so on. I saw that happening many times,
22
00:01:05,030 --> 00:01:08,640
and it always results in a disaster. So be warned,
23
00:01:08,640 --> 00:01:11,650
use a version control system and an automated one. And
24
00:01:11,650 --> 00:01:14,750
actually we will use version control systems in our projects.

View File

@ -1,23 +0,0 @@
1
00:00:00,060 --> 00:00:01,650
To conclude this lesson, I'm going to have a
2
00:00:01,650 --> 00:00:03,650
simple quiz and what I'm going to ask you
3
00:00:03,650 --> 00:00:07,950
is, which kind of mistake adding people to a late project is? And you can pick
4
00:00:07,950 --> 00:00:10,540
between a people mistake, a product mistake, a
5
00:00:10,540 --> 00:00:12,830
technology mistake, or maybe this is not a
6
00:00:12,830 --> 00:00:16,800
mistake at all, it is actually okay to add people to a project that is late.

View File

@ -1,39 +0,0 @@
1
00:00:00,060 --> 00:00:02,719
You probably got this one right. The right answer is that
2
00:00:02,719 --> 00:00:05,330
this is a people mistake. And despite the fact that this is
3
00:00:05,330 --> 00:00:07,550
an easy answer, I just want to make sure to stress
4
00:00:07,550 --> 00:00:10,800
once more. Because this is a very classic mistake. And one that
5
00:00:10,800 --> 00:00:14,070
can have dire consequences. You should never add people, to a
6
00:00:14,070 --> 00:00:18,430
late project. Because in 99.9% of the cases, that's only going to make
7
00:00:18,430 --> 00:00:21,390
things worse. Why? Because these people have to be brought up to
8
00:00:21,390 --> 00:00:25,590
speed, and also because having more also makes the communication more difficult,
9
00:00:25,590 --> 00:00:27,690
the meetings more difficult and so on. So in
10
00:00:27,690 --> 00:00:29,980
short, do not add people to a late project.

View File

@ -1,175 +0,0 @@
1
00:00:00,230 --> 00:00:03,200
So, let's start with requirements engineering, which is the
2
00:00:03,200 --> 00:00:06,560
field within software engineering that deals with establishing the
3
00:00:06,560 --> 00:00:09,400
needs of stakeholders that are to be solved by
4
00:00:09,400 --> 00:00:13,480
the software. So why is this phase so important?
5
00:00:13,480 --> 00:00:16,350
In general, the cost of correcting an error depends
6
00:00:16,350 --> 00:00:19,060
on the number of subsequent decisions that are based
7
00:00:19,060 --> 00:00:22,160
on it. Therefore, errors made in understanding requirements have
8
00:00:22,160 --> 00:00:25,670
the potential for greatest cost because many other design decisions
9
00:00:25,670 --> 00:00:29,020
depend on them and many other follow up decisions depend on them.
10
00:00:29,020 --> 00:00:31,510
In fact, if we look at this diagram, which is again a
11
00:00:31,510 --> 00:00:35,210
qualitative diagram, where we have the cost of error correction over the
12
00:00:35,210 --> 00:00:38,780
phase in which the error is discovered. We can see that if we
13
00:00:38,780 --> 00:00:42,420
discover an error in requirements it's going to cost us one. If
14
00:00:42,420 --> 00:00:45,020
we find it in in design it's going to cost us five and
15
00:00:45,020 --> 00:00:47,410
so on and so forth. And the cost grows dramatically as we
16
00:00:47,410 --> 00:00:50,960
go from the requirements phase to the maintenance phase. Why? Because of course
17
00:00:50,960 --> 00:00:53,092
if we discover a problem here we're left to undo a
18
00:00:53,092 --> 00:00:55,536
lot of the decision that we had made before to correct the
19
00:00:55,536 --> 00:00:58,019
error. Whereas if we find an error here we can correct it
20
00:00:58,019 --> 00:01:01,380
right away and we don't affect the subsequent phases. So how can
21
00:01:01,380 --> 00:01:03,540
we collect the right requirements. Traditional
22
00:01:03,540 --> 00:01:05,310
requirements in engineering does so through
23
00:01:05,310 --> 00:01:08,930
a set of steps. The first step is elicitation which is the
24
00:01:08,930 --> 00:01:12,840
collection of requirements from stake holders and other sources and can be
25
00:01:12,840 --> 00:01:15,890
done in a variety of ways, we will discuss some of them.
26
00:01:15,890 --> 00:01:19,280
The second is requirement analysis which involved the study and
27
00:01:19,280 --> 00:01:23,200
deeper understanding of the collective requirements. The third step is this
28
00:01:23,200 --> 00:01:26,760
specification of requirements, in which the collective requirements are suitably
29
00:01:26,760 --> 00:01:30,730
represented, organized and save so that they can be shared. Also
30
00:01:30,730 --> 00:01:32,530
in his case, there are many ways to do this,
31
00:01:32,530 --> 00:01:34,350
and we will see some of this ways when we talk
32
00:01:34,350 --> 00:01:37,550
about the requirements engineering in the dedicated lesson. Once the
33
00:01:37,550 --> 00:01:40,970
requirements have been specified, they can be validated to make sure
34
00:01:40,970 --> 00:01:44,420
that they're complete, consistent, no redundant and so on. So
35
00:01:44,420 --> 00:01:48,460
that they've satisfied a set of importance properties, for requirements.
36
00:01:48,460 --> 00:01:52,410
Finally, the fifth step is requirements management which accounts for
37
00:01:52,410 --> 00:01:56,100
changes to requirements during the lifetime of the project. And here
38
00:01:56,100 --> 00:01:58,330
I talked about steps, kind of giving the impression that
39
00:01:58,330 --> 00:02:01,310
we're just going from the first step to the fifth one
40
00:02:01,310 --> 00:02:03,300
and that this is sort of a linear process. In
41
00:02:03,300 --> 00:02:05,990
reality, as we will see, this is more of an iterative
42
00:02:05,990 --> 00:02:09,690
process in which will go and cover the different phases in an
43
00:02:09,690 --> 00:02:12,560
iterative fashion. We will discuss extensively
44
00:02:12,560 --> 00:02:15,453
requirements engineering in our second mini-course.

View File

@ -1,103 +0,0 @@
1
00:00:00,290 --> 00:00:02,900
Now let's discuss the next phase of software development,
2
00:00:02,900 --> 00:00:06,080
which is software design. Software design is the phase
3
00:00:06,080 --> 00:00:09,030
where software requirements are analyzed in order to produce
4
00:00:09,030 --> 00:00:11,500
a description of the internal structure and organization of
5
00:00:11,500 --> 00:00:13,900
the system. And this description will serve as the
6
00:00:13,900 --> 00:00:17,550
basis for the construction of the actual system. Traditionally,
7
00:00:17,550 --> 00:00:20,020
the software design phase consists of a series of
8
00:00:20,020 --> 00:00:25,360
design activities. Which normally consists of the architectural design phase,
9
00:00:25,360 --> 00:00:27,880
the abstract specification, interface design,
10
00:00:27,880 --> 00:00:30,010
component design, data structure and
11
00:00:30,010 --> 00:00:33,230
algorithm design. And notice that this is just a possible list
12
00:00:33,230 --> 00:00:35,820
of activities. But you can also characterize design activities in
13
00:00:35,820 --> 00:00:38,550
many different ways. And if you're looking at different books, and
14
00:00:38,550 --> 00:00:41,800
different sources, you might find different activities described. But the
15
00:00:41,800 --> 00:00:44,500
core idea, the important point is that we go from sort
16
00:00:44,500 --> 00:00:46,940
of a high-level view of the system, which is the
17
00:00:46,940 --> 00:00:50,770
architectural design, to a low-level view, which is the algorithm design.
18
00:00:50,770 --> 00:00:53,100
And these activities result in a set of design
19
00:00:53,100 --> 00:00:56,810
products, which describe various characteristics of the system. For
20
00:00:56,810 --> 00:00:59,770
example, they describe the architecture of the system, so
21
00:00:59,770 --> 00:01:02,890
how the system is decomposed and organized into components, the
22
00:01:02,890 --> 00:01:06,630
interfaces between these components. They also describe these components
23
00:01:06,630 --> 00:01:09,030
into a level of details that is suitable for
24
00:01:09,030 --> 00:01:12,470
allowing their construction. We will discuss the details of
25
00:01:12,470 --> 00:01:16,130
software design and talk extensively about these different actives and
26
00:01:16,130 --> 00:01:19,200
these different products in the third mini course of this class.

View File

@ -1,103 +0,0 @@
1
00:00:00,150 --> 00:00:02,719
After we have designed our system we can implement
2
00:00:02,719 --> 00:00:05,900
it. In the implementation phase what we do is basically
3
00:00:05,900 --> 00:00:08,410
taking care of realizing the design of the system
4
00:00:08,410 --> 00:00:11,920
that we just created and create an actual software system.
5
00:00:11,920 --> 00:00:15,530
There are four fundamental principles, four pillars that can
6
00:00:15,530 --> 00:00:18,470
affect the way in which software is constructed. The first
7
00:00:18,470 --> 00:00:21,900
one is the reduction of complexity. This aims to build
8
00:00:21,900 --> 00:00:25,160
software that is easier to understand and use. The second
9
00:00:25,160 --> 00:00:28,400
pillar is the anticipation of diversity. Which takes into
10
00:00:28,400 --> 00:00:31,720
account that software construction might change in various way over
11
00:00:31,720 --> 00:00:35,220
time. That is that software evolves. In many cases,
12
00:00:35,220 --> 00:00:38,270
it evolves in unexpected ways. And therefore, we have to
13
00:00:38,270 --> 00:00:41,680
be able to anticipate some of these changes. The
14
00:00:41,680 --> 00:00:45,390
third pillar is the structuring for validation. Also called design
15
00:00:45,390 --> 00:00:47,550
for testability. And what this means is that we
16
00:00:47,550 --> 00:00:50,760
want to build software so that it is easily testable
17
00:00:50,760 --> 00:00:54,890
during the subsequent validation and verification activities. Finally, and
18
00:00:54,890 --> 00:00:58,040
this is especially true within specific organizations and or
19
00:00:58,040 --> 00:01:00,770
domains. It is important that the software conforms to
20
00:01:00,770 --> 00:01:04,330
a set of internal or external standards. And some examples
21
00:01:04,330 --> 00:01:06,730
of this might be, for example, for internal standards,
22
00:01:06,730 --> 00:01:10,680
coding standards within an organization, or naming standards within an
23
00:01:10,680 --> 00:01:13,320
organization. As for external standards, if for example you
24
00:01:13,320 --> 00:01:15,780
are developing some medical software. There are some regulations and
25
00:01:15,780 --> 00:01:17,930
some standards that you have to adhere to in
26
00:01:17,930 --> 00:01:20,060
order for your software to be valid in that domain.

View File

@ -1,123 +0,0 @@
1
00:00:00,120 --> 00:00:03,550
After we have built our system, verification and validation
2
00:00:03,550 --> 00:00:05,970
is that phase of software development that aims to
3
00:00:05,970 --> 00:00:09,000
check that the software system meets its specification and
4
00:00:09,000 --> 00:00:12,800
fulfills its intended purpose. More precisely, we can look
5
00:00:12,800 --> 00:00:16,250
at verification and validation independently. And validation is the
6
00:00:16,250 --> 00:00:19,100
activity that answers the question did we build the
7
00:00:19,100 --> 00:00:21,420
right system. Did we build the system that the
8
00:00:21,420 --> 00:00:26,030
customer wants? That will make the customer happy. Whereas verification
9
00:00:26,030 --> 00:00:28,730
answers a different question which is did we build the system
10
00:00:28,730 --> 00:00:31,410
right. So given a description of the system that is the one
11
00:00:31,410 --> 00:00:34,280
that we derived from the customer through the collection of requirements
12
00:00:34,280 --> 00:00:37,130
and then design and so on, did we build a system that
13
00:00:37,130 --> 00:00:41,150
actually implements the specification that we defined? And when we look
14
00:00:41,150 --> 00:00:44,600
at verification there's many, many ways of doing verification and in fact
15
00:00:44,600 --> 00:00:48,430
in the mini course number four we will cover verification extensively. The
16
00:00:48,430 --> 00:00:51,100
only thing I want to mention here is the fact that verification
17
00:00:51,100 --> 00:00:54,110
can be performed at different levels. In particular, it can be
18
00:00:54,110 --> 00:00:57,810
performed at the unit level in which we test that the individual
19
00:00:57,810 --> 00:01:01,520
units work as a expected. Can be performed in the integration level
20
00:01:01,520 --> 00:01:05,525
in which what we test is the interaction between the different units.
21
00:01:05,525 --> 00:01:07,630
So we want to make sure that the different modules talk
22
00:01:07,630 --> 00:01:10,720
to each other in the right way. And finally, there is system
23
00:01:10,720 --> 00:01:13,440
testing in which we test the system as a whole and we
24
00:01:13,440 --> 00:01:16,170
want to make sure that all the system, all the different pieces
25
00:01:16,170 --> 00:01:18,010
of the system work together in the right
26
00:01:18,010 --> 00:01:20,160
way. And this is also the level at which
27
00:01:20,160 --> 00:01:22,360
then we will apply validation and some other
28
00:01:22,360 --> 00:01:25,770
testing techniques like stress testing or robustness testing and
29
00:01:25,770 --> 00:01:29,890
so on. And as I said I'm not going to say anything more on this topic because
30
00:01:29,890 --> 00:01:32,760
we will cover verification, and validation, and testing in
31
00:01:32,760 --> 00:01:35,667
particular in great details in mini course number four.

View File

@ -1,167 +0,0 @@
1
00:00:00,012 --> 00:00:03,482
As we discussed before software development efforts normally result
2
00:00:03,482 --> 00:00:06,127
in the delivery of a software product that satisfies
3
00:00:06,127 --> 00:00:09,879
the user requirements. So normally our software development organization
4
00:00:09,879 --> 00:00:13,127
will release this application to its final users, however, once
5
00:00:13,127 --> 00:00:16,090
the software is in operation many things can happen.
6
00:00:16,090 --> 00:00:18,950
So, for example, the environment might change. There might be
7
00:00:18,950 --> 00:00:21,940
new libraries. There might be new systems in which
8
00:00:21,940 --> 00:00:25,070
our software has to operate. Or they may be future
9
00:00:25,070 --> 00:00:27,950
requests, so the users may find out that, guess what,
10
00:00:27,950 --> 00:00:30,370
they want to do something different with the problem that
11
00:00:30,370 --> 00:00:32,835
we gave them. Or, again, and this is one of
12
00:00:32,835 --> 00:00:35,970
the most common occurrences, users might find problems with the
13
00:00:35,970 --> 00:00:38,307
software and may file bug reports and send the bug
14
00:00:38,307 --> 00:00:42,090
reports back to the software developer. These are the reasons
15
00:00:42,090 --> 00:00:46,420
why software maintenance is a necessary phase in software development.
16
00:00:46,420 --> 00:00:50,190
Software maintenance is the activity that sustains the software product
17
00:00:50,190 --> 00:00:53,780
as it evolves throughout its life cycle, specifically
18
00:00:53,780 --> 00:00:57,350
in response to bug reports, feature requests and
19
00:00:57,350 --> 00:01:00,890
environment changes. Development organisations perform three kinds of
20
00:01:00,890 --> 00:01:04,450
maintenance activities: corrective maintenance to eliminate problems with the
21
00:01:04,450 --> 00:01:07,740
code, perfective maintenance to accommodate feature request, and
22
00:01:07,740 --> 00:01:09,730
in some cases just to improve the software, for
23
00:01:09,730 --> 00:01:12,230
example, to make it more efficient, and finally,
24
00:01:12,230 --> 00:01:15,650
adaptive maintenance, to take care of the environment changes.
25
00:01:15,650 --> 00:01:18,470
And after this activities have been performed, the software developer
26
00:01:18,470 --> 00:01:21,540
will produce a new version of the application, will release it
27
00:01:21,540 --> 00:01:24,150
and the cycle will continue through out the lifetime of
28
00:01:24,150 --> 00:01:27,440
the software. That's why maintenance is a fundamental activity and a
29
00:01:27,440 --> 00:01:30,420
very expensive one. And one of the reasons why maintenance
30
00:01:30,420 --> 00:01:34,080
is expensive, that I want to mention now, is regression testing.
31
00:01:34,080 --> 00:01:37,180
During maintenance every time you modify your application you have
32
00:01:37,180 --> 00:01:41,120
to regression test the application, where regression testing is the activity
33
00:01:41,120 --> 00:01:44,010
of retesting software after it has been modified to make sure
34
00:01:44,010 --> 00:01:47,320
that the changes you perform to the software work as expected,
35
00:01:47,320 --> 00:01:51,540
and that your changes did not introduce any unforseen effect. I'm
36
00:01:51,540 --> 00:01:53,630
pretty sure that you're familiar with the case of a new
37
00:01:53,630 --> 00:01:56,000
version of the software being released and just a couple of
38
00:01:56,000 --> 00:01:59,260
days later another version being released to fix some problems that
39
00:01:59,260 --> 00:02:02,000
occor with the new version. These problems is what we call
40
00:02:02,000 --> 00:02:04,640
regression errors and they're what regression
41
00:02:04,640 --> 00:02:06,560
testing targets and tries to eliminate
42
00:02:06,560 --> 00:02:09,240
before the new version of the software is released into the world.

View File

@ -1,47 +0,0 @@
1
00:00:00,070 --> 00:00:02,590
Okay. Now before we jump into the next
2
00:00:02,590 --> 00:00:04,780
topic, I just want to take a very quick and
3
00:00:04,780 --> 00:00:06,630
simple quiz just to make sure that you
4
00:00:06,630 --> 00:00:09,236
guys paid attention to what I just discussed. So
5
00:00:09,236 --> 00:00:10,820
I want to ask you what are the traditional
6
00:00:10,820 --> 00:00:13,200
software phases. Requirements engineering,
7
00:00:13,200 --> 00:00:16,079
design, abstraction, implementation, verification and
8
00:00:16,079 --> 00:00:18,020
validation. Or maybe design,
9
00:00:18,020 --> 00:00:20,830
optimization, implementation verification and validation
10
00:00:20,830 --> 00:00:22,448
and maintenance. Or requirements
11
00:00:22,448 --> 00:00:24,892
engineering, design, implementation, verification and
12
00:00:24,892 --> 00:00:26,290
validation, and maintenance.

View File

@ -1,15 +0,0 @@
1
00:00:00,190 --> 00:00:04,000
And the answer is the third one. The traditional software phases which are the
2
00:00:04,000 --> 00:00:05,960
ones that we just discussed are requirements
3
00:00:05,960 --> 00:00:08,820
engineering, design, implementation, verification
4
00:00:08,820 --> 00:00:10,630
and validation, and maintenance.

View File

@ -1,39 +0,0 @@
1
00:00:00,650 --> 00:00:07,470
Hi, and welcome to the first of several lessons on tools of the trade. I'm
2
00:00:07,470 --> 00:00:12,200
very excited about these lessons, because I believe that tools are a cornerstone
3
00:00:12,200 --> 00:00:14,390
of the software engineering discipline, and it
4
00:00:14,390 --> 00:00:17,570
is of paramount importance to know and
5
00:00:17,570 --> 00:00:20,330
use them. In this lesson, we will
6
00:00:20,330 --> 00:00:25,530
talk about integrated development environments, normally called IDEs.
7
00:00:25,530 --> 00:00:29,780
And these are software applications that support developers in many of their
8
00:00:29,780 --> 00:00:36,870
everyday tasks, such as writing, compiling, and debugging code. And to make the
9
00:00:36,870 --> 00:00:42,470
discussion more concrete we will focus on a specific IDE, Eclipse. We will
10
00:00:42,470 --> 00:00:47,250
first present Eclipse, and then get some hands-on experience through a demo.

View File

@ -1,91 +0,0 @@
1
00:00:00,160 --> 00:00:02,750
As I just told you, tools are fundamental in
2
00:00:02,750 --> 00:00:06,050
software engineering. And I will stress this concept over and
3
00:00:06,050 --> 00:00:08,240
over, throughout the class. And today we're going to talk
4
00:00:08,240 --> 00:00:11,310
about a tool that is especially important, which is integrated
5
00:00:11,310 --> 00:00:15,060
development environments, or IDEs. And you're probably familiar with
6
00:00:15,060 --> 00:00:18,060
IDEs. So IDEs are environments that give you support for
7
00:00:18,060 --> 00:00:21,580
your development activities. For example, for writing code, editing code,
8
00:00:21,580 --> 00:00:25,320
compiling code, and so on. And we will focus specifically
9
00:00:25,320 --> 00:00:28,890
on one particular IDE, which is called Eclipse. And
10
00:00:28,890 --> 00:00:31,450
what I'm showing here is the two splash screens for
11
00:00:31,450 --> 00:00:35,350
two versions of eclipse, Helios and Kepler. Eclipse is an
12
00:00:35,350 --> 00:00:39,200
open, extensible development environment that was initially created by IBM
13
00:00:39,200 --> 00:00:41,510
and is now managed by the Eclipse Foundation. And of
14
00:00:41,510 --> 00:00:43,840
course, there are many other great IDEs such as for
15
00:00:43,840 --> 00:00:47,310
example, Microsoft Visual Studio or Netbeans. We will be using
16
00:00:47,310 --> 00:00:50,830
Eclipse because it is open and because it is multi-platform,
17
00:00:50,830 --> 00:00:52,390
which means that you can use Eclipse
18
00:00:52,390 --> 00:00:55,140
no matter what operating system we're using.
19
00:00:55,140 --> 00:00:59,030
So if we consider the most commonly used operating system, such as Mac
20
00:00:59,030 --> 00:01:02,780
OS, Windows, Linux, Eclipse runs on any
21
00:01:02,780 --> 00:01:04,769
of these environments. Therefore, no matter what
22
00:01:04,769 --> 00:01:06,490
you're using, you'll be able to install
23
00:01:06,490 --> 00:01:08,560
Eclipse, run Eclipse, and follow the class.

View File

@ -1,143 +0,0 @@
1
00:00:00,130 --> 00:00:05,680
So, now let's look in a little more detail to what is an IDE. An IDE is a
2
00:00:05,680 --> 00:00:09,790
software application that supports software developers in many of
3
00:00:09,790 --> 00:00:13,840
their everyday tasks. It has many useful features. Most IDEs
4
00:00:13,840 --> 00:00:16,790
provide views that can be used to navigate, project
5
00:00:16,790 --> 00:00:20,140
resources from different perspectives. For example, you might want to
6
00:00:20,140 --> 00:00:22,390
look at your code differently when you're writing code,
7
00:00:22,390 --> 00:00:25,950
and when you're debugging. They also normally provide an intelligent
8
00:00:25,950 --> 00:00:29,380
source code editor. For example, an editor that will allow you
9
00:00:29,380 --> 00:00:32,110
to browse the documentation when you're writing a code that
10
00:00:32,110 --> 00:00:35,780
uses a specific method, or that will give you autocompletion when
11
00:00:35,780 --> 00:00:37,990
you start writing the name of an object and you want to
12
00:00:37,990 --> 00:00:40,820
get the methods for that object. And all of these things
13
00:00:40,820 --> 00:00:43,420
can be very useful while you're developing and can save you a
14
00:00:43,420 --> 00:00:47,750
lot of time. Modern IDE's will also normally give you support for
15
00:00:47,750 --> 00:00:49,540
version control systems that then you
16
00:00:49,540 --> 00:00:52,490
can use for softer configuration management.
17
00:00:52,490 --> 00:00:55,720
And we're going to discuss in detail version control systems in
18
00:00:55,720 --> 00:00:58,380
the next tools of the trade lesson, and we're also
19
00:00:58,380 --> 00:01:01,135
going to see how it can be integrated within an IDE.
20
00:01:01,135 --> 00:01:04,730
IDEs also give you builders so they give you build automation
21
00:01:04,730 --> 00:01:08,070
tools, they give you runtime support. So that you can
22
00:01:08,070 --> 00:01:10,960
run your projects from within the IDE and, for example,
23
00:01:10,960 --> 00:01:14,550
observe some aspects of the execution. In addition to giving
24
00:01:14,550 --> 00:01:17,562
you support for the runtime, they give you support for testing.
25
00:01:17,562 --> 00:01:21,267
Many IDEs allow you to run tests from within
26
00:01:21,267 --> 00:01:23,520
the IDE and to check the results of the tests
27
00:01:23,520 --> 00:01:26,300
from within the IDE. Not only that. Normally, after you
28
00:01:26,300 --> 00:01:28,210
run your tests, if there are some test cases that
29
00:01:28,210 --> 00:01:31,500
fail, you can also use your IDEs to do debugging.
30
00:01:31,500 --> 00:01:35,620
Many IDEs include graphical debuggers. Debuggers will allow you to
31
00:01:35,620 --> 00:01:39,400
navigate through the code, set which points, stop and restart
32
00:01:39,400 --> 00:01:43,160
the execution. Inspect variables, and do all of the activities
33
00:01:43,160 --> 00:01:46,320
that help debugging. And, to help you be more efficient
34
00:01:46,320 --> 00:01:49,440
and more effective when you do debugging. And into addition to
35
00:01:49,440 --> 00:01:52,760
all these features that are listed here IDEs can normally provide
36
00:01:52,760 --> 00:01:56,650
you even more features through a mechanishm that is called plugins.

View File

@ -1,99 +0,0 @@
1
00:00:00,110 --> 00:00:03,134
In fact most IDEs are extensible through the use of
2
00:00:03,134 --> 00:00:06,158
plug-ins. And by the way, note that plug-ins might be
3
00:00:06,158 --> 00:00:09,326
called differently on different platforms. For example, if you're using
4
00:00:09,326 --> 00:00:12,970
a Microsoft Visual Studio, plug-ins are normally called add-ins, but
5
00:00:12,970 --> 00:00:15,598
the concept is more or less the same. So, what
6
00:00:15,598 --> 00:00:18,555
is a plug-in? Well, let's imagine our IDE to be
7
00:00:18,555 --> 00:00:22,320
this box. A plug-in is additional functionality that you can
8
00:00:22,320 --> 00:00:25,430
actually plug into this box so that this box starts
9
00:00:25,430 --> 00:00:28,830
offering more features to the user. For example, you
10
00:00:28,830 --> 00:00:32,850
can add to Eclipse the Checkstyle plug-in. Which, paraphrasing the
11
00:00:32,850 --> 00:00:35,950
Checkstyle website, helps you ensure that your Java code
12
00:00:35,950 --> 00:00:38,890
complies with a set of coding standards by inspecting the
13
00:00:38,890 --> 00:00:41,690
code and pointing out items that deviate from a
14
00:00:41,690 --> 00:00:44,870
defined set of coding rules. Again, this is a functionality
15
00:00:44,870 --> 00:00:47,330
the core of Eclipse doesn't have. You can add
16
00:00:47,330 --> 00:00:50,600
the Checkstyle plug-in, and this functionality will become available in
17
00:00:50,600 --> 00:00:54,840
the IDE. Another example of plug-in is the EGit plug-in which
18
00:00:54,840 --> 00:00:58,660
adds support for the Git version control system in Eclipse. And
19
00:00:58,660 --> 00:01:01,290
actually this is something that we'll cover in detail, we'll have
20
00:01:01,290 --> 00:01:04,150
a demo, and we will actually use it throughout the class, so
21
00:01:04,150 --> 00:01:07,018
I'm not going to say anything more about the EGit plug-in for
22
00:01:07,018 --> 00:01:09,300
now. But again, what the plug-in will do is to add
23
00:01:09,300 --> 00:01:13,220
the Git functionality to Eclipse. A functionality that is not in
24
00:01:13,220 --> 00:01:16,110
the core of Eclipse and that is available to the user after
25
00:01:16,110 --> 00:01:17,181
you add the plug-in.

View File

@ -1,323 +0,0 @@
1
00:00:00,070 --> 00:00:02,550
In the rest of this lesson we're going to look at eclipse and
2
00:00:02,550 --> 00:00:05,290
try to get more familiar with eclipse in a hands on manner
3
00:00:05,290 --> 00:00:07,550
through a demo. In the demo we will cover some of the
4
00:00:07,550 --> 00:00:11,040
basic aspects of eclipse like how to run eclipse, how to select
5
00:00:11,040 --> 00:00:14,400
their workspace, how to create a project, how to create the class
6
00:00:14,400 --> 00:00:18,240
within the project and so on. I'll also cover some more advanced
7
00:00:18,240 --> 00:00:21,610
aspects, like how to create builders, run your project within Eclipse, and
8
00:00:21,610 --> 00:00:25,800
how to use their Eclipse debugger. So let's get to the demo.
9
00:00:25,800 --> 00:00:28,220
So let's start Eclipse. Eclipse is going to ask me
10
00:00:28,220 --> 00:00:31,600
for the location of my workspace and in this
11
00:00:31,600 --> 00:00:34,530
case, I selected a suitable directory and you can
12
00:00:34,530 --> 00:00:38,480
also use that checkbox on the left to avoid Eclipse
13
00:00:38,480 --> 00:00:40,640
for asking you again about where to put the
14
00:00:40,640 --> 00:00:43,860
workspace. And the workspace is basically the place the
15
00:00:43,860 --> 00:00:48,310
directory. Where, Eclipse will place all of your projects.
16
00:00:48,310 --> 00:00:50,830
So, now when you start Eclipse, if it's the first
17
00:00:50,830 --> 00:00:53,480
time you might get this Welcome screen. It's not going to happen
18
00:00:53,480 --> 00:00:57,500
again on subsequent executions, but I just wanted to make sure
19
00:00:57,500 --> 00:01:00,210
that I covered all the bases. And so, whatcha want to
20
00:01:00,210 --> 00:01:03,360
do here is to basically go to the java perspective
21
00:01:03,360 --> 00:01:06,760
which you can do by clicking over there or you can
22
00:01:06,760 --> 00:01:09,240
also use the menus. So in this case we will have
23
00:01:09,240 --> 00:01:12,810
to go to Window, open Perspective, and if the Perspective is
24
00:01:12,810 --> 00:01:15,660
not here, you'll have to click on Other. And at this point,
25
00:01:15,660 --> 00:01:18,030
that you can click on Java Perspective, then you
26
00:01:18,030 --> 00:01:21,680
click okay. And the perspective is basically, the visual work
27
00:01:21,680 --> 00:01:24,810
space where you will be operating. So, after we selected
28
00:01:24,810 --> 00:01:29,350
perspective, we can actually close the welcome screen. And here,
29
00:01:29,350 --> 00:01:32,000
you see that you have this different areas and on
30
00:01:32,000 --> 00:01:34,930
the left You have the package explorer. This is the
31
00:01:34,930 --> 00:01:37,650
area where your packages will be, you've got a task list,
32
00:01:37,650 --> 00:01:41,280
and an outline on the right which we'll cover later.
33
00:01:41,280 --> 00:01:44,870
And then you have underneath, the bottom, a problems, java
34
00:01:44,870 --> 00:01:48,330
doc and declaration views and we will see some of
35
00:01:48,330 --> 00:01:51,320
these views in actions later. And here in the center
36
00:01:51,320 --> 00:01:54,290
you have the area. Which is called a code editor,
37
00:01:54,290 --> 00:01:58,360
which is where you'll be writing, editing, and modifying, basically,
38
00:01:58,360 --> 00:02:00,440
your code. This is where most of the action takes
39
00:02:00,440 --> 00:02:03,140
place. So let's start by creating a Java project. And
40
00:02:03,140 --> 00:02:06,950
to do that we can use either the context menu, or
41
00:02:06,950 --> 00:02:09,560
you can just use the menu, select new Java project.
42
00:02:09,560 --> 00:02:12,390
You'll be greeted by this, wizard, and. And at this
43
00:02:12,390 --> 00:02:15,500
point in the wizard, you can select the name of
44
00:02:15,500 --> 00:02:19,100
your project. I'm just going to call it a very simple way
45
00:02:19,100 --> 00:02:21,990
my project. And I going to use the default location for
46
00:02:21,990 --> 00:02:24,070
the project, as you can see it will be placed
47
00:02:24,070 --> 00:02:27,440
in the work space that I selected before. I'm going to
48
00:02:27,440 --> 00:02:32,080
also use the default. Java Runtime Environment, which is Java 1.7
49
00:02:32,080 --> 00:02:36,250
in this case. I'm going to keep the selected default layout
50
00:02:36,250 --> 00:02:39,120
and the, then I'm going to go to the next step. Here,
51
00:02:39,120 --> 00:02:42,380
we're first presented with the location of the source code for
52
00:02:42,380 --> 00:02:46,840
our project. The default is a directory SRC in my project
53
00:02:46,840 --> 00:02:49,320
and for the output file, the directory bin. So repeat, we're now
54
00:02:49,320 --> 00:02:52,410
going to change that. Here in case you need other projects to
55
00:02:52,410 --> 00:02:55,240
build your own, then you can specify them here. Here we
56
00:02:55,240 --> 00:02:57,570
are building a simple project, so there's no need for that.
57
00:02:57,570 --> 00:03:00,890
And here we can specify which libraries our project requires. As
58
00:03:00,890 --> 00:03:03,880
you can see, the Java library's already specified. And you can
59
00:03:03,880 --> 00:03:07,840
also add other jars, which can even be External jars. And
60
00:03:07,840 --> 00:03:11,840
finally this is the tab that allows you to specify which
61
00:03:11,840 --> 00:03:14,300
part of you project. So how your project will be exported,
62
00:03:14,300 --> 00:03:16,760
so lets not worry about that for now. Lets click finish.
63
00:03:16,760 --> 00:03:19,300
And as you can see here on the package explorer, my
64
00:03:19,300 --> 00:03:22,920
project appeared. So now we can open the project by clicking
65
00:03:22,920 --> 00:03:24,920
on the triangle right next to it, and as you can
66
00:03:24,920 --> 00:03:28,250
see there is the SRC directory, where my source code will go,
67
00:03:28,250 --> 00:03:31,760
and there's also an indication that we're using the JRE, so that's
68
00:03:31,760 --> 00:03:35,800
the Java system directory within our project. And this is just for people
69
00:03:35,800 --> 00:03:38,860
who are interested in what happens you know, under the hood. So
70
00:03:38,860 --> 00:03:41,840
if you don't care about that, you can just skip this part. So
71
00:03:41,840 --> 00:03:45,200
basically here I'm showing you how we can go to the directory
72
00:03:45,200 --> 00:03:49,250
where the project was created. We can see the bin and src directories.
73
00:03:49,250 --> 00:03:52,020
And there's also some other files here that you can
74
00:03:52,020 --> 00:03:54,780
see these 'dot' files that you will not normally, see. And
75
00:03:54,780 --> 00:03:57,870
those are kind of bookkeeping files. So these are files that
76
00:03:57,870 --> 00:04:02,280
contain information about your project and that are created automatically by
77
00:04:02,280 --> 00:04:05,860
Eclipse. And, for example, will have various indication about the
78
00:04:05,860 --> 00:04:09,580
configuration of the project, some settings and the class path for
79
00:04:09,580 --> 00:04:11,880
the project. And, as I said, you don't have to worry
80
00:04:11,880 --> 00:04:14,490
about this if you just want to go Eclipse as you're never
81
00:04:14,490 --> 00:04:16,551
going to mess with the command line.

View File

@ -1,135 +0,0 @@
1
00:00:00,130 --> 00:00:02,420
So now that we know, we saw what happens under
2
00:00:02,420 --> 00:00:04,570
the hood, and as I said, don't worry about it if
3
00:00:04,570 --> 00:00:06,689
you don't care about that part. Now we can go back
4
00:00:06,689 --> 00:00:09,850
to Eclipse, and we can start creating a package. A package
5
00:00:09,850 --> 00:00:13,125
is basically a way of organizing your classes into a
6
00:00:13,125 --> 00:00:17,015
hierarchy. In this case, I'm going to specify the package name as
7
00:00:17,015 --> 00:00:21,350
edu.gatech, which means that I'm creating really two packages, a package
8
00:00:21,350 --> 00:00:25,480
gatech inside package edu. And I can start creating classes inside
9
00:00:25,480 --> 00:00:28,770
my packages. So here, I can use the contextual menu, select
10
00:00:28,770 --> 00:00:32,055
New>Class, and I'll get another wizard that will allow me to
11
00:00:32,055 --> 00:00:35,160
specify the name of the class. I'm not very creative here,
12
00:00:35,160 --> 00:00:38,250
so I'm just going to call it Hello World. There's many other parameters
13
00:00:38,250 --> 00:00:41,710
you can set, and in particular, you can define whether you
14
00:00:41,710 --> 00:00:45,450
want a main method in your class. Where having a main
15
00:00:45,450 --> 00:00:48,460
method means that your class can be the main class in
16
00:00:48,460 --> 00:00:50,850
your project, can be the one that is run when you run
17
00:00:50,850 --> 00:00:54,340
your project. After we click the button, the Finish button, we,
18
00:00:54,340 --> 00:00:56,859
we get the class. So we also get template code for the
19
00:00:56,859 --> 00:00:59,604
class, as you can see here, so we go to the editor
20
00:00:59,604 --> 00:01:02,120
function, you can see that there is a to do. Where you
21
00:01:02,120 --> 00:01:05,019
have to put your code, and here we are simply, basically printing,
22
00:01:05,019 --> 00:01:08,370
you know, the typical first program. We just going to print Hello World
23
00:01:08,370 --> 00:01:11,180
in Java. And something you can note is that as we are
24
00:01:11,180 --> 00:01:16,370
typing, Eclipse gives us a auto complete suggestions, which is very helpful.
25
00:01:16,370 --> 00:01:19,650
For example, in case you don't remember the exact syntax,
26
00:01:19,650 --> 00:01:22,190
or the method, or you don't remember the parameters of the
27
00:01:22,190 --> 00:01:24,470
method. Which is, you know, often the case especially where you
28
00:01:24,470 --> 00:01:27,590
work with large libraries. So having that feature can really, really
29
00:01:27,590 --> 00:01:30,050
help you. So now if we want to run our code
30
00:01:30,050 --> 00:01:33,380
we can either click on the button up here, or we
31
00:01:33,380 --> 00:01:37,960
can right-click in the Call window and select Run As Java
32
00:01:37,960 --> 00:01:41,370
Application. And if we do that, Eclipse will run our tool,
33
00:01:41,370 --> 00:01:45,650
and it will create, as you can see here, a console view that basically contains
34
00:01:45,650 --> 00:01:49,790
the textual output of my program. And as expected, the output is Hello World.

View File

@ -1,115 +0,0 @@
1
00:00:00,140 --> 00:00:02,660
So now that we have run our program, let's see what
2
00:00:02,660 --> 00:00:05,660
happens exactly when you run a program within Eclipse. And to
3
00:00:05,660 --> 00:00:08,410
do that I'm going to use the menu over here which is
4
00:00:08,410 --> 00:00:12,500
the Run menu and I'm going to select Run Configurations, and this
5
00:00:12,500 --> 00:00:15,190
brings up a window where you can change or run configurations.
6
00:00:15,190 --> 00:00:17,200
Well first of all, you can see that here on the
7
00:00:17,200 --> 00:00:22,260
left under Java application. Eclipse automatically created a Hello World run
8
00:00:22,260 --> 00:00:25,300
configuration for our program. And this is where you can configure
9
00:00:25,300 --> 00:00:28,370
the different parameters for your execution. For example,
10
00:00:28,370 --> 00:00:30,520
you can select the main class. So here
11
00:00:30,520 --> 00:00:34,745
it's, obviously, edu.gatech.HelloWorld. You can define different program
12
00:00:34,745 --> 00:00:36,920
arguments. We don't have any for now. You can
13
00:00:36,920 --> 00:00:39,480
also pass arguments to the virtual machine. You
14
00:00:39,480 --> 00:00:41,960
can define which Java runtime environment you want to
15
00:00:41,960 --> 00:00:47,720
use, Classpath and other environmental options. So let's
16
00:00:47,720 --> 00:00:50,650
now try to pass some arguments to our program.
17
00:00:50,650 --> 00:00:54,390
So for example here, I am just going to write George as
18
00:00:54,390 --> 00:00:58,450
a possible parameter. I say Apply so that modify the configuration and
19
00:00:58,450 --> 00:01:01,510
if i run the program of course, the output is not changing
20
00:01:01,510 --> 00:01:04,440
because my program does not use the argument. But, let's see if
21
00:01:04,440 --> 00:01:07,060
we do use the argument, what happens. So I'm going to slightly
22
00:01:07,060 --> 00:01:10,030
modify the final program so that now, instead of printing hello
23
00:01:10,030 --> 00:01:13,420
world, it will print hello followed by the first argument that I
24
00:01:13,420 --> 00:01:15,700
will pass to the program. And if I do that, and I
25
00:01:15,700 --> 00:01:19,420
go and I run the program, what I get is exactly what I
26
00:01:19,420 --> 00:01:23,420
was expecting, which is Hello George. So this is the way in which you
27
00:01:23,420 --> 00:01:26,120
can pass arguments to your execution, which
28
00:01:26,120 --> 00:01:27,640
is something that might come in handy
29
00:01:27,640 --> 00:01:30,390
for some other projects. When you need to run some code with an argument.

View File

@ -1,275 +0,0 @@
1
00:00:00,160 --> 00:00:03,090
Now let's look at how we can do debugging within
2
00:00:03,090 --> 00:00:06,240
Eclipse. I created a new file called AddNumbers which I'm
3
00:00:06,240 --> 00:00:10,770
showing here. It takes two numbers, parses them into integers,
4
00:00:10,770 --> 00:00:14,870
adds them and prints the sum, supposedly, of the two numbers.
5
00:00:14,870 --> 00:00:17,450
Now we look at the run configuration for this program,
6
00:00:17,450 --> 00:00:19,670
and here you can see that we're passing two arguments,
7
00:00:19,670 --> 00:00:22,060
two and five, to the program. So now let's run
8
00:00:22,060 --> 00:00:25,468
our program and see what happens. And the result says that
9
00:00:25,468 --> 00:00:28,150
2 plus 5 is equal to 10, which is not
10
00:00:28,150 --> 00:00:31,030
exactly correct. So we need to debug our program. We
11
00:00:31,030 --> 00:00:33,310
need to figure out what's wrong with the program, why
12
00:00:33,310 --> 00:00:37,140
the wrong result was, produced. So we're going to add a break
13
00:00:37,140 --> 00:00:40,260
point here by double-clicking here on the side of the
14
00:00:40,260 --> 00:00:42,940
code. And the break point is basically a place where I'm
15
00:00:42,940 --> 00:00:46,240
telling my debugger to stop during the execution because I
16
00:00:46,240 --> 00:00:50,750
want to inspect the state of the program. So to start
17
00:00:50,750 --> 00:00:54,690
debugging, we select Debug as Java Application from the Context
18
00:00:54,690 --> 00:00:58,170
menu, similar to what we were doing for running the program.
19
00:00:58,170 --> 00:01:00,190
And as you can see, this asks us whether we want
20
00:01:00,190 --> 00:01:03,720
to pass to the debug perspective, which is a, a perspective
21
00:01:03,720 --> 00:01:07,110
specifically designed for debugging. We say yes. And as you
22
00:01:07,110 --> 00:01:10,750
see here, it shows us, it's like a different, set of
23
00:01:10,750 --> 00:01:13,310
views, so we can see the code down here with an
24
00:01:13,310 --> 00:01:16,100
indication of where the execution is. And of course the execution
25
00:01:16,100 --> 00:01:18,610
stopped at the break point, which is exactly where
26
00:01:18,610 --> 00:01:21,850
we told the debugger to stop. So let's look at
27
00:01:21,850 --> 00:01:24,400
some of the other views in this perspective. The view
28
00:01:24,400 --> 00:01:27,370
here on the right-hand side, for example, shows the variables
29
00:01:27,370 --> 00:01:30,720
in scope and the break points that are currently active
30
00:01:30,720 --> 00:01:33,240
for the debugging session. This is where the editor is
31
00:01:33,240 --> 00:01:36,710
at. The outline of the program and the console at
32
00:01:36,710 --> 00:01:41,520
the bottom. So now let's execute one line by clicking
33
00:01:41,520 --> 00:01:45,400
on the Step Over button here at the top, and this will
34
00:01:45,400 --> 00:01:49,150
execute the line that is currently highlighted and therefore it will move to
35
00:01:49,150 --> 00:01:51,500
the next line. And as you can see, one nice feature is that
36
00:01:51,500 --> 00:01:54,760
if I move the mouse over a variable, I can see the value
37
00:01:54,760 --> 00:01:57,710
of the variable. And the same thing I can do if I look
38
00:01:57,710 --> 00:02:00,690
at the variables windows here on the right. If I click it, it
39
00:02:00,690 --> 00:02:03,960
will tell me what is the value of the variable, and in case
40
00:02:03,960 --> 00:02:07,410
of more complex variables you can even expand it and get more details.
41
00:02:07,410 --> 00:02:10,870
So now let's step over another line by clicking again this button,
42
00:02:10,870 --> 00:02:13,180
and as you can see now we get to the line that
43
00:02:13,180 --> 00:02:16,410
is actually performing the sum, supposedly, so now let's do the same
44
00:02:16,410 --> 00:02:19,100
thing that we did before, and let's mouse over b, and we can
45
00:02:19,100 --> 00:02:22,150
see that the value of b is five, as expected. So now
46
00:02:22,150 --> 00:02:27,080
let's step over this line as well, and execute the actual sum. And
47
00:02:27,080 --> 00:02:29,730
doing the mouseover thing, we can see that the value of sum
48
00:02:29,730 --> 00:02:33,000
is ten, which is not right, of course. In fact, if we check
49
00:02:33,000 --> 00:02:35,590
a gain we can see that value of A is two. The
50
00:02:35,590 --> 00:02:39,130
value of B is five and therefore it's clear that there's something
51
00:02:39,130 --> 00:02:41,780
wrong going on here, and at this point we can notice that
52
00:02:41,780 --> 00:02:44,030
here we are doing multiplication instead
53
00:02:44,030 --> 00:02:46,010
of addition. And therefore that's what the
54
00:02:46,010 --> 00:02:49,260
error is. And this is clearly a very simple case. Right? A
55
00:02:49,260 --> 00:02:51,440
case in which probably you just needed to look at the code and
56
00:02:51,440 --> 00:02:54,150
you didn't need the debugger. But you probably got the idea right?
57
00:02:54,150 --> 00:02:58,055
So this can be extremely useful when you're debugging, when you're studying more
58
00:02:58,055 --> 00:03:01,533
complex programs. If you want to stop the debugger because you're
59
00:03:01,533 --> 00:03:04,557
done with your debugging session as in this case, you can
60
00:03:04,557 --> 00:03:07,518
either click here on the Terminate button or you can also
61
00:03:07,518 --> 00:03:11,109
just simply tell the debugger to continue the execution, to resume
62
00:03:11,109 --> 00:03:15,140
the execution until the program terminates naturally. So, in this case,
63
00:03:15,140 --> 00:03:17,520
we're going to click here just to show what happens. And what
64
00:03:17,520 --> 00:03:20,230
happens is that, you know, the execution will just continue until
65
00:03:20,230 --> 00:03:23,690
the program exits. So now let's say that we want to fix
66
00:03:23,690 --> 00:03:27,740
this problem that we just discovered. So we replace the multiplication
67
00:03:27,740 --> 00:03:30,600
with an addition, we save the program, and we execute the
68
00:03:30,600 --> 00:03:33,860
program again by clicking on this button. And at this point,
69
00:03:33,860 --> 00:03:37,320
unsurprisingly, we get the right result as shown in the console.

View File

@ -1,43 +0,0 @@
1
00:00:00,440 --> 00:00:06,190
Hi and welcome to the second lesson on tools of the trade. In the
2
00:00:06,190 --> 00:00:09,710
previous lesson we talked about IDEs. Integrated
3
00:00:09,710 --> 00:00:13,300
Development Environments and in particular we discussed
4
00:00:13,300 --> 00:00:16,460
the eclipse ID. Today we're going to
5
00:00:16,460 --> 00:00:19,780
talk about another fundamental type of tools
6
00:00:19,780 --> 00:00:22,840
in the software engineering arena. Version control
7
00:00:22,840 --> 00:00:26,140
systems. And these are also called, revision
8
00:00:26,140 --> 00:00:30,620
or source control systems. In particular, we will focus on a
9
00:00:30,620 --> 00:00:36,320
specific version control system called git. And as we did for eclipse,
10
00:00:36,320 --> 00:00:40,510
we will first present git from a conceptual standpoint. And then
11
00:00:40,510 --> 00:00:44,200
we will do a demo. To get some hands-on experience with GIT.

View File

@ -1,79 +0,0 @@
1
00:00:00,240 --> 00:00:04,160
One good representative of distributed version control systems, is
2
00:00:04,160 --> 00:00:08,320
GIT. A distributed version control system that was initially designed
3
00:00:08,320 --> 00:00:11,297
and developed by Linus Torvalds. I'm pretty sure you
4
00:00:11,297 --> 00:00:14,140
know who Linus Torvalds is. He's basically this guy who
5
00:00:14,140 --> 00:00:17,070
started and created the Linux operating system. And Linus
6
00:00:17,070 --> 00:00:20,140
was unhappy with the existing version control systems, and wanted
7
00:00:20,140 --> 00:00:22,610
a different one. He wanted to use it for maintaining
8
00:00:22,610 --> 00:00:25,330
the Linux kernel. In particular, he wanted one with some
9
00:00:25,330 --> 00:00:28,550
key characteristics. For example, the fact that it was distributed. He
10
00:00:28,550 --> 00:00:30,470
wanted it to be fast. He wanted it to have a
11
00:00:30,470 --> 00:00:33,660
simple design. And he wanted to have a strong support for
12
00:00:33,660 --> 00:00:37,370
parallel branches, because many people were contributing to the kernel at the
13
00:00:37,370 --> 00:00:41,620
same time. And therefore there many different branches of development. And
14
00:00:41,620 --> 00:00:45,120
finally, he wanted for the virtual control system to be able to
15
00:00:45,120 --> 00:00:48,070
handle large projects. As the Linux kernel is, and to do
16
00:00:48,070 --> 00:00:50,480
it in an efficient way. So if you want to get an idea
17
00:00:50,480 --> 00:00:54,210
of how popular GIT is today, there was a survey performed across the
18
00:00:54,210 --> 00:00:58,330
Eclipse IDE users, and it showed that in 2013 GIT was used by
19
00:00:58,330 --> 00:01:02,950
about 30% of the developers. So the, it had a 30% adoption rate.
20
00:01:02,950 --> 00:01:06,430
So we will use a GIT as a version control system for the class.

View File

@ -1,63 +0,0 @@
1
00:00:00,120 --> 00:00:03,020
As we did for Eclipse, and IDEs in general, we want
2
00:00:03,020 --> 00:00:05,133
to start a GIT in a hands on way. So we're going
3
00:00:05,133 --> 00:00:08,425
to start by seeing how to install GIT. And GIT is also
4
00:00:08,425 --> 00:00:12,440
multiplatform, so you can install it no matter what operating system you
5
00:00:12,440 --> 00:00:15,980
are using, unless of course you are using some arcane operating system.
6
00:00:15,980 --> 00:00:18,530
But if you are using Linux, for instance, there should be a
7
00:00:18,530 --> 00:00:22,608
package available that can install GIT for your specific distribution. If you're
8
00:00:22,608 --> 00:00:25,460
using Mac OS, GIT is also available as part of XCode and
9
00:00:25,460 --> 00:00:29,270
also as an independent package. Finally, if you're using Windows, GIT is
10
00:00:29,270 --> 00:00:33,090
available as a package with an installer. In general, you can go
11
00:00:33,090 --> 00:00:37,290
here to get information about how to get GIT, where to download
12
00:00:37,290 --> 00:00:39,975
it, how to install it, and so on. So, now what I'd
13
00:00:39,975 --> 00:00:42,312
like for you to do is to go, get GIT, install it,
14
00:00:42,312 --> 00:00:45,469
in case you don't have it installed already on your machine. And
15
00:00:45,469 --> 00:00:48,253
after that, you should be able to run GIT from the command
16
00:00:48,253 --> 00:00:51,120
line. And, that's exactly what we're going to do through a demo.

View File

@ -1,507 +0,0 @@
1
00:00:00,070 --> 00:00:02,100
But before jumping into the demo I would like
2
00:00:02,100 --> 00:00:05,370
to give a high level overview of the GIT workflow,
3
00:00:05,370 --> 00:00:08,420
which will help you better, following the demo. So let
4
00:00:08,420 --> 00:00:12,480
me start by representing four fundamental elements in the GIT
5
00:00:12,480 --> 00:00:15,640
workflow which are these four: the workspace which is your
6
00:00:15,640 --> 00:00:19,980
local directory. The index, also called the stage, and we'll
7
00:00:19,980 --> 00:00:22,470
see in a minute what the index is. Then, we
8
00:00:22,470 --> 00:00:25,380
have the local repository. We'll also refer to this as
9
00:00:25,380 --> 00:00:27,910
HEAD in the, when we explain the different commands
10
00:00:27,910 --> 00:00:31,340
and then, the word flow. And finally, the remote repository.
11
00:00:31,340 --> 00:00:34,600
If you consider a file in your work space it
12
00:00:34,600 --> 00:00:37,860
can be in three possible states. It can be committed
13
00:00:37,860 --> 00:00:40,170
which means that the data, the latest changes to the
14
00:00:40,170 --> 00:00:45,030
file are safely stored here. It could be modified, which
15
00:00:45,030 --> 00:00:47,840
is the case of the file being changed and no,
16
00:00:47,840 --> 00:00:50,710
none of these changes being saved to the local repository
17
00:00:50,710 --> 00:00:54,440
so locally modified or it can be staged. And
18
00:00:54,440 --> 00:00:58,270
stage means that the file is basically part of this
19
00:00:58,270 --> 00:01:01,620
index. And what that means, that it's been tagged
20
00:01:01,620 --> 00:01:04,890
to be considered in the next commit. And I know
21
00:01:04,890 --> 00:01:08,070
that this is not all 100% intuitive, so let's
22
00:01:08,070 --> 00:01:10,860
look at that again by considering the actual workflow and
23
00:01:10,860 --> 00:01:12,680
let's see what happens when you issue the different
24
00:01:12,680 --> 00:01:16,060
commands in git. So the first command that you normally
25
00:01:16,060 --> 00:01:18,520
run in case you, you're getting access to a remote
26
00:01:18,520 --> 00:01:21,940
repository, is the git clone command. And the git clone,
27
00:01:21,940 --> 00:01:24,880
followed by the url for that repository, will create a
28
00:01:24,880 --> 00:01:28,580
local copy of the repository in your workspace. And of
29
00:01:28,580 --> 00:01:30,310
course, you don't have to do this step if you're
30
00:01:30,310 --> 00:01:34,380
creating the repository yourself. The next command that we already
31
00:01:34,380 --> 00:01:38,170
saw is the command add. And what the command add
32
00:01:38,170 --> 00:01:41,130
does is to add a file that is in the
33
00:01:41,130 --> 00:01:44,630
workspace to this index. And we say that after that, the
34
00:01:44,630 --> 00:01:48,700
file is staged. So it's marked to be committed, but not
35
00:01:48,700 --> 00:01:53,350
yet committed. And here I'm just mentioning this minus u option.
36
00:01:53,350 --> 00:01:56,330
If you specify the minus u option, you will also consider deleted
37
00:01:56,330 --> 00:01:58,820
files File, but let's not get there for now, we'll talk
38
00:01:58,820 --> 00:02:01,240
about that when we do the demo. As I said, if you
39
00:02:01,240 --> 00:02:03,720
add the file, it just gets added to this index but
40
00:02:03,720 --> 00:02:06,430
is not actually committed, so what you need to do, is to
41
00:02:06,430 --> 00:02:10,389
commit the file, so when you execute git commit, all the
42
00:02:10,389 --> 00:02:13,970
files that are staged, that are released it here, their changes
43
00:02:13,970 --> 00:02:17,080
will be committed to the local repository. So your files, as
44
00:02:17,080 --> 00:02:18,970
I was saying, they can be in three states. They will
45
00:02:18,970 --> 00:02:21,820
go from the modified state to the stage state when you
46
00:02:21,820 --> 00:02:24,200
execute the app. And then from the stage state to the
47
00:02:24,200 --> 00:02:27,510
committed state when you perform a GIT Commit. Okay, so at
48
00:02:27,510 --> 00:02:31,780
this point your changes are safely stored in the local repository.
49
00:02:31,780 --> 00:02:34,370
Notice that you can also perform these two steps at
50
00:02:34,370 --> 00:02:38,150
once by executing a Commit -a. So if you have
51
00:02:38,150 --> 00:02:40,920
a set of modified files, and all these files are
52
00:02:40,920 --> 00:02:44,550
already part of the repository, so they're already known to diversion
53
00:02:44,550 --> 00:02:47,540
control system, you can simply execute a commit -a.
54
00:02:47,540 --> 00:02:50,040
And what the commit -a command will do, it
55
00:02:50,040 --> 00:02:53,080
will stage your file and then commit them. All at
56
00:02:53,080 --> 00:02:56,650
once. So it's a convenient shortcut. Of course, as I said,
57
00:02:56,650 --> 00:02:58,710
this will not work if the file is a new file.
58
00:02:58,710 --> 00:03:00,730
So if a file is a new file, you have to manually add
59
00:03:00,730 --> 00:03:04,620
it. Otherwise commit -a will just stage and commit at once.
60
00:03:04,620 --> 00:03:07,400
As we discussed when we looked at the diffence between centralized
61
00:03:07,400 --> 00:03:10,520
and decentralized version console system. We saw that in the case
62
00:03:10,520 --> 00:03:13,930
of the decentralized, there is a local repository which is this one.
63
00:03:13,930 --> 00:03:17,190
And then you have to explicitly push your changes to a remote
64
00:03:17,190 --> 00:03:21,850
repository, and this is exactly what the git push command does. It pushes
65
00:03:21,850 --> 00:03:25,930
your changes that are in the local repository to the remote repository
66
00:03:25,930 --> 00:03:28,160
so at this point all of your changes will be
67
00:03:28,160 --> 00:03:31,680
visible to anyone who has access to the remote repository.
68
00:03:31,680 --> 00:03:33,710
Now, let's see the opposite flow so how does it
69
00:03:33,710 --> 00:03:36,640
work when you're actually getting files from the repository instead
70
00:03:36,640 --> 00:03:39,650
of committing files to the repository. So the first command
71
00:03:39,650 --> 00:03:43,280
I want to mention is the get fetch command and
72
00:03:43,280 --> 00:03:46,900
what the get fetch command does is to get files from
73
00:03:46,900 --> 00:03:50,680
the remote repositories to your local repository, but not yet to
74
00:03:50,680 --> 00:03:53,890
your working directory. And we will see what is the usefullness of
75
00:03:53,890 --> 00:03:56,900
doing this operation. Of having the files all in the local respository,
76
00:03:56,900 --> 00:03:59,380
but not in your local directory. So, what that means, just to
77
00:03:59,380 --> 00:04:01,360
make sure that we're on the same page. Is that you
78
00:04:01,360 --> 00:04:05,620
will not see these files when you workspace. You will still have
79
00:04:05,620 --> 00:04:09,030
your local files here. So this is sort of a physical distinction.
80
00:04:09,030 --> 00:04:12,060
In order to get your data files from the local repositories to
81
00:04:12,060 --> 00:04:14,470
your workspace you have to issue another command. Which is
82
00:04:14,470 --> 00:04:18,250
the command git merge. Git merge will take the changes in
83
00:04:18,250 --> 00:04:21,870
local repository and get them to your local workspace. So at
84
00:04:21,870 --> 00:04:25,460
this point your files will be updated. To what is in
85
00:04:25,460 --> 00:04:27,730
the remote reposity. Or at least what was in the
86
00:04:27,730 --> 00:04:30,810
remote reposity at the time of the fetch. SImilarly to what
87
00:04:30,810 --> 00:04:34,340
happened for the add and commit. There's a shortcut which is
88
00:04:34,340 --> 00:04:37,230
the command git pull. So in case you want to get
89
00:04:37,230 --> 00:04:40,590
the changes directly. To your work space with a single
90
00:04:40,590 --> 00:04:44,120
command, you can issue a git pull command and what will
91
00:04:44,120 --> 00:04:46,560
happen, is that the changes will get collected from the
92
00:04:46,560 --> 00:04:49,810
remote repository and they will go to your local repository and
93
00:04:49,810 --> 00:04:51,990
to your work space, at once. So this has the
94
00:04:51,990 --> 00:04:55,820
same affect as performing a git fetch and a git merge.
95
00:04:55,820 --> 00:04:59,160
So if we can do everything in one command, why,
96
00:04:59,160 --> 00:05:03,290
why we want to fetch and berch as two separate operations?
97
00:05:03,290 --> 00:05:05,920
So one of the reason is because this allows us
98
00:05:05,920 --> 00:05:09,410
to compare files before we actually get the latest version
99
00:05:09,410 --> 00:05:12,600
of the files. In particular, I can run the command
100
00:05:12,600 --> 00:05:17,310
git diff head to get the difference between my local files,
101
00:05:17,310 --> 00:05:20,330
the files in my working directory, and the files in
102
00:05:20,330 --> 00:05:22,800
my local repository. So what I can do, I can
103
00:05:22,800 --> 00:05:25,550
fetch the files from the remote repository, and once I
104
00:05:25,550 --> 00:05:29,260
fetch these files. I can run a git diff head and
105
00:05:29,260 --> 00:05:32,620
check what the differences are. And based on the differences decide
106
00:05:32,620 --> 00:05:35,554
whether I want to merge or not. So while we are talking about
107
00:05:35,554 --> 00:05:37,890
git diff, there is something else that you can use with the
108
00:05:37,890 --> 00:05:41,060
diff command. So what you can do, you can run git diff
109
00:05:41,060 --> 00:05:44,930
without further specifying head. In this case, what the command tell you
110
00:05:44,930 --> 00:05:48,310
is the difference between the files that you have in your work
111
00:05:48,310 --> 00:05:51,780
space and the ones that are staged for a commit. So basically,
112
00:05:51,780 --> 00:05:54,630
what it will be telling you, is that what you could still
113
00:05:54,630 --> 00:05:58,300
add to the stage for the further commit, and that you
114
00:05:58,300 --> 00:06:01,230
haven't already. So what local changes will not make it to the
115
00:06:01,230 --> 00:06:04,440
next commit, basically. And this you can use, for example, as
116
00:06:04,440 --> 00:06:07,450
a sanity check before doing a commit to make sure all the
117
00:06:07,450 --> 00:06:09,980
local changes that you have, and that you want to commit,
118
00:06:09,980 --> 00:06:13,230
are actually staged and therefore will be considered. So now we will
119
00:06:13,230 --> 00:06:16,930
cover all of the commands that we saw here. In our practical
120
00:06:16,930 --> 00:06:20,560
demo. But please feel free to refer back to this Git Workflow
121
00:06:20,560 --> 00:06:23,570
to get a kind of a high level vision. Or maybe you want to keep it next to
122
00:06:23,570 --> 00:06:26,110
you, because this really gives you the overall structure
123
00:06:26,110 --> 00:06:28,450
and the overall view of what happens when you
124
00:06:28,450 --> 00:06:31,160
run the different commands. And it also helps you
125
00:06:31,160 --> 00:06:34,840
visualize The different elements that are relevant when you're
126
00:06:34,840 --> 00:06:37,970
using GIT. So the workspace, once more, the index
127
00:06:37,970 --> 00:06:40,790
or stage, the local repository, and the remote repository.

View File

@ -1,307 +0,0 @@
1
00:00:00,140 --> 00:00:02,580
Now that we saw some of the git basic
2
00:00:02,580 --> 00:00:05,689
functionalities in practice, let's go a step further. If
3
00:00:05,689 --> 00:00:08,420
you remember I mentioned before that many of these
4
00:00:08,420 --> 00:00:12,250
version control systems are actually integrated into IDE's. So
5
00:00:12,250 --> 00:00:14,540
what were going to look at next is what happens
6
00:00:14,540 --> 00:00:17,500
if we put together git and eclipse. And the
7
00:00:17,500 --> 00:00:20,960
result is egit, or EGit is a plug in
8
00:00:20,960 --> 00:00:25,520
for the eclipse IDE that adds git functionality to eclipse.
9
00:00:25,520 --> 00:00:27,880
So let's see how that works in practice. So
10
00:00:27,880 --> 00:00:31,400
support for git is available in many IDE's including
11
00:00:31,400 --> 00:00:33,920
Eclipse. And if you want to get github
12
00:00:33,920 --> 00:00:38,620
for Eclipse, you should go to eclipse.github.com and you can
13
00:00:38,620 --> 00:00:41,445
download the plugin. So this bring us to the
14
00:00:41,445 --> 00:00:44,530
plugin page and you can use the provided URL
15
00:00:44,530 --> 00:00:47,060
and directions to install the plugin. In this case
16
00:00:47,060 --> 00:00:49,945
we're going to copy this address. So we're going to
17
00:00:49,945 --> 00:00:54,110
Eclipse, Help, Install new software. We can click on Add
18
00:00:54,110 --> 00:00:56,810
to add a new site from which to get software. We
19
00:00:56,810 --> 00:00:59,110
paste the location that we just copied here. And we
20
00:00:59,110 --> 00:01:02,842
can give it a descriptive name. In this case I'll just
21
00:01:02,842 --> 00:01:06,645
call it Eclipse Git plugin. Then when I click okay,
22
00:01:06,645 --> 00:01:09,720
Eclipse will go, and look for plugins. And as you can
23
00:01:09,720 --> 00:01:12,510
see, there are two options. We can select both of them,
24
00:01:12,510 --> 00:01:15,180
and click on next. You can see that the Eclipse identified
25
00:01:15,180 --> 00:01:18,330
a few dependencies. You can click next and accept them. You can
26
00:01:18,330 --> 00:01:21,540
accept the terms and conditions for the plug in, and then just
27
00:01:21,540 --> 00:01:25,730
finish. And at this point, Eclipse will install the plugin, which might
28
00:01:25,730 --> 00:01:28,610
take a little bit of time. So we're just going to speed it up.
29
00:01:28,610 --> 00:01:31,110
And when Eclipse is done, you will get this prompt that will
30
00:01:31,110 --> 00:01:33,670
tell you that you need to restart Eclipse for the plugin to
31
00:01:33,670 --> 00:01:36,990
be actually installed. And at this point, you want to click yes. And
32
00:01:36,990 --> 00:01:40,550
when Eclipse restarts. You'll have your plugin. We're going to go to the git
33
00:01:40,550 --> 00:01:44,030
repository perspective that we can select here. And when we click
34
00:01:44,030 --> 00:01:47,160
OK, you can see that our display will change. And since
35
00:01:47,160 --> 00:01:49,360
we don't have any repository yet, we are provided with the
36
00:01:49,360 --> 00:01:53,620
possibility of adding an existing local git repository, cloning a git repository
37
00:01:53,620 --> 00:01:56,330
or creating a new local git repository. We're going to add an
38
00:01:56,330 --> 00:01:59,800
existing local repository. This is the one that we created earlier,
39
00:01:59,800 --> 00:02:02,170
so we'll select it and click finish, and you can see
40
00:02:02,170 --> 00:02:05,660
that my project is now added to this set of git repositories.
41
00:02:05,660 --> 00:02:09,240
Now let's check out the project from the repository by selecting import
42
00:02:09,240 --> 00:02:12,530
project. And here you can import something as an existing project, you
43
00:02:12,530 --> 00:02:15,300
can use a new project wizard, and in this case I chose
44
00:02:15,300 --> 00:02:18,680
the option of importing as a general project. Then I click Next and
45
00:02:18,680 --> 00:02:20,870
as you can see, I have the project name up there and
46
00:02:20,870 --> 00:02:24,630
I can click Finish. So now, if I go to the resource perspective
47
00:02:24,630 --> 00:02:27,740
by clicking here, I can see that the project has been added
48
00:02:27,740 --> 00:02:30,760
to my set of projects. And I can see all the files within
49
00:02:30,760 --> 00:02:33,440
the project, particularly, if I click on the README, you can see
50
00:02:33,440 --> 00:02:36,190
that we have the Readme file that we created before. Same thing for
51
00:02:36,190 --> 00:02:38,930
the test file. One thing I can do at this point, it
52
00:02:38,930 --> 00:02:41,070
to execute different git commands, perform
53
00:02:41,070 --> 00:02:43,430
different git operations by using the team
54
00:02:43,430 --> 00:02:47,010
submenu in the contactual menu. And here there are several things
55
00:02:47,010 --> 00:02:50,650
I can do including some advanced commands. And just to give it a
56
00:02:50,650 --> 00:02:53,200
shot, I am going to try to click show local history, and this
57
00:02:53,200 --> 00:02:56,180
shows the history of the file. For example it shows the author and
58
00:02:56,180 --> 00:02:59,200
it shows when he was created, when he was authored. Lets make
59
00:02:59,200 --> 00:03:02,810
some changes to this file by adding some new content. Okay. I saved
60
00:03:02,810 --> 00:03:05,160
the file and now I can see that error that indicates that my
61
00:03:05,160 --> 00:03:08,620
file was locally changed. So now if I go to the team menu,
62
00:03:08,620 --> 00:03:11,380
you can see that I have the option to add to the index,
63
00:03:11,380 --> 00:03:14,686
to stage the file. And now I got this new label that star
64
00:03:14,686 --> 00:03:17,980
that shows the files added to the index. And now at this point,
65
00:03:17,980 --> 00:03:21,270
I can go to the team menu again and I can actually commit
66
00:03:21,270 --> 00:03:25,480
the file by selecting the corresponding entry. This allows me to enter
67
00:03:25,480 --> 00:03:28,390
the commit message, exactly in the same way which I could do
68
00:03:28,390 --> 00:03:31,250
that from the command line with the textual editor. And after I
69
00:03:31,250 --> 00:03:34,050
put the comment there, I can actually commit. And now if we
70
00:03:34,050 --> 00:03:36,320
look at the history view, we can see here that we have
71
00:03:36,320 --> 00:03:38,960
a new version for the file that we just modified. And we
72
00:03:38,960 --> 00:03:42,250
can also see the commit comment. And, at this point, if we
73
00:03:42,250 --> 00:03:46,450
had remote repository we could push our changes to that remote repository
74
00:03:46,450 --> 00:03:49,330
as well. Again, using the team submenu and
75
00:03:49,330 --> 00:03:52,170
the contextual menu. And, speaking of remote repositories, what we
76
00:03:52,170 --> 00:03:55,230
are going to see next is how to use GitHub
77
00:03:55,230 --> 00:03:58,640
repositories which are remote repositories that are hosted on GitHub.

View File

@ -1,239 +0,0 @@
1
00:00:00,120 --> 00:00:02,820
In the interview that we did at the beginning of the class,
2
00:00:02,820 --> 00:00:08,430
we talked with John about GitHub, where GitHub is a Git hosting website, and
3
00:00:08,430 --> 00:00:11,390
John told you all about it. For this class, we will be
4
00:00:11,390 --> 00:00:16,350
using GitHub as our Git hosting. Let's see how GitHub works in practice and
5
00:00:16,350 --> 00:00:19,450
let's see some of the common features offered by GitHub.
6
00:00:19,450 --> 00:00:24,010
This is what we'll do in the third part of this Git demo. What I'm showing here
7
00:00:24,010 --> 00:00:28,550
is the GitHub website and as I said, GitHub is a Git hosting website and
8
00:00:28,550 --> 00:00:32,950
you can create an account on GitHub by simply signing up on the website. And
9
00:00:32,950 --> 00:00:36,100
because we already have an account that we're simply going to sign in
10
00:00:36,100 --> 00:00:40,570
to see what kind of functionality GitHub offers. And we're going to specify our
11
00:00:40,570 --> 00:00:44,190
username and password. And as you can see on the GitHub website,
12
00:00:44,190 --> 00:00:47,695
you can use this menu up on the right to create a new repository or
13
00:00:47,695 --> 00:00:51,500
change the account settings. Let's click on our user profile. And
14
00:00:51,500 --> 00:00:54,270
here we can see some statistics for our user. For
15
00:00:54,270 --> 00:00:59,190
example, we can see statistic about our contributions and our repositories. So
16
00:00:59,190 --> 00:01:02,560
now if we go to the Repositories view, we can create a new repository.
17
00:01:02,560 --> 00:01:07,117
We give it a name. Let's call it myrepo. We can provide the description for
18
00:01:07,117 --> 00:01:11,680
the repository. If we want, we can initialize the repository by adding a README
19
00:01:11,680 --> 00:01:15,860
file. And even though we are not doing it right now, if you can see up here,
20
00:01:15,860 --> 00:01:19,820
you can also add a license here on the right and it allows you
21
00:01:19,820 --> 00:01:24,831
to choose from a set of predefined licenses. And you can also a .gitignore file,
22
00:01:24,831 --> 00:01:28,410
which, in case you don't know what that is, it's a very convenient file that
23
00:01:28,410 --> 00:01:32,740
will automatically exclude from the repositories file that should not be added.
24
00:01:32,740 --> 00:01:35,690
So if you remember in the lesson we said there are things that you should not
25
00:01:35,690 --> 00:01:39,263
add to the repositories. For example, derived files. So
26
00:01:39,263 --> 00:01:42,360
here, using this menu, you can pick the type of project that you have.
27
00:01:42,360 --> 00:01:47,740
For example, Java project or PHP project or many other kinds of projects. And
28
00:01:47,740 --> 00:01:50,510
the GitHub will automatically add that file for you.
29
00:01:50,510 --> 00:01:53,680
But let's skip that for now and simply create our repository. And
30
00:01:53,680 --> 00:01:58,000
that creates a repository that contains the README file because that's what we
31
00:01:58,000 --> 00:02:02,580
decided to do. And it also allows you to edit the README file by clicking on it.
32
00:02:02,580 --> 00:02:05,560
It will bring up an editor and here you can write, you know,
33
00:02:05,560 --> 00:02:08,949
for example, initial readme for your project. Then you can add your
34
00:02:08,949 --> 00:02:13,070
commit message up there and then you can commit the changes to your README file.
35
00:02:13,070 --> 00:02:18,212
The site also provides many other features, like, for example, creating issues,
36
00:02:18,212 --> 00:02:22,030
pull requests, adding and editing a wiki, and also, you know,
37
00:02:22,030 --> 00:02:25,740
defining other characteristics and settings for the repository. Now, if we go to
38
00:02:25,740 --> 00:02:30,500
the repository, you can see that we also get the HTTPS link for the repository.
39
00:02:30,500 --> 00:02:35,870
So this is the URL that you can use to clone your repository. If you remember,
40
00:02:35,870 --> 00:02:39,250
with a git clone command, that's the URL that you can specify. So
41
00:02:39,250 --> 00:02:43,480
let's try to do that and clone that repository. So we're going to copy this URL.
42
00:02:43,480 --> 00:02:48,300
To do that, we're going to execute git clone and specify the URL that we
43
00:02:48,300 --> 00:02:52,310
just copied. And you can see that the project was created, was cloned locally.
44
00:02:52,310 --> 00:02:55,760
And if we go under myrepo, which is the name of the repository, you can see that
45
00:02:55,760 --> 00:02:59,570
the README file that we created on GitHub is here. So if we create a new file,
46
00:02:59,570 --> 00:03:03,340
which we're going to call again, newFile just to be clear. And then we
47
00:03:03,340 --> 00:03:07,920
can add it, commit it, specifying as usual a commit message. So at this point,
48
00:03:07,920 --> 00:03:11,940
we can push our locked out changes to the remote GitHub repository. And
49
00:03:11,940 --> 00:03:14,340
because the GitHub repository is password protected,
50
00:03:14,340 --> 00:03:17,660
we have to specify our login and password. And of course, if you
51
00:03:17,660 --> 00:03:21,770
pass the wrong password, GitHub is not going to let you in. So let's try again.
52
00:03:21,770 --> 00:03:25,110
Let's try to get the password right this time. I'm going to specify again,
53
00:03:25,110 --> 00:03:31,130
my login and my password. At this point, the push is successful and
54
00:03:31,130 --> 00:03:35,220
my changes are actually pushed to the master, which is the GitHub repository.
55
00:03:35,220 --> 00:03:39,020
To double check that, let's go back to the GitHub repository and as you can see,
56
00:03:39,020 --> 00:03:42,470
that the file that we added, newFile, is there as expected. And of course,
57
00:03:42,470 --> 00:03:45,880
there's many more things that you can do on the GitHub website, so
58
00:03:45,880 --> 00:03:48,410
I strongly encourage you to go and try out things. But
59
00:03:48,410 --> 00:03:51,980
the key message here is that the GitHub is a Git hosting website where you
60
00:03:51,980 --> 00:03:54,990
can get an account and create your remote repositories.

View File

@ -1,35 +0,0 @@
1
00:00:00,110 --> 00:00:02,212
Now that we are done with our demo, I just want
2
00:00:02,212 --> 00:00:05,910
to go through a quick GIT recap to remind you of the
3
00:00:05,910 --> 00:00:08,720
main commands that we saw, and what they do. And you can
4
00:00:08,720 --> 00:00:11,290
also use these as sort of a reference when you work with
5
00:00:11,290 --> 00:00:13,940
GIT. And by the way, if you look around and you do
6
00:00:13,940 --> 00:00:16,960
a search, you can see that there's tons of examples on the
7
00:00:16,960 --> 00:00:22,170
web of GitHub tutorials, videos, examples, manuals. So feel free to
8
00:00:22,170 --> 00:00:25,910
explore. And I'm actually going to put some references to tutorials and
9
00:00:25,910 --> 00:00:29,100
videos that I found particularly useful in the notes for the class.

View File

@ -1,163 +0,0 @@
1
00:00:00,100 --> 00:00:02,460
So, let me start by recapping some of the operations that
2
00:00:02,460 --> 00:00:06,000
we can perform on local repositories. I'm just going to list them
3
00:00:06,000 --> 00:00:09,240
here and go through them by separating them into three main
4
00:00:09,240 --> 00:00:12,930
categories. The first one is commands that, to create a repository and
5
00:00:12,930 --> 00:00:15,470
notice that not all of these are git commands, that for
6
00:00:15,470 --> 00:00:18,710
example, to create the repository, we would normally want to. Create a
7
00:00:18,710 --> 00:00:21,560
directory, which is exactly what we did in our demo. We want
8
00:00:21,560 --> 00:00:25,310
to go to that directory and then execute the git init statement,
9
00:00:25,310 --> 00:00:29,110
which initializes that directory as a git repository. The second
10
00:00:29,110 --> 00:00:32,530
category includes commands that we'll use to modify the content of
11
00:00:32,530 --> 00:00:35,280
the repository. We saw that we can use git add
12
00:00:35,280 --> 00:00:39,190
to add a specific file or a complete directory to our
13
00:00:39,190 --> 00:00:41,650
index. So to the list of files that will be
14
00:00:41,650 --> 00:00:44,510
committed, that will be considered in the next commit. Then we
15
00:00:44,510 --> 00:00:47,620
can use commit to actually commit the changes that we
16
00:00:47,620 --> 00:00:50,374
made to those files to our local repository, and we can
17
00:00:50,374 --> 00:00:54,030
also use git move and git rm or git remove
18
00:00:54,030 --> 00:00:57,420
to move files around and to remove files. Finally, the
19
00:00:57,420 --> 00:01:00,270
third category is the category of commands that we can
20
00:01:00,270 --> 00:01:04,950
use to inspect the concrete repository. And this set includes git
21
00:01:04,950 --> 00:01:06,960
log, that we can use to see the log of
22
00:01:06,960 --> 00:01:09,970
the repository, git status, that can give us important information
23
00:01:09,970 --> 00:01:12,810
about the status of the file center repository. Git diff,
24
00:01:12,810 --> 00:01:15,500
that we can use to see the differences between for example,
25
00:01:15,500 --> 00:01:19,160
our local files. And the remote files. And finally git
26
00:01:19,160 --> 00:01:23,270
show, that will show us information about our last commit. What
27
00:01:23,270 --> 00:01:25,940
we committed, what were the changes and so on. And again,
28
00:01:25,940 --> 00:01:29,290
we saw most or all of these commands in our demo.
29
00:01:29,290 --> 00:01:31,920
So let me also remind you of a possible workflow. Which
30
00:01:31,920 --> 00:01:34,350
again, we already saw but it's always good to go through
31
00:01:34,350 --> 00:01:37,670
it once more. And remember that this is just an example.
32
00:01:37,670 --> 00:01:40,520
It's just a possible workflow. You can do many different things,
33
00:01:40,520 --> 00:01:43,210
you can have many different workflows with git. This is just
34
00:01:43,210 --> 00:01:45,980
up to illustrate some of the things that you can do. So,
35
00:01:45,980 --> 00:01:49,430
you might do some local editing. Execute git status to see what
36
00:01:49,430 --> 00:01:53,020
files you changed. Then you might run a git diff on the
37
00:01:53,020 --> 00:01:56,230
files to see what are these changes. And then you can run
38
00:01:56,230 --> 00:01:59,460
git commit -a to commit your changes. And in case you
39
00:01:59,460 --> 00:02:02,520
want to specify the commit message right away without having to go
40
00:02:02,520 --> 00:02:06,040
through an editor, you can also add the -m parameter and
41
00:02:06,040 --> 00:02:08,110
specify the message here on the same line.

View File

@ -1,59 +0,0 @@
1
00:00:00,110 --> 00:00:02,960
SImilarly, let's go through some commands that you can run on
2
00:00:02,960 --> 00:00:07,150
remote repositories. First command is the command to copy a repository,
3
00:00:07,150 --> 00:00:10,840
which is git clone in which you get a remote repository and you make a lot of
4
00:00:10,840 --> 00:00:14,850
copy in your working directory. The repository can be specified as a URL.
5
00:00:14,850 --> 00:00:18,230
It can be a local file, it can be specified using the HTTP or
6
00:00:18,230 --> 00:00:21,070
the SSH protocol, and there's also other ways to do it.
7
00:00:21,070 --> 00:00:25,300
This creates a complete local copy of the repository, as it says, and links it
8
00:00:25,300 --> 00:00:29,030
to the remote repository, which is what is called the origin. And if you want,
9
00:00:29,030 --> 00:00:33,400
you could also actually link to the repository, later. Then the normal way of
10
00:00:33,400 --> 00:00:37,800
receiving changes from a repository is to perform a git pull command. And we saw
11
00:00:37,800 --> 00:00:42,345
that you can also perform the same operation through two commands, get fetch and
12
00:00:42,345 --> 00:00:47,210
git merge. In case you want to inspect the changes before actually merging them,
13
00:00:47,210 --> 00:00:49,550
before actually getting them in your local copy. And
14
00:00:49,550 --> 00:00:52,940
if you want to send changes that you have in your local repository to
15
00:00:52,940 --> 00:00:55,680
a remote repository, you will use the git push command.

View File

@ -1,15 +0,0 @@
1
00:00:00,160 --> 00:00:03,095
This is ultimately pretty simple. All you need to do is visit
2
00:00:03,095 --> 00:00:08,720
github.com/join and set up a free GitHub account. If you already have a GitHub,
3
00:00:08,720 --> 00:00:11,870
account you can sign in using your existing account. If you want to
4
00:00:11,870 --> 00:00:14,550
use a separate identity for the class, feel free to set up a second one.

View File

@ -1,19 +0,0 @@
1
00:00:00,160 --> 00:00:03,095
Na verdade é muito simples.
Só tens que ir a
2
00:00:03,095 --> 00:00:08,720
github.com/join e criar uma conta grátis
no GitHub. Se já tiveres uma conta GitHub,
3
00:00:08,720 --> 00:00:11,870
podes entrar com a tua conta.
Se quiseres
4
00:00:11,870 --> 00:00:14,550
criar uma diferente para o curso,
podes criar uma segunda sem problemas.

View File

@ -1,435 +0,0 @@
1
00:00:00,170 --> 00:00:02,630
>> And I thought that the best way to break the ice on version
2
00:00:02,630 --> 00:00:04,970
control systems and Git and some other
3
00:00:04,970 --> 00:00:07,939
related concepts was to interview John Britton who
4
00:00:07,939 --> 00:00:11,840
works with GitHub. So let's go and see what John has to say about
5
00:00:11,840 --> 00:00:14,120
Git, about version control systems in general,
6
00:00:14,120 --> 00:00:17,809
and about GitHub. John is in Tapei, if I'm not wrong.
7
00:00:17,809 --> 00:00:18,610
>> That's correct.
8
00:00:18,610 --> 00:00:20,320
>> Okay so we're, you know we couldn't
9
00:00:20,320 --> 00:00:22,570
go there so we're interviewing him remotely. And I
10
00:00:22,570 --> 00:00:25,490
want, I just want to thank you so much and John for agreeing to talk to us.
11
00:00:25,490 --> 00:00:27,940
>> Thank you very much for having me it was my pleasure.
12
00:00:27,940 --> 00:00:30,560
>> And, I'm just going to ask, a few
13
00:00:30,560 --> 00:00:32,938
general questions because John is an expert on,
14
00:00:32,938 --> 00:00:36,270
Git and GitHub. John is a developer and
15
00:00:36,270 --> 00:00:38,550
a community builder is active in both the
16
00:00:38,550 --> 00:00:42,200
open source and the open education areas. And
17
00:00:42,200 --> 00:00:44,860
as an educational liaison we have, is working
18
00:00:44,860 --> 00:00:47,580
to improve Computer Science education by bringing the
19
00:00:47,580 --> 00:00:51,460
principles of open source into the classroom. And
20
00:00:51,460 --> 00:00:53,160
I'm going to start with an general question,
21
00:00:53,160 --> 00:00:55,320
which is what is a version control system?
22
00:00:55,320 --> 00:00:57,960
>> So, a version control system is
23
00:00:57,960 --> 00:01:00,360
a tool that software developers use. Anybody
24
00:01:00,360 --> 00:01:02,560
who's doing you know, working with digital
25
00:01:02,560 --> 00:01:06,540
assets, digital projects can also use for
26
00:01:06,540 --> 00:01:11,320
keeping track of, you know, revisions of your project, and when I say revisions, I
27
00:01:11,320 --> 00:01:16,850
mean essentially snapshots of your project over time. So you can imagine doing
28
00:01:16,850 --> 00:01:19,720
some work and then every so often, be it, every couple of
29
00:01:19,720 --> 00:01:23,799
hours, every couple of days, saving a permanent snapshot of your project.
30
00:01:24,880 --> 00:01:26,650
>> Why is this useful? I understand that
31
00:01:26,650 --> 00:01:28,720
it is nice to take a snapshot of your
32
00:01:28,720 --> 00:01:30,070
project, but what did you do with the
33
00:01:30,070 --> 00:01:33,420
snapshot afterwards? I think the most immediately obvious benefit
34
00:01:33,420 --> 00:01:36,340
to having snapshots of your project to keeping
35
00:01:36,340 --> 00:01:38,280
revisions is that you can go back. If you
36
00:01:38,280 --> 00:01:40,190
have ever worked on a project and got to
37
00:01:40,190 --> 00:01:41,940
a point where you solved a bunch of your
38
00:01:41,940 --> 00:01:45,330
problems, and there is just one more step to do. And
39
00:01:45,330 --> 00:01:47,640
you start working on trying to solve that last step, and
40
00:01:47,640 --> 00:01:51,350
you break things, you make it worse then it was an
41
00:01:51,350 --> 00:01:54,420
hour ago. At that point its easier to just go back
42
00:01:54,420 --> 00:01:56,780
to what you had then trying to figure out what you
43
00:01:56,780 --> 00:01:59,320
broke. So you can always go back in time, and the
44
00:01:59,320 --> 00:02:02,660
other big one is being able to collaborate with multiple people,
45
00:02:02,660 --> 00:02:07,450
so its pretty seldom these days that you. Work on a production
46
00:02:07,450 --> 00:02:09,860
totally on your own. It's most common to work in, you
47
00:02:09,860 --> 00:02:12,993
know, in teams and small groups. And so, using a revision
48
00:02:12,993 --> 00:02:16,340
control system allows you to collaborate with other people. And make
49
00:02:16,340 --> 00:02:19,060
sure that you don't step on each other's toes as you're working.
50
00:02:19,060 --> 00:02:21,310
>> Alright, that's great, because those are exactly some of the
51
00:02:21,310 --> 00:02:25,250
topics that we're going to cover in the lesson. And so since we're
52
00:02:25,250 --> 00:02:28,470
going to talk about the specifics of version control system which is
53
00:02:28,470 --> 00:02:32,660
Git and you're definitely an expert in, in Git. So what would
54
00:02:32,660 --> 00:02:36,510
you say is specifically special about Git? What characterizes it
55
00:02:36,510 --> 00:02:39,940
and how does it compare to other version control systems.
56
00:02:39,940 --> 00:02:43,140
>> So if any of you have used version control systems before, you
57
00:02:43,140 --> 00:02:47,850
may have heard of something like subversion, CVS, or maybe a commercial solution
58
00:02:47,850 --> 00:02:53,550
like ProForce. I think the main important characteristics of Git are first that
59
00:02:53,550 --> 00:02:56,050
it's open source. And the second,
60
00:02:56,050 --> 00:02:59,030
that it's a distributed version control system.
61
00:02:59,030 --> 00:03:00,430
So what that means, the distributed version
62
00:03:00,430 --> 00:03:04,260
control system is essentially a system for tracking
63
00:03:04,260 --> 00:03:07,700
revisions of your software that doesn't have any
64
00:03:07,700 --> 00:03:11,730
central repository. So the biggest characteristic is that
65
00:03:11,730 --> 00:03:14,520
I can do my work and you can also work on the same project at
66
00:03:14,520 --> 00:03:16,900
the same time without communicating with each other
67
00:03:16,900 --> 00:03:19,650
and without communicating to a central system.
68
00:03:19,650 --> 00:03:24,190
>> Okay, great. And so now that we saw what Git is, what is
69
00:03:24,190 --> 00:03:26,050
GitHub and how does it fit into
70
00:03:26,050 --> 00:03:29,320
this picture of the distributed, revision control system?
71
00:03:29,320 --> 00:03:34,800
>> So GitHub is, the world's largest code host, and we essentially have a
72
00:03:34,800 --> 00:03:36,940
website where you can collaborate with people
73
00:03:36,940 --> 00:03:39,950
when you're writing code. There's two ways you
74
00:03:39,950 --> 00:03:43,650
can use GitHub. You can use it publicly for open source and you can use
75
00:03:43,650 --> 00:03:49,660
it in private within your team, or your company, or within your class. And, Git
76
00:03:49,660 --> 00:03:53,960
Hub started out just as a way to host your Git repositories. But it's
77
00:03:53,960 --> 00:03:56,000
actually grown into quite a bit more. It's
78
00:03:56,000 --> 00:03:59,820
an entire collaboration system around your code.
79
00:03:59,820 --> 00:04:00,580
>> How many users do you have?
80
00:04:00,580 --> 00:04:03,620
>> I would say that we're approaching five million.
81
00:04:03,620 --> 00:04:05,570
I don't know the exact number. We're definitely more
82
00:04:05,570 --> 00:04:08,080
than four million right now. But yeah, I'd say
83
00:04:08,080 --> 00:04:10,330
somewhere, somewhere close to between four and five million.
84
00:04:10,330 --> 00:04:14,750
>> So that's a lot space I'd guess. Terabytes of disk
85
00:04:14,750 --> 00:04:15,840
space, I would imagine.
86
00:04:15,840 --> 00:04:19,170
>> There are a lot of GIT repositories on, on our servers.
87
00:04:19,170 --> 00:04:21,180
>> Something else you want to say? I
88
00:04:21,180 --> 00:04:23,920
guess that the when taking about GitHub there's one
89
00:04:23,920 --> 00:04:26,110
thing that you kind of can't leave out and
90
00:04:26,110 --> 00:04:28,670
that's that's a feature that's called a pull request.
91
00:04:28,670 --> 00:04:31,090
So when you're using GitHub, you can share
92
00:04:31,090 --> 00:04:34,940
your Git repository, do some work, and actually do
93
00:04:34,940 --> 00:04:37,880
do a code review. Of proposed changes which
94
00:04:37,880 --> 00:04:39,770
is what we call a pull request on github.com.
95
00:04:39,770 --> 00:04:42,790
Essentially what it lets you do is have a discussion
96
00:04:42,790 --> 00:04:46,320
about a set of proposed changes and leave feedback in
97
00:04:46,320 --> 00:04:48,870
line with the code. You could say for example, this
98
00:04:48,870 --> 00:04:51,670
method needs to be re-factored or I think I found if
99
00:04:51,670 --> 00:04:54,830
off by one error here, just different kinds of feedback
100
00:04:54,830 --> 00:04:59,120
so that before you totally integrate some proposed changes. You have,
101
00:04:59,120 --> 00:05:01,180
kind of a conversation about what your code. And I
102
00:05:01,180 --> 00:05:03,050
think that's really valuable when you are working in a team.
103
00:05:03,050 --> 00:05:05,510
>> Thank you, John, that was very informative and
104
00:05:05,510 --> 00:05:07,440
thanks again for taking the time to talk to us.
105
00:05:07,440 --> 00:05:10,160
>> No problem, thanks for having me. I'll talk to you soon.
106
00:05:10,160 --> 00:05:13,990
>> Let's thank again John for enlightening us
107
00:05:13,990 --> 00:05:17,350
on some aspects of version control systems, Git and
108
00:05:17,350 --> 00:05:19,410
GitHub. And now, let's go over some of the
109
00:05:19,410 --> 00:05:21,650
topics that we discussed with John to recap them.

View File

@ -1,207 +0,0 @@
1
00:00:00,160 --> 00:00:02,080
So first of all, what is a version
2
00:00:02,080 --> 00:00:05,550
control system? A version control system or VCS,
3
00:00:05,550 --> 00:00:07,670
is a system that allows you to manage
4
00:00:07,670 --> 00:00:11,180
multiple revisions of the same unit of information. For
5
00:00:11,180 --> 00:00:14,330
example of documents, of source files or any
6
00:00:14,330 --> 00:00:17,380
other item of that sort. And as the graphical
7
00:00:17,380 --> 00:00:21,240
depiction shows, a VCS allows a multiple actors.
8
00:00:21,240 --> 00:00:25,020
Here we have four, to cooperate and share files.
9
00:00:25,020 --> 00:00:26,980
Now, let's drill into this concept in a little
10
00:00:26,980 --> 00:00:29,720
more detail. And let's do that by discussing why
11
00:00:29,720 --> 00:00:32,870
is VCS useful, especially in the context of software
12
00:00:32,870 --> 00:00:35,790
engineering and of software development. So first of all,
13
00:00:35,790 --> 00:00:39,570
using a version control system enforces discipline, because it
14
00:00:39,570 --> 00:00:43,030
manages the process by which the control of items
15
00:00:43,030 --> 00:00:46,720
passes from one person to another. Another important aspect
16
00:00:46,720 --> 00:00:51,170
of VCS is that it allows you for archiving versions.
17
00:00:51,170 --> 00:00:54,330
So you can store subsequent versions of source controlled
18
00:00:54,330 --> 00:00:57,450
items into a VCS. And not only you can
19
00:00:57,450 --> 00:01:00,450
store versions, you can also maintain a lot of
20
00:01:00,450 --> 00:01:03,480
interesting and important historical information
21
00:01:03,480 --> 00:01:05,810
about these versions. For example,
22
00:01:05,810 --> 00:01:08,070
a VCL will store information such as, who is
23
00:01:08,070 --> 00:01:11,270
the author for this specific version stored in the system.
24
00:01:11,270 --> 00:01:13,820
Or, for another example, on what day and what
25
00:01:13,820 --> 00:01:16,260
time that version was stored. And a lot of other
26
00:01:16,260 --> 00:01:19,240
interesting information about the specific version of the
27
00:01:19,240 --> 00:01:21,600
item. Information that you can then retrieve and for
28
00:01:21,600 --> 00:01:25,040
example, use to compare versions. Obviously, the fact of
29
00:01:25,040 --> 00:01:27,970
having a central repository in which all these items
30
00:01:27,970 --> 00:01:31,350
are stored enables collaboration, so people can more easily
31
00:01:31,350 --> 00:01:35,510
share data, share files, share documents through the use
32
00:01:35,510 --> 00:01:37,950
of VCS. And I'm sure that you all had
33
00:01:37,950 --> 00:01:41,320
the experience of deleting a file by mistake or
34
00:01:41,320 --> 00:01:43,860
modifying a file in the wrong way, or in the
35
00:01:43,860 --> 00:01:47,830
most common case of changing something in your code for instance.
36
00:01:47,830 --> 00:01:50,490
And breaking something and not being able to go back
37
00:01:50,490 --> 00:01:53,630
to a version that was working. Not remembering, for example, what
38
00:01:53,630 --> 00:01:56,130
is that you changed that broke the code. In all
39
00:01:56,130 --> 00:01:59,850
these cases a version control system can be extremely useful because
40
00:01:59,850 --> 00:02:03,330
it will allow you to recover from this accidental deletions
41
00:02:03,330 --> 00:02:06,690
or edits. And for example, to go back of yesterdays version
42
00:02:06,690 --> 00:02:09,949
that was working perfectly, and also to compare, for example, yesterdays
43
00:02:09,949 --> 00:02:12,920
version with today version and see what is that you changed.
44
00:02:12,920 --> 00:02:16,000
Finally, a version control system will normally also allow you to
45
00:02:16,000 --> 00:02:20,460
conserve and save disk space on both the source control client
46
00:02:20,460 --> 00:02:23,880
and on the server. Why? Well, for instance because it's centralizing
47
00:02:23,880 --> 00:02:26,570
the management of the version. So instead of having many copies
48
00:02:26,570 --> 00:02:29,480
spread around, you'll have only one central point where these copies
49
00:02:29,480 --> 00:02:32,240
are stored or a few points where these copies are stored.
50
00:02:32,240 --> 00:02:34,330
In addition, version control system often
51
00:02:34,330 --> 00:02:37,470
uses efficient algorithms to store these changes.
52
00:02:37,470 --> 00:02:41,310
And therefore, you can keep many versions without taking up too much space.

View File

@ -1,31 +0,0 @@
1
00:00:00,100 --> 00:00:02,430
Now before we continue, and we look at more details
2
00:00:02,430 --> 00:00:04,400
of version control systems, I want to ask you a
3
00:00:04,400 --> 00:00:07,230
quick question about VCS. I want to know whether you
4
00:00:07,230 --> 00:00:10,190
have used a version control system before, and if so,
5
00:00:10,190 --> 00:00:12,090
which one or which ones. I'm going to list in
6
00:00:12,090 --> 00:00:15,260
here some of the most commonly used version control systems,
7
00:00:15,260 --> 00:00:18,840
like CVS, Subversion, GIT, and I'm also allowing you to
8
00:00:18,840 --> 00:00:22,640
specify other VCS in case you have used different ones.

View File

@ -1,11 +0,0 @@
1
00:00:00,130 --> 00:00:03,030
And of course there's no right answer for this. I just wanted to collect some
2
00:00:03,030 --> 00:00:05,020
statistics. To see what kind of previous
3
00:00:05,020 --> 00:00:07,100
experience you have with this kind of systems.

View File

@ -1,79 +0,0 @@
1
00:00:00,140 --> 00:00:02,220
What I want to do next, is to look at how
2
00:00:02,220 --> 00:00:05,780
version control systems actually work. We saw what they are. We
3
00:00:05,780 --> 00:00:08,130
saw why they are useful. But how do they actually work?
4
00:00:08,130 --> 00:00:11,460
And we're going to do that by starting from some essential
5
00:00:11,460 --> 00:00:15,400
actions that version control systems perform. The first one is the
6
00:00:15,400 --> 00:00:18,920
addition of files. So, when you use a version control system,
7
00:00:18,920 --> 00:00:22,280
you can add a file to the repository. And at that
8
00:00:22,280 --> 00:00:25,400
point the file will be accessible to other people who have access
9
00:00:25,400 --> 00:00:28,640
to the repository. And now the fundamental action is commit.
10
00:00:28,640 --> 00:00:31,230
When you change a file, a file that is already in
11
00:00:31,230 --> 00:00:33,610
the repository, when you make some local changes to a
12
00:00:33,610 --> 00:00:36,430
file that is already in the repository, you want then to
13
00:00:36,430 --> 00:00:39,460
commit your changes to the central repository, so they can
14
00:00:39,460 --> 00:00:43,990
become visible to all of the other users on the repository. Finally,
15
00:00:43,990 --> 00:00:47,770
another fundamental action is the action of updating a file. If
16
00:00:47,770 --> 00:00:50,650
we have a repository and someone else can modify the files
17
00:00:50,650 --> 00:00:52,800
in the repository, I want to be able to get
18
00:00:52,800 --> 00:00:55,550
the changes that other people made to the files in the
19
00:00:55,550 --> 00:00:58,980
repository. And these are just three of the basic actions, but
20
00:00:58,980 --> 00:01:01,870
there are many, many more. And we'll see several of those.

View File

@ -1,111 +0,0 @@
1
00:00:00,160 --> 00:00:02,830
Before looking at additional actions, though, I would like to
2
00:00:02,830 --> 00:00:06,770
see what is the basic workflow in a version control system
3
00:00:06,770 --> 00:00:09,370
using the three actions that we just saw. And to
4
00:00:09,370 --> 00:00:11,760
do that I'm going to use two of our friends, Brad
5
00:00:11,760 --> 00:00:14,590
and Janet. So we have Janet here, Brad, and a
6
00:00:14,590 --> 00:00:18,440
VCS that they are using. Now imagine that Janet creates a
7
00:00:18,440 --> 00:00:23,020
file called foo.txt and puts some information in the file.
8
00:00:23,020 --> 00:00:25,250
At that point she might want to add the file to
9
00:00:25,250 --> 00:00:28,340
the repository and to commit it so that her changes
10
00:00:28,340 --> 00:00:31,210
and the file get to the central repository. And when she
11
00:00:31,210 --> 00:00:33,900
adds and commit, that's exactly what will happen, in foo
12
00:00:33,900 --> 00:00:36,870
will be come available here, and will be accessible to the
13
00:00:36,870 --> 00:00:40,330
other users. In this case it'll be accessible to Brad.
14
00:00:40,330 --> 00:00:44,190
If Brett were to run an update command, what will happen
15
00:00:44,190 --> 00:00:47,800
is that the file foo.txt will be copied on the local
16
00:00:47,800 --> 00:00:50,460
work space of Brad and Brad will be able to access
17
00:00:50,460 --> 00:00:52,980
the file. At this point Brad might want to modify
18
00:00:52,980 --> 00:00:57,110
the file, for example add something to this existing file.
19
00:00:57,110 --> 00:00:59,410
After doing that, he also may want to share the
20
00:00:59,410 --> 00:01:02,900
updated file with Janet. To do that, he will commit the
21
00:01:02,900 --> 00:01:06,070
file and the result will be exactly the same of
22
00:01:06,070 --> 00:01:09,470
when Janet committed her file. That the updated file will
23
00:01:09,470 --> 00:01:11,890
be sent to the repository and the repository will store
24
00:01:11,890 --> 00:01:15,570
that information and make it available for other users. So now,
25
00:01:15,570 --> 00:01:18,290
if Janet performs an update, she will get the
26
00:01:18,290 --> 00:01:21,860
new version of foo.txt with the additional information that was
27
00:01:21,860 --> 00:01:24,950
added by Brad. And we will see all of this
28
00:01:24,950 --> 00:01:27,350
in action in our next demo in a few minutes.

View File

@ -1,175 +0,0 @@
1
00:00:00,100 --> 00:00:02,020
Before getting to the demo, I want to say a few
2
00:00:02,020 --> 00:00:06,550
more things. In particular, I discuss the main don'ts in VCS. So,
3
00:00:06,550 --> 00:00:09,110
what are some things that you don't want to do, and
4
00:00:09,110 --> 00:00:12,687
you should not do, when you're using a version control system? And
5
00:00:12,687 --> 00:00:15,382
I'm going to mention two, in particular, because these are two
6
00:00:15,382 --> 00:00:18,028
that I witnessed several times when I was teaching this class and
7
00:00:18,028 --> 00:00:21,820
also when collaborating with other people. So, there are two kinds
8
00:00:21,820 --> 00:00:25,460
of resources that you don't want to add to a VCS normally.
9
00:00:25,460 --> 00:00:29,070
One is derived files. For example an executable that is
10
00:00:29,070 --> 00:00:31,930
derived by compiling a set of source files, where the
11
00:00:31,930 --> 00:00:34,480
source files all already in the repository. At that point,
12
00:00:34,480 --> 00:00:37,680
there is no reason to also add the executable file in
13
00:00:37,680 --> 00:00:41,150
the repository. So in general, any executable file should not
14
00:00:41,150 --> 00:00:44,570
be added to repository. The second class of files that I
15
00:00:44,570 --> 00:00:47,760
want to mention is these bulky binary files. If you
16
00:00:47,760 --> 00:00:50,600
have one such file, it is normally not a good idea
17
00:00:50,600 --> 00:00:53,430
to store them under a version control system, to store them
18
00:00:53,430 --> 00:00:56,670
in the repository. There might be exceptions to these rules, but in
19
00:00:56,670 --> 00:00:59,070
general, these are the kind of files that you want to
20
00:00:59,070 --> 00:01:02,540
keep local, and you don't want to put in the VCS repository.
21
00:01:02,540 --> 00:01:06,500
Another typical mistake, and that happens all the time, especially to
22
00:01:06,500 --> 00:01:10,650
novice users of VCS. Is that you get your file from VCS
23
00:01:10,650 --> 00:01:13,120
and so you get your local copy of the file that
24
00:01:13,120 --> 00:01:16,270
was in the VCS, and you want to make some changes, and
25
00:01:16,270 --> 00:01:20,090
before making the changes you decided, no, no let me actually save
26
00:01:20,090 --> 00:01:22,410
a local copy of the file, and I'm going to work on
27
00:01:22,410 --> 00:01:24,950
that one. Or let me save it before I modify it, or
28
00:01:24,950 --> 00:01:28,350
let take a snap shot of a whole tree of files. Just because
29
00:01:28,350 --> 00:01:30,830
I don't really trust the fact that VCS is going to be
30
00:01:30,830 --> 00:01:33,170
able to help and is going to be able to recover from possible
31
00:01:33,170 --> 00:01:36,980
mistakes. Never ever do that. I have seen that done many times,
32
00:01:36,980 --> 00:01:41,570
and it always leads to disasters. First of all it is useless, and
33
00:01:41,570 --> 00:01:44,000
second it's risky. Because then what happens is that at
34
00:01:44,000 --> 00:01:46,610
the time in which you have to turn in your assignment,
35
00:01:46,610 --> 00:01:48,330
in the case you are doing an assignment, but even in
36
00:01:48,330 --> 00:01:50,740
more serious situation, when you have to turn in your code,
37
00:01:50,740 --> 00:01:54,620
for example to your colleagues. You always end up being confused
38
00:01:54,620 --> 00:01:59,010
about which is the version that you're really using. So absolutely
39
00:01:59,010 --> 00:02:03,262
no local copies. No local redundancy when you're using a version
40
00:02:03,262 --> 00:02:06,798
control system. Trust the version control system, and trust the version
41
00:02:06,798 --> 00:02:09,280
control system to be able to manage your versions. You
42
00:02:09,280 --> 00:02:13,350
can always save it, commit it, retrieve previous versions, and you'll
43
00:02:13,350 --> 00:02:15,530
be able to do everything that you can do by copying
44
00:02:15,530 --> 00:02:19,240
the file yourself, and even more. So again, try the VCS.

View File

@ -1,163 +0,0 @@
1
00:00:00,160 --> 00:00:01,970
Something else I want to mention is that there
2
00:00:01,970 --> 00:00:05,460
are many different version control systems but we can classify
3
00:00:05,460 --> 00:00:09,250
them normally in two main types: centralized VCS's and
4
00:00:09,250 --> 00:00:13,230
decentralized VCS's. So what is the difference between these two?
5
00:00:13,230 --> 00:00:16,750
Let's use again our friends Janet and Brett.
6
00:00:16,750 --> 00:00:19,510
In the case of a centralized version control system
7
00:00:19,510 --> 00:00:22,290
there is a single centralized, as the name says,
8
00:00:22,290 --> 00:00:25,230
repository. On which they are commiting their files. So when
9
00:00:25,230 --> 00:00:27,290
Janet commits a file. The file will go from
10
00:00:27,290 --> 00:00:30,390
her local working directory to the repository, and the same
11
00:00:30,390 --> 00:00:33,520
will happen to Brett. The decentralized system is a little
12
00:00:33,520 --> 00:00:37,310
more interesting because in this case, they will both have
13
00:00:37,310 --> 00:00:40,790
sort of a local repository in which they can commit
14
00:00:40,790 --> 00:00:43,970
their changes. So they can commit changes without the other
15
00:00:43,970 --> 00:00:47,940
users of the VCS being able to see these changes.
16
00:00:47,940 --> 00:00:50,300
And when they're happy with the version. And when they're
17
00:00:50,300 --> 00:00:53,900
ready to release the version, they can push it to a central
18
00:00:53,900 --> 00:00:56,840
repository. And at that point, it will become available to the other
19
00:00:56,840 --> 00:01:01,100
users of the repository. To the other users of the VCS. There
20
00:01:01,100 --> 00:01:02,870
are several advantages in a distributive
21
00:01:02,870 --> 00:01:04,300
system. I'm just going to mention a few,
22
00:01:04,300 --> 00:01:07,520
because there are really many. One is the fact of having this
23
00:01:07,520 --> 00:01:10,570
local version. If you used VCS before, I'm sure you've been in
24
00:01:10,570 --> 00:01:13,280
the situation in which you want to kind of take a snapshot
25
00:01:13,280 --> 00:01:15,820
of what you have. But you don't want that snapshot to be available
26
00:01:15,820 --> 00:01:18,200
to the other users. Because it's still not ready to be
27
00:01:18,200 --> 00:01:21,240
released, to be looked up. If you're using a centralized system,
28
00:01:21,240 --> 00:01:23,140
there's really no way you can do that, unless you make
29
00:01:23,140 --> 00:01:25,150
a local copy, which is something we said you don't want
30
00:01:25,150 --> 00:01:28,625
to do. With a distributor, with a decentralized VCS you can
31
00:01:28,625 --> 00:01:32,444
commit your local changes here, in your local repository, and you
32
00:01:32,444 --> 00:01:37,030
can push them to the central repository only when you're ready.
33
00:01:37,030 --> 00:01:40,870
Another big advantage, is that you can use multiple remote repository.
34
00:01:40,870 --> 00:01:43,210
In fact, centralized is not the right name for this
35
00:01:43,210 --> 00:01:45,980
one. This is just a remote repository, and I can have
36
00:01:45,980 --> 00:01:48,910
more than one. For example, Brad might want to push
37
00:01:48,910 --> 00:01:52,150
to another remote repository. As well. For instance, this could be
38
00:01:52,150 --> 00:01:55,940
a repository where the files are accessible for wider distribution.
39
00:01:55,940 --> 00:01:59,620
Imagine developing a software system in which a team is sharing
40
00:01:59,620 --> 00:02:02,930
internal versions, and then only some of these versions are actually
41
00:02:02,930 --> 00:02:06,080
pushed to the repository that is seeable to the whole world.

View File

@ -1,63 +0,0 @@
1
00:00:00,270 --> 00:00:02,969
Gathering requirements is one of the most difficult tasks a software
2
00:00:02,969 --> 00:00:07,010
engineer faces. In industry, you may gather requirements from end users,
3
00:00:07,010 --> 00:00:09,580
external clients, or from co-workers in other areas of your own
4
00:00:09,580 --> 00:00:14,320
company. Occasionally, you may receive a well documented set of requirements.
5
00:00:14,320 --> 00:00:16,970
However, in most cases, you will need to glean the requirements
6
00:00:16,970 --> 00:00:20,230
from conversations with the prospective clients, and distill them down into
7
00:00:20,230 --> 00:00:23,150
something actionable on your own. Suppose a teacher came to you
8
00:00:23,150 --> 00:00:25,310
with a request for a piece of software their students could
9
00:00:25,310 --> 00:00:28,500
use to find out the average length of the sentences in
10
00:00:28,500 --> 00:00:31,390
their essays. What questions come into mind to help you figure
11
00:00:31,390 --> 00:00:34,620
out the full requirements for this project. Write down a list
12
00:00:34,620 --> 00:00:37,630
of at least ten questions that might help you determine them.
13
00:00:37,630 --> 00:00:40,240
Please take the time to do this before moving on. There's
14
00:00:40,240 --> 00:00:42,670
no penalty for looking ahead, but if you skip this exercise
15
00:00:42,670 --> 00:00:44,920
you'll cheat yourself out of the benefits of brainstorming and getting
16
00:00:44,920 --> 00:00:48,190
your mind around the project before being bombarded by more information.

View File

@ -1,15 +0,0 @@
1
00:00:00,150 --> 00:00:03,400
Now that you've written some of your own questions, consider the following
2
00:00:03,400 --> 00:00:07,120
three. Which is the most likely to be useful for determining the detailed
3
00:00:07,120 --> 00:00:11,730
requirements? Maybe, what OSes should it run on? Or maybe, how will the
4
00:00:11,730 --> 00:00:16,210
user specify input? Or finally, how many lines of code should it take?

View File

@ -1,55 +0,0 @@
1
00:00:00,450 --> 00:00:03,260
The last question is almost never a reasonable one. For one
2
00:00:03,260 --> 00:00:05,660
thing, the client should not need to know or care about
3
00:00:05,660 --> 00:00:08,412
how many lines of code make up the program's source code.
4
00:00:08,412 --> 00:00:09,910
In forming requirements, you should avoid
5
00:00:09,910 --> 00:00:11,940
implementation specific questions that do not
6
00:00:11,940 --> 00:00:15,290
directly interface with the user. The first question is very relevant
7
00:00:15,290 --> 00:00:18,830
in some situations. For example, a graphic sentence with video game or
8
00:00:18,830 --> 00:00:21,630
performance is key. However, you should not write any operating system
9
00:00:21,630 --> 00:00:25,620
specific code unless absolutely needed, and should strive to make your code
10
00:00:25,620 --> 00:00:28,070
platform independent whenever possible. The
11
00:00:28,070 --> 00:00:30,990
second question, however, is very relevant.
12
00:00:30,990 --> 00:00:32,870
Now that you've thought a bit about what you might ask of
13
00:00:32,870 --> 00:00:35,810
the client requesting this program, let's watch Alvin, one of Udasea's
14
00:00:35,810 --> 00:00:39,850
engineers, asking his own questions. He'll be speaking with Lauren, the client.

View File

@ -1,323 +0,0 @@
1
00:00:00,430 --> 00:00:01,050
Hi, I'm Lauren.
2
00:00:01,050 --> 00:00:01,990
>> Hi, I'm Alvin.
3
00:00:01,990 --> 00:00:06,470
>> I'm an instructor at a university nearby and I've been noticing that when
4
00:00:06,470 --> 00:00:09,700
my students write their essays, they have
5
00:00:09,700 --> 00:00:13,100
very long, very wordy sentences and I would
6
00:00:13,100 --> 00:00:17,600
like to develop some kind of tool that they can use to keep track of
7
00:00:17,600 --> 00:00:20,440
this and maybe perfect their writing style.
8
00:00:20,440 --> 00:00:21,410
Do you think that's something you could do?
9
00:00:21,410 --> 00:00:25,850
>> I think so. Let's start by helping me get acquainted with the students
10
00:00:25,850 --> 00:00:29,620
in the class. So how many students do we have in this class typically?
11
00:00:29,620 --> 00:00:34,000
>> Usually about 45 per unit, but I can have up to six units a semester.
12
00:00:34,000 --> 00:00:36,420
>> 45 students, and six sections per
13
00:00:36,420 --> 00:00:39,220
semester. That's a farily reasonable size. So,
14
00:00:39,220 --> 00:00:42,790
do you know anything about what the students are using as far as computers go?
15
00:00:42,790 --> 00:00:46,640
>> I don't know what kind of computers they're using. And they
16
00:00:46,640 --> 00:00:50,960
could be, I don't know, anywhere from having no tech experience to
17
00:00:50,960 --> 00:00:52,200
being pretty proficient.
18
00:00:52,200 --> 00:00:54,930
>> Do you know anything about how
19
00:00:54,930 --> 00:00:57,350
familiar the students are with computers in general?
20
00:00:57,350 --> 00:00:59,540
>> I'm sure we have some people on the low end that have
21
00:00:59,540 --> 00:01:01,430
never done any type of programming, and
22
00:01:01,430 --> 00:01:03,680
then some people who are pretty self-sufficient.
23
00:01:03,680 --> 00:01:07,210
>> Okay, and I guess my last question related to
24
00:01:07,210 --> 00:01:10,170
the students is, what is the students actually submitting to you.
25
00:01:10,170 --> 00:01:14,080
>> They've been sending just raw text files via email to me.
26
00:01:14,080 --> 00:01:16,660
>> So from the sounds of things
27
00:01:16,660 --> 00:01:19,140
we have a fairly broad, I guess base
28
00:01:19,140 --> 00:01:23,100
of students to work with, both in technical proficiency
29
00:01:23,100 --> 00:01:27,180
as well as their operating system environments potentially.
30
00:01:27,180 --> 00:01:29,420
So I think what we'll probably do to start
31
00:01:29,420 --> 00:01:33,270
off with is make a command line, Java
32
00:01:33,270 --> 00:01:36,760
based tool. That the students can run and we'll
33
00:01:36,760 --> 00:01:39,910
give them a fair amount of you know, documentation
34
00:01:39,910 --> 00:01:41,690
on how to use the tool. And I expect
35
00:01:41,690 --> 00:01:45,090
that there will be a lot of little error conditions that may happen
36
00:01:45,090 --> 00:01:49,320
that we want to produce a reasonably friendly message were anything to go wrong.
37
00:01:49,320 --> 00:01:50,480
>> Yeah. That'd be great.
38
00:01:50,480 --> 00:01:54,750
>> So, a little bit more, I guess about
39
00:01:54,750 --> 00:01:58,539
the actual essay itself, its submission, what constitutes a word?
40
00:01:59,820 --> 00:02:03,190
>> I really only care about the longer words, so, is there a
41
00:02:03,190 --> 00:02:06,140
way that we can only count words that are maybe above three letters?
42
00:02:06,140 --> 00:02:06,830
>> I think
43
00:02:06,830 --> 00:02:08,508
that's something we can do. And I think
44
00:02:08,508 --> 00:02:10,030
that because you seem a little bit unsure
45
00:02:10,030 --> 00:02:11,540
we might be able to have that be
46
00:02:11,540 --> 00:02:13,820
a little bit more flexible than we otherwise would.
47
00:02:13,820 --> 00:02:14,500
>> Great.
48
00:02:14,500 --> 00:02:18,330
>> What does a sentence mean to you? Is it kind of flexible?
49
00:02:18,330 --> 00:02:21,280
>> I would say anything that ends in a period or
50
00:02:21,280 --> 00:02:25,870
even a question mark. Maybe even an exclamation mark. or, something
51
00:02:25,870 --> 00:02:28,760
even, maybe even with a comma or semi-colon. I really only
52
00:02:28,760 --> 00:02:32,370
care about the sentences that aren't gramatically correct and are too long.
53
00:02:32,370 --> 00:02:35,180
>> I think we can probably make that a little bit more flexible too
54
00:02:35,180 --> 00:02:37,520
so that way, you can kind of say we're going to, or you want to include them.
55
00:02:37,520 --> 00:02:38,020
>> Mm-hm.
56
00:02:38,020 --> 00:02:41,786
>> So maybe, sounds like you are little bit on the fence
57
00:02:41,786 --> 00:02:45,100
about whether or not say, a comma should be considered a sentence.
58
00:02:45,100 --> 00:02:45,130
>> Mm.
59
00:02:45,130 --> 00:02:46,370
>> Entirely on its own or not. So we
60
00:02:46,370 --> 00:02:49,830
can probably make that a little bit configurable as well.
61
00:02:51,880 --> 00:02:56,510
And so, just to confirm the actual end result to
62
00:02:56,510 --> 00:02:59,870
the student is the average number of words per sentence?
63
00:02:59,870 --> 00:03:01,610
>> Yeah, yeah that'd be fine.
64
00:03:01,610 --> 00:03:07,430
>> Okay, overall to start off with, looks like we have some
65
00:03:07,430 --> 00:03:10,280
sort of customization of the word length that we want to look for.
66
00:03:10,280 --> 00:03:10,780
>> Mm-hm. Yeah.
67
00:03:12,000 --> 00:03:14,650
>> We have some kind of variability in
68
00:03:14,650 --> 00:03:17,880
what we want to have as acceptable sentence structure.
69
00:03:17,880 --> 00:03:24,570
So, periods, question marks, semicolons, things like that. And, the end result
70
00:03:24,570 --> 00:03:27,260
to the student is if we're successful, they'll get the average number of
71
00:03:27,260 --> 00:03:31,060
words per sentence. Otherwise we tell them something a little bit helpful to
72
00:03:31,060 --> 00:03:33,240
kind of put them on the right track to use the tool correctly.
73
00:03:33,240 --> 00:03:34,620
>> Yeah that's the error codes right?
74
00:03:35,850 --> 00:03:38,150
>> Hopefully not error codes but something a little bit nicer.
75
00:03:38,150 --> 00:03:39,800
>> [LAUGH] Okay.
76
00:03:39,800 --> 00:03:41,150
>> So I think I have enough to
77
00:03:41,150 --> 00:03:43,440
get started and produce something that's you know,
78
00:03:43,440 --> 00:03:47,150
a reasonable I guess, rough draft. Of something
79
00:03:47,150 --> 00:03:48,700
that you can use to help your class out.
80
00:03:48,700 --> 00:03:49,590
>> Great. Thank you.
81
00:03:49,590 --> 00:03:50,240
>> Thank you.

View File

@ -1,83 +0,0 @@
1
00:00:00,340 --> 00:00:02,300
You've heard Alvin come up with several conclusions for how to
2
00:00:02,300 --> 00:00:04,510
set up the program. And we're going to ask that you follow his
3
00:00:04,510 --> 00:00:07,590
instincts. We'll spell that out here in a little more technical details
4
00:00:07,590 --> 00:00:11,030
so that everyone is working from the same basic starting point. The
5
00:00:11,030 --> 00:00:13,770
program must be written in Java and must not make you any
6
00:00:13,770 --> 00:00:16,730
nonstandard Java libraries. You will be tested on a machine with the
7
00:00:16,730 --> 00:00:21,060
vanilla installation of Java 1.6. Your program must compile on the command
8
00:00:21,060 --> 00:00:25,360
line using the Java C command without any additional options. All code
9
00:00:25,360 --> 00:00:27,530
required to execute the program that is not part of the
10
00:00:27,530 --> 00:00:31,950
standard JDK, must be included as source code with your program.
11
00:00:31,950 --> 00:00:34,380
Your program should be an application. That is, it should have
12
00:00:34,380 --> 00:00:37,160
a main method and should be executable from the command line using
13
00:00:37,160 --> 00:00:40,100
the Java command. The user should be able to provide a
14
00:00:40,100 --> 00:00:42,450
file path to the file they wish to be analyzed as a
15
00:00:42,450 --> 00:00:45,880
command line argument. User should be able to specify which delimiters
16
00:00:45,880 --> 00:00:50,570
count as sentence separators, using the flag -d, defaulting to Lauren's initial
17
00:00:50,570 --> 00:00:53,930
thoughts on what should be used as delimiters. The user should be
18
00:00:53,930 --> 00:00:58,170
able to specify a lower limit for word length, using the flag -l,
19
00:00:58,170 --> 00:01:02,100
defaulting to Lauren's guess at what value might be good. Finally, the program's
20
00:01:02,100 --> 00:01:03,710
output should be the average sentence
21
00:01:03,710 --> 00:01:05,720
length. Rounded down to the nearest integer.

View File

@ -1,55 +0,0 @@
1
00:00:00,340 --> 00:00:05,670
Hello and welcome to the second part of our software engineering course. In the
2
00:00:05,670 --> 00:00:09,030
previous mini-course, we discussed some basic principles
3
00:00:09,030 --> 00:00:12,430
behind software engineering. We provided an overview of
4
00:00:12,430 --> 00:00:15,790
several software process models and we introduced
5
00:00:15,790 --> 00:00:18,530
some important tools that can help developers
6
00:00:18,530 --> 00:00:21,363
increase their productivity. In this mini-course, we
7
00:00:21,363 --> 00:00:25,740
will focus on requirement and prototyping. More precisely,
8
00:00:25,740 --> 00:00:28,840
we will discuss in depth requirements
9
00:00:28,840 --> 00:00:32,400
engineering activities. We will also discuss
10
00:00:32,400 --> 00:00:34,950
techniques to perform a system analysis
11
00:00:34,950 --> 00:00:38,720
and design in an object-oriented fashion. So,
12
00:00:38,720 --> 00:00:42,250
let's start the first lesson of this mini-course, which is about the use
13
00:00:42,250 --> 00:00:45,230
of engineering techniques to understand and
14
00:00:45,230 --> 00:00:48,450
specify the purpose of a software system.

View File

@ -1,15 +0,0 @@
1
00:00:00,130 --> 00:00:03,060
So now that we saw which of these requirements are pertinent and
2
00:00:03,060 --> 00:00:06,520
which ones are not, can we consider the above list of requirements
3
00:00:06,520 --> 00:00:09,710
of the list of these requirements marked here as a complete list
4
00:00:09,710 --> 00:00:13,254
of requirements for a gym? And you have two options, yes or no.

View File

@ -1,23 +0,0 @@
1
00:00:00,160 --> 00:00:02,060
And the answer is clearly no.
2
00:00:02,060 --> 00:00:05,060
Obviously, there are many missing requirements here.
3
00:00:05,060 --> 00:00:07,910
For example, requirements about registration for the
4
00:00:07,910 --> 00:00:11,560
customers, requirements about fitness program creation, membership
5
00:00:11,560 --> 00:00:15,481
types, and so on. Plus, we are also missing all of the nonfunctional
6
00:00:15,481 --> 00:00:19,270
requirements, which we haven't seen yet, but that we will discuss in a bit.

View File

@ -1,43 +0,0 @@
1
00:00:00,140 --> 00:00:02,400
In the previous quiz, we saw that some of the requirements
2
00:00:02,400 --> 00:00:04,920
that they put in the list were not pertinent. They were
3
00:00:04,920 --> 00:00:08,590
irrelevant. So let me ask you. Why can irrelevant requirements be
4
00:00:08,590 --> 00:00:12,170
harmful? Why is that a problem to have irrelevant requirements? So
5
00:00:12,170 --> 00:00:15,060
here, I'm giving you four possible answers. And I'd like for
6
00:00:15,060 --> 00:00:18,150
you to mark all that apply. Can irrelevant requirements be harmful
7
00:00:18,150 --> 00:00:21,210
because they may lead to missing functionality in the final product.
8
00:00:21,210 --> 00:00:23,390
Because they can introduce inconsistency. Because
9
00:00:23,390 --> 00:00:25,410
they can waste the project resources.
10
00:00:25,410 --> 00:00:28,170
Or because they may introduce bugs in the software system. And
11
00:00:28,170 --> 00:00:30,680
as I said, more than one can be a valid reason.

View File

@ -1,63 +0,0 @@
1
00:00:00,200 --> 00:00:02,920
So let's go through the list. Definitely irrelevant requirements
2
00:00:02,920 --> 00:00:06,370
cannot lead to missing functionality in the final product, because
3
00:00:06,370 --> 00:00:10,730
irrelevant requirements actually refer to unneeded functionality in the system.
4
00:00:10,730 --> 00:00:13,030
So functionality that is put in the requirements, but it
5
00:00:13,030 --> 00:00:15,120
is not really needed. So we're not going to mark
6
00:00:15,120 --> 00:00:19,400
this one. Indeed, irrelevant requirements can introduce inconsistencies. So they
7
00:00:19,400 --> 00:00:22,490
could be irrelevant requirements that not only are not pertinent
8
00:00:22,490 --> 00:00:25,620
but they are inconsistent with some of the pertinent requirements.
9
00:00:25,620 --> 00:00:29,220
They can also waste project resources, because if we spend time
10
00:00:29,220 --> 00:00:31,920
designing and then implementing the parts of the system that we
11
00:00:31,920 --> 00:00:35,410
refer to these irrelevant requirements, of course, we are wasting project
12
00:00:35,410 --> 00:00:38,570
resources. And I will not mark the last one because there's really
13
00:00:38,570 --> 00:00:42,220
no correlation between any irrelevant requirements and bugs in the software
14
00:00:42,220 --> 00:00:45,350
system. Of course, by implementing the part of the system that refers
15
00:00:45,350 --> 00:00:47,960
to an irrelevant requirement you might introduce a bug. But that's
16
00:00:47,960 --> 00:00:51,020
not necessarily the case, and there really no correlation between the two.

View File

@ -1,83 +0,0 @@
1
00:00:00,150 --> 00:00:02,290
But we collect requirements all the time, right? Every
2
00:00:02,290 --> 00:00:04,960
time we build a software system. So how do people
3
00:00:04,960 --> 00:00:08,320
cope with these difficulties? What are the best practices?
4
00:00:08,320 --> 00:00:12,950
In practice, developers or analysts usually identify a whole bunch
5
00:00:12,950 --> 00:00:16,590
of requirements. Sometimes the easiest and most obvious ones. They
6
00:00:16,590 --> 00:00:19,370
bring those to the stakeholders, and the stakeholders have to
7
00:00:19,370 --> 00:00:23,100
read the requirements, understand them, and if they agree, sign
8
00:00:23,100 --> 00:00:25,580
off on them. And the problem is that in general,
9
00:00:25,580 --> 00:00:28,910
these requirements documents are difficult to read. They are long, they
10
00:00:28,910 --> 00:00:32,470
are often unstructured. They typically contain a lot of information. And
11
00:00:32,470 --> 00:00:35,310
in general, they are not exactly a pleasant read. So what
12
00:00:35,310 --> 00:00:39,710
happens is that often the stakeholders are short on time, overwhelmed
13
00:00:39,710 --> 00:00:42,380
by the amount of information they're given and so they give
14
00:00:42,380 --> 00:00:44,800
in to the pressure and sign. And this is a bit
15
00:00:44,800 --> 00:00:47,300
of a dramatization clearly but it's clear that what we are
16
00:00:47,300 --> 00:00:50,640
looking at is not an ideal scenario. Clearly this is not
17
00:00:50,640 --> 00:00:53,810
the way to identify the real purpose of a software system to
18
00:00:53,810 --> 00:00:57,920
collect good requirements. And since one of the major causes for project
19
00:00:57,920 --> 00:01:02,130
failure is the inadequacy of requirements, we should really avoid this kind
20
00:01:02,130 --> 00:01:03,590
of scenario. We should follow a
21
00:01:03,590 --> 00:01:06,810
rigorous and effective requirements engineering process instead.

View File

@ -1,207 +0,0 @@
1
00:00:00,130 --> 00:00:02,540
But how can we do that? How can we identify the purpose
2
00:00:02,540 --> 00:00:06,080
of the system and collect good requirements? To answer that question, let me
3
00:00:06,080 --> 00:00:07,800
give you another definition of requirements
4
00:00:07,800 --> 00:00:09,590
engineering. And this one is a classical
5
00:00:09,590 --> 00:00:13,010
one, one that summarizes what we discussed so far, and then we can
6
00:00:13,010 --> 00:00:16,180
use as some sort of reference. And it is a little long.
7
00:00:16,180 --> 00:00:18,710
Definitely longer than the one that we saw at the beginning. But it's
8
00:00:18,710 --> 00:00:21,840
an important one and it contains a lot of very relevant points. So,
9
00:00:21,840 --> 00:00:25,210
we're going to go through it and highlight these points. So the definition says,
10
00:00:25,210 --> 00:00:28,970
that the requirements engineering is a set of activities concerned
11
00:00:28,970 --> 00:00:32,990
with identifying and communicating the purpose of a software intensive
12
00:00:32,990 --> 00:00:35,770
system and the context in which it will be used.
13
00:00:35,770 --> 00:00:38,570
And this is exactly what we said at the beginning. But
14
00:00:38,570 --> 00:00:40,940
something we can highlight in here, is the fact that
15
00:00:40,940 --> 00:00:44,210
we're talking about a set of activities. So, what that means
16
00:00:44,210 --> 00:00:46,800
is that requirements engineering is not just a phase or
17
00:00:46,800 --> 00:00:51,050
a stage. It also says that it's about identifying and communicating.
18
00:00:51,050 --> 00:00:53,720
And what that is telling us is that communication is
19
00:00:53,720 --> 00:00:56,670
as important as the analysis. So, it's important to be
20
00:00:56,670 --> 00:00:59,990
able to communicate these requirements not only to collect them.
21
00:00:59,990 --> 00:01:02,018
And we will discuss many reasons why that is the
22
00:01:02,018 --> 00:01:05,880
case. It explicitly talks about purpose. So that allows me
23
00:01:05,880 --> 00:01:10,310
to stress, once more, that quality means fitness-for-purpose. We cannot
24
00:01:10,310 --> 00:01:14,410
say anything about quality unless we understand the purpose. And
25
00:01:14,410 --> 00:01:16,210
the last thing I want to point out in this first
26
00:01:16,210 --> 00:01:18,420
part of the definition is the use of the term
27
00:01:18,420 --> 00:01:21,060
context. This is also something else that we mentioned at
28
00:01:21,060 --> 00:01:24,890
the beginning, that designers, analysts, need to know how and
29
00:01:24,890 --> 00:01:28,015
where the system will be used. Without this information, you
30
00:01:28,015 --> 00:01:30,455
cannot really understand what the system should do and you
31
00:01:30,455 --> 00:01:33,280
cannot really build the system. So now, let's continue and
32
00:01:33,280 --> 00:01:35,755
read the second part of the definition that says, hence.
33
00:01:35,755 --> 00:01:41,550
Requirements engineering acts as the bridge between the real-world needs of
34
00:01:41,550 --> 00:01:45,315
users, customers, and other constituencies affected by a
35
00:01:45,315 --> 00:01:49,440
software system and the capabilities and opportunities afforded
36
00:01:49,440 --> 00:01:52,870
by software-intensive technologies. This is a long sentence,
37
00:01:52,870 --> 00:01:55,030
but also here, we can point out a
38
00:01:55,030 --> 00:01:57,670
few interesting and relevant points. Let me start
39
00:01:57,670 --> 00:02:00,612
by highlighting two parts. Real-world needs, and the
40
00:02:00,612 --> 00:02:04,150
capabilities, and opportunities. So, what are these two
41
00:02:04,150 --> 00:02:07,000
parts telling us? They are telling us that requirements
42
00:02:07,000 --> 00:02:09,949
are partly about what is needed, the real-world needs
43
00:02:09,949 --> 00:02:13,520
of all these stakeholders. But they're also partly about what
44
00:02:13,520 --> 00:02:16,100
is possible, what we can actually build. We need
45
00:02:16,100 --> 00:02:19,260
to compromise between these two things. And, finally, I would
46
00:02:19,260 --> 00:02:23,000
like to point out this term constituencies, which indicates
47
00:02:23,000 --> 00:02:26,220
that we need to identify all of the stakeholders, not
48
00:02:26,220 --> 00:02:29,130
just the customer and the users, so anybody who is
49
00:02:29,130 --> 00:02:32,040
affected by a software system. It is very important to
50
00:02:32,040 --> 00:02:35,130
consider all of these actors. Otherwise, again,
51
00:02:35,130 --> 00:02:37,530
we'll be missing requirements, we'll be missing
52
00:02:37,530 --> 00:02:41,120
part of the purpose of the system and we will build a suboptimal system.

View File

@ -1,219 +0,0 @@
1
00:00:00,220 --> 00:00:02,120
So at this point, we have talked quite a bit about
2
00:00:02,120 --> 00:00:03,800
requirements engineering, but we haven't
3
00:00:03,800 --> 00:00:06,450
really discussed what are requirements exactly.
4
00:00:06,450 --> 00:00:08,880
So what is a requirement? To define that I am going
5
00:00:08,880 --> 00:00:11,860
to use this diagram which is a classical one. So you might
6
00:00:11,860 --> 00:00:14,980
have seen it before. So, discussing this diagram allows me to
7
00:00:14,980 --> 00:00:18,720
point out a few interesting things about requirements and define them
8
00:00:18,720 --> 00:00:21,660
in a better way. At a high level this diagram contains
9
00:00:21,660 --> 00:00:24,780
two main parts, the domain of the machine, which is the hardware,
10
00:00:24,780 --> 00:00:27,670
operating system, libraries and so on, on which the
11
00:00:27,670 --> 00:00:30,860
software will run. And the domain of the application, which
12
00:00:30,860 --> 00:00:33,510
is a world in which the software will operate.
13
00:00:33,510 --> 00:00:36,690
And the machine domain is characterized by computers, which are
14
00:00:36,690 --> 00:00:39,980
the hardware devices, and programs, which is the software
15
00:00:39,980 --> 00:00:43,430
that runs on these devices. The application domain, conversely, is
16
00:00:43,430 --> 00:00:47,370
characterized by domain properties, which are things that are true
17
00:00:47,370 --> 00:00:50,330
of the world anyways, whether I'm building my system or
18
00:00:50,330 --> 00:00:53,510
not, and requirements, which are things in the world we
19
00:00:53,510 --> 00:00:56,220
would like to achieve by delivering the system that we are
20
00:00:56,220 --> 00:00:59,400
building. Basically, to put it in a different way, the former,
21
00:00:59,400 --> 00:01:02,950
the domain properties, represents the assumptions that we make on the
22
00:01:02,950 --> 00:01:06,740
domain. And the latter, the requirements, are the actual requirements
23
00:01:06,740 --> 00:01:09,660
that we aim to collect. So we have something here, right,
24
00:01:09,660 --> 00:01:13,380
at the intersection of this application domain and this machine domain.
25
00:01:13,380 --> 00:01:15,570
And what is that? And this is what we normally call
26
00:01:15,570 --> 00:01:19,225
the specification, which is a description, often a formal description,
27
00:01:19,225 --> 00:01:22,120
of what the system that we are building should do to
28
00:01:22,120 --> 00:01:25,520
meet the requirements. So this is a bridge between these two
29
00:01:25,520 --> 00:01:29,380
domains. And as the graphical depiction shows, the specification is written
30
00:01:29,380 --> 00:01:33,220
in terms of shared phenomena. Things that are observable in both
31
00:01:33,220 --> 00:01:35,980
the machine domain and the application domain. And just to make
32
00:01:35,980 --> 00:01:37,540
things a little more concrete, I want to give you a
33
00:01:37,540 --> 00:01:41,180
couple of examples of what these phenomena, these shared phenomena, are.
34
00:01:41,180 --> 00:01:43,350
And we can think about two main kinds of phenomena.
35
00:01:43,350 --> 00:01:46,080
The first one are events in the real world that the
36
00:01:46,080 --> 00:01:50,140
machine can directly sense. For example, a button being pushed or
37
00:01:50,140 --> 00:01:53,910
a sensor being activated. These are events that happen here, but
38
00:01:53,910 --> 00:01:56,500
that the machine can detect. So they're events that can
39
00:01:56,500 --> 00:01:59,650
be used to define the specification. And the second type of
40
00:01:59,650 --> 00:02:02,890
phenomena are actions in the real world that the machine can
41
00:02:02,890 --> 00:02:06,380
directly cause. For example, an image appearing on a screen or
42
00:02:06,380 --> 00:02:09,300
a device being turned on and off. Again, this is something
43
00:02:09,300 --> 00:02:12,460
that the machine can make happen and then can have manifestation in
44
00:02:12,460 --> 00:02:15,520
the real world. And again this is therefore something on which
45
00:02:15,520 --> 00:02:17,720
the specification can predicate, something that
46
00:02:17,720 --> 00:02:19,750
we can describe in our specification.
47
00:02:19,750 --> 00:02:22,860
And this is sort of a philosophical discussion, but even if
48
00:02:22,860 --> 00:02:26,210
you don't care about the philosophical discussion, the one take away point
49
00:02:26,210 --> 00:02:28,800
that I would like for you to get from this discussion is
50
00:02:28,800 --> 00:02:31,392
the fact that when writing a specification you have to be aware
51
00:02:31,392 --> 00:02:34,860
of the fact that you're talking about shared phenomena. Events in the real
52
00:02:34,860 --> 00:02:39,100
world that the machine can sense and actions in the real world that the
53
00:02:39,100 --> 00:02:43,048
machine can cause. So this is what the specification is about, a bridge between
54
00:02:43,048 --> 00:02:44,760
these two worlds that define what the
55
00:02:44,760 --> 00:02:47,170
system should do to satisfy the requirements.

View File

@ -1,79 +0,0 @@
1
00:00:00,180 --> 00:00:01,780
Since we just discussed application
2
00:00:01,780 --> 00:00:04,770
domain, machine domain, and the specificiation,
3
00:00:04,770 --> 00:00:07,760
let's make sure that these concepts are well understood. To do that,
4
00:00:07,760 --> 00:00:09,740
I'm going to use a quiz, and I would like for you
5
00:00:09,740 --> 00:00:12,590
to refer to the figure that we just discussed that I'm also
6
00:00:12,590 --> 00:00:16,050
reproducing here on a small scale on the right. And then
7
00:00:16,050 --> 00:00:19,080
referring to the figure, you should indicate for each of the items
8
00:00:19,080 --> 00:00:22,140
that I'm going to show you here shortly. Whether they belong to
9
00:00:22,140 --> 00:00:25,360
the machine domain. In this case, we're going to put a one next
10
00:00:25,360 --> 00:00:28,150
to the icon. The application domain, in this case you should
11
00:00:28,150 --> 00:00:31,410
put two. Or their intersection, and in this case you should
12
00:00:31,410 --> 00:00:34,100
put three. So this is the lists of items. So let
13
00:00:34,100 --> 00:00:37,750
me read it. An algorithm sorts a list of books in alphabetical
14
00:00:37,750 --> 00:00:41,070
order by the first author's name. A notification of the arrival
15
00:00:41,070 --> 00:00:44,380
of a message appears on a smart watch. An employee wants to
16
00:00:44,380 --> 00:00:47,150
organize a meeting with a set of colleagues. And finally, a
17
00:00:47,150 --> 00:00:50,690
user clicks a link on a web page. So again, put 1,
18
00:00:50,690 --> 00:00:55,740
2, or 3 here in these lots, depending on whether you think that these items
19
00:00:55,740 --> 00:00:57,840
belong to the machine domain, the application
20
00:00:57,840 --> 00:01:00,910
domain, or their intersection. So, their specification, here.

View File

@ -1,103 +0,0 @@
1
00:00:00,200 --> 00:00:03,460
So let's look at each one of these items individually, starting from
2
00:00:03,460 --> 00:00:06,260
the first one. And here this item has to do with how
3
00:00:06,260 --> 00:00:08,250
the machine stores the information and
4
00:00:08,250 --> 00:00:10,240
how the corresponding algorithm is written.
5
00:00:10,240 --> 00:00:12,920
But it has no bearing in the real world. That is, in
6
00:00:12,920 --> 00:00:15,720
the application domain. Therefore this. Definitely
7
00:00:15,720 --> 00:00:17,200
belongs to the machine domain, and
8
00:00:17,200 --> 00:00:19,610
we're going to put a one here. What about a notification of
9
00:00:19,610 --> 00:00:21,980
the arrival of a message on a smart watch? This is an
10
00:00:21,980 --> 00:00:25,170
event that is generated within the machine, but it has an effect,
11
00:00:25,170 --> 00:00:28,480
an observable effect, in this case, in the real world as well.
12
00:00:28,480 --> 00:00:31,780
Therefore, we're going to mark this as three. So this is an
13
00:00:31,780 --> 00:00:33,460
event. This is something that belongs
14
00:00:33,460 --> 00:00:35,160
to the intersection between the application
15
00:00:35,160 --> 00:00:37,480
domain and the machine domain. So it's something that could be in
16
00:00:37,480 --> 00:00:40,730
the specification. Now what about an employee that wants to organize a
17
00:00:40,730 --> 00:00:43,850
meeting with a set of colleagues? This is an event that belongs
18
00:00:43,850 --> 00:00:46,460
to the application domain because it is a fact that it's true
19
00:00:46,460 --> 00:00:50,290
that exists. In the real world independently from the existence of a machine.
20
00:00:50,290 --> 00:00:52,380
Therefore, we're going to mark this as two.
21
00:00:52,380 --> 00:00:54,890
Finally, the event of a user clicking on a
22
00:00:54,890 --> 00:00:58,950
link on a web page is an event that occurs in the real world but that has an
23
00:00:58,950 --> 00:01:01,932
effect also within the machine and, therefore, we're
24
00:01:01,932 --> 00:01:04,920
going to mark this as three, something that happens
25
00:01:04,920 --> 00:01:07,730
at the intersection. between these two domains, and once
26
00:01:07,730 --> 00:01:10,060
more, something that could be in a specification.

View File

@ -1,139 +0,0 @@
1
00:00:00,188 --> 00:00:02,360
Among the requirement that we can collect from the application
2
00:00:02,360 --> 00:00:05,030
domain, we need to distinguish between two main types. And you've
3
00:00:05,030 --> 00:00:06,540
probably heard about these ones.
4
00:00:06,540 --> 00:00:09,650
Functional requirments and non-functional requiremnts. Functional
5
00:00:09,650 --> 00:00:13,020
requiremetns have to do with the functionality of the system, with
6
00:00:13,020 --> 00:00:16,660
what the system does with the computation. For example the elevator
7
00:00:16,660 --> 00:00:19,660
shall take people to the floor they select. That's a functional
8
00:00:19,660 --> 00:00:22,650
requirement, that has to do with the functionality of the system.
9
00:00:22,650 --> 00:00:25,550
Or for a very simple one, the system has to output
10
00:00:25,550 --> 00:00:27,620
the square root of the number past as
11
00:00:27,620 --> 00:00:29,910
an input. So these kind of requirements have in
12
00:00:29,910 --> 00:00:33,630
general well defined satisfaction criteria. So, for example, if
13
00:00:33,630 --> 00:00:35,420
for the latter one that we mentioned it is
14
00:00:35,420 --> 00:00:37,560
pretty clear how to check whether the output
15
00:00:37,560 --> 00:00:39,784
is actually the square root of the number passed
16
00:00:39,784 --> 00:00:43,535
in input. Non-functional requirements, conversely, refer to a system's
17
00:00:43,535 --> 00:00:46,800
non-functional properties, systems qualities.
18
00:00:46,800 --> 00:00:50,120
Such as security, accuracy, performance,
19
00:00:50,120 --> 00:00:52,220
cost. Or, you know, usability,
20
00:00:52,220 --> 00:00:55,910
adaptability, interoperability, reusability and so
21
00:00:55,910 --> 00:00:58,850
on. So, all these qualities the don't necessarily have to
22
00:00:58,850 --> 00:01:02,520
do with the functionality. And, unlike functional requirements, non functional
23
00:01:02,520 --> 00:01:06,060
requirements Do not always have clear satisfaction criteria. For example,
24
00:01:06,060 --> 00:01:08,670
if we say that the elevator must be fast, that's
25
00:01:08,670 --> 00:01:10,640
a non-functional requrement. Right? It has to do with the
26
00:01:10,640 --> 00:01:13,030
speed of the elevator, which is a quality of the
27
00:01:13,030 --> 00:01:15,535
elevator. But, it, it's not clear how such a requirement
28
00:01:15,535 --> 00:01:17,980
could be satisfied. How could we tell whether the elevator
29
00:01:17,980 --> 00:01:20,000
is fast or not. So, what we need to do
30
00:01:20,000 --> 00:01:22,390
in these cases Is that we need to refine these
31
00:01:22,390 --> 00:01:25,300
requirements so that they become verifiable. For the example that
32
00:01:25,300 --> 00:01:27,360
I just mentioned, for instance, we might say that the
33
00:01:27,360 --> 00:01:30,730
elevator must reach the requested floor in less than 30
34
00:01:30,730 --> 00:01:33,190
seconds from the moment when the floor button is pushed.
35
00:01:33,190 --> 00:01:36,030
This is still a non-functional requirment, but is a verifiable one.

View File

@ -1,411 +0,0 @@
1
00:00:00,270 --> 00:00:02,800
As we did for other lessons, before starting this
2
00:00:02,800 --> 00:00:06,150
lesson on requirements engineering, I want to ask a world
3
00:00:06,150 --> 00:00:10,210
expert on this topic a few questions. I'm here with
4
00:00:10,210 --> 00:00:14,150
Jane Cleland-Huang, a professor at the DePaul University. And Jane
5
00:00:14,150 --> 00:00:16,500
is a world expert in the area of requirements
6
00:00:16,500 --> 00:00:19,830
engineering, which is the theme of this lesson. So I'm
7
00:00:19,830 --> 00:00:22,220
talking to Jane who is currently in Chicago and I
8
00:00:22,220 --> 00:00:25,380
want to. Ask her a few questions about requirements engineering.
9
00:00:25,380 --> 00:00:26,530
So hi Jane how are you?
10
00:00:26,530 --> 00:00:27,990
>> Fine. Thank you Alex.
11
00:00:27,990 --> 00:00:29,480
>> And thank you so much for agreeing to
12
00:00:29,480 --> 00:00:31,960
be interviewed for our course, I'm sure the students
13
00:00:31,960 --> 00:00:34,080
will really benefit from this. And let me start
14
00:00:34,080 --> 00:00:37,240
with the first question which is what are software requirements?
15
00:00:37,240 --> 00:00:40,900
>> That's an interesting question. And software requirements
16
00:00:40,900 --> 00:00:44,220
basically provide us a description of what a
17
00:00:44,220 --> 00:00:47,520
system has to do. So, typically they describe
18
00:00:47,520 --> 00:00:50,550
the functionality of the features. That the system has
19
00:00:50,550 --> 00:00:54,420
to deliver in order to satisfy its stakeholders.
20
00:00:54,420 --> 00:00:59,010
And we usually talk about the requirement specification
21
00:00:59,010 --> 00:01:01,050
in terms of what the system's going to
22
00:01:01,050 --> 00:01:04,010
do. And we describe it sometimes formally in
23
00:01:04,010 --> 00:01:07,300
terms of set of shall statements, that the
24
00:01:07,300 --> 00:01:09,110
system shall do this or shall do that.
25
00:01:09,110 --> 00:01:12,330
Or we can use various templates to specify
26
00:01:12,330 --> 00:01:16,120
both textural requirements. But requirements can also be represented
27
00:01:16,120 --> 00:01:20,790
informally in, in the form of user stories, or use cases, or more
28
00:01:20,790 --> 00:01:26,180
formally in the form of state transition diagrams and even in kind of
29
00:01:26,180 --> 00:01:32,260
formal specifications. Especially for critical parts of safety critical systems.
30
00:01:32,260 --> 00:01:34,180
>> And another should discuss what the
31
00:01:34,180 --> 00:01:37,230
requirements are. What is the requirements engineering?
32
00:01:37,230 --> 00:01:41,180
>> So, that's also an interesting question because if you notice
33
00:01:41,180 --> 00:01:45,330
it's it's engineering and I'm sure in the
34
00:01:45,330 --> 00:01:47,750
other parts of the software engineering process that
35
00:01:47,750 --> 00:01:51,130
you're discussing in your course. Parts such as
36
00:01:51,130 --> 00:01:55,200
testing or coding. They don't have the word engineering
37
00:01:55,200 --> 00:01:56,930
there and I think one of the reasons
38
00:01:56,930 --> 00:02:00,310
requirements engineering has that term is because it covers
39
00:02:00,310 --> 00:02:03,570
a number of different activities. So it includes
40
00:02:03,570 --> 00:02:07,390
things such as working with stakeholders to elicit or
41
00:02:07,390 --> 00:02:10,620
to proactively discover what their requirements of the
42
00:02:10,620 --> 00:02:14,440
system are. Analyzing those requirements so that we
43
00:02:14,440 --> 00:02:17,380
understand the tradeoffs. So you might have different
44
00:02:17,380 --> 00:02:21,170
stakeholders that care about different things, and it
45
00:02:21,170 --> 00:02:26,086
might not be possible to deliver all of those things, so we have to analyze the
46
00:02:26,086 --> 00:02:29,140
feasibility of the requirements, explore the tradeoffs, emerge
47
00:02:29,140 --> 00:02:32,550
conflicts. And then of course the specification part,
48
00:02:32,550 --> 00:02:34,930
which we talked about a little bit already,
49
00:02:34,930 --> 00:02:37,340
and the validation, so did we in fact get
50
00:02:37,340 --> 00:02:40,480
the requirements right? Did we build a system
51
00:02:40,480 --> 00:02:43,490
that actually matches our, our requirements. And then on
52
00:02:43,490 --> 00:02:46,960
into the requirements management process. And the requirements
53
00:02:46,960 --> 00:02:50,860
management process. Kind of like goes through things like
54
00:02:50,860 --> 00:02:55,010
change management. So what if customer or stakeholders
55
00:02:55,010 --> 00:02:57,630
need the system to change? How do we manage
56
00:02:57,630 --> 00:03:00,180
changing requirements? And I think this is one of
57
00:03:00,180 --> 00:03:03,230
the reasons that we've coined the term engineering because
58
00:03:03,230 --> 00:03:06,490
that it's, has to be a systematic process which
59
00:03:06,490 --> 00:03:09,550
extends across. The whole of this is life cycle.
60
00:03:09,550 --> 00:03:12,890
>> And I guess my last question here is
61
00:03:12,890 --> 00:03:15,100
so now that we heard about software requirements and
62
00:03:15,100 --> 00:03:18,790
about software requirements engineering, why is requirements engineering so
63
00:03:18,790 --> 00:03:20,770
important? So what happens if we don't do it right?
64
00:03:20,770 --> 00:03:22,620
>> Well, I'm sure that, you know,
65
00:03:22,620 --> 00:03:24,880
many people have probably read the kind of
66
00:03:24,880 --> 00:03:28,560
report like Spanish report, and other reports of failed
67
00:03:28,560 --> 00:03:31,900
project, and things like that, and are aware that
68
00:03:31,900 --> 00:03:35,280
one of the major reasons for projects failing
69
00:03:35,280 --> 00:03:37,360
is because we didn't get the requirements right
70
00:03:37,360 --> 00:03:40,110
in the first place. So if we don't understand
71
00:03:40,110 --> 00:03:42,970
the requirements then we're simply going to build the
72
00:03:42,970 --> 00:03:47,960
wrong system. Getting requirements right includes all sorts of
73
00:03:47,960 --> 00:03:52,900
things such as finding the right group of stakeholders so we don't exclude major
74
00:03:52,900 --> 00:03:56,940
groups of stakeholders. Understanding the requirements correctly.
75
00:03:56,940 --> 00:03:59,910
There will be many, many different examples of
76
00:03:59,910 --> 00:04:02,310
projects that have failed. For example, in
77
00:04:02,310 --> 00:04:06,500
America the healthcare.gov failure, and while we cannot
78
00:04:06,500 --> 00:04:09,540
put the blame squarely in the area
79
00:04:09,540 --> 00:04:13,040
of requirements, because obviously the project was challenged
80
00:04:13,040 --> 00:04:15,650
for a number of different reasons. But
81
00:04:15,650 --> 00:04:21,070
clearly it underperformed in many respects related to
82
00:04:21,070 --> 00:04:25,740
security, performance, and reliability and these are all
83
00:04:25,740 --> 00:04:28,300
parts of the requirements process. Things that should
84
00:04:28,300 --> 00:04:30,000
have been discovered and the system should have
85
00:04:30,000 --> 00:04:32,914
been built in order to meet those requirements,
86
00:04:32,914 --> 00:04:36,240
getting the requirements right in the first place.
87
00:04:36,240 --> 00:04:38,110
Puts us, a project on the right foot.
88
00:04:38,110 --> 00:04:41,430
And so that gives us a much better chance
89
00:04:41,430 --> 00:04:44,940
of delivering to the customer what they need. And
90
00:04:44,940 --> 00:04:49,130
designing a solution that really meets those requirements. So,
91
00:04:49,130 --> 00:04:52,800
it's a critical part of the overall software engineering success.
92
00:04:52,800 --> 00:04:56,441
>> Okay. So that's critical. I mean, we better get our requirements right.
93
00:04:56,441 --> 00:04:56,987
>> Yeah.
94
00:04:56,987 --> 00:04:57,733
>> That's, that's the message.
95
00:04:57,733 --> 00:04:57,743
>> Yeah.
96
00:04:57,743 --> 00:05:00,822
>> Okay. Well, thank you so much Jane, for taking
97
00:05:00,822 --> 00:05:03,435
the time off your busy schedule to speak with us.
98
00:05:03,435 --> 00:05:07,150
I'm sure. The students really appreciate this, and we'll talk to you soon.
99
00:05:07,150 --> 00:05:08,480
>> Bye Alex, thank you.
100
00:05:08,480 --> 00:05:10,890
>> Bye, Jane, bye bye. Jane gave
101
00:05:10,890 --> 00:05:13,410
us an interesting perspective on requirements engineering
102
00:05:13,410 --> 00:05:15,410
and its importance. Let's now start our
103
00:05:15,410 --> 00:05:18,050
lesson with a general definition of requirements engineering.

View File

@ -1,111 +0,0 @@
1
00:00:00,180 --> 00:00:03,170
Another important distinction, when talking about requirements, is that
2
00:00:03,170 --> 00:00:07,220
between user and system requirements. So, let's start with defining
3
00:00:07,220 --> 00:00:10,540
user requirements. Those are requirements that are written for the
4
00:00:10,540 --> 00:00:13,400
customers and they're often in natural language and they don't
5
00:00:13,400 --> 00:00:16,190
contain technical details. And the reason for that is
6
00:00:16,190 --> 00:00:19,740
that their purpose is to allow customers, stakeholders, to check
7
00:00:19,740 --> 00:00:22,210
that the system will do what they intended. So it's
8
00:00:22,210 --> 00:00:25,470
a way for the analyst, the developers, to communicate with
9
00:00:25,470 --> 00:00:28,460
the customers, with the stakeholders. System requirements, on the
10
00:00:28,460 --> 00:00:32,560
other hand, are written for developers. Contain detailed functional and
11
00:00:32,560 --> 00:00:35,330
non functional requirements. Which we just discussed, and which
12
00:00:35,330 --> 00:00:39,860
are clearly and more rigourously specified than the user requirements.
13
00:00:39,860 --> 00:00:42,130
And the reason for this difference is that the
14
00:00:42,130 --> 00:00:45,410
purpose of the system requirements is to tell developers what
15
00:00:45,410 --> 00:00:47,870
to build. They must contain enough details so the
16
00:00:47,870 --> 00:00:50,480
developers can take them and use them to design and
17
00:00:50,480 --> 00:00:52,530
then develop a system. Just to give you a concrete
18
00:00:52,530 --> 00:00:55,750
example, here I'm showing you a user requirement that just says
19
00:00:55,750 --> 00:00:59,510
that the software must provide a means of representing and accessing
20
00:00:59,510 --> 00:01:03,940
external files created by other tools, and the corresponding system requirement.
21
00:01:03,940 --> 00:01:05,700
And as you can see, even if we don't read the
22
00:01:05,700 --> 00:01:09,380
whole requirements. The former is an informal and high level description
23
00:01:09,380 --> 00:01:12,210
of a piece of functionality, whereas the latter describes the same
24
00:01:12,210 --> 00:01:15,940
functionality but in a much more extensive and rigorous way. As
25
00:01:15,940 --> 00:01:18,760
I said, this is something that the developers can use to
26
00:01:18,760 --> 00:01:21,820
design and then build a system whereas this is something that
27
00:01:21,820 --> 00:01:25,590
can be used to communicate. With the stakeholders, with a non-technical
28
00:01:25,590 --> 00:01:29,490
audience. And we need to define both because they serve different purposes.

View File

@ -1,43 +0,0 @@
1
00:00:00,160 --> 00:00:02,940
After all these talking about requirements, let's have a small quiz, I
2
00:00:02,940 --> 00:00:04,019
want to ask you which of the
3
00:00:04,019 --> 00:00:07,840
following requirements are non-functional requirements? And here
4
00:00:07,840 --> 00:00:10,860
I'm listing the requirements, the first one says at the BowlingAlley program
5
00:00:10,860 --> 00:00:13,420
keeps track of the score during a game, the second one is that
6
00:00:13,420 --> 00:00:16,720
the WordCount program should be able to process large files. The third
7
00:00:16,720 --> 00:00:19,580
one is that the Login program for a website. Should be secure, and
8
00:00:19,580 --> 00:00:22,880
finally the last one says that the vending machine program should take coins
9
00:00:22,880 --> 00:00:25,430
as an input from the user. So, I want you to mark all
10
00:00:25,430 --> 00:00:27,590
the ones that are non-functional requirements, that
11
00:00:27,590 --> 00:00:29,640
don't refer to the functionality of the system.

View File

@ -1,63 +0,0 @@
1
00:00:00,120 --> 00:00:03,710
So, the first requirement clearly refers to some specific functionality of
2
00:00:03,710 --> 00:00:07,230
the Bowling Alley system, because it talks about what the system has
3
00:00:07,230 --> 00:00:10,420
to do from a functional standpoint. So, it's definitely not a non-functional
4
00:00:10,420 --> 00:00:13,400
requirement. On the other hand, the fact that the Word Count system
5
00:00:13,400 --> 00:00:16,320
should be able to process large files, is telling us something not
6
00:00:16,320 --> 00:00:19,580
about the functionality of the system, but rather about its qualities. The
7
00:00:19,580 --> 00:00:21,600
fact that it has to be scalable, that it has to be
8
00:00:21,600 --> 00:00:25,190
efficient and so we can consider this to be a non-functional requirement.
9
00:00:25,190 --> 00:00:27,010
Similarly, the fact that the Login program for a
10
00:00:27,010 --> 00:00:29,390
website should be secure is definitely telling us something
11
00:00:29,390 --> 00:00:31,800
about the quality of the system that has little
12
00:00:31,800 --> 00:00:34,026
to do with its functionality. And so this is
13
00:00:34,026 --> 00:00:36,680
also a non-functional requirement. Finally, the fact that the
14
00:00:36,680 --> 00:00:38,980
Vending Machine program should take coins as an input
15
00:00:38,980 --> 00:00:41,010
from the user is telling us something about the
16
00:00:41,010 --> 00:00:44,100
functionality of the program and therefore, is a functional requirement.

View File

@ -1,71 +0,0 @@
1
00:00:00,130 --> 00:00:01,880
Now that we know what the requirements are and
2
00:00:01,880 --> 00:00:05,520
their main types, let's discuss where requirements come from and
3
00:00:05,520 --> 00:00:08,610
there are many possible sources for requirements so I'm
4
00:00:08,610 --> 00:00:10,610
going to list here the main ones. The first one are
5
00:00:10,610 --> 00:00:14,440
clearly stakeholders, anybody who is effected by the system
6
00:00:14,440 --> 00:00:18,830
and its functionality. Customers, users, and so on. The second
7
00:00:18,830 --> 00:00:22,610
typical social requirement is the application domain. For example,
8
00:00:22,610 --> 00:00:25,380
the fact that my software is running within a bank,
9
00:00:25,380 --> 00:00:27,930
or within a school. Why is the application domain a
10
00:00:27,930 --> 00:00:31,410
social requirement? Well, because there are constraints that are characteristics
11
00:00:31,410 --> 00:00:34,140
of the application domain that will affect the functionality of
12
00:00:34,140 --> 00:00:37,130
the system. For a simple example, just think about regulations.
13
00:00:37,130 --> 00:00:40,400
So banking regulations and school regulations in these cases. Those
14
00:00:40,400 --> 00:00:43,120
are things that might affect the functionality of my system
15
00:00:43,120 --> 00:00:45,570
and, therefore, that may become part of my requirements. And,
16
00:00:45,570 --> 00:00:50,120
finally, documentation can be an additional source of requirements. For example,
17
00:00:50,120 --> 00:00:54,110
notes, papers, manuals, books. So everything that refers to
18
00:00:54,110 --> 00:00:56,610
the functionality of the system that we're going to build.

View File

@ -1,179 +0,0 @@
1
00:00:00,190 --> 00:00:03,440
Unfortunately, extracting requirements from these sources is not
2
00:00:03,440 --> 00:00:06,220
a straightforward task, as there are many issues involved
3
00:00:06,220 --> 00:00:09,470
with the requirements elicitation. One first problem is the
4
00:00:09,470 --> 00:00:13,930
thin spread of domain knowledge. Knowledge is rarely available
5
00:00:13,930 --> 00:00:15,970
in an explicit form, that is, it is
6
00:00:15,970 --> 00:00:20,310
almost never written down. Moreover, knowledge is often distributed
7
00:00:20,310 --> 00:00:23,410
across many sources. For example, in the graphical depiction
8
00:00:23,410 --> 00:00:25,590
here, to find out that this is the purpose
9
00:00:25,590 --> 00:00:28,240
of the project. The developer, the analyist, needs to talk
10
00:00:28,240 --> 00:00:30,870
to a lot of different people. And, to make things even
11
00:00:30,870 --> 00:00:34,400
worse. There are often conflicts between the knowledge gathered from
12
00:00:34,400 --> 00:00:37,610
different sources. A second issue is the fact that the knowledge
13
00:00:37,610 --> 00:00:41,090
is often tacit. What is also called the say, do
14
00:00:41,090 --> 00:00:44,052
problem. In the example shown here. For instance. We have a
15
00:00:44,052 --> 00:00:47,650
customer that is describing to the analyst. The way in which
16
00:00:47,650 --> 00:00:51,060
he accomplishes a task. So it performs these three steps and
17
00:00:51,060 --> 00:00:54,300
reaches the goal. Whereas in practice, the actual way in
18
00:00:54,300 --> 00:00:57,530
which this task accomplished is by going through a larger number
19
00:00:57,530 --> 00:00:59,880
of steps to get to the same goal. So the point
20
00:00:59,880 --> 00:01:02,650
here is that, even if the knowledge were more concentrated, so
21
00:01:02,650 --> 00:01:05,660
not as spread as in this example. People simply find
22
00:01:05,660 --> 00:01:08,680
it hard to describe knowledge that they regularly use. So it
23
00:01:08,680 --> 00:01:11,740
is hard to make this knowledge explicit, to pass this knowledge
24
00:01:11,740 --> 00:01:13,130
to someone else. Yet another
25
00:01:13,130 --> 00:01:16,690
problem is limited observability. Identifying requirements
26
00:01:16,690 --> 00:01:20,570
through observation is often difficult as the problem owners might be
27
00:01:20,570 --> 00:01:23,550
too busy to perform the task that we need to observe.
28
00:01:23,550 --> 00:01:25,750
Or they might be doing a lot of other things together
29
00:01:25,750 --> 00:01:27,980
with the task that we need to observe, so that becomes
30
00:01:27,980 --> 00:01:31,530
confusing. That introduces noise. Moreover, even when this is not the
31
00:01:31,530 --> 00:01:34,460
case, the presence of an observer might change their problem. It
32
00:01:34,460 --> 00:01:38,020
is very typical for human subjects to improve or modify an
33
00:01:38,020 --> 00:01:41,760
aspect of their behavior, which is being experimentally measured in response
34
00:01:41,760 --> 00:01:44,110
to the fact that they know that they're being studied. You know
35
00:01:44,110 --> 00:01:47,110
that somebody's studying you and you change the way in which you behave.
36
00:01:47,110 --> 00:01:50,910
A typical issue. Finally, the information that we collect might be biased.
37
00:01:50,910 --> 00:01:54,270
For several reasons. People might not feel free to tell you what you
38
00:01:54,270 --> 00:01:57,030
need to know. Or, people might not want to tell you what
39
00:01:57,030 --> 00:02:00,240
you need to know. For example, in all the common cases in which
40
00:02:00,240 --> 00:02:03,870
the outcome might effect them, people might provide you a different picture
41
00:02:03,870 --> 00:02:06,770
from the real one. In order to influence you. So, they might have
42
00:02:06,770 --> 00:02:08,820
a hidden agenda, and mislead you, either
43
00:02:08,820 --> 00:02:11,860
consciously or unconsciously. So, all these issues
44
00:02:11,860 --> 00:02:14,370
add to the complexity of collecting requirements,
45
00:02:14,370 --> 00:02:16,522
of identifying the purpose of a system.

View File

@ -1,207 +0,0 @@
1
00:00:00,140 --> 00:00:02,930
To cover the intrinsic problem of eliciting requirements,
2
00:00:02,930 --> 00:00:05,670
many different techniques have been proposed. So here
3
00:00:05,670 --> 00:00:08,260
I list some of most traditional techniques for
4
00:00:08,260 --> 00:00:11,290
requirement elicitation and as I present those, please keep
5
00:00:11,290 --> 00:00:13,140
in mind that these techniques can be used
6
00:00:13,140 --> 00:00:17,230
separately or combined. A first technique is called background
7
00:00:17,230 --> 00:00:20,740
reading. And, this technique involves collecting information by
8
00:00:20,740 --> 00:00:24,840
reading existing documents such as company reports, organizational charts,
9
00:00:24,840 --> 00:00:29,280
policy manuals, job descriptions, documentation of existing systems and so
10
00:00:29,280 --> 00:00:32,400
on. And, this technique is especially appropriate when one Is
11
00:00:32,400 --> 00:00:35,370
not familiar with your organization for which the requirements are
12
00:00:35,370 --> 00:00:38,950
being collected. So you want to get some background before interviewing
13
00:00:38,950 --> 00:00:41,240
actual people. And one of the main imitations of these
14
00:00:41,240 --> 00:00:43,930
kinds of approaches is that written documents might be out
15
00:00:43,930 --> 00:00:46,320
of sync and they often are out of sync with
16
00:00:46,320 --> 00:00:49,970
reality. Tend to be long winded. It may contain many irrelevant
17
00:00:49,970 --> 00:00:51,850
details, so you may have to look at a lot
18
00:00:51,850 --> 00:00:54,810
of materials to extract enough information. The hard data and
19
00:00:54,810 --> 00:00:58,650
samples techniques consist in deciding which hard data we want
20
00:00:58,650 --> 00:01:01,680
to collect and choosing the sample of the population for which
21
00:01:01,680 --> 00:01:04,750
to collect such data and hard data includes facts and
22
00:01:04,750 --> 00:01:09,790
figures such as forms, invoices, financial information, survey results, marketing
23
00:01:09,790 --> 00:01:12,300
data, and so on. And the sampling of this data
24
00:01:12,300 --> 00:01:15,170
can be done in different ways. For example, the typical ways
25
00:01:15,170 --> 00:01:19,200
to do random selection. Interviews are another typical approach for
26
00:01:19,200 --> 00:01:21,870
requirement solicitation, and this is the approach that we use for
27
00:01:21,870 --> 00:01:24,910
the first project in this course, for instance. Interviews can be
28
00:01:24,910 --> 00:01:27,720
structured in which case there is an agenda of fairly open
29
00:01:27,720 --> 00:01:30,450
questions or they can be open ended in which case there
30
00:01:30,450 --> 00:01:32,770
is no preset agenda and the interview is more of a
31
00:01:32,770 --> 00:01:36,500
conversation. On the positive side, interviews can collect a rich set
32
00:01:36,500 --> 00:01:40,260
of information because they allow for uncovering opinions as well as
33
00:01:40,260 --> 00:01:43,230
hard facts. Moreover, they can probe in depth through follow
34
00:01:43,230 --> 00:01:46,790
up questions. On the more negative side, interviewing requires special
35
00:01:46,790 --> 00:01:50,400
skills that are difficult to master and require experience. And
36
00:01:50,400 --> 00:01:52,890
it is not enough to collect a lot of information. If
37
00:01:52,890 --> 00:01:55,520
this information is hard to analyze or even irrelevant, it
38
00:01:55,520 --> 00:01:58,250
might become useless. So you need to know how to conduct
39
00:01:58,250 --> 00:02:01,180
an interview in order to take advantage of these techniques.
40
00:02:01,180 --> 00:02:05,440
Surveys can also be extremely useful for gathering new requirements because
41
00:02:05,440 --> 00:02:08,550
they can quickly collect information from a large number
42
00:02:08,550 --> 00:02:11,520
of people. Moreover, they can be administered remotely. For
43
00:02:11,520 --> 00:02:13,610
example, by email, through the web. On the other
44
00:02:13,610 --> 00:02:16,750
hand, surveys tend to severely constrain the information that
45
00:02:16,750 --> 00:02:19,430
the user can provide and might miss opportunities to
46
00:02:19,430 --> 00:02:24,460
collect unforeseen, relevant information. Finally, meetings are generally used
47
00:02:24,460 --> 00:02:27,690
for summarization of findings and collection of feedback, so as
48
00:02:27,690 --> 00:02:30,500
to confirm or refute what has been learned. So the
49
00:02:30,500 --> 00:02:32,660
only additional thing I want to mention about meetings
50
00:02:32,660 --> 00:02:34,920
is the fact that it is fundamental that have clearly
51
00:02:34,920 --> 00:02:37,970
stated objectives and are planned carefully. This is something that
52
00:02:37,970 --> 00:02:40,730
should be quite obvious, but doesn't always happen in practice.

View File

@ -1,71 +0,0 @@
1
00:00:00,070 --> 00:00:02,370
So just for completeness, I want to mention some other
2
00:00:02,370 --> 00:00:05,340
techniques besides the traditional ones that we just saw that
3
00:00:05,340 --> 00:00:07,880
can be used for requirements solicitation. And these other
4
00:00:07,880 --> 00:00:10,740
techniques can be divided in three main groups. There are
5
00:00:10,740 --> 00:00:14,820
collaborative techniques that were created to support incremental development
6
00:00:14,820 --> 00:00:18,850
of complex systems with large diverse user populations. An example
7
00:00:18,850 --> 00:00:21,130
of such techniques which is widely used and you
8
00:00:21,130 --> 00:00:25,120
might know is brainstorming. There are also social approaches and
9
00:00:25,120 --> 00:00:28,140
these are approaches, techniques that exploit the social
10
00:00:28,140 --> 00:00:31,520
sciences to better collect information from the stakeholders and
11
00:00:31,520 --> 00:00:34,310
the environment. And among those I just want to mention
12
00:00:34,310 --> 00:00:36,730
ethnographic techniques which are based on the idea of
13
00:00:36,730 --> 00:00:40,100
collecting information on the participants by observing them
14
00:00:40,100 --> 00:00:44,660
in their original environment. Finally cognitive techniques, leverage cognitive
15
00:00:44,660 --> 00:00:48,490
science approaches to discover expert knowledge for example they
16
00:00:48,490 --> 00:00:51,260
can be used to understand the problem solving methods.
17
00:00:51,260 --> 00:00:54,000
And in case you're interested in finding out more about this and
18
00:00:54,000 --> 00:00:57,580
other techniques, I'm providing some references in the notes for the lesson.

View File

@ -1,223 +0,0 @@
1
00:00:00,220 --> 00:00:03,550
Once we collected the required knowledge on the requirements for
2
00:00:03,550 --> 00:00:06,120
the system that we're developing, we need to model it in
3
00:00:06,120 --> 00:00:08,430
a structured and clear way, so that it can be
4
00:00:08,430 --> 00:00:12,100
analyzed and refined. And there are really tons of ways to
5
00:00:12,100 --> 00:00:15,840
do that, depending on your focus and objectives. More specifically,
6
00:00:15,840 --> 00:00:18,940
when modeling requirements you need to decide what you want to
7
00:00:18,940 --> 00:00:21,710
model and how you want to model it. So let's look
8
00:00:21,710 --> 00:00:25,390
at these two aspects independently. What you decide to model depends
9
00:00:25,390 --> 00:00:28,270
on where your emphasis is. That is on which
10
00:00:28,270 --> 00:00:31,390
aspects of the requirements you want to focus. For
11
00:00:31,390 --> 00:00:34,880
example if your emphasis is on the characteristics of
12
00:00:34,880 --> 00:00:37,970
the enterprise of the company that you are analyzing you
13
00:00:37,970 --> 00:00:40,240
may want to model goals and objectives of the
14
00:00:40,240 --> 00:00:44,380
company, or its organizational structure, its task and dependencies
15
00:00:44,380 --> 00:00:47,040
and so on. Conversely, if your focus is on
16
00:00:47,040 --> 00:00:50,500
information and behaviors, you might want to concentrate on aspects
17
00:00:50,500 --> 00:00:53,800
such as the structure of information, various behavioral views
18
00:00:53,800 --> 00:00:55,480
some of which we will see in the next
19
00:00:55,480 --> 00:00:59,650
lesson, or maybe time or sequencing requirements. Finally, if
20
00:00:59,650 --> 00:01:02,750
you're mostly interested in the quality aspects of your
21
00:01:02,750 --> 00:01:06,790
system, you will focus on the various non-functional properties
22
00:01:06,790 --> 00:01:09,070
of the software that are relevant in the context
23
00:01:09,070 --> 00:01:13,570
considered. For example reliability, robustness, security, and so on.
24
00:01:13,570 --> 00:01:15,550
You will just pick the ones that are relevant for
25
00:01:15,550 --> 00:01:18,540
your context. And as we said, there's a second dimension.
26
00:01:18,540 --> 00:01:21,050
After you have decided what to model in your system,
27
00:01:21,050 --> 00:01:23,480
you have to decide how you want to model it.
28
00:01:23,480 --> 00:01:25,860
So I want to show here some options for modeling
29
00:01:25,860 --> 00:01:30,380
enterprises, information, and quality aspects. And as you can see
30
00:01:30,380 --> 00:01:34,100
here for each type of information there are many possible
31
00:01:34,100 --> 00:01:36,840
models that we can use to represent it. And all
32
00:01:36,840 --> 00:01:38,750
these models have advantages and
33
00:01:38,750 --> 00:01:41,400
disadvantages, different levels of formality and
34
00:01:41,400 --> 00:01:44,000
different focus. Something else that I want to point out
35
00:01:44,000 --> 00:01:47,145
about these models is the fact that these models are often
36
00:01:47,145 --> 00:01:50,980
orthogonal to one another, especially if we consider models in different
37
00:01:50,980 --> 00:01:54,620
categories. So what that means is that they're complimentary rather than
38
00:01:54,620 --> 00:01:58,310
mutually exclusive. Different models can be used to provide views
39
00:01:58,310 --> 00:02:01,290
of the requirements from different perspectives, and we will not see
40
00:02:01,290 --> 00:02:03,700
most of these models in this course, but I wanted to
41
00:02:03,700 --> 00:02:06,550
list them anyways to give you an idea of how many
42
00:02:06,550 --> 00:02:09,490
there are and how vast is this area. As far
43
00:02:09,490 --> 00:02:11,540
as we are concerned in the course and for the
44
00:02:11,540 --> 00:02:14,660
projects we will express requirements using one of two main
45
00:02:14,660 --> 00:02:19,010
ways. Using natural language, that is informal specifications and using
46
00:02:19,010 --> 00:02:22,600
UML diagrams, which is graphical models. And we will introduce
47
00:02:22,600 --> 00:02:25,840
UML and the most important diagrams in the next lesson.
48
00:02:25,840 --> 00:02:27,330
And the only other type of models that I want
49
00:02:27,330 --> 00:02:31,610
to mentions explicitly are goal models because they're extremely popular.
50
00:02:31,610 --> 00:02:34,930
So the main idea with goal models is it start with the main goal of
51
00:02:34,930 --> 00:02:36,990
the system and then keep refining it
52
00:02:36,990 --> 00:02:39,654
by decomposing it in sub-goals. So it's kind
53
00:02:39,654 --> 00:02:41,610
of a very natural way of progressing.
54
00:02:41,610 --> 00:02:44,210
And you continue this refinement until you get
55
00:02:44,210 --> 00:02:47,150
to goals that can be operationalized, and represent
56
00:02:47,150 --> 00:02:49,380
the basic units of functionality of the system.

Some files were not shown because too many files have changed in this diff Show More