SE Unit 1
SE Unit 1
During the life of software if any change is made, some defects may get introduced. This causes
failure rate to be high. Before the curve can return to original steady state another change is
requested and again the failure rate becomes high. Thus the failure curve looks like a spike. Thus
frequent changes in software cause it to deteriorate.
Another issue with software is that there are no spare parts for software. If hardware component
wears out it can be replaced by another component but it is not possible in case of software.
Therefore software maintenance is more difficult than the hardware maintenance.
Most software is custom built rather than being assembled from components
While developing any hardware product firstly the circuit design with desired functioning
properties is created. Then required hardware components such as ICs, capacitors and
registers are assembled according to the design, but this is not done while developing
software product. Most of the software is custom built.
However, now the software development approach is getting changed and we look for reusability
of software components. It is practiced to reuse algorithms and data structures. Today software
industry is trying to make library of reusable components.
For example: in today's software, GUI is built using the reusable components such as message
windows, pull down menus and many more such components. The approach is getting developed
to use in-built components in the software. This stream of software is popularly known as
component engineering.
1.2.2 Categories of Software
Software can be applied in a situation for which a predefined set of procedural steps (algorithm)
exists. Based on a complex growth of software it can be classified into following categories.
System software
It is collection of programs written to service other programs. Typical programs in this category
are compiler, editors, and assemblers. The purpose of the system software is to establish a
communication with the hardware.
Application software
It consists of standalone programs that are developed for specific business need. This software
may be supported by database systems.
Engineering/scientific software
This software category has a wide range of programs from astronomy to volcanology, from
automative stress analysis to space shuttle orbital dynamics and from molecular biology to
automated manufacturing. This software is based on complex numeric computations.
Embedded software
This category consists of program that can reside within a product or system. Such software can
be used to implement and control features and functions for the end-user and for the system
itself.
Web applications
Web application software consists of various web pages that can be retrieved by a browser. The
web pages can be developed using programming languages like JAVA, PERL, CGI, HTML,
DHTML.
Artificial intelligence software
This kind of software is based on knowledge based expert systems. Typically, this software is
useful in robotics, expert systems, image and voice recognition, artificial neural networks,
theorem proving and game playing.
1.3 Goals and Objectives of Software.
While developing software following are common objectives.
Satisfy user’s requirements
Many programmers simply don't do what the end user wants because they do not understand user
requirements. Hence it becomes necessary to understand the demand of end user and accordingly
software should be developed.
High reliability
Mistakes or bugs in a program can be expensive in terms of human lives, money, and customer
relation. For instance, Microsoft has faced many problems because earlier release of windows
has many problems. Thus software should be delivered only if high reliability is achieved.
Low maintenance costs
Maintenance of software is an activity that can be done only after delivering the software to the
customer. Any small change in software should not cause restructuring of whole software. This
indicates that the design of software has poor quality.
Delivery on time
It is very difficult to predict the exact time on which the software can be completed. But a
systematic development of software can lead to meet the given deadline.
Low production costs
The software product should be cost effective.
High performance
The high performance software are expected to achieve optimization in speed and memory
usage.
Ease of reuse
Use same software in different systems and software.
Environments reduce development costs and also improve the reliability. Hence reusability of
developed software is an important property.
1.4 Challenges in Software Engineering
The key challenges facing software engineering are:
Coping with legacy systems
Old, valuable systems must be maintained and updated. Hardware is evolved faster than
software. If original developer have moved on managing, maintaining or integrating of software
becomes a critical issue.
Heterogeneity challenge
Sometimes systems are distributed and include a mix of hardware and software. This implies that
software systems must cleanly integrate with other different software systems, built by different
organizations and teams using different hardware and software platforms.
Delivery time’s challenge
There is increasing pressure for faster delivery of software. As the complexity of systems that we
develop increases, this challenge becomes harder.
As software is an integral part of computer based systems, it is essential to apply software
engineering principles and practices while developing software. Hence the main objective of
software engineering is to adopt systematic, disciplined approach while building high quality
software.
1.5 Software Myths
There are some misbelieves in the software industry about the software and process of building
software. For any software developer it is a must to know such beliefs and reality about them.
Here are some typical myths –
Myth: Using a collection of standards and procedures one can build software. (Management
Myth)
Reality: Even though we have all standards and procedures with us for helping the developer to
build software, it is not possible for software professionals to build desired product. This is
because - the collection which we have should be complete, it should reflect modern techniques
and more importantly it should be adaptable. It should also help the software professional to
bring quality in the product.
Myth: Add more people to meet deadline of the project. (Management Myth)
Reality: Adding more people in order to catch the schedule will cause the reverse effect on the
software project i.e. software project will get delayed. Because, we have to spend more time on
educating people or informing them about the project.
Myth: If a project is outsourced to a third party then all the worries of software building are
over. (Management Myth)
Reality: When a company needs to outsource the project then it simply indicates that the
company does not know how to manage the projects. Sometimes, the outsourced projects require
proper support for development.
Myth: Even if the software requirements are changing continuously it is possible to
accommodate these changes in the software. (Customer Myth)
Reality: It is true that software is a flexible entity but if continuous changes in the requirements
have to be incorporated then there are chances of introducing more and more errors in the
software. Similarly, the additional resources and more design modifications may be demanded
by the software.
Myth: We can start writing the program by using general problem statements only. Later on
using problem description we can add up the required functionalities in the program.
(Customer Myth)
Reality: It is not possible each time to have comprehensive problem statement. We have to start
with general problem statements; however by proper communication with customer the software
professionals can gather useful information. The most important thing is that the problem
statement should be unambiguous to begin with.
Myth: Once the program is running then it’s over! (Practitioner's Myth)
Reality: Even though we obtain that the program is running major part of work is after
delivering it to customer.
Myth: Working program is the only work product for the software project. (Practitioner's
Myth)
Reality: The working program/software is the major component of any software project but
along with it there are many other elements that should be present in the software project such as
documentation of software, guideline for software support.
Myth: There is no need of documenting the software project; it unnecessarily slows down the
development process. (Practitioner's Myth)
Reality: Documenting the software project helps in establishing ease in use of software. It helps
in creating better quality. Hence documentation is not wastage of time but it is a must for any
software project.
Software cost is getting increased tremendously day-by-day. The software purchase expenses are
higher than the hardware purchase. This is becoming worrying trend over the years. Following
graph shows the ratio of h/w and s/w cost vs. years
This graph shows that cost of software is increasing rapidly than the hardware cost. Following
are the symptoms of present software crisis -
1) Day-by-day, software purchase cost is getting more than the hardware purchase cost.
Hence major part of budget of any software industry is on software purchase.
2) Software products are difficult to alter, maintain, enhance, debug or modify.
3) Software resources are not being used optimally.
4) User requirements are often evolving and cannot be satisfied fully.
5) Software product not being reliable.
6) Many time software products get crashed on occurrence of specific condition.
7) Delivery of software product within specified budget and on scheduled time.
Various factors that have contributed to make software crisis
Following are some factors that bring the software crisis -
1) Increasing size or volume of software.
2) Lowered productivity or quality improvement.
3) Lack of skilled staff.
4) Inadequate software training.
5) Growing demand for more software.
Solutions to present software crisis -
The most effective solutions to present software crisis can be
1) Use and spread of software engineering practices among software engineers and
2) Further enhancement in software engineering disciplines.
Sl.
Program Software product
No
Software product is developed by multiple
Programs are developed by individual user
1. users and it is used by large number of
and it is used for personal use.
people or customers.
Software product consists of multiple
Programs are small in size and possessing program codes, related documents such as
2.
limited functionality. SRS, design documents user manuals, test
cases and so on.
Generally only one person uses the
Good graphical user interface is most
3. program, hence there is a lack of user
required by any software product.
interface.
Software product is developed by software
Program is generally developed by engineers who are large in number and work
4
programmers in a team. Therefore systematic approach of
developing software product must be applied.
Example: Example:
Program of Sorting of n elements A word processing software
Software Process
1.8 Layered Technology
Software engineering is a layered technology. Any software can be developed using these
layered approaches. Various layers on which the technology is based are quality focus layer,
process layer, methods layer, tools layer.
Waterfall Model
In REQUIREMENT GATHERING AND ANALYSIS phase the basic requirements of the system must
be understood by software engineer, who is also called Analyst. The information domain,
function, behavioral requirements of the system are understood. All these requirements are then
well documented and discussed further with the customer, for reviewing.
The DESIGN is an intermediate step between requirements analysis and coding. Design focuses
on program attributes such as -
Data structure
Software architecture
Interface representation
Algorithmic details.
The requirements are translated in some easy to represent form using which coding can be done
effectively and efficiently. The design needs to be documented for further use.
CODING is a step in which design is translated into machine-readable form. If design is done in
sufficient detail then coding can be done effectively. Programs are created in this phase.
TESTING begins when coding is done. While performing testing the major focus is on logical
internals of the software. The testing ensures execution of all the paths, functional behaviors. The
purpose of testing is to uncover errors, fix the bugs and meet the customer requirements.
MAINTENANCE is the longest life cycle phase. When the system is installed and put in practical
use then error may get introduced, correcting such errors and putting it in use is the major
purpose of maintenance activity. Similarly, enhancing system’s services as new requirements are
discovered is again maintenance of the system.
This model is widely used model, although it has many drawbacks.
Benefits of waterfall model
The waterfall model is simple to implement.
For implementation of small systems waterfall model is useful.
Drawbacks of waterfall model
There are some problems that are encountered if we apply the waterfall model and those are :
1) It is difficult to follow the sequential flow in software development process. If some
changes are made at some phases then it may cause some confusion.
2) The requirement analysis is done initially and sometimes it is not possible to state all the
requirements explicitly in the beginning. This causes difficulty in the project.
3) The customer can see the working model of the project only at the end. After reviewing
of the working model; if the customer gets dissatisfied then it causes serious problems.
4) Linear nature of waterfall model induces blocking states, because certain tasks may be
dependent on some previous tasks. Hence it is necessary to accomplish all the dependent
tasks first. It may cause long waiting time.
1. 10.2 Incremental Process Model
In this model, the initial model with limited functionality is created for user’s understanding
about the software product and then this model is refined and expanded in later releases.
1.10.2.1 Incremental Model
The incremental model has same phases that are in waterfall model. But it is iterative in nature.
The incremental model has following phases.
1) Analysis
2) Design
3) Code
4) Test
The incremental model delivers series of releases to the customer. These releases are called
increments. More and more functionality is associated with each increment.
Incremental Model
The incremental model delivers series of releases to the customer. These releases are
called increments. More and more functionality is associated with each increment.
The first increment is called core product. In this release the basic requirements are
implemented and then in subsequent increments new requirements are added.
The word processing software package can be considered as an example of incremental
model. In the first increment only the document processing facilities are available. In the
second increment, more sophisticated document producing and processing facilities, file
management functionalities are given. In the next increment spelling and grammar
checking facilities can be given. Thus in incremental model progressive functionalities
are obtained with each release.
When to choose it?
1) When requirements are reasonably well-defined.
2) When overall scope of the development effort suggests a purely linear effort.
3) When limited set of software functionality needed quickly.
Merits of incremental model
1) The incremental model can be adopted when there are less number of people involved in
the project.
2) Technical risks can be managed with each increment.
3) For a very small time span, at least core product can be delivered to the customer.
.
Drawbacks of rapid application development
It requires multiple teams or large number of people to work on the scalable projects.
This model requires heavily committed developer and customers. If commitment is
lacking then RAD projects will fail.
The projects using RAD model requires heavy resources.
If there is no appropriate modularization then RAD projects fail. Performance can be
problem to such projects.
The projects using RAD model find it difficult to adopt new technologies.
Applications of RAD Model
The RAD model is suitable for information system applications, business applications and the for
systems that can be modularized because of following reasons -
[1] This model is similar to waterfall model but it uses very short development cycle.
[2] It uses component-based construction and emphasizes reuse and code generation.
[3] This model uses multiple teams on scalable projects.
[4] The RAD model is suitable for the projects where technical risks are not high.
[5] The RAD model requires heavy resources.
In the initial pass, product specification is built and in subsequent passes around the spiral the
prototype gets developed and then more improved versions of software gets developed.
During planning phase, the cost and schedule of software can be planned and adjusted based on
feedback obtained from customer evaluation.
In spiral model, project entry point axis is defined. This axis represents starting point for
different types of projects.
For instance, concept development project will start at core of spiral and will continue along the
spiral path. If the concept has to be developed into actual project then at entry point 2 the product
development process starts. Hence entry point 2 is called product development project entry
point. The development of the project can be carried out in iterations.
The task regions can be described as :
1) Customer communication - In this region, it is suggested to establish customer
communication.
2) Planning - All planning activities are carried out in order to define resources time line
and other project related activities.
3) Risk analysis - The tasks required to calculate technical and management risks are
carried out.
4) Engineering - In this task region, tasks required to build one or more representations of
applications are carried out.
5) Construct and release - All the necessary tasks required to construct, test, install the
application are conducted. Some tasks that are required to provide user support are also
carried out in this task region.
6) Customer evaluation - Customer's feedback is obtained and based on customer
evaluation required tasks are performed and implemented at installation stage.
In each region, numbers of work tasks are carried out depending upon the characteristics of
project. For a small project relatively small numbers of work tasks are adopted but for a
complex, project large number of work tasks can be carried out.
In spiral model, the software engineering team moves around the spiral in a clockwise direction
beginning at the core.
Advantages of spiral model
Requirement changes can be made at every stage.
Risks can be identified and rectified before they get problematic.
Drawbacks of spiral mode!
It is based on customer communication. If the communication is not proper then the
software product that gets developed will not be up to the mark.
It demands considerable risk assessment. If the risk assessment is done properly then only
the successful product can be obtained.
When to choose it?
1) When the prototypes for the software functionality are needed.
2) When requirements are not very clearly defined or complex.
3) When the large or high budget projects need to be developed.
4) When the risk assessment is very critical and essential
5) When project is not expected within a specific limited time span.
Prototyping Drawbacks
Customer may want to hang onto first version, may want a few fixes rather than rebuild.
First version will have compromises
Developer may make implementation compromises to get prototype working quickly.
Later on developer may become comfortable with compromises and forget why they are
inappropriate
Comparison between Spiral model and Prototyping model
Spiral model Prototyping model
The development team with less domain The development team has adequate domain
knowledge can be accommodated due to knowledge. Similarly they can adopt the new
iterative nature of this model. The change in technologies if product demands.
technology in the later phase cannot be
tolerated.
All the end-users need not be involved in all All the end-users are involved in all phases of
the phases of development. development.
Funding are not stable for the projects that can Funding are stable for these type of projects.
be developed using spiral model.
The requirements that are gathered and Some requirements are gathered initially, but
analyzed are high reliability requirements. there may be change in requirements when the
working prototype is shown to the customer.
The component-based development model leads to Software reuse, and reusability provides
Software engineers with a number of measurable benefits.
1.11.2 The Formal Methods Model
The Formal Methods Model encompasses a set of activities that leads to formal mathematical
specifications of Software.
Formal methods enable a Software engineer to specify, develop, and verify a computer-based
system by applying a rigorous, mathematical notation.
A variation of this approach, called clean-room Software engineering is currently applied by
some software development organizations.
Although not a mainstream approach, the formal methods model offers the promise of defect-
free Software. Yet, concern about its applicability in a business environment has been voiced:
The development of formal models is currently quite time-consuming and expensive.
B/C few software developers have the necessary background to apply formal methods,
extensive training is required.
It is difficult to use the methods as a communication mechanism for technically
unsophisticated customers.
1.13.1 XP Values
Following are the values for extreme programming:
1. Communication
Building software development process needs communication between the developer
and the customer.
Communication is important for requirement gathering and discussing the concept.
2) Simplicity
The simple design is easy to implement in code.
3. Feedback
Feedback guides the development process in the right direction.
4. Courage
In every development process there will always be a pressure situation. The courage or the
discipline to deal with it surely makes the task easy.
5. Respect
Agile process should inculcate the habit to respect all team members, other stake holders and
customer.
1.13.2 XP Process
The XP process comprises four framework activities:
1. Planning
Planning starts with the requirements gathering which enables XP team to understand the
rules for the software.
The customer and developer work together for the final requirements.
2. Design
The XP design follows the 'keep it simple' principle.
A simple design always prefers the more difficult representation.
3. Coding
The coding is started after the initial design work is over.
After the initial design work is done, the team creates a set of unit tests which can test
each situation that should be a part of the release.
The developer is focused on what must be implemented to pass the test.
Two people are assigned to create the code. It is an important concept in coding activity.
4. Testing
Validation testing of the system occurs on a daily basis. It gives the XP team a regular
indication of the progress.
'XP acceptance tests' are known as the customer test.
1.13.3 XP Process
Industrial XP Joshua Kerievsky describes Industrial Extreme Programming (IXP) in the
following manner: “IXP is an organic evolution of XP. It is imbued with XP’s minimalist,
customer-centric, test-driven spirit. IXP differs most from the original XP in its greater inclusion
of management, its expanded role for customers, and its upgraded technical practices.” IXP
incorporates six new practices that are designed to help ensure that an XP project works
successfully for significant projects within a large organization.
Readiness assessment. Prior to the initiation of an IXP project, the organization should conduct
a readiness assessment. The assessment ascertains whether
(1) An appropriate development environment exists to support IXP,
(2) The team will be populated by the proper set of stakeholders,
(3) The organization has a distinct quality program and supports continuous improvement,
(4) The SOFTWARE ENGINEERING RCPIT SHIRPUR 30 organizational culture will support
the new values of an agile team, and
(5) The broader project community will be populated appropriately.
Project community. Classic XP suggests that the right people be used to populate the agile team
to ensure success. The implication is that people on the team must be well-trained, adaptable and
skilled, and have the proper temperament to contribute to a self-organizing team. When XP is to
be applied for a significant project in a large organization, the concept of the “team” should
morph into that of a community. A community may have a technologist and customers who are
central to the success of a project as well as many other stakeholders (e.g., legal staff, quality
auditors, manufacturing or sales types) who “are often at the periphery of an IXP project yet they
may play important roles on the project”. In IXP, the community members and their roles should
be explicitly defined and mechanisms for communication and coordination between community
members should be established.
Project chartering. The IXP team assesses the project itself to determine whether an appropriate
business justification for the project exists and whether the project will further the overall goals
and objectives of the organization. Chartering also examines the context of the project to
determine how it complements, extends, or replaces existing systems or processes.
Test-driven management. An IXP project requires measurable criteria for assessing the state of
the project and the progress that has been made to date. Test-driven management establishes a
series of measurable “destinations” and then defines mechanisms for determining whether or not
these destinations have been reached.
Retrospectives. An IXP team conducts a specialized technical review after a software increment
is delivered. Called a retrospective, the review examines “issues, events, and lessons-learned”
across a software increment and/or the entire software release. The intent is to improve the IXP
process.
Continuous learning. Because learning is a vital part of continuous process improvement,
members of the XP team are encouraged (and possibly, incented) to learn new methods and
techniques that can lead to a higher quality product.
Part – A
Software Engineering - Introduction
1. What is Software Engineering? [ND 2013/AM 19]
Software engineering is a discipline in which theories, methods and tools are applied to develop
professional software product.
3. Define software.
Software is a collection of computer programs and related documents that are intended to
provide desired features, functionalities and performance. A software can be of two types - 1.
Generic software and 2. Custom software.
4. What are two type of software products?
There are two types of software products -
Generic - These products are developed and to be sold to the range of different customers.
Custom - These type of products are developed and sold to the specific group of customers and
developed as per their requirements.
8. What led to the transition from product oriented development to process oriented
development? [MJ 2016]
A process framework establishes the foundation for a complete software process by identifying a
small number of framework activities that are applicable to all software projects, regardless of
size or complexity. It also includes a set of umbrella activities that are applicable across the
entire software process. This led to the transition from product oriented development to process
oriented development.
11. What is software process model? On what basis it is chosen? [ND 2016]
The software process model can be defined as abstract representation of process. It is based on
nature of software project.
16. What is meant by ‘blocking states’ in linear sequential model? [ND 2014]
The linear nature of linear sequential model brings a situation in the project that some project
team members have to wait for other members of the team to complete the dependent tasks.
This situation is called "blocking state" in linear sequential model. For example, after
performing the requirement gathering and analysis step the design process can be started.
Hence the team working on design stage has to wait for gathering of all the necessary
requirements. Similarly the programmers can not start coding step unless and until the design
of the project is completed
17. State the benefits of waterfall life cycle model for software development.
The waterfall model is simple to implement.
For implementation of small systems the waterfall model is used.
18. List the two deficiencies in waterfall life cycle model. Which process model do you
suggest to overcome each deficiency? [MJ 2017]
Disadvantages of waterfall model:
Once an application is in the testing stage, it is very difficult to go back and change
something that was not well-thought out in the concept stage.
No working software is produced until late during the life cycle.
High amounts of risk and uncertainty.
Not a good model for complex and object-oriented projects.
Poor model for long and ongoing projects.
Not suitable for the projects where requirements are at a moderate to high risk of changing.
I would prefer the spiral model in this approach.
19. Define an evolutionary prototype. [ND 2019]
Evolutionary Prototyping is a lifecycle model in which the system is developed in increments
so that it can readily be modified in response to end-user and customer feedback.
24. What are the drawbacks of rapid application development life cycle model?
Disadvantages of RAD model:
Depends on strong team and individual performances for identifying business requirements.
Only system that can be modularized can be built using RAD
Requires highly skilled developers/designers.
High dependency on modeling skills
Inapplicable to cheaper projects as cost of modeling and automated code generation is very
high
25. Define Agile?
The word ‘agile’ means −
Able to move your body quickly and easily.
Able to think quickly and clearly.