Thursday, September 20, 2012

Introduction to Software Engineering

 CHAP:1 - Introduction to Software Engineering

1.  System software:-
·       System software is a collection of programs written to service other programs.
·       Some system software (e.g., compilers, editors, and file management utilities) process complex, but determinate,information structures.
·       Other systems applications (e.g., operating system components, drivers, telecommunications processors) process largely indeterminate data.
1.    Real-time software.
Software that monitors/analyzes/controls real-world events as they occur is called real time.
2.    Business software. Business information processing is the largest single software application area.
3.    Engineering and scientific software. Engineering and scientific software have been characterized by "number crunching" algorithms.
4.    Embedded software. Intelligent products have become commonplace in nearly every consumer and industrial market. Embedded software resides in read-only memory and is used to control products and systems for the consumer and industrial markets.
5.    Personal computer software. The personal computer software market has burgeoned over the past two decades.
6.    Web-based software. The Web pages retrieved by a browser are software that incorporates executable instructions (e.g., CGI, HTML, Perl, or Java), and data (e.g., hypertext and a variety of visual and audio formats).
7.    Artificial intelligence software. Artificial intelligence (AI) software makes use of nonnumerical algorithms to solve complex problems that are not amenable to computation or straightforward analysis.

·       Software engineering is the establishment and use of sound engineering principles in order to obtain economically software that is reliable and works efficiently on real machines.

·       The foundation for software engineering is the process layer.
·       Software engineering process is the glue that holds the technology layers together and enables rational and timely development of computer software.
·       Process defines a framework for a set of key process areas (KPAs) [PAU93] that must be established for effective delivery of software engineering technology.
·       The key process areas form the basis for management control of software projects and establish the context in which technical methods are applied, work products (models, documents, data, reports, forms, etc.) are produced, milestones are established, quality is ensured, and change is properly managed.
·       Software engineering methods provide the technical how-to's for building software.
·       Methods encompass a broad array of tasks that include requirements analysis, design, program construction, testing, and support.
·       Software engineering methods rely on a set of basic principles that govern each area of the technology and include modeling activities and other descriptive techniques.
·       Software engineering tools provide automated or semi automated support for the process and the methods.
·       When tools are integrated so that information created by one tool can be used by another, a system for the support of software development, called computer-aided software engineering, is established.
·       CASE combines software,hardware, and a software engineering database  to create a software engineering environment analogous to CAD/CAE (computer-aided design/engineering) for hardware.

3. A Generic View of Software Engineering
Engineering is the analysis, design, construction, verification, and management of technical (or social) entities. Regardless of the entity to be engineered, the following questions must be asked and answered:

·       What is the problem to be solved?
·       What characteristics of the entity are used to solve the problem?
·       How will the entity (and the solution) be realized?
·       How will the entity be constructed?
·       What approach will be used to uncover errors that were made in the design and construction of the entity?
·       How will the entity be supported over the long term, when corrections, adaptations, and enhancements are requested by users of the entity.

The work associated with software engineering can be categorized into three generic phases, regardless of application area, project size, or complexity. Each phase addresses one or more of the questions noted previously.

The definition phase focuses on what. That is, during definition,the software engineer attempts to identify what information is to be processed, what function and performance are desired, what system behavior can be expected, what interfaces are to be established, what design constraints exist, and what validation criteria are required to define a successful system.

The development phase focuses on how. That is, during development a software engineer attempts to define how data are to be structured, how function is to be implemented within a software architecture, how procedural details are to be implemented,
how interfaces are to be characterized, how the design will be translated into a programming language,and how testing will be performed.

The support phase focuses on change associated with error correction, adaptations required as the software's environment evolves, and changes due to enhancements brought about by changing customer requirements.

Correction:-  Even with the best quality assurance activities, it is likely that the customer will uncover defects in the software. Corrective maintenance changes the software to correct defects.

Adaptation:- Over time, the original environment (e.g., CPU, operating system, business rules, external product characteristics) for which the software was developed is likely to change. Adaptive maintenance results in modification to the software to accommodate changes to its external environment.
Enhancement:- As software is used, the customer/user will recognize additional functions that will provide benefit. Perfective maintenance extends the software beyond its original functional requirements.

