Introduction to Software Engineering-Methods Of Software Engineering-Lecture Notes, Study notes of Software Engineering

This course includes software-- development process, process models, project planning, quality assurance, configuration management, process and project metrics, change, re-engineering. It also discuss risk analysis and management and project management. This lecture contains: Introduction, Software, Engineering, Combination, Tools, Process, Programming, Language, Design, Testing, Maintenance, Development

Typology: Study notes

2011/2012

Uploaded on 08/06/2012

angarika
angarika 🇮🇳

4.4

(56)

90 documents

1 / 10

Toggle sidebar

This page cannot be seen from the preview

Don't miss anything!

bg1
Lecture No. 1
Introduction to Software Engineering
This course is a continuation of the first course on Software Engineering. In order to set
the context of our discussion, let us first look at some of the definitions of software
engineering.
Software Engineering is the set of processes and tools to develop software. Software
Engineering is the combination of all the tools, techniques, and processes that used in
software production. Therefore Software Engineering encompasses all those things that
are used in software production like:
Programming Language
Programming Language Design
Software Design Techniques
Tools
Testing
Maintenance
Development etc.
So all those thing that are related to software are also related to software engineering.
Some of you might have thought that how programming language design could be related
to software engineering. If you look more closely at the software engineering definitions
described above then you will definitely see that software engineering is related to all
those things that are helpful in software development. So is the case with programming
language design. Programming language design is one of the major successes in last fifty
years. The design of Ada language was considered as the considerable effort in software
engineering.
These days object-oriented programming is widely being used. If programming languages
will not support object-orientation then it will be very difficult to implement object-
oriented design using object-oriented principles. All these efforts made the basis of
software engineering.
Well-Engineered Software
Let‘s talk something about what is well-engineered software. Well-engineered software is
one that has the following characteristics.
It is reliable
It has good user-interface
It has acceptable performance
It is of good quality
It is cost-effective
docsity.com
pf3
pf4
pf5
pf8
pf9
pfa

Partial preview of the text

Download Introduction to Software Engineering-Methods Of Software Engineering-Lecture Notes and more Study notes Software Engineering in PDF only on Docsity!

Lecture No. 1

Introduction to Software Engineering

This course is a continuation of the first course on Software Engineering. In order to set the context of our discussion, let us first look at some of the definitions of software engineering.

Software Engineering is the set of processes and tools to develop software. Software Engineering is the combination of all the tools, techniques, and processes that used in software production. Therefore Software Engineering encompasses all those things that are used in software production like:

 Programming Language  Programming Language Design  Software Design Techniques  Tools  Testing  Maintenance  Development etc.

So all those thing that are related to software are also related to software engineering.

Some of you might have thought that how programming language design could be related to software engineering. If you look more closely at the software engineering definitions described above then you will definitely see that software engineering is related to all those things that are helpful in software development. So is the case with programming language design. Programming language design is one of the major successes in last fifty years. The design of Ada language was considered as the considerable effort in software engineering.

These days object-oriented programming is widely being used. If programming languages will not support object-orientation then it will be very difficult to implement object- oriented design using object-oriented principles. All these efforts made the basis of software engineering.

Well-Engineered Software

Let‘s talk something about what is well-engineered software. Well-engineered software is one that has the following characteristics.

 It is reliable  It has good user-interface  It has acceptable performance  It is of good quality  It is cost-effective

Every company can build software with unlimited resources but well-engineered software is one that conforms to all characteristics listed above.

Software has very close relationship with economics. When ever we talk about engineering systems we always first analyze whether this is economically feasible or not. Therefore you have to engineer all the activities of software development while keeping its economical feasibility intact.

The major challenges for a software engineer is that he has to build software within limited time and budget in a cost-effective way and with good quality

Therefore well-engineered software has the following characteristics.

 Provides the required functionality  Maintainable  Reliable  Efficient  User-friendly  Cost-effective

But most of the times software engineers ends up in conflict among all these goals. It is also a big challenge for a software engineer to resolve all these conflicts.

The Balancing Act!

Software Engineering is actually the balancing act. You have to balance many things like cost, user friendliness, Efficiency, Reliability etc. You have to analyze which one is the more important feature for your software is it reliability, efficiency, user friendliness or something else. There is always a trade-off among all these requirements of software. It may be the case that if you try to make it more user-friendly then the efficiency may suffer. And if you try to make it more cost-effective then reliability may suffer. Therefore there is always a trade-off between these characteristics of software.

These requirements may be conflicting. For example, there may be tension among the following:

 Cost vs. Efficiency  Cost vs. Reliability  Efficiency vs. User-interface

A Software Engineer is required to analyze these conflicting entities and tries to strike a balance.

Challenge is to balance these requirements.

Software Engineers always confront with the challenge to make a good balance of all these tings depending on the requirements of the particular software system at hand. He should analyze how much weight should all these things get such that it will have acceptable quality, acceptable performance and will have acceptable user-interface.

Software Productivity Research in which they analyzed many projects and published the results in the form of books. Let‘s look at the summary of these results.

He divided software related activities into about twenty-five different categories listed in the table below. They have analyzed around 10000 software projects to come up with such a categorization. But here to cut down the discussion we will only describe nine of them that are listed below.

 Project Management  Requirement Engineering  Design  Coding  Testing  Software Quality Assurance  Software Configuration Management  Software Integration and  Rest of the activities

One thing to note here is that you cannot say that anyone of these activities is dominant among others in terms of effort putted into it. Here the point that we want to emphasize is that, though coding is very important but it is not more than 13-14% of the whole effort of software development.

