Introduction to Software Engineering

           

Software: software is collection of computer programs, procedures, rules and associated documentation and data.

 

Software Engineering: software engineering is systematic approach to development, operation, maintenance, and retirement of software. The basic goal of software engineering is to produce high quality software at low cost.

There are number of factors which determine software quality

 

There are three dimensions of the project whose quality is to be assessed

 

Product revision: maintainability, flexibility, testability.

Product transition: portability, reusability, interoperability.

Product operations: correctness, reliability, efficiency, usability.

 

Correctness means satisfies specification.

 

Reliability defines software meets its requirements.

 

Efficiency relates to execution speed.

 

Usability means effort required to learn or operate software properly.

 

Maintainability means effort required to fix error.

 

Testability means effort required to test to ensure every function of system work properly.

 

Flexibility is effort required to modify function of program.

 

Portability is effort required to transfer software from one hard configuration to another.

 

Reusability is extent to which parts of software can be reused in other applications.

 

Interoperability is effort required to couple the system with other systems.

 

Crisis of software

 

 The evolution of electronic computer began in 1940. Early efforts in the field of computer focused on designing of hardware. But in hardware, many difficulties exist when second generation computer evolution in 1950. First operating system came in existence with programming languages like COBOL, FORTRAN. In 1960 when multiprogramming came into light, cost of hardware decreased and demand of software are increased. But development of software is a labor intensive work; it takes more time, because there is no proper manner for developing software. So in 1960 NATO called conference, discussed on various issues related to development of software and future of software. Then the term Software Engineering evolved in the conference.

 

Software engineering is systematic approach to development, operation, maintenance and retirement of software.

 

Phases in software development

 

Requirement analysis

Planning

Designing

Coding

Testing

 

Requirement analysis:

 

This is to understand the problem. Problem could be automating existing system or develop new system or combination of both. The main emphasis in requirement analysis is an identifying what is needed from system and how system achieves its goal. All these requirement collects in a document called software requirement document.

 

Planning:

 

After getting requirement, make plan what cost occurred on developing software how many persons are required for it, what risks are associated with it, we decide it.

 

Design:

 

The purpose of design is to find solution of software. Design divided into two parts. System design identifies the number of modules in system and specifications of modules and how interacts with one another.

Detailed design identify internal logic of each module i.e. detail of data structure of flow diagram. Focus in designing our programs is modular.

 

Coding:

 

When designing is complete, then we select language in which programs are written. The goal of coding phase is to translate design of system into code in given programming language. In coding phase focus is to make program readable and understandable. Program has integrity and clarity.

 

Testing:

 

Testing is major quality control measure during software development. Its aim is to detect errors in software

 

There are four phases of testing

 

Unit testing

Integration testing

System testing

Acceptance testing

 

    For successful testing proper selection of test cases is essential. There are two approaches

 

  1. Functional
  2. Structural

 

Maintenance:

 

It is not part of software. But it is extremely important activity. It includes all activities after the installation of software.

There are two maintenance activities

 

  1. Adaptive maintenance
  2. Corrective maintenance

 

Adaptive maintenance means changing the problem function according to user needs. Creative maintenance means repairing, processing or performance failure or making changes due to false assumptions.

 

Role of management in software development

 

Proper management is integral part of software development. A large software development project involves many people working for long period of time. So software project divided into many parts because aim of software is to provide quality software at low cost.

 

The management activities divided into two categories

 

Project planning

Project monitoring and control

 

Project planning start with requirement analysis phase

Project monitoring and control goes to end of software i.e. testing.

So role of management is very crucial and related to satisfaction of users.

 

Water fall model

 

Water fall model states that the phases are organized in a linear order. With water fall model, the sequence of activities performed in software development Project is requirement analysis, project planning, system design, detailed design, coding and unit testing.

Linear ordering of activities has some important consequences. Clearly identify the end and beginning of a phase. Some certification mechanism has to be employed at the end of each phase. This is usually done by some verification and validation; means will ensure that output of a phase is consistent with its input and that the output of the phase is consistent with overall requirement of the system.

Project outputs in waterfall model:

 

1.      requirement document

2.      project plan

3.      system design document

4.      detailed design document

5.      test plan and test report

6.      final code

7.      software manuals

8.      review reports

 

Limitations:

 

It is document driven process that requires formal document at end of each phase. So it makes process documentation heavy.

 

Metrics and Measurements:

 

Software metrics are quantifiable measure that used to measure the characteristics of software system.

There are two types of software metrics

 

Product metric:

These are used to quantify characteristics of product being developed.

 