Prevention:- Computer software deteriorates due to change, and because of this, preventive maintenance, often called software reengineering, must be conducted to enable the software to serve the needs of its end users.
In essence, preventive maintenance makes changes to computer programs so that they can be more easily corrected, adapted, and enhanced.

The phases and related steps described in our generic view of software engineering are complemented by a number of umbrella activities. Typical activities in this category include:

·       Software project tracking and control
·       Formal technical reviews
·       Software quality assurance
·       Software configuration management
·       Document preparation and production
·       Reusability management
·       Measurement
·       Risk management

·       Software Process Models
       Waterfall model
       Evolutionary development
       Component-based software engineering
       Incremental model
       Spiral model
·       Software process is organized set of activities aimed at building a software system
·       Software process model is an abstract representation of a software process
·       Fundamental software process activities:
       Software specification
       Software design
       Software implementation
       Software validation
       Software evolution
1.    The Waterfall model:
·        Main characteristics:
       Also called classic software life cycle or sequential model
       Process activities (phases/stages) are clearly separated
       After a number of iterations, phases of the life cycle (such as specification and design) are “frozen”
·       Advantages:
       Organized approach, provides robust separation of phases
       Reflects common engineering practice
·       Disadvantages:
       Doesn’t cope well with changes required by the client
       Development teams might wait for each other
       A working version of the product is available only late
·       Applicability:
       When requirements are well known and few changes are likely to be needed
       Can be used also for parts of larger software systems
2.    Evolutionary Development:

The Evolutionary development model has a peculiar characteristic that the processes are well checked and tested at every development stage and the communication part plays a very important role in this.

This can be clearly viewed from the diagram of this process model.
·       Main characteristics:
       The phases of the software construction are interleaved
       Feedback from the user is used throughout the entire process
       The software product is refined through many versions   
·       Types of evolutionary development:
       Exploratory development
       Throw-away prototyping
·       Advantages:
       Deals constantly with changes
       Provides quickly an initial version of the system
       Involves all development teams

·       Disadvantages:
       Quick fixes may be involved
       “Invisible” process, not well-supported by documentation
       The system’s structure can be corrupted by continuous change
       Special tools and techniques may be necessary
       The client may have the impression the first version is very close to the final product and thus be less patient
·       Applicability:
       When requirements are not well understood
       When the client and the developer agree on a “rapid prototype” that will be thrown away
       Good for small and medium-sized software systems.
3.    Spiral Model:
·       Main characteristics:
       Also a hybrid model that support process iteration
       The process is represented as a spiral, each loop in the spiral representing a process phase
       Four sectors per loop: objective setting, risk assessment and reduction, development and validation, planning
       Risk is explicitly taken into consideration
·       Advantages:
       Risk reduction mechanisms are in place
       Supports iteration and reflects real-world practices
       Systematic approach
·       Disadvantages:
       Requires expertise in risk evaluation and reduction
       Complex, relatively difficult to follow  strictly
       Applicable only to large systems
·       Applicability:
       Internal development of large systems

4.    Phases of Linear Sequential Model
·       Designing:
       In this phase, the requirements are converted into design to be used in the next phase. The design includes various elements such as database structures, software architecture and procedures.
       The design is first passes through the quality test and then documented.
·       Coding:
       In this phase the actual coding of the software is done. The design of the previous phase is converted into the code.
·       Testing:
       In this phase, the output generated is checked to ensure that it matches the requirements. The programs developed in the previous phase are checked for the logical and syntax errors.
·       Maintenance and Support:
       The software developed needs to maintenance and support. This refers to the changes as well as new requirements in the software after delivery.
5.    Incremental Model (INM):

In the Incremental model the processes in the sequential model are repeated at some instances of time to add different functionalities. After adding the functionality the processes are repeated again and all the phases are repeated to complete the process of adding all the requirements given by the user at the end of each communication.
·       Main characteristics:
       The phases of the software construction are interleaved
       Feedback from the user is used throughout the entire process
       The software product is refined through many versions   
·        Advantages:
       Deals constantly with changes.
       Provides quickly an initial version of the system.
       Involves all development teams.
·        Disadvantages:
       Quick fixes may be involved.
       “Invisible” process, not well-supported by documentation.
       The system’s structure can be corrupted by continuous change
       Special tools and techniques may be necessary
       The client may have the impression the first version is very close to the final product and thus be less patient
