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.