unit I
unit I
OBJECTIVES:
Unit III Software Design:- Overview of the Design Process: Outcome of the Design Process –
Classification of Design Activities. – How to Characterize a good Software Design? Function
Oriented Software Design:- Overview of SA/SD Methodology – Structured Analysis –
Developing the DFD Model of a System: Context Diagram – Structured Design – Detailed
Design. (12L) Page 29 of 57
Unit IV User Interface Design:- Characteristics of a good User Interface - Basic Concepts –
Types of User Interfaces – Fundamentals of Components based GUI Development: Window
System. Coding and Testing:- Coding – Software Documentation – Testing: Basic Concepts and
Terminologies – Testing Activities. – Unit Testing – Black-box Testing: Equivalence Class
Partitioning – Boundary Value Analysis. – White-box Testing. (12L)
Unit V Software Reliability and Quality Management:- Software Reliability: Hardware versus
Software Reliability. – Software Quality – Software Quality Management System – ISO 9000:
What is ISO 9000 Certification? – ISO 9000 for Software Industry – Shortcomings of ISO 9000
Certification. – SEI Capability Maturity Model: Level 1 to Level 5. Software Maintenance:-
Characteristics of Software Maintenance: Characteristics of Software Evolution – Software
Reverse Engineering. (12L)
Text Book: Fundamentals of Software Engineering Fourth Edition by Rajib Mall – PHI Learning
Private Limited 2015.
UNIT-1
SOFTWARE ENGINEERING
Software engineering discusses systematic and cost-effective techniques for software
development. These techniques help develop software using an engineering approach.
∙ Early programmers used an ad hoc programming style. This style of program development is
now variously being referred to as exploratory, build and fix, and code and fix styles.
∙ The exploratory programming style is an informal style in the sense that there are no set
rules or recommendations that a programmer has to adhere to—every programmer himself
evolves his own software development techniques.
∙ If the flow chart representation is simple, then the corresponding code should be simple.
Fig:Control flow graphs of the above programs
∙ For example, for the program of Fig 1.9(a) you would have to understand the execution of
the program along the paths 1-2-3-7-8-10, 1-4-5-6-9-10, and 1-4-5-2-3-7-8-10. A program
having a messy control flow (i.e. flow chart) structure, would have a large number of
execution paths.
Software development organisations have realized that adherence to a suitable life cycle model
helps to produce good quality software and that helps minimize the chances of time and cost
overruns.
The waterfall model and its derivatives were extremely popular in the 1970s.
Classical Waterfall Model
∙ Classical waterfall model is intuitively the most obvious way to develop software. The classical
waterfall model divides the life cycle into a set of phases as shown in figure below.
Phases of the classical waterfall model
∙ The different phases are feasibility study, requirements analysis and specification, design, coding
and unit testing, integration and system testing, and maintenance.
∙ The phases starting from the feasibility study to the integration and system testing phase are
known as the development phases.
∙ A software is developed during the development phases, and at the completion of the
development phases, the software is delivered to the customer.
∙ After the delivery of software, customers start to use the software signaling the commencement
of the operation phase.
∙ As the customers start to use the software, changes to it become necessary on account of bug
fixes and feature extensions, causing maintenance works to be undertaken. ∙ Therefore, the last
phase is also known as the maintenance
∙ An activity that spans all phases of software development is project management. Since it
spans the entire project duration, no specific phase is named after it.
∙ In the waterfall model, different life cycle phases typically require relatively different amounts
of efforts to be put in by the development team.
∙ On the average, about 60 per cent of the total effort put in by the development team in the entire
life cycle is spent on the maintenance activities alone.
∙ However, among the development phases, the integration and system testing phase requires the
maximum effort in a typical development project.
1. Feasibility study
∙ The main focus of the feasibility study stage is to determine whether it would be financially
and technically feasible to develop the software.
∙ Feasibility study involves carrying out several activities such as
o collection of basic information relating to the software such as the different data
items that would be input to the system,
o the processing required to be carried out on these data,
o the output data required to be produced by the system, as well as various
constraints on the development.
∙ These collected data are analyzed to perform at the following:
o Development of an overall understanding of the problem
o Formulation of the various possible strategies for solving the problem
o Evaluation of the different solution strategies.
b)Requirements specification:
∙ After the requirement gathering and analysis activities are complete, the identified requirements
are documented.
∙ This is called a software requirements specification (SRS) document.
∙ The SRS document is written using end-user terminology.
∙ This makes the SRS document understandable to the customer.
3. Design
∙ The goal of the design phase is to transform the requirements specified in the SRS document
into a structure that is suitable for implementation in some programming language. ∙ During the
design phase the software architecture is derived from the SRS document.
a) Integration testing is carried out to verify that the interfaces among different units are
working satisfactorily.
∙ On the other hand, the goal of system testing is to ensure that the developed system
conforms to the requirements that have been laid out in the SRS document.
b) System testing usually consists of three different kinds of testing activities: ∙ alpha-testing:
testing is the system testing performed by the development team. ∙ beta-testing: This is the
system testing performed by a friendly set of customers. ∙ Acceptance testing: After the
software has been delivered, the customer performs system testing to determine whether to
accept the delivered software or to reject it.
6. Maintenance
∙ The total effort spent on maintenance of a typical software during its operation phase is much
more than that required for developing the software itself.
∙ Many studies carried out in the past confirm this and indicate that the ratio of relative effort of
developing a typical software product and the total effort spent on its maintenance is roughly
40:60.
∙ Maintenance is required in the following three types of situations:
a) Corrective maintenance: This type of maintenance is carried out to correct errors that were
not discovered during the product development phase.
b) Perfective maintenance: This type of maintenance is carried out to improve the performance
of the system, or to enhance the functionalities of the system based on customer’s requests.
c) Adaptive maintenance: Adaptive maintenance is usually required for porting the software to
work in a new environment. For example, porting may be required to get the software to work on
a new computer platform or with a new operating system.
Phase containment of errors: It is advantageous to detect these errors in the same phase in
which they take place, since early detection of bugs reduces the effort and time required for
correcting those.
∙ In the later case, it would be necessary not only to rework the design, but also to appropriately
redo the relevant coding as well as the testing activities, thereby incurring higher cost.
∙ The principle of detecting errors as close to their points of commitment as possible is known as
phase containment of errors.
∙ After all, the end product of many phases is text or graphical documents, e.g. SRS document,
design document, test plan document, etc.
Phase overlap
∙ In spite of the best effort to detect errors in the same phase in which they are committed, some
errors escape detection and are detected in a later phase. An important reason for phase
overlap is that usually the work required to be carried out in a phase is divided among the
team members.
∙ Some members may complete their part of the work earlier than other members. If strict phase
transitions are maintained, then the team members who complete their work early would idle
waiting for the phase to be complete, and are said to be in a blocking state.
1. Difficult to accommodate change requests: Based on the frozen requirements, detailed plans
are made for the activities to be carried out during the design, coding, and testing phases. Since
activities are planned for the entire duration, substantial effort and resources are invested in the
activities as developing the complete requirements specification, design for the complete
functionality and so on. Once requirements have been frozen, the waterfall model provides no
scope for any modifications to the requirements.
2. Incremental delivery not supported: In the iterative waterfall model, the full software is
completely developed and tested before it is delivered to the customer. There is no provision for
any intermediate deliveries to occur.
3. Phase overlap not supported: For most real life projects, it becomes difficult to follow the
rigid phase sequence prescribed by the waterfall model. By the term a rigid phase sequence, we
mean that a phase can start only after the previous phase is complete in all respects. As already
discussed, strict adherence to the waterfall model creates blocking states.
4. Error correction unduly expensive: In waterfall model, validation is delayed till the complete
development of the software. As a result, the defects that are noticed at the time of validation
incur expensive rework and result in cost escalation and delayed delivery.
5. Limited customer interactions: This model supports very limited customer interactions. It is
generally accepted that software developed in isolation from the customer is the cause of many
problems. In fact, interactions occur only at the start of the project and at project completion.
6. No support for risk handling and code reuse: It becomes difficult to use the waterfall model
in projects that are susceptible to various types of risks, or those involving significant reuse of
existing development artifacts. Please recollect that software services types of projects usually
involve significant reuse.
7. PROTOTYPING MODEL
∙ The prototype model suggests building a working prototype of the system, before development
of the actual software.
∙ A prototype is a toy and crude implementation of a system.
∙ It has limited functional capabilities, low reliability, or inefficient performance as compared to
the actual software.
∙ A prototype can be built very quickly by using several shortcuts.
∙ The shortcuts usually involve developing inefficient, inaccurate, or dummy functions. ∙
Normally the term rapid prototyping is used when software tools are used for prototype
construction.
∙ For example, tools based on fourth generation languages (4GL) may be used to construct the
prototype for the GUI parts.
Necessity of the prototyping model
∙ The prototyping model is advantageous to use for specific types of projects.
∙ It is advantageous to use the prototyping model for development of the graphical user interface
(GUI) part of an application.
∙ Through the use of a prototype, it becomes easier to illustrate the input data formats, messages,
reports, and the interactive dialogs to the customer.
o The prototyping model is especially useful when the exact technical solutions are unclear to
the development team.
∙ Often, major design decisions depend on issues such as the response time of a hardware
controller, or the efficiency of a sorting algorithm, etc.
∙ In such circumstances, a prototype is often the best way to resolve the technical issues.
o The prototyping model is considered to be useful for the development of not only the GUI
parts of a software, but also for a software project for which certain technical issues are not clear
to the development team.
Figure 2.6: Prototyping model of software development.
8. EVOLUTIONARY MODEL
∙ The software is developed over a number of increments. At each increment, a concept is
implemented and is deployed at the client site.
∙ The software is successively refined and feature-enriched until the full software is realized. ∙ In
evolutionary model, the requirements, plan, estimates and solution evolve over the iterations
rather than fully defined and frozen in a major up front specification effort before the
development iterations begin.
∙ The evolutionary model is sometimes referred to as design a little, build a little, test a little,
deploy a little model.
∙ After the requirements have been specified, the design, build, test and deployment activities are
iterated.
Advantages:
∙ 1. Effective elicitation of actual customer requirements: The user gets a chance to
experiment with a partially developed software much before the complete requirements
are developed. SO the change request after delivery of the complete software gets
substantially reduced.
∙ 2. Easy handling change requests: Handling change requests is easier as no long term plans
are made. Reworks required are much smaller.
Disadvantages:
1. Feature division into incremental parts can be non-trivial: For small sized projects it is
difficult to divide the required features into several parts for incrementally implemented and
delivered. For larger problems, features are intertwined that expert would need considerable
effort to plan the incremental deliveries.
2. Adhoc design: Design for only the current increment is done, the design can become adhoc
without specific attention being paid to maintainability and optimality.
Applicability of evolutionary model:
∙ The evolutionary model is well suited to use in object oriented software development
projects.
∙ A risk is essentially any adverse circumstance that hamper the successful completion of a
software project.
∙ The risk can be resolved by building a prototype of the subsystem and experimenting with the
exact fault.
Phases of the Spiral Model:
Quadrant 1: The objectives are investigated, elaborated and analyzed. The risks involved in the
phase objectives are identified. Alternative solutions are proposed.
Quadrant 2: The alternative solutions are evaluated to select the best possible solution. The
solutions are evaluated by developing an appropriate prototype.
Quadrant 3: Activities consist of developing and verifying the next level of the software, The
identified features have been implemented and next version of the software is available.
Quadrant 4: Reviewing the results of the stages traversed so far with the customer and planning
the next iteration of the spiral.
∙ The radius of the spiral at any point represents the cost incurred in the project so far. ∙ To the
developers of a project the spiral model usually appears as a complex model to follow since it is
risk driven and is more complicated phase structure than other models. ∙ For projects having many
unknown risks that show up as the development proceeds, the spiral model would be the most
appropriate development model to follow.