Fred Brook is a renowned software engineer; he wrote a great book related to software engineering named ―A Mythical Man Month‖. He combined all his articles in this book. Here we will discuss one of his articles named ―No Silver Bullet‖ which he included in the book.

An excerpt from ―No Silver Bullet‖ – Fred Brooks Of all the monsters that fill the nightmares of our folklore, none terrify more than werewolves, because they transform unexpectedly from the familiar into horrors. For these we seek bullets of silver that can magically lay them to rest. The familiar software project has something of this character (at least as seen by the non-technical manager), usually innocent and straight forward, but capable of becoming a monster of missed schedules, blown budgets, and flawed projects. So we hear desperate cries for a silver bullet, something to make software costs drop as rapidly as computer hardware costs do. Scepticism is not pessimism, however. Although we see no startling breakthroughs, and indeed, such to be inconsistent with the nature of the software, many encouraging innovations are under way. A disciplined, consistent effort to develop, propagate and exploit them should indeed yield an order of magnitude improvement. There is no royal road, but there is a road. The first step towards the management of disease was replacement of demon theories and humours theories by the germ theory. The very first step, the beginning of hope, in itself dashed all hopes of magical solutions. It told workers that progress would be made stepwise, at great effort, and that a persistent, unremitting care would have to be paid to a discipline of cleanliness. So it is with software engineering today.

So, according to Fred Brook, in the eye of an unsophisticated manager software is like a giant. Sometimes it reveals as an unscheduled delay and sometimes it shows up in the

form of cost overrun. To kill this giant the managers look for magical solutions. But unfortunately magic is not a reality. We do not have any magic to defeat this giant. There is only one solution and that is to follow a disciplined approach to build software. We can defeat the giant named software by using disciplined and engineered approach towards software development.

Therefore, Software Engineering is nothing but a disciplined and systematic approach to software development.

Now we will look at some of the activities involved in the course of software development. The activities involved in software development can broadly be divided into two major categories first is construction and second is management.

Software Development

The construction activities are those that are directly related to the construction or development of the software. While the management activities are those that complement the process of construction in order to perform construction activities smoothly and effectively. A greater detail of the activities involved in the construction and management categories is presented below.

Construction

The construction activities are those that directly related to the development of software, e.g. gathering the requirements of the software, develop design, implement and test the software etc. Some of the major construction activities are listed below.

 Requirement Gathering  Design Development  Coding  Testing

Management

Management activities are kind of umbrella activities that are used to smoothly and successfully perform the construction activities e.g. project planning, software quality assurance etc. Some of the major management activities are listed below.

 Project Planning and Management  Configuration Management  Software Quality Assurance  Installation and Training

Figure 2 Software Engineering Framework

Software Development Loop

Let‘s now look at software engineering activities from a different perspective. Software development activities could be performed in a cyclic and that cycle is called software development loop which is shown in Figure3. The major stages of software development loop are described below.

Problem Definition: In this stage we determine what is the problem against which we are going to develop software. Here we try to completely comprehend the issues and requirements of the software system to build.

Technical Development: In this stage we try to find the solution of the problem on technical grounds and base our actual implementation on it. This is the stage where a new system is actually developed that solves the problem defined in the first stage.

Solution Integration: If there are already developed system(s) available with which our new system has to interact then those systems should also be the part of our new system. All those existing system(s) integrate with our new system at this stage.

Status Quo: After going through the previous three stages successfully, when we actually deployed the new system at the user site then that situation is called status quo. But once we get new requirements then we need to change the status quo.

After getting new requirements we perform all the steps in the software development loop again. The software developed through this process has the property that this could be evolved and integrated easily with the existing systems.

Method

Process

Quality Focus

Task Set

T O O L S

Figure Software Development Loop

Overview of the course contents

In the first course we studied the technical processes of software development to build industrial strength software. That includes requirement gathering and analysis, software design, coding, testing, and debugging. In this course our focus will be on the second part of Software Engineering, that is, the activities related to managing the technical development. This course will therefore include the following topics:

  1. Software development process
  2. Software process models
  3. Project Management Concepts
  4. Software Project Planning
  5. Risk Analysis and Management
  6. Project Schedules and Tracking
  7. Software Quality Assurance
  8. Software Configuration Management
  9. Software Process and Project Metrics
  10. Requirement Engineering Processes
  11. Verification and Validation
  12. Process Improvement
  13. Legacy Systems
  14. Software Change
  15. Software Re-engineering

Status Quo

Problem Definition

Technical Development

Solution Integration

  1. Goals: the overall objectives that the KPA must achieve.
  2. Commitments: requirements imposed on the organization that must be met to achieve the goals or provide proof of intent to comply with the goals.
  3. Abilities: those things that must be in place – organizationally and technically – to enable the organization to meet the commitments.
  4. Activities: the specific tasks required to achieve the KPA function
  5. Methods for monitoring implementation: the manner in which the activities are monitored as they are put into place.
  6. Methods for verifying implementation: the manner in which proper practice for the KPA can be verified.

Each of the KPA is defined by a set of practices that contribute to satisfying its goals. The key practices are policies, procedures, and activities that must occur before a key process area has been fully instituted.

The following table summarizes the KPAs defined for each level.

Level KPAs 1 No KPA is defined as organizations at this level follow ad-hoc processes 2 • Software Configuration Management

  • Software Quality Assurance
  • Software subcontract Management
  • Software project tracking and oversight
  • Software project planning
  • Requirement management 3 • Peer reviews
  • Inter-group coordination
  • Software product Engineering
  • Integrated software management
  • Training program
  • Organization process management
  • Organization process focus 4 • Software quality management
  • Quantitative process management 5 • Process change management
  • Technology change management
  • Defect prevention