·       Applicability:
        When requirements are not well understood
       When the client and the developer agree on a “rapid prototype” that will be thrown away
       Good for small and medium-sized software systems.

6.    Phases of Prototyping Model:
·        Advantages:
       Due to the interaction between the client and developer right from the beginning, the objectives and requirements of the software is well established.
       Suitable for the projects when client has not clear idea about his requirements.
       The client can provide its input during development of  the prototype.
       The prototype serves as an aid for the development of the final product.
·        Disadvantages:
       The quality of the software development is compromised in the rush to present a working version of the software to the client.
       The clients look at the working version of the product at the outset and expect the final version of the product to be delivered immediately. This cause additional pressure over the developers to adopt shortcut in order to meet the final product deadline.

7.    Rapid Application Development:
       RAD is a high speed version of linear sequential model. It is characterized by a very short development life cycle, in which the objective is to accelerate the development.
       The RAD model follows a component based approach.
       In this approach individual components developed by different people are assembled to develop a large software system.
·       Advantages:
       Due to emphasis on rapid development, it results in the delivery of fully functional project in short time period.
       It encourages the development of program component reusable.
·       Disadvantages:
       It requires dedication and commitment on the part of the developers   as well as the client to meet the deadline. If either party is indifferent in needs of other, the project will run into serious problem.
       Its application area is restricted to systems that are modular and reusable in nature.
       It is not suitable for the applications that have a high degree of technical risk.






a.     Easy to understand, easy to use.

b.    Provides structure to inexperienced staff.

c.      Milestones are well understood

d.    Sets requirements stability

e.     Good for management control (plan, staff, track)

f.       Works well when quality is more important than cost or schedule

a)   All requirements must be known upfront

b)  Deliverables created for each phase are considered frozen –inhibits flexibility

c)    Integration is one big bang at the end

d)  Little opportunity for customer to preview the system (until it may be too late)

a)   Requirements are very well known

b)  Product definition is stable

c)    Technology is understood

d)  Porting an existing product to a new platform.


a)   Customers can ―see the system requirements as they are being gathered

b)  Developers learn from customers

c)    A more accurate end product

d)  Allows for flexible design and development

e)   Steady, visible signs of progress produced

a)   Bad reputation for ―quick-and dirty methods.

b)  The customer may want the prototype delivered

c)    Process may continue forever (scope creep)

a)   Requirements are unstable or have to be clarified.

b)  As the requirements clarification stage of a waterFall model.

c)    Develop user interface.

d)  Short lived demonstrations.


a)   Develop high-risk or major functions first

b)  Each release delivers an operational product

c)    Customer can respond to each build

d)  Lowers initial delivery cost

e)   Initial product delivery is faster

f)     Customers get important functionality early

g)   Risk of changing requirements is reduced

a)   Requires good planning and design

b)  Requires early definition of a complete and fully functional system to allow for the definition of increments

c)    Total cost of the complete system is not lower

a)   Most of the requirements are known up-front but are expected to evolve over time

b)  A need to get basic functionality to the market early

c)    On projects which have lengthy development schedules

d)  On a project with new technology


a)   Each cycle is this model is completed by their view of the product as well as the plans. Thus it is helpful for development and enhancement.

b)  Software evolves gradually so the customer and developer better understand and deal with the risks at each revolutionary stages.

c)    The spiral model demands a direct consideration of technical risks at all stages of
d)  The project and, if properly applied, should reduce risks before they become problematic.
e)   “This model is very useful in high risk projects.

a)   It demands considerable risk assessment expertise and relies on this expertise for success. If a major risk is not uncovered and managed, problems will undoubtedly occur.

b)  Finally, the model has not been used as widely as the linear sequential or prototyping paradigms.

c)    It may be difficult to convince customers (particularly in contract situations) that the evolutionary approach is controllable.

    a) It is a realistic     approach and is used in development of large scale systems and software.

a)   Estimates (i.e. budget, schedule, etc.) become more realistic as work progresses, because important issues are discovered earlier. 

b)   It is more able to cope with the (nearly inevitable) changes that software development generally entails. 

c)     Software engineers (who can get restless with protracted design processes) can get their hands in and start working on a project earlier. 
a)   Highly customized limiting re-usability 

b)  Applied differently for each application 

c)     Risk of not meeting budget or schedule 

a)   When knowing every stage transition of  activity is necessary