We will also look at how tools can improve software phases,
the software activities, and can support software development tasks in general.
And this is something that I will repeat over and over
in the class, tools and automation are fundamental, in software engineering.
And they're fundamental for improving productivity, not only efficiency but also
effectiveness of our activities in the software development process. So let
me go back to one of the diagrams that I showed
you before. If you remember we had this qualititive diagram in which
we were showing that one of the issues that led to the
software crisis was the fact that developers' productivity was not able to
keep up with the software size and complexity, with the growth in
the importance and the complexity of software. What tools can help us
to do is to change this and basically move this curve from
this original position up here. So that it gets closer and closer
to what we need to develop the software that we need to
build. So let me discuss examples on how tools can improve productivity.
For example, if we are talking about development, think about
what kind of improvement it was to go from punch
cards to modern IDEs. If we're talking about languages, think
about of how much more productive developers became when going from
writing machine code to writing code in high-level languages. And
finally, if we talk about debugging, which is a very important
and expensive activity, moving from the use of print lines
to the use of symbolic debuggers dramatically improve the effectiveness and
efficiency of development. And these are just some of the
tools that we will discuss in the rest of the class
and notice that we will also use the tools in practice.
So we will use the tools before projects and also during
the lessons and for assignments. In particular, we will use
three main kinds of tools. The first type is IDE's. And
I'm pretty sure you're familiar with IDE's. These are integrated development
environments. So, advanced editors in which you can write, compile, run,
and debug and even test your code. We'll also use a
version control system, systems that allow you to save, and restore, and
check the differences between different versions of the code, in particular
we will be working with git. We will also be looking at
other kinds of tools like coverage and verification tools. These are
tools that can help you during testing and I'm a big fan
of these tools, so I'm really going to stress the usefulness
of these tools and how you should use them in your development.