Process metric:

These are used to quantify characteristics of environment or process being employed to develop the software.

 

Prototyping:

It is an idea for complicated and large system which have no manual process or existing system to determine requirements. So prototype provides invaluable inputs.

Experience is better prototyping.

 

Iterative enhancement:

 

The basic idea is software should be developed in increments. First module, second module and so on. Each increment adding some functional capabilities to design0, design1, design2, and so on.

At each step extension and design modifications can be made. Advantage of this approach is that it results in better testing.

In this model, a project list is created that contain in order all tasks that performed to obtain the final implementations.

There are three phases called design phase, implementation phase and analysis phase. The process is iterated until project control list is empty at which the final implementation of system will be available

One effective use of this type of model is for product development, in which developers themselves provide specifications and therefore have a lot of control on what specification go in the system and what stay out. Most products undergo this type of development process.

 

The System Engineering Process:

 

 System engineering is an interdisciplinary activity involving teams drawn from different backgrounds. System engineering teams are needed because any single engineer does not have sufficient knowledge and understanding to consider all implications of system design decisions.

Consider an ATC system that uses radar and other sensors to determine aircraft position:

ATC system Engineering:

Software engineering

Structure engineering

Civil engineering

Electronics engineering

Electrical engineering

Mechanical engineering

There are important distinctions between the system engineering process and software process.

 

  1. Interdisciplinary Involvement:

This requires long periods of negotiations between engineers. There is scope for misunderstanding because of different terminology used in different engineering disciplines.

 

  1. Reduced scope for iteration between phases:

Once some system engineering decisions have been made, it is extremely difficult to change them if unanticipated problem arises.

System redesign is impossible.

System Requirement Definition:

  1. Coarse grain functional requirements:

      We define system at abstract level and its subsystems in details. E.g. ATC system requires flight plan database.

  1. System properties:

There are non functional emergent system properties. These may be availability, performance, safety and so on. These nonfunctional system properties affect requirements for all subsystems.

  1. Characteristics which the system must not exhibit:

It is sometime as important to specify what the system must not do as what the system should do.

An important part of requirement definition phase is to establish a set of all objectives which system should meet.

 

System design:

It is concerned with how the system functionality is to be provided by different component of the system. There are certain activities

  1. Partition requirement:

During this phase requirements are analyzed and collected into related groups. These are usually possible partitioning options and number of alternatives may be produced at this stage of the process.

  1. Identify subsystem:

Identify different subsystems individually and collectively meets the requirement.

Subsystem requirement are also influenced by organizational or environment factors, not only by system requirement.

  1. Assign requirement to subsystem.
  2. Specify subsystem functionality
  3. Define subsystem interface

 

Subsystem development:

 

Development of subsystem is like a system. It also involves requirements, design, and implementation and so on.

Occasionally the development process of all subsystem starts from scratch.

 

System Integration:

 

Increment process is appropriate approach. It is usually impossible to schedule all different subsystem development so that all development is computed at the same time.

 

System Installation:

 

1.      System installation is the activity of installing a system in the environment in which it is intended to operate.

2.      Several problems arise during installation:

3.      The environment of system not understood by developer of the system

4.      Human resistance

5.      New system requires uninstallation of existing system.

6.      Physical installation problems.

 

System Operation: Once system is installed it is put into operation. Operating system involves organizing training session for operators and changing normal work process to make effective use of new system.

  1. User interface
  2. Incompatibility

 

System Evolution:

 

It is inevitable that during their lifetime, some system evolution will take place.

It is due to errors in system requirements or new requirements.

System evolution is very costly for a number of reasons:

1. Proposed changes have to be analyzed very carefully both from business and technical perspective. They must be approved by range of people.

2. Subsystems are independent. Changes to one subsystem may adversely affect performance of another subsystem.

 

System Decommissioning:

 

It is the process of taking the system out of service after the end of its useful operational lifetime.

 

Human factors:

 

All systems have human users who use the system in a social and organizational environment with other social and technical system. These human factors must be taken into account by system Engineers.

 

  1. Does system requires changes to work processes in the environment. If so training will certainly be required.
  2. Does system deskill the users? If so, they may actively reset the introduction of the system.
  3. Does the system require users to change the way they work.

 

Software Process:

 

The software process is set of activities and associated results which produce a software product.

There are four fundamental process activities:

 

1. Software specification: functionality, constraint.

 

2. Software development: software meet specification must be produced.

 

3. Software validation: software must be validated to ensure that it does what         customer wants.

 

4 software evolutions: the software must evolve to meet the changing customer needs.