Unit 1 - Software Engineering - WWW - Rgpvnotes.in
Unit 1 - Software Engineering - WWW - Rgpvnotes.in
Unit 1 - Software Engineering - WWW - Rgpvnotes.in
Software: -
Software is nothing but collection of computer programs and related documents that are planned to provide
desired features, functionalities and better performance.
Software is more than just a program code. A program is an executable code, which serves some
computational purpose. Software is considered to be collection of executable programming code, associated
libraries and documentations. Software, when made for a specific requirement is called software product.
Engineering on the other hand, is all about developing products, using well-defined, scientific principles and
methods.
Software Engineering: The application of a systematic, disciplined, quantifiable approach to the development,
operation and maintenance of software; that is, the application of engineering to software.
Software product classified in 2 classes:
1. Generic software: developed to solution whose requirements are very common fairly stable and well
understood by software engineer.
2. Custom software: developed for a single customer according to their specification.
Many software projects late, over budget, providing unreliable software that is expensive to maintain.
Many software projects produced software which did not satisfy the requirements of the customer.
Complexities of software projects increased as hardware Capability increased.
Larger software system is more difficult and expensive to maintain.
Demand of new software increased faster than ability to generate new software.
Operational: -
This tells us how well software works in operations. It can be measured on:
Budget
Usability
Efficiency
Correctness
Functionality
Dependability
Security
Safety
Transitional: -
This aspect is important when the software is moved from one platform to another:
Portability
Interoperability
Reusability
Adaptability
Maintenance: -
This aspect briefs about how well a software has the capabilities to maintain itself in the ever-changing
environment:
Modularity
Maintainability
Flexibility
Scalability
In short, Software engineering is a branch of computer science, which uses well-defined engineering concepts
required to produce efficient, durable, scalable, in-budget and on-time software products.
The Problem of scale: A fundamental problem of software engineering is the problem of scale; the
methods that are used for developing small systems generally do not scale up to large systems. A
different set of methods has to be used for developing large software.
Cost, schedule and quality: The cost of developing a system is the cost of the resources used for the
system, which, in the case of software, are the manpower, hardware, software, and the other support
resources.
The Problem of consistency: Though high quality, low cost and small cycle time are the primary
objectives of any project, for an organization there is another goal: consistency. An organization
involved in software development does not just want low cost and high quality for a project, but it
wants these consistently.
Software Product: -
A software product, user interface must be carefully designed and implemented because developers of that
product and users of that product are totally different. In case of a program, very little documentation is
expected, but a software product must be well documented. A program can be developed according to the
p og a e s i di idual st le of de elop e t, ut a soft a e p odu t ust e de eloped usi g the a epted
software engineering principles.
Correctness: The software which we are making should meet all the specifications stated by the customer.
Various Operational Characteristics of software are:
Usability/Learn-ability: The amount of efforts or time required to learn how to use the software should be
Integrity: Just like medicines have side-effects, in the same way software may have aside-effect i.e. it may
less. This makes the software user-friendly even for IT-illiterate people.
Reliability: The software product should not have any defects. Not only this, it shouldn't fail while
affect the working of another application. But quality software should not have side effects.
Efficiency: This characteristic relates to the way software uses the available resources. The software should
execution.
Security: With the increase in security threats nowadays, this factor is gaining importance. The software
make effective use of the storage space and execute command as per desired timing requirements.
shouldn't have ill effects on data / hardware. Proper measures should be taken to keep data secure from
Definition: Software Development Life Cycle (SDLC) is a process used by software industry to design, develop
and test high quality software. The SDLC aims to produce a high-quality software that meets or exceeds
customer expectations, reaches completion within times and cost estimates.
SDLC is the acronym of Software Development Life Cycle. It is also called as Software development process.
The software development life cycle (SDLC) is a framework defining tasks performed at each step in the
software development process. ISO/IEC 12207 is an international standard for software life-cycle processes. It
aims to be the standard that defines all the tasks required for developing and maintaining software.
What is SDLC?
SDLC is a process followed for a software project, within a software organization. It consists of a detailed plan
describing how to develop, maintain, replace and alter or enhance specific software. The life cycle defines a
methodology for improving the quality of software and the overall development process.
BASIC ACTIVITIES THAT CAN BE CARIED OUT IN LIFE CYCLE MODEL ARE:
A few of software development paradigms or process models are defined in Fig:-1.1:
1. Waterfall model or linear sequential model or classic life cycle model: -
Sometimes called the classic life cycle or the waterfall model, the linear sequential model suggests a
systematic, sequential approach5 to software development that begins at the system level and progresses
through analysis, design, coding, testing, and maintenance.
Fig 1.1
Software requirements analysis: The requirements gathering process is intensified and focused specifically on
software. To understand the nature of the program(s) to be built, the software engineer ("analyst") must
understand the information domain for the software, as well as required function, behavior, performance, and
interface. Requirements for both the system and the software are documented and reviewed with the
customer.
Design: Software design is actually a multi-step process that focuses on four distinct attributes of a program:
data structure, software architecture, interface representations, and procedural (algorithmic) detail. The
design process translates requirements into a representation of the software that can be assessed for quality
before coding begins. Like requirements, the design is documented and becomes part of the software
configuration.
Code generation: The design must be translated into a machine-readable form. The code generation step
performs this task. If design is performed in a detailed manner, code generation can be accomplished
mechanistically.
Testing: Once code has been generated, program testing begins. The testing process focuses on the logical
internals of the software, ensuring that all statements have been tested, and on the functional externals; that
is, conducting tests to uncover errors and ensure that defined input will produce actual results that agree with
required results.
Maintenance: Software will undoubtedly undergo change after it is delivered to the customer (a possible
exception is embedded software). Change will occur because errors have been encountered, because the
software must be adapted to accommodate changes in its external environment (e.g., a change required
because of a new operating system or peripheral device), or because the customer requires functional or
performance enhancements. Software support/maintenance reapplies each of the preceding phases to an
existing program rather than a new one.
Other Models
Prototype Model: -
A prototype is a toy implementation of the system. A prototype usually exhibits limited functional capabilities,
low reliability, and inefficient performance compared to the actual software. A prototype is usually built using
several shortcuts. The shortcuts might involve using inefficient, inaccurate, or dummy functions. The shortcut
implementation of a function, for example, may produce the desired results by using a table look-up instead of
performing the actual computations. A prototype usually turns out to be a very crude version of the actual
system. The Fig:-1.2 is shown as below-
Fig 1.2
Evolutionary prototyping: -
Evolutionary Prototyping (also known as breadboard prototyping) is quite different from Throwaway
Prototyping. The main goal when using Evolutionary Prototyping is to build a very robust prototype in a
structured manner and constantly refine it. The reason for this is that the Evolutionary prototype, when built,
forms the heart of the new system, and the improvements and further requirements will be built. When
developing a system using Evolutionary Prototyping, the system is continually refined and rebuilt. Evolutionary
prototyping acknowledges that we do not understand all the requirements and builds only those that are well
understood. This technique allows the development team to add features, or make changes that couldn't be
conceived during the requirements and design phase.
Evolutionary Prototypes have an advantage over Throwaway Prototypes in that they are functional systems.
Although they may not have all the features the users have planned, they may be used on an interim basis
until the final system is delivered.
It is not unusual within a prototyping environment for the user to put an initial prototype to practical use while
waiting for a more developed version. The user may decide that a 'flawed' system is better than no system at
all. In Evolutionary Prototyping, developers can focus themselves to develop parts of the system that they
understand instead of working on developing a whole system. To minimize risk, the developer does not
implement poorly understood features. The partial system is sent to customer sites. As users work with the
system, they detect opportunities for new features and give requests for these features to developers.
Developers then take these enhancement requests along with their own and use sound configuration-
management practices to change the software-requirements specification, update the design, recode and
retest.
Business modeling. The information flow among business functions is modeled in a way that answers the
following questions: What information drives the business process? What information is generated? Who
generates it? Where does the information go? Who processes it?
Data modeling. The information flow defined as part of the business modeling phase is refined into a set of
data objects that are needed to support the business. The characteristics (called attributes) of each object are
identified and the relationships between these objects defined.
Process modeling. The data objects defined in the data modeling phase are transformed to achieve the
information flow necessary to implement a business function. Processing descriptions are created for adding,
modifying, deleting, or retrieving a data object.
Application generation. RAD assumes the use of fourth generation techniques. Rather than creating software
using conventional third generation programming languages the RAD process works to reuse existing program
components (when possible) or create reusable components (when necessary). In all cases, automated tools
are used to facilitate construction of the software.
Testing and turnover. Since the RAD process emphasizes reuse, many of the program components have
already been tested. This reduces overall testing time. However, new components must be tested and all
interfaces must be fully exercised.
Fig 1.3
Depends on strong team and individual performances for identifying business requirements.
Disadvantages of RAD model:
RAD should be used when there is a need to create a system that can be modularized in 2-3 months of
When to use RAD model:
It should be used if the e s high a aila ilit of desig e s fo odeli g a d the udget is high e ough to
time.
RAD SDLC model should be chosen only if resources with high business knowledge are available and there
afford their cost along with the cost of automated code generating tools.
Following is the pictorial representation of Iterative and Incremental model shown in Fig:-1.4:
Fig 1.4
Iterative Model Application:
Like other SDLC models, Iterative and incremental development has some specific applications in the software
Major requirements must be defined; however, some functionalities or requested enhancements may
A new technology is being used and is being learnt by the development team while working on the project.
Resources with needed skill set are not available and are planned to be used on contract basis for specific
There are some high-risk features and goals which may change in the future.
iterations.
Spiral Model
Incremental Model:
The incremental model combines elements of the linear sequential model (applied repetitively) with the
iterative philosophy of prototyping. the incremental model applies linear sequences in a staggered fashion as
ale da ti e p og esses. Ea h li ea se ue e p odu es a deli e a le i e e t of the soft a e. Fo
example, word-processing software developed using the incremental paradigm might deliver basic file
management, editing, and document production functions in the first increment; more sophisticated editing
and document production capabilities in the second increment; spelling and grammar checking in the third
increment; and advanced page layout capability in the fourth increment. It should be noted that the process
flow for any increment can incorporate the prototyping paradigm. The Fig. 1.5 is shown as below:-
The first increment is often a core product where the basic requirements are addressed and the
supplementary features are added in the next increments. The core product is used and evaluated by the
client. Once the core product is evaluated by the client there is plan development for the next increment. Thus,
in every increment the needs of the client are kept in mind and more features and functions are added and the
core product is updated. This process continues till the complete product is produced.
Fig 1.5
Generates working software quickly and early during the software life cycle.
Advantages of Incremental model: -
This model is more flexible – less costly to change scope and requirements.
It is easier to test and debug during a smaller iteration.
In this model customer can respond to each built.
Lowers initial delivery cost.
Easie to a age isk e ause isk pie es a e ide tified a d ha dled du i g it d ite atio .
There is low risk for overall project failure.
Customer does not have to wait until the entire system is delivered.
Needs a clear and complete definition of the whole system before it can be broken down and built
This model can be used when the requirements of the complete system are clearly defined and understood.
When to use the Incremental model:
Major requirements must be defined; however, some details can evolve with time.
There is a need to get a product to the market early.
A new technology is being used
Resources with needed skill set are not available
There are some high-risk features and goals.
Planning—tasks required to define resources, time lines, and other project related information.
customer.
Customer evaluation—tasks required to obtain customer feedback based on evaluation of the software
documentation and training).
representations created during the engineering stage and implemented during the installation stage.
Fig 1.6
a prototype on the basis of the user feedback until the prototype resembles the specifications provided by the
customer and the business.
Moreover, Component Assembly model resembles to the Rapid Application Development (RAD) model and
uses the available resources and GUIs to create a software program. Today, a number of SDKs are available that
makes it easier for the developers to design a program using less number of codes with the help of SDK. This
method has ample of time to concentrate on the other components of the program apart from the coding
language, user input and graphical interaction of both user and software program.
In addition to that, a Component Assembly Model uses a number of previously made components and does
not need the use of SDK for creating a program but puts the powerful components together to develop an
effective an efficient program. Thus, this is one of the most beneficial advantages of component assembly
model as it saves lots of time during the software development program.
The developers only need to know the requirements of the customer, look for the useful components that are
useful for answering the need of the customer and finally put them together to build a program.
Identify all required candidate component i.e. classes with the help of application data and algorithm.
This model work in following manner:
If these candidate component are used in previous software project then thy must be present in library.
Such preexisting component can be extracted from the library and used for further development.
But if required component is not presented in the library then build or create the component as per
Place the newly created component in library. This makes one iteration of the system.
requirement.
Repeat step to fo eati g ite atio . Whe e de otes the o of ite atio s e ui ed to de elop
complete application.
Fig 1.7
Unified Process
RUP:
The Rational Unified Process (RUP) is an iterative software development process framework created by
Rational Software Corporation. RUP is not a single concrete process, but rather an adaptable process
framework intended to be tailored by development organizations and software teams. It states that its heart is
about successful software development. RUP provides a disciplined approach to assigning tasks and
responsibly within a development organization. Its goal is to ensure the production of a high-quality software
that meets the need of its end user within a predictable schedule and budget RUP provides each team with
member with the guidelines, templates and tool mentors necessary for the entire team to take advantage of
the available resources.
Stands for "Rational Unified Process." RUP is a software development process from Rational, a division of IBM.
It divides the development process into four distinct phases that each involves business modeling, analysis and
design, implementation, testing, and deployment. The four phases are shown in Fig:-1.8:
1. Inception - The idea for the project is stated. The development team determines if the project is worth
pursuing and what resources will be needed.
2. Elaboration - The project's architecture and required resources are further evaluated. Developers
consider possible applications of the software and costs associated with the development.
3. Construction - The project is developed and completed. The software is designed, written, and tested.
4. Transition - The software is released to the public. Final adjustments or updates are made based on
feedback from end users.
The RUP development methodology provides a structured way for companies to envision create software
programs. Since it provides a specific plan for each step of the development process, it helps prevent resources
from being wasted and reduces unexpected development costs.
Fig 1.8
Capability Maturity Model (CMM): -
The Software Engineering Institute (SEI) has developed a comprehensive model predicated on a set of software
engineering capabilities that should be present as organizations reach different levels of process maturity. To
dete i e a o ga izatio s u e t state of process maturity, the
SEI uses an assessment that results in a five-point grading scheme. The grading scheme determines compliance
with a capability maturity model (CMM) that defines key activities required at different levels of process
maturity. The SEI approach provides a measure of the global effectiveness of a company's software
engineering practices and establishes five process maturity levels that are defined in Fig:-1.9:
Level 1: Initial. The software process is characterized as ad hoc and occasionally even chaotic. Few processes
are defined, and success depends on individual effort.
Level 2: Repeatable. Basic project management processes are established to track cost, schedule, and
functionality. The necessary process discipline is in place to repeat earlier successes on projects with similar
applications.
Level 3: Defined. The software process for both management and engineering activities is documented,
standardized, and integrated into an organization wide software process. All projects use a documented and
approved version of the organization's process for developing and supporting software. This level includes all
characteristics defined for level 2.
Level 4: Managed. Detailed measures of the software process and product quality are collected. Both the
software process and products are quantitatively understood and controlled using detailed measures. This
level includes all characteristics defined for level 3.
Level 5: Optimizing. Continuous process improvement is enabled by quantitative feedback from the process
and from testing innovative ideas and technologies. This level includes all characteristics defined for level 4.
The five levels defined by the SEI were derived as a consequence of evaluating responses to the SEI assessment
questionnaire that is based on the CMM. The results of the questionnaire are distilled to a single numerical
grade that provides an indication of an organization's process maturity.
Fig 1.9
Capability Maturity Model (CMM)
The SEI has associated key process areas (KPAs) with each of the maturity levels. The KPAs describe those
software engineering functions (e.g., software project planning, requirements management) that must be
present to satisfy good practice at a particular level. Each KPA is described by identifying the following
Commitments—requirements (imposed on the organization) that must be met to achieve the goals or
Abilities—those things that must be in place (organizationally and technically to enable the organization to
provide proof of intent to comply with the goals.
Methods for monitoring implementation—the manner in which the activities are monitored as they are put
Methods for verifying implementation—the manner in which proper practice for the KPA can be verified.
into place.
Peer reviews
Process maturity level 3: -
Intergroup coordination
Software product engineering
Integrated software management
Training program
Organization process definition
Organization process focus
Agile development model is also a type of Incremental model. Software is developed in incremental, rapid
cycles. This results in small incremental releases with each release building on previous functionality. Each
release is thoroughly tested to ensure software quality is maintained. It is used for time critical applications.
Extreme Programming (XP) is currently one of the most well known agile development life cycle model.
People and interactions are emphasized rather than process and tools. Customers, developers and testers
In case of some software deliverables, especially the large ones, it is difficult to assess the effort required at
Disadvantages of Agile model:
The project can easily get taken off track if the customer representative is not clear what final outcome
Only senior programmers are capable of taking the kind of decisions required during the development
that they want.
process. Hence it has no place for newbie programmers, unless combined with experienced resources.
Extreme Programming
Extreme Programming (XP) is an agile software development framework that aims to produce higher quality
software, and higher quality of life for the development team. XP is the most specific of the agile frameworks
regarding appropriate engineering practices for software development.
E t e e P og a i g is ased o the follo i g alues −
Communication
Simplicity
Feedback
Courage
Respect
Extreme Programming takes the effective principles and practices to extreme levels.
Code reviews are effective as the code is reviewed all the time.
Testing is effective as there is continuous regression and testing.
Design is effective as everybody needs to do refactoring daily.
Integration testing is important as integrate and test several times a day.
Short iterations are effective as the planning game for release planning and iteration planning.