SCSA1303 - SE - Unit - 1
SCSA1303 - SE - Unit - 1
1
I INTRODUCTION
S/W engineering paradigm - Life cycle models - Water fall - Incremental - Spiral -
Evolutionary - Prototyping - Object oriented system engineering - Computer based
system - Verification - Validation - Life cycle process - Development process -
System engineering hierarchy - Introduction to CMM - Levels of CMM.
Engineering on the other hand, is all about developing products, using well-
defined, scientific principles and methods.
Software Evolution
2
Fig 1.1: Software Evolution
Evolution starts from the requirement gathering process. After which developers
create a prototype of the intended software and show it to the users to get their
feedback at the early stage of software product development. The users suggest
changes, on which several consecutive updates and maintenance keep on changing
too. This process changes to the original software, till the desired software is
accomplished.
Even after the user has desired software in hand, the advancing technology and
the changing requirements force the software product to change accordingly. Re-
creating software from scratch and to go one-on-one with requirement is not
feasible. The only feasible and economical solution is to update the existing
software so that it matches the latest requirements.
Lehman has given laws for software evolution. He divided the software into three
different categories:
3
there are various changes in laws, taxes etc. in the real-world situations. For
example, Online trading software.
Software Paradigms
Software paradigms refer to the methods and steps, which are taken while
designing the software. There are many methods proposed and are in work today,
but we need to see where in the software engineering these paradigms stand.
These can be combined into various categories, though each of them is contained
in one another:
Programming paradigm is a subset of Software design paradigm which is further a
subset of Software development paradigm.
4
Software Development Paradigm:
Requirement gathering
Software design
Programming
Design
Maintenance
Programming
Programming Paradigm
Coding
Testing
Integration
The need of software engineering arises because of higher rate of change in user
requirements and environment on which the software is working.
5
Scalability- If the software process were not based on scientific and
engineering concepts, it would be easier to re-create new software than to
scale an existing one.
Cost- As hardware industry has shown its skills and huge manufacturing has
lower down,the price of computer and electronic hardware. But the cost of
software remains high if proper process is not adapted.
Dynamic Nature- The always growing and adapting nature of software
hugely depends upon the environment in which user works. If the nature of
software is always changing, new enhancements need to be done in the
existing one. This is where software engineering plays a good role.
Quality Management- Better process of software development provides
better and quality software product.
A software product can be judged by what it offers and how well it can be used.
This software must satisfy on the following grounds:
Operational
Transitional
Maintenance
Well-engineered and crafted software is expected to have the following
characteristics:
Operational
This tells us how well software works in operations. It can be measured on:
Budget
Usability
Efficiency
Correctness
Functionality
Dependability
Security
Safety
6
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.
It is a systematic process for building software that ensures the quality and
correctness of the software built. SDLC process aims to produce high-quality
software that meets customer expectations. The system development should be
complete in the pre-defined time frame and cost. SDLC consists of a detailed plan
which explains how to plan, build, and maintain specific software. Every phase of
the SDLC life cycle has its own process and deliverables that feed into the next
phase. SDLC stands for Software Development Lifecycle.
Here, are prime reasons why SDLC is important for developing a software system.
7
Increases visibility of project planning to all involved stakeholders of the
development process
Increased and enhance development speed
Improved client relations
Helps you to decrease project risk and project management plan overhead
SDLC Phases
The requirement is the first stage in the SDLC process. It is conducted by the
senior team members with inputs from all the stakeholders and domain experts in
the industry. Planning for the quality assurance requirements and recognition of the
risks involved is also done at this stage.
This stage gives a clearer picture of the scope of the entire project and the
anticipated issues, opportunities, and directives which triggered the project.
Requirements Gathering stage need teams to get detailed and precise requirements.
This helps companies to finalize the necessary timeline to finish the work of that
system.
8
Once the requirement analysis phase is completed the next step is to define and
document software needs. This process conducted with the help of 'Software
Requirement Specification' document also known as 'SRS' document. It includes
everything which should be designed and developed during the project life cycle.
Phase 3: Design:
In this third phase, the system and software design documents are prepared as per
the requirement specification document. This helps define overall system
architecture.
This design phase serves as input for the next phase of the model.
9
Listing of error messages
Complete input and outputs for every module
Phase 4: Coding:
Once the system design phase is over, the next phase is coding. In this phase,
developers start build the entire system by writing code using the chosen
programming language. In the coding phase, tasks are divided into units or
modules and assigned to the various developers. It is the longest phase of the
Software Development Life Cycle process.
Phase 5: Testing:
Once the software is complete, and it is deployed in the testing environment. The
testing team starts testing the functionality of the entire system. This is done to
verify that the entire application works according to the customer requirement.
During this phase, QA and testing team may find some bugs/defects which they
communicate to developers. The development team fixes the bug and send back to
QA for a re-test. This process continues until the software is bug-free, stable, and
working according to the business needs of that system.
Phase 6: Installation/Deployment:
Once the software testing phase is over and no bugs or errors left in the system
then the final deployment process starts. Based on the feedback given by the
project manager, the final software is released and checked for deployment issues
if any.
Phase 7: Maintenance:
Once the system is deployed, and customers start using the developed system,
following 3 activities occur
Bug fixing - bugs are reported because of some scenarios which are not
tested at all
Upgrade - Upgrading the application to the newer versions of the Software
10
Enhancement - Adding some new features into the existing software
The main focus of this SDLC phase is to ensure that needs continue to be met and
that the system continues to perform as per the specification mentioned in the first
phase.
Waterfall model
The waterfall is a widely accepted SDLC model. In this approach, the whole
process of the software development is divided into various phases. In this SDLC
model, the outcome of one phase acts as the input for the next phase.
11
Table 1.1: Waterfall Model Stages
12
Table 1.1.1.: Advantages and Disadvantages of Waterfall Model
Incremental Approach
13
Fig 1.4:Incremental Model
Each iteration passes through the requirements, design, coding and testing phases.
And each subsequent release of the system adds function to the previous release
until all designed functionality has been implemented.
The system is put into production when the first increment is delivered. The first
increment is often a core product where the basic requirements are addressed, and
supplementary features are added in the next increments. Once the core product is
analyzed by the client, there is plan development for the next increment.
15
Table 1.3: Advantages and Disadvantages of Incremental Model
Spiral Model
The spiral model is a risk-driven process model. This SDLC model helps the team
to adopt elements of one or more process models like a waterfall, incremental,
waterfall, etc.
This model adopts the best features of the prototyping model and the waterfall
model. The spiral methodology is a combination of rapid prototyping and
concurrency in design and development activities.
16
Fig 1.5: Spiral Model
17
Table 1.4: Spiral Model Phases
18
Software Prototyping Model
The second phase is a preliminary design or a quick design. In this stage, a simple
design of the system is created. However, it is not a complete design. It gives a
brief idea of the system to the user. The quick design helps in developing the
prototype.
19
In this stage, the proposed system is presented to the client for an initial evaluation.
It helps to find out the strength and weakness of the working model. Comment and
suggestion are collected from the customer and provided to the developer.
If the user is not happy with the current prototype, you need to refine the prototype
according to the user's feedback and suggestions.
This phase will not over until all the requirements specified by the user are met.
Once the user is satisfied with the developed prototype, a final system is developed
based on the approved final prototype.
Once the final system is developed based on the final prototype, it is thoroughly
tested and deployed to production. The system undergoes routine maintenance for
minimizing downtime and prevent large-scale failures.
In this method, a developed prototype will be discarded and will not be a part of
the ultimately accepted prototype. This technique is useful for exploring ideas and
getting instant feedback for customer requirements.
Evolutionary Prototyping
20
Here, the prototype developed is incrementally refined based on customer's
feedback until it is finally accepted. It helps you to save time as well as effort.
That's because developing a prototype from scratch for every interaction of the
process can sometimes be very frustrating.
This model is helpful for a project which uses a new technology that is not well
understood. It is also used for a complex project where every functionality must be
checked once. It is helpful when the requirement is not stable or not understood
clearly at the initial stage.
Incremental Prototyping
Extreme Prototyping:
1. Basic prototype with all the existing page is present in the HTML format.
2. You can simulate data process using a prototype services layer.
3. The services are implemented and integrated into the final prototype.
Here, are a few things which you should watch for during the prototyping process:
22
There may be far too many variations in software requirements when each
time the prototype is evaluated by the customer.
Poor documentation because the requirements of the customers are
changing.
It is very difficult for software developers to accommodate all the changes
demanded by the clients.
After seeing an early prototype model, the customers may think that the
actual product will be delivered to him soon.
The client may lose interest in the final product when he or she is not happy
with the initial prototype.
Developers who want to build prototypes quickly may end up building sub-
standard development solutions.
Concurrent Development:
Project managers who track project status in terms of the major phases [of the
classic life cycle] have no idea of the status of their projects. These are examples of
trying to track extremely complex sets of activities using overly simple models.
Note that although . . . [a large] project is in the coding phase, there are personnel
on the project involved in activities typically associated with many phases of
development simultaneously. For example, personnel are writing requirements,
designing, coding, testing, and integration testing [all at the same time]. Software
engineering process models by Humphrey and Kellner have shown the
concurrency that exists for activities occurring during any one phase. Kellner's
more recent work uses state charts [a notation that represents the states of a
process] to represent the concurrent relationship existent among activities
associated with a specific event (e.g., a requirements change during late
development), but fails to capture the richness of concurrency that exists across all
software development and management activities in the project. . . . Most software
development process models are driven by time; the later it is, the later in the
development process you are. [A concurrent process model] is driven by user
needs, management decisions, and review results.
23
following tasks: prototyping and/or analysis modeling, requirements specification,
and design.
The activity—analysis—may be in any one of the states noted at any given time.
Similarly, other activities (e.g., design or customer communication) can be
represented in an analogous manner. All activities exist concurrently but reside in
different states. For example, early in a project the customer communication
activity (not shown in the figure) has completed its first iteration and exists in the
awaiting changes state. The analysis activity (which existed in the none state while
initial customer communication was completed) now makes a transition into the
under-development state. If, however, the customer indicates that changes in
requirements must be made, the analysis activity moves from the under-
development state into the awaiting changes state.
24
The concurrent process model defines a series of events that will trigger transitions
from state to state for each of the software engineering activities. For example,
during early stages of design, an inconsistency in the analysis model is uncovered.
This generates the event analysis model correction which will trigger the analysis
activity from the done state into the awaiting changes state.
The concurrent process model is often used as the paradigm for the development of
client/server applications. A client/server system is composed of a set of functional
components. When applied to client/server, the concurrent process model defines
activities in two dimensions: a system dimension and a component dimension.
System level issues are addressed using three activities: design, assembly, and use.
The component dimension is addressed with two activities: design and realization.
(1) system and component activities occur simultaneously and can be modeled
using the state-oriented approach described previously;
Special process models take on many of the characteristics of one or more of the
conventional models. However, specialized models tend to be applied when a
narrowly defined software engineering approach is chosen.
Component-Based Development.
25
is evolutionary in nature, demanding an iterative approach to the creation of
software. However, the model composes applications from prepackaged software
components. Modeling and construction activities begin with the identification of
candidate components. These components can be designed as either conventional
software modules or object-oriented classes or packages of classes. Regardless of
the technology that is used to create the components, the component-based
development model incorporates the following steps (implemented using an
evolutionary approach):
The formal methods model encompasses a set of activities that leads to formal
mathematical specification of computer software. Formal methods enable a
software engineer to specify, develop, and verify a computer-based system by
applying rigorous, mathematical notation. A variation on this approach is called
clean-room software engineering. When formal methods are used during
development, they provide a mechanism for eliminating many of the problems that
are difficult to overcome using other software engineering paradigms. Ambiguity,
incompleteness, and inconsistency can be discovered and corrected more easily,
not through ad hoc review, but through the application of mathematical analysis.
When formal methods are used during design, they serve as a basis for program
verification and therefore enable the software engineer to discover and correct
errors that might otherwise go undetected. Although not a mainstream approach,
26
the formal methods model offers the promise of defect-free software. Yet, concern
about its applicability in a business environment has been voiced:
• Because few software developers have the necessary background to apply formal
methods, extensive training is required.
Regardless of the software process that is chosen, the builders of complex software
invariably implement a set of localized features, functions and information content.
These localized software characteristics are modeled as components and then
constructed within the context of a system architecture. As modern computer-based
systems become more sophisticated and complex, certain concerns, customer
required properties or areas of technical interest, span the entire architecture. Some
concerns are high-level properties of a system; others affect functions or are
systemic. When concerns cut across multiple system functions, features, and
information they are often referred to as crosscutting concerns. Aspectual
requirements define those crosscutting concerns that have impact across the
software architecture. Aspects are mechanisms beyond subroutines and inheritance
for localizing the expression of a crosscutting concerns. Aspect-oriented software
development (AOSD), often referred to as aspect-oriented programming (AOP), is
a relatively new software engineering paradigm that provides a process and
methodological approach for defining, specifying, designing, and constructing
aspects. http://wikistudent.ws/Unisa A distinct aspect-oriented process has not yet
matured. However, it is likely that such a process will adopt characteristics of both
the spiral and concurrent process models. The evolutionary nature of the spiral is
appropriate as aspects are identified and then constructed. The parallel nature of
concurrent development is essential because aspects are engineered independently
of localized software components and yet, aspects have a direct impact on these
components.
In some ways the unified process (UP) is an attempt to draw on the best features
and characteristics of conventional software process models, but characterize them
27
in a way that implements many of the best principles of agile software
development. The unified process recognizes the importance of customer
communication and streamlined methods for describing the customer’s view of a
system. It emphasizes the important role of software architecture and helps the
architect focus on the right goals, such as understandability, reliance to future
changes, and reuse. It suggests a process flow that is iterative and incremental,
providing the evolutionary feel that is essential in modern software development.
• Modeling – this activity encompasses the creation of models that allow the
developer and the customer to better understand software requirements and the
design that will achieve those requirements.
Verification:
The verifying process includes checking documents, design, code, and program.
Validation:
29
Table 1.7: Difference of Verification and Validation
30
Example of verification and validation
Verification would check the design doc and correcting the spelling mistake.
Otherwise, the development team will create a button like
o So new specification is
Owing to Validation testing, the development team will make the submit
button clickable.
31
Fig 1.9: V -Model
a) Verification Phase:
(i) Requirement Analysis:
In this phase, all the required information is gathered & analyzed. Verification
activities include reviewing the requirements.
(v) Coding:
Code development is done in this phase.
b) Validation Phase:
(i) Unit Testing:
32
Unit testing is performed using the unit test cases that are designed and is done in
the Low-level design phase. Unit testing is performed by the developer itself. It is
performed on individual components which lead to early defect detection.
(ii) Integration Testing:
Integration testing is performed using integration test cases in High-level Design
phase. Integration testing is the testing that is done on integrated modules. It is
performed by testers.
(iii) System Testing:
System testing is performed in the System Design phase. In this phase, the
complete system is tested i.e. the entire system functionality is tested.
(iv) Acceptance Testing:
Acceptance testing is associated with the Requirement Analysis phase and is done
in the customer’s environment.
Advantages of V – Model:
It is a simple and easily understandable model.
V –model approach is good for smaller projects wherein the requirement is
defined and it freezes in the early stage.
It is a systematic and disciplined model which results in a high-quality
product.
Disadvantages of V-Model:
V-shaped model is not good for ongoing projects.
Requirement change at the later stage would cost too high.
Good system engineering begins with a clear understanding of context - the world
view - and then progressively narrows focus until technical details are understood.
System engineering encompasses a collection of top-down and bottom-up methods
to navigate the hierarchy.
System engineering process begins with a world of view which is refined to focus
more fully on a specific domain of interest. Within a specific domain, the need for
targeted system elements is analyzed. Finally, the analysis, design, and
construction of targeted system element is initiated. Broad context is established at
the top of the hierarchy and at the bottom, detailed technical activities are
conducted. It is important for a system engineer narrows the focus of work as one
moves downward in the hierarchy.
33
System modeling is an important element of system engineering process.
System engineering model accomplishes the following:
- define processes.
Some restraining factors that are considered to construct a system model are:
- Constraints that will guide the manner in which the model is created and the
approach taken when the model is implemented.
- Preferences that indicate the preferred architecture for all data, functions, and
technology.
The resultant system model may call for a completely automated or semi-
automated or a non-automated solution.
It is a systematic process for building software that ensures the quality and
correctness of the software built. SDLC process aims to produce high-quality
software that meets customer expectations. The system development should be
complete in the pre-defined time frame and cost. SDLC consists of a detailed plan
which explains how to plan, build, and maintain specific software. Every phase of
the SDLC life cycle has its own process and deliverables that feed into the next
phase. SDLC stands for Software Development Lifecycle.
Here, are prime reasons why SDLC is important for developing a software system.
34
It offers a basis for project planning, scheduling, and estimating
Provides a framework for a standard set of activities and deliverables
It is a mechanism for project tracking and control
Increases visibility of project planning to all involved stakeholders of the
development process
Increased and enhance development speed
Improved client relations
Helps you to decrease project risk and project management plan overhead
SDLC Phases
The requirement is the first stage in the SDLC process. It is conducted by the
senior team members with inputs from all the stakeholders and domain experts in
the industry. Planning for the quality assurance requirements and recognition of the
risks involved is also done at this stage.
This stage gives a clearer picture of the scope of the entire project and the
anticipated issues, opportunities, and directives which triggered the project.
Requirements Gathering stage need teams to get detailed and precise requirements.
This helps companies to finalize the necessary timeline to finish the work of that
system.
35
Once the requirement analysis phase is completed the next step is to define and
document software needs. This process conducted with the help of 'Software
Requirement Specification' document also known as 'SRS' document. It includes
everything which should be designed and developed during the project life cycle.
Phase 3: Design:
In this third phase, the system and software design documents are prepared as per
the requirement specification document. This helps define overall system
architecture.
This design phase serves as input for the next phase of the model.
36
Listing of error messages
Complete input and outputs for every module
Phase 4: Coding:
Once the system design phase is over, the next phase is coding. In this phase,
developers start build the entire system by writing code using the chosen
programming language. In the coding phase, tasks are divided into units or
modules and assigned to the various developers. It is the longest phase of the
Software Development Life Cycle process.
Phase 5: Testing:
Once the software is complete, and it is deployed in the testing environment. The
testing team starts testing the functionality of the entire system. This is done to
verify that the entire application works according to the customer requirement.
During this phase, QA and testing team may find some bugs/defects which they
communicate to developers. The development team fixes the bug and send back to
QA for a re-test. This process continues until the software is bug-free, stable, and
working according to the business needs of that system.
Phase 6: Installation/Deployment:
Once the software testing phase is over and no bugs or errors left in the system
then the final deployment process starts. Based on the feedback given by the
project manager, the final software is released and checked for deployment issues
if any.
Phase 7: Maintenance:
Once the system is deployed, and customers start using the developed system,
following 3 activities occur
Bug fixing - bugs are reported because of some scenarios which are not
tested at all
Upgrade - Upgrading the application to the newer versions of the Software
37
Enhancement - Adding some new features into the existing software
The main focus of this SDLC phase is to ensure that needs continue to be met and
that the system continues to perform as per the specification mentioned in the first
phase.
CMM was developed at the Software engineering institute in the late 80's. It was
developed as a result of a study financed by the U.S Air Force as a way to evaluate
the work of subcontractors. Later based on the CMM-SW model created in 1991 to
assess the maturity of software development, multiple other models are integrated
with CMM-I they are
1. Initial
2. Repeatable/Managed
3. Defined
4. Quantitatively Managed
5. Optimizing
38
Fig1.10: CMM Levels
39
Table 1.8: Description of Levels of CMM
40
Limitations of CMM Models
Use of CMM:
Today CMM act as a "seal of approval" in the software industry. It helps in various
ways to improve the software quality.
It guides towards repeatable standard process and hence reduce the learning
time on how to get things done
Practicing CMM means practicing standard protocol for development, which
means it not only helps the team to save time but also gives a clear view of
what to do and what to expect
The quality activities gel well with the project rather than thought of as a
separate event
It acts as a commuter between the project and the team
CMM efforts are always towards the improvement of the process
41