Se Unit-1
Se Unit-1
UNIT-1
What is Software Engineering?
The term “Software Engineering” was first used in 1968 at the NATO Software
Engineering Conference. Over time, it evolved into a business model where high-quality
software can be produced cheaply, quickly, and with little maintenance. Now, software
engineering has evolved into a fully-fledged engineering discipline recognized for its in-
depth study and research. Software Engineering implies a number of things but, to truly
understand it, you need to understand each element of the term. The term software
engineering is the product of two words, software, and engineering .
Software + Engineering = Software Engineering
Software: Generally, the software is a collection of programming codes, procedures,
rules, documents, and data that perform a particular task and fulfill a particular
requirement. Software is never exhausted or worn out. In a computer system,
software controls integrate and manage the hardware components. In other words,
Software is a program or set of programs containing instructions that provide the
desired functionality.
Engineering: Engineering is the process of designing and developing something (like
machines, structures, software, etc.) using best practices, principles, and methods.
An engineer uses information and standards (principles) to design, construct, and
analyze software products.
1
2) Many software projects failed.
3) Large software project required large development loams.
4) Many software project late and over budget.
5) Complicity of software project is increased.
6) Demand for new software on the market
Application of software
1) System software. 4) Embedded software.
2) Application software. 5) Product line software.
3) Engineering/scientific software. 6) Web application software.
7) Artificial intelligence software (AI).
2
Reusability: Creating components that can be used in multiple projects, which can
save time and resources.
Maintenance: Regularly updating and improving the software to fix bugs, add new
features, and address security vulnerabilities.
Testing: Verifying that the software meets its requirements and is free of bugs.
Design Patterns: Solving recurring problems in software design by providing
templates for solving them.
Agile methodologies: Using iterative and incremental development processes that
focus on customer satisfaction, rapid delivery, and flexibility.
Continuous Integration & Deployment: Continuously integrating the code
changes and deploying them into the production environment.
3
Correctness: A software product is correct if the different requirements specified in
the SRS Document have been correctly implemented.
Reusability: A software product has good reusability if the different modules of the
product can easily be reused to develop new products.
Testability: Here software facilitates both the establishment of test criteria and the
evaluation of the software concerning those criteria.
Reliability: It is an attribute of software quality. The extent to which a program can
be expected to perform its desired function, over an arbitrary time period.
Portability: In this case, the software can be transferred from one computer system
or environment to another.
Adaptability: In this case, the software allows differing system constraints and the
user needs to be satisfied by making changes to the software.
Interoperability: Capability of 2 or more functional units to process data
cooperatively.
4
Better Team Collaboration: By using Agile methodologies and continuous
integration, software engineering allows for better collaboration among
development teams.
Better Scalability: By designing software with scalability in mind, software
engineering can help to ensure that software can handle an increasing number of
users and transactions.
Better Security: By following the Software Development Life Cycle (SDLC) and
performing security testing, software engineering can help to prevent security
breaches and protect sensitive data.
The more functionality a software has the more powerful and versatile it is, but also the
more complex it can be. It is important to balance the need for functionality with the need
for ease of use, maintainability, and scalability.
2. Usability (User-friendly): Usability refers to how easily and efficiently users can
interact with the software to achieve their objectives. A user-friendly interface, intuitive
navigation, and clear instructions contribute to the usability of the software.
By considering the target users and their needs, software engineers can design interfaces
that are intuitive, visually appealing, and easy to navigate. Good usability enhances user
5
satisfaction, reduces training time, and increases productivity, ultimately leading to the
software’s success.
3. Efficiency: It refers to the ability of the software to use system resources in the most
effective and efficient manner. The software should make effective use of storage space
and executive command as per desired timing requirements.
Efficiency is a characteristic of software that refers to its ability to use resources such as
memory, processing power, and network bandwidth in an optimal way. High efficiency
means that a software program can perform its intended functions quickly and with
minimal use of resources, while low efficiency means that a software program may be
slow or consume excessive resources.
Examples of factors that can affect the efficiency of the software include:
1. Poorly designed algorithms and data structures
2. Inefficient use of memory and processing power
3. High network latency or bandwidth usage
4. Unnecessary processing or computation
5. Unoptimized code
6
4. Flexibility: Flexibility is the ever-evolving technological landscape. In today’s
dynamics, software needs to be flexible to meet changing user requirements, incorporate
new features, and integrate with other systems.
Well-designed software with a modular architecture and flexible components allows for
easier modifications and enhancements. Flexibility reduces the risk of software becoming
obsolete and ensures that it can evolve with the changing needs of users and the market.
7
requirements. This characteristic includes writing clean code, providing comprehensive
documentation, and following well-defined development practices.
8. Integrity: Data integrity is one aspect that involves maintaining the accuracy and
consistency of data throughout its cycle. By ensuring data integrity, software engineers
can guarantee that the information processed and stored by the software remains reliable
and trustworthy.
.
Importance of Software Engineering
8
The importance of Software engineering is as follows :
Reduces complexity: Big software is always complicated and challenging to
progress. Software engineering has a great solution to reduce the complication of
any project. Software engineering divides big problems into various small issues.
And then start solving each small issue one by one. All these small problems are
solved independently to each other.
To minimize software cost: Software needs a lot of hardwork and software
engineers are highly paid experts. A lot of manpower is required to develop
software with a large number of codes. But in software engineering, programmers
project everything and decrease all those things that are not needed. In turn, the
cost for software productions becomes less as compared to any software that does
not use software engineering method.
To decrease time: Anything that is not made according to the project always wastes
time. And if you are making great software, then you may need to run many codes
to get the definitive running code. This is a very time-consuming procedure, and
if it is not well handled, then this can take a lot of time. So if you are making your
software according to the software engineering method, then it will decrease a lot
of time.
Handling big projects: Big projects are not done in a couple of days, and they need
lots of patience, planning, and management. And to invest six and seven months
of any company, it requires heaps of planning, direction, testing, and
maintenance. No one can say that he has given four months of a company to the
task, and the project is still in its first stage. Because the company has provided
many resources to the plan and it should be completed. So to handle a big project
without any problem, the company has to go for a software engineering method.
Reliable software: Software should be secure, means if you have delivered the
software, then it should work for at least its given time or subscription. And if any
bugs come in the software, the company is responsible for solving all these bugs.
Because in software engineering, testing and maintenance are given, so there is no
worry of its reliability.
9
Effectiveness: Effectiveness comes if anything has made according to the standards.
Software standards are the big target of companies to make it more effective. So
Software becomes more effective in the act with the help of software engineering.
10
Challenges in Implementing the Prescriptive Process Model
Rigidity: The structured nature of the model can sometimes lead to inflexibility,
making it difficult to adapt to changing requirements or unexpected challenges.
Overhead: The need for extensive documentation and adherence to processes can
introduce overhead, potentially slowing down development.
11
Phases of the Waterfall model
The classical waterfall model divides the life cycle into a set of phases. This model
considers that one phase can be started after the completion of the previous phase. That is
the output of one phase will be the input to the next phase. Thus the development process
can be considered as a sequential flow in the waterfall. Here the phases do not overlap
with each other.
1. Requirement Gathering: This is the first of the waterfall model phases, where the
client has to provide the requirements for the software system. Usually, one or more
technical people will have meetings with the client to define the requirements and
understand what they want the system to do. This may be a lengthy process, where the
project team is most likely to spend a lot of time, especially when the system is big and
covers various business areas. The output of this process will be one or more documents
stating all the requirements in a lot of detail. It is important that the requirements are
correct, as it forms the basis for everything that will be done in all the following phases of
the project. When using the waterfall model, it is not possible to come back to the
requirements and change them at a later stage, therefore this step is very important.
2. Design: After gathering all the requirements, it's time to move on to the design stage.
Here, designers develop solutions that meet the requirements. In a software development
process, the design phase is when the project team specifies what hardware the team will
be using, and other detailed information such as programming languages, unit testing,
12
and user interfaces. This phase of the waterfall methodology is key to ensuring that the
software will meet the required functionality and performance metrics.
3. Implementation phase: This is the stage where everything is put into action. The team
starts the full development process to build the software in accordance with both the
requirements phase and the system design phase, using the requirements document from
step one and the system design process from step two as guides.
During the implementation phase, developers work on coding and unit testing to ensure
that the software meets the specified requirements.
4. Testing: The code is then handed over to the testing team. Testers check the program
for all possible defects, by running test cases either manually or by automation. The client
is involved in the testing phase as well, in order to ensure all requirements are met. All
Flaws and bugs detected during this phase are fixed to ensure Quality Assurance.
System testing consists of three different kinds of testing activities as described below.
Alpha testing: Alpha testing is the system testing performed by the development
team.
Beta testing: Beta testing is the system testing performed by a friendly set of
customers.
Acceptance testing: After the software has been delivered, the customer
performs acceptance testing to determine whether to accept the delivered software
or reject it.
Deployment of system − Once the functional and non-functional testing is done; the
product is deployed in the customer environment or released into the market.
6. Maintenance: Maintenance is the most important phase of a software life cycle. Once
a project is deployed, there may be instances where a new bug is discovered or a software
update is required. This is known as the maintenance phase, and it's common in the
software development life cycle to be continuously working on this phase.
Regular maintenance and updates are essential for keeping the software running smoothly
and addressing any issues that arise post-deployment.
13
When the requirements are constant and not changed regularly.
A project is short
The situation is calm
Where the tools and technology used is consistent and is not changing
When resources are well prepared and are available to use.
V-MODEL
It is also known as Verification and Validation model. The V-model is named after its
shape, which resembles the letter “V.” In this, each phase of SDLC must complete before
the next phase starts. The V-Model is an extension of the waterfall model and is based on
the association of a testing phase for each corresponding development stage. This means
that for every single phase in the development cycle, there is a directly associated testing
phase. This is a highly-disciplined model and the next phase starts only after completion
of the previous phase.
14
The left-hand side of the V represents the verification phase while the right-hand side
represents the validation phase. Verification and Validation process is joined by coding
phase in V-shape.
Verification: It involves a static analysis method (review) done without executing code.
It is the process of evaluation of the product development process to find whether
specified requirements meet.
Validation: It involves dynamic analysis method (functional, non-functional), testing is
done by executing code. Validation is the process to classify the software after the
completion of the development process to determine whether the software meets the
customer expectations and requirements.
15
2. System Design: In this stage system engineers analyze and interpret the business
of the proposed system by studying the user requirements document.
3. Architecture Design: The baseline in selecting the architecture is that it should
understand all which typically consists of the list of modules, brief functionality
of each module, their interface relationships, dependencies, database tables,
architecture diagrams, technology detail, etc. The integration testing model is
carried out in a particular phase.
4. Module Design: In the module design phase, the system breaks down into small
modules. The detailed design of the modules is specified, which is known as
Low-Level Design
5. Coding Phase: After designing, the coding phase is started. Based on the
requirements, a suitable programming language is decided. There are some
guidelines and standards for coding. Before checking in the repository, the final
build is optimized for better performance, and the code goes through many code
reviews to check the performance.
There are the various phases of Validation Phase of V-model:
1. Unit Testing: In the V-Model, Unit Test Plans (UTPs) are developed during
the module design phase. These UTPs are executed to eliminate errors at code
level or unit level. A unit is the smallest entity which can independently exist,
e.g., a program module. Unit testing verifies that the smallest entity can
function correctly when isolated from the rest of the codes/ units.
2. Integration Testing: Integration Test Plans are developed during the
Architectural Design Phase. These tests verify that groups created and tested
independently can coexist and communicate among themselves.
3. System Testing: System Tests Plans are developed during System Design
Phase. Unlike Unit and Integration Test Plans, System Tests Plans are
composed by the client’s business team. System Test ensures that expectations
from an application developer are met.
4. Acceptance Testing: Acceptance testing is related to the business requirement
analysis part. It includes testing the software product in user atmosphere.
Acceptance tests reveal the compatibility problems with the different systems,
16
which is available within the user atmosphere. It conjointly discovers the non-
functional problems like load and performance defects within the real user
atmosphere.
17
3. It is not suitable for projects where requirements are not clear and contain a high
risk of changing.
4. Software is developed during the implementation stage, so no early prototypes of
the software are produced.
5. Inflexibility: The V-Model is a linear and sequential model, which can make it
difficult to adapt to changing requirements or unexpected events.
6. Time-Consuming: The V-Model can be time-consuming, as it requires a lot of
documentation and testing.
7. Overreliance on Documentation: The V-Model places a strong emphasis on
documentation, which can lead to an overreliance on documentation at the
expense of actual development work.
8. High risk and uncertainty.
18
The various phases of incremental model are as follows:
1. Requirement analysis: In the first phase of the incremental model, the product
analysis expertise identifies the requirements. And the system functional requirements are
understood by the requirement analysis team. To develop the software under the
incremental model, this phase performs a crucial role.
2. Design & Development: In this phase of the Incremental model of SDLC, the design
of the system functionality and the development method are finished with success. When
software develops new practicality, the incremental model uses style and development
phase.
3. Testing: In the incremental model, the testing phase checks the performance of each
existing function as well as additional functionality. In the testing phase, the various
methods are used to test the behavior of each task.
4. Implementation: Implementation phase enables the coding phase of the development
system. It involves the final coding that design in the designing and development phase
and tests the functionality in the testing phase. After completion of this phase, the number
of the product working is enhanced and upgraded up to the final system product.
Example: Here is an example to help you understand the incremental approach. Assume
we are expected to deliver a word processor to the client by an impossible deadline. We
will consider incremental development for this project. As part of the software
development process, we have divided the software requirements into three specific
modules A, B, and C as shown below. Each module of a Software Product is
incrementally developed and delivered.
19
Accordingly, the first release (A) of the software contains file management, document
generation, and editing capabilities. With the next release (B), sophisticated editing tools
and advanced file creation functionality will be included. This further increment (C) will
provide features such as spell checking, grammar checking, mailing, etc.
20
Parallel Development: Multiple teams can work concurrently on different
increments, enhancing productivity and collaboration.
Budget Constraints: Incremental development allows for distributing costs
across iterations, making it more manageable for limited budgets.
Evolving Solutions: When the exact solution isn't clear from the outset, an
incremental approach allows for refining the solution as the project progresses.
Customer Collaboration: Close interaction with customers is required to ensure
the product meets their needs; incremental models facilitate this.
Flexibility: Projects where requirements are uncertain or evolve benefit from the
model's adaptability to changes.
21
Dependency Management: If one increment relies on the functionality of
another, delays in one increment can impact the overall project timeline and
deliverables.
Limited Applicability: The incremental model might not be suitable for all types
of projects, especially those with strict regulatory requirements or those that
require a complete and cohesive system from the start.
Complexity in Integration: Integrating new increments with existing
components can be challenging, especially if the architecture wasn't designed with
incremental development in mind. This can lead to compatibility and stability
issues.
22
RAD MODEL
The RAD (Rapid Application Development) model is based on prototyping and iterative
development with no specific planning involved. It is a software development process
based on prototyping without any specific planning. In RAD model, there is less attention
paid to the planning and more priority is given to the development tasks. It targets at
developing software in a short span of time.
Unlike traditional models such as the Waterfall model, RAD is designed to be more
flexible and responsive to user feedback and changing requirements throughout the
development process.
RAD (Rapid Application Development) is a concept that products can be developed
faster and of higher quality through:
Gathering requirements using workshops or focus groups
Prototyping and early, reiterative user testing of designs
The re-use of software components
A rigidly paced schedule that refers design improvements to the next product
version
Less formality in reviews and other team communication
23
The various phases of RAD are as follows:
1.Business Modelling: The information flow among business functions is defined by
answering questions like what data drives the business process, what data is generated,
who generates it, where does the information go, who process it and so on.
2. Data Modelling: The data collected from business modeling is refined into a set of
data objects (entities) that are needed to support the business. The attributes (character of
each entity) are identified, and the relation between these data objects (entities) is
defined.
3. Process Modelling: The information object defined in the data modeling phase are
transformed to achieve the data flow necessary to implement a business function.
Processing descriptions are created for adding, modifying, deleting, or retrieving a data
object.
4. Application Generation: Automated tools are used to facilitate construction of the
software; even they use the 4th GL techniques.
5. Testing & Turnover: Many of the programming components have already been tested
since RAD emphasis reuse. This reduces the overall testing time. But the new part must
be tested, and all interfaces must be fully exercised
When to use RAD Model?
When the system should need to create the project that modularizes in a short
span time (2-3 months).
When the requirements are well-known.
When the technical risk is limited.
When there's a necessity to make a system, which modularized in 2-3 months of
period.
It should be used only if the budget allows the use of automatic code generating
tools.
Advantage of RAD Model
This model is flexible for change.
In this model, changes are adoptable.
Each phase in RAD brings highest priority functionality to the customer.
It reduced development time.
24
It increases the reusability of features.
The use of powerful development tools results in better quality products in
comparatively shorter periods.
Disadvantage of RAD Model
It required highly skilled designers.
All application is not compatible with RAD.
For smaller projects, we cannot use the RAD model.
On the high technical risk, it's not suitable.
Required user involvement.
Rapid application development vs. Agile
RAD Agile
Small projects with narrow
Best for Complex projects with large scopes
scopes
Timeline Short Long
Project Defined early, adjusted during
Refined as the project progresses
requirements prototyping
Stakeholder Prototypes presented before Working product presented during
review development development
Feedback Collected for each prototype Collected continuously
ITERATIVE MODEL
The iterative model is a software development approach that breaks down projects into
smaller, manageable chunks called iterations. Each iteration involves planning, analysis,
design, development, testing, and deployment. It strongly focuses on collaboration, which
involves regular meetings and feedback sessions between the development team and
stakeholders.
Key characteristics
Three characteristics define the iterative model:
25
1. Incremental development: Each iteration builds upon the last, integrating new
feedback.
2. Risk identification: Issues are spotted early, minimising future problems.
3. Consistent communication: Maintains clarity of project objectives among all
parties.
Its role in software development
The iterative model plays a vital role in software development by providing a framework
that supports adaptability and flexibility.
This model is particularly useful in projects where the end product is not fully defined or
when there is a need for frequent feedback and continuous improvement.
The process of the iterative model
The iterative model follows a systematic process comprising specific steps to ensure
smooth and efficient development.
The various phases of Iterative model are as follows:
The iterative model typically consists of five stages or phases:
1. Requirements gathering: Outlining the project scope.
2. Design: Crafting a practical blueprint from the requirements.
3. Implementation: Coding and software development.
4. System testing: Ensuring functional and quality adherence.
5. Deployment: Releasing and then monitoring and maintaining the software.
26
1. Requirement gathering & analysis: In this phase, requirements are gathered from
customers and check by an analyst whether requirements will fulfill or not. Analyst
checks that need will achieve within budget or not. After all of this, the software team
skips to the next phase.
2. Design: In the design phase, team design the software by the different diagrams like
Data Flow diagram, activity diagram, class diagram, state transition diagram, etc.
3. Implementation: In the implementation, requirements are written in the coding
language and transformed into computer programmes which are called Software.
4. Testing: After completing the coding phase, software testing starts using different test
methods. There are many test methods, but the most common are white box, black box,
and grey box test methods.
5. Deployment: After completing all the phases, software is deployed to its work
environment.
6. Review: In this phase, after the product deployment, review phase is performed to
check the behaviour and validity of the developed product. And if there are any error
found then the process starts again from the requirement gathering.
7. Maintenance: In the maintenance phase, after deployment of the software in the
working environment there may be some bugs, some errors or new updates are required.
Maintenance involves debugging and new addition options.
27
3. The resources needed to complete a large project are constrained, hence on a
smaller scale, the automation is more temporary.
4. Very high risk as the project’s objective may occasionally alter.
SPIRAL MODEL
The Spiral Model is one of the most important Software Development Life Cycle models.
The Spiral Model is a combination of the waterfall model and the iterative model. It
provides support for Risk Handling. The Spiral Model was first proposed by Barry
Boehm.
28
The Spiral Model in Software Engineering is similar to the incremental model, with more
emphasis placed on risk analysis. The spiral model has four phases: Planning, risk
analysis, product development and next phase planning or Evaluation. A software project
repeatedly passes through these phases in iterations (called Spirals in this model). When
looking at a spiral model diagram, the spiral’s radius represents the project’s cost, and the
angular degree represents the progress made in the current phase. Each phase begins with
a goal for the design and ends when the developer or client reviews the progress.
Each loop of the spiral is called a phase of the software development process.
29
2. Risk Analysis (Risk Management)
In this phase of the spiral model for software development, the developer term will
identify all the potential risks that will arise during the software development process.
After the developer is done with problem identification, the software engineer will plan a
list of strategies to mitigate the risks. In short, this phase is all about risk management
along with the technical feasibility.
After the risk identification process, the developer team will release a prototype, which
will be a risk-free demographic version of the software. Not only will the developer
release a risk-free prototype, but they also will plan alternative solutions to handle the
risk.
3. Engineering (Designing and Coding Phase)
This phase starts with designing the leading software by idolizing the prototyped design
from the baseline spiral. The prototype design will be a guideline for software
architecture, logic, front-end and final design.
After the software engineering is done designing the software, they will start coding,
testing and the deployment process. Moreover, developers will deploy the software on the
client’s site to gather feedback. This phase in the spiral model is totally technical and
needs experience and expertise to tackle any challenge or change.
4. Evaluate (Review And Deployment)
After the launch of a software project on the client’s site, the client is open to sharing
feedback and insightful observations about the software.
Hence, the testing team from the client side will note down all the feedback,
observations, additions and changes needed in the software or its functionality. All the
correction lists will be sent to the development team,
Again, a new baseline will begin to fix all the bugs, and after fixation of all requirements,
the final product will be ready for final launch.
30
When changes may require at any time
Large and high budget projects.
For medium to high-risk projects.
When there is a budget constraint and risk evaluation is important.
31
Expensive: The spiral method requires more budget than other SDLC methods.
So, in normal cases, it is not suitable for small or medium size software projects.
Too much dependency on experts: The spiral method is expert-dependent. How
much the project will be successful depends on the risk analysis and experience of
the expert developers.
Poor time management: Spiral models have an unknown number of phases;
therefore, it is complicated to track the software project deadline.
Follows multiple iterations: As the spiral method involves multiple repetitions,
many developers consider this an irritating process.
Time-consuming: Spiral methodology goes through multiple recurrences,
feedback and changes during the development process. So, it becomes a time-
consuming process to finish the software project.
Require intensive investment: Spiral method handles threat-oriented software
projects and hence requires a significant amount of investment in planning, risk
analysis and evaluation
PROTOTYPE MODEL
According to the prototype model, a functioning system prototype must be created before
the actual software is developed. A prototype model is a toy/demo implementation of
the actual product or system.
The prototype is a working model of the software product that can be used to gather
feedback and refine the design before the final product is developed. The prototyping
model is particularly useful for projects where the requirements are not well-defined or
are likely to change over time. The prototyping model can help to reduce the risk of
developing a software product that does not meet the needs of end-users or stakeholders,
while also reducing development time and cost. The prototype can be developed using
different methods, such as throwaway prototyping, evolutionary prototyping, and
incremental prototyping. The prototyping model can be used in conjunction with other
software development methodologies, such as agile development, to create software
products that meet the needs of end-users and stakeholders.
32
Prototyping is a software development methodology that focuses on the use of working
models that are constantly refined based on feedback from the end user. Prototyping is
most commonly used to develop systems with significant end-user interaction and
complex user interfaces.
Because it allows for the capture of customer requirements at an early stage of
development, software prototyping is becoming increasingly popular as a software
development model. It allows for valuable customer feedback and assists software
designers and developers in understanding what is expected directly from sales.
The term “software prototyping” refers to the process of creating software application
prototypes that demonstrate the functionality of the product under development but may
not contain the exact logic of the original software
33
Steps of Prototyping Model
Step-1: Requirements gathering and analysis: Requirement analysis is the first step in
developing a prototyping model. During this phase, the system’s desires are precisely
defined. During the method, system users are interviewed to determine what they expect
from the system.
Step-2: Quick Design: The second phase could consist of a preliminary design or a
quick design. During this stage, the system’s basic design is formed. However, it is not a
complete design. It provides the user with a quick overview of the system. The rapid
design aids in the development of the prototype.
Step-3: Build a Prototype: During this stage, an actual prototype is intended to support
the knowledge gained from quick design. It is a small low-level working model of the
desired system.
Step-4: Initial user Evaluation: The proposed system is presented to the client for
preliminary testing at this stage. It is beneficial to investigate the performance model’s
strengths and weaknesses. Customer feedback and suggestions are gathered and
forwarded to the developer.
Step-5: Refining Prototype: If the user is dissatisfied with the current model, you may
want to improve the type that responds to user feedback and suggestions. When the user
is satisfied with the upgraded model, a final system based on the approved final type is
created.
Step-6: Implement Product and Maintain: The final system was fully tested and
distributed to production after it was developed to support the original version. To reduce
downtime and prevent major failures, the programmer is run on a regular basis.
34
In this method, a developed prototype need not necessarily be a part of the
accepted prototype.
Customer feedback helps prevent unnecessary design faults and hence, the final
prototype developed is of better quality.
2. Evolutionary Prototyping
In this method, the prototype developed initially is incrementally refined based on
customer feedback till it finally gets accepted.
In comparison to Rapid Throwaway Prototyping, it offers a better approach that
saves time as well as effort.
This is because developing a prototype from scratch for every iteration of the
process can sometimes be very frustrating for the developers.
3. Incremental Prototyping
In this type of incremental prototyping, the final expected product is broken into
different small pieces of prototypes and developed individually.
In the end, when all individual pieces are properly developed, then the different
prototypes are collectively merged into a single final product in their predefined
order.
It’s a very efficient approach that reduces the complexity of the development
process, where the goal is divided into sub-parts and each sub-part is developed
individually.
The time interval between the project’s beginning and final delivery is
substantially reduced because all parts of the system are prototyped and tested
simultaneously.
Of course, there might be the possibility that the pieces just do not fit together due
to some lack of ness in the development phase – this can only be fixed by careful
and complete plotting of the entire system before prototyping starts.
4. Extreme Prototyping
This method is mainly used for web development. It consists of three sequential
independent phases:
In this phase, a basic prototype with all the existing static pages is presented in
HTML format.
35
In the 2nd phase, Functional screens are made with a simulated data process using
a prototype services layer.
This is the final step where all the services are implemented and associated with
the final prototype.
Advantages of Prototyping Model
The customers get to see the partial product early in the life cycle. This ensures a
greater level of customer satisfaction and comfort.
New requirements can be easily accommodated as there is scope for refinement.
Missing functionalities can be easily figured out.
Errors can be detected much earlier thereby saving a lot of effort and cost, besides
enhancing the quality of the software.
The developed prototype can be reused by the developer for more complicated
projects in the future.
Flexibility in design.
Early feedback from customers and stakeholders can help guide the development
process and ensure that the final product meets their needs and expectations.
Prototyping can be used to test and validate design decisions, allowing for
adjustments to be made before significant resources are invested in development.
Prototyping can help reduce the risk of project failure by identifying potential
issues and addressing them early in the process.
Prototyping can facilitate communication and collaboration among team members
and stakeholders, improving overall project efficiency and effectiveness.
Prototyping can help bridge the gap between technical and non-technical
stakeholders by providing a tangible representation of the product.
Disadvantages of the Prototyping Model
Costly concerning time as well as money.
There may be too much variation in requirements each time the prototype is
evaluated by the customer.
Poor Documentation due to continuously changing customer requirements.
It is very difficult for developers to accommodate all the changes demanded by
the customer.
36
There is uncertainty in determining the number of iterations that would be
required before the prototype is finally accepted by the customer.
After seeing an early prototype, the customers sometimes demand the actual
product to be delivered soon.
Developers in a hurry to build prototypes may end up with sub-optimal solutions.
The customer might lose interest in the product if he/she is not satisfied with the
initial prototype.
The prototype may not be scalable to meet the future needs of the customer.
The prototype may not accurately represent the final product due to limited
functionality or incomplete features.
The focus on prototype development may shift away from the final product,
leading to delays in the development process.
The prototype may give a false sense of completion, leading to the premature
release of the product.
The prototype may not consider technical feasibility and scalability issues that can
arise during the final product development.
The prototype may be developed using different tools and technologies, leading to
additional training and maintenance costs.
The prototype may not reflect the actual business requirements of the customer,
leading to dissatisfaction with the final product.
Applications of Prototyping Model
The Prototyping Model should be used when the requirements of the product are
not clearly understood or are unstable.
The prototyping model can also be used if requirements are changing quickly.
This model can be successfully used for developing user interfaces, high-
technology software-intensive systems, and systems with complex algorithms and
interfaces.
The prototyping Model is also a very good choice to demonstrate the technical
feasibility of the product.
For more software engineering models, refer to Classical Waterfall Model, Spiral
Model, and Iterative Waterfall Model.
37
AGILE MODEL
In earlier days, the Iterative Waterfall Model was very popular for completing a project.
But nowadays, developers face various problems while using it to develop software. The
main difficulties included handling customer change requests during project development
and the high cost and time required to incorporate these changes. To overcome these
drawbacks of the Waterfall Model, in the mid-1990s the Agile Software Development
model was proposed.
Agile model is a combination of incremental and iterative process models.
This model focuses on the users satisfaction which can be achieved with quick
delivery of the working software product.
Agile model breaks the product into individual iterations.
Every iteration includes cross functional teams working on different areas such as
planning, requirements, analysis, design, coding, unit testing and acceptance
testing.
At the end of an iteration working product shows to the users.
With every increment, features are incremented and the final increment hold all the
features needed by the customers.
The iterations in agile process are shorter in duration which can vary from 2 weeks
to 2 months.
38
The stages of the agile process model are as follows:
1. Requirements gathering
2. Design the requirements
3. Construction/ iteration
4. Testing
5. Deployment
6. Feedback
Read in the brief about the SDLC process model:
1) Requirements gathering
In this phase, requirements should be characterized. Different business opportunities are
explained and for the building of the project efforts and time are planned.
2) Design the requirements
At the point when you have distinguished the task, work with partners to define the
requirements. You can utilize the client stream graph to show crafted new elements and
show how they will apply to your current framework.
3) Construction/ iteration
At the point when the group characterizes the requirements, the work starts. Creators and
designers begin to work at their task, which means sending a functioning item. The item
will go through different phases of progress, so it incorporates easy minimal
functionality.
4) Testing
In this stage, the Quality Assurance group analyzes the item’s presentation and searches
for the bug.
5) Deployment
In this stage, the group gives an item for the client’s workplace.
6) Feedback
When a product is released, feedback is the last step. Feedback is received regarding the
product and manages the input.
12 Principles of Agile Software Development
The Agile Manifesto is based on four values and twelve principles that form the basis, for
methodologies.
39
These principles include:
1. Ensuring customer satisfaction through the early delivery of software.
2. Being open to changing requirements in the stages of the development.
3. Frequently delivering working software with a main focus on preference for
timeframes.
4. Promoting collaboration between business stakeholders and developers as an
element.
5. Structuring the projects around individuals. Providing them with the necessary
environment and support.
6. Prioritizing face to face communication whenever needed.
7. Considering working software as the measure of the progress.
8. Fostering development by allowing teams to maintain a pace indefinitely.
9. Placing attention on excellence and good design practices.
10. Recognizing the simplicity as crucial factor aiming to maximize productivity by
minimizing the work.
11. Encouraging self organizing teams as the approach to design and build systems.
12. Regularly reflecting on how to enhance effectiveness and to make adjustments
accordingly.
Types of Agile Model
There are several types of agile model in software engineering that organizations can
use to manage their software development projects.
40
1. Scrum: A popular Agile framework that emphasizes teamwork, communication,
and collaboration. It uses short iterations called sprints to deliver working
software incrementally.
2. Kanban: A visual Agile framework that focuses on continuous delivery and
reducing waste. It uses a board to visualize the flow of work and limits work in
progress to improve efficiency.
3. Lean: A methodology that emphasizes the elimination of waste and the
maximization of value. It uses continuous improvement to increase efficiency and
reduce costs.
4. Extreme Programming (XP): An Agile methodology that emphasizes the
importance of teamwork, customer involvement, and technical excellence. It
includes practices such as pair programming and test-driven development to
ensure high-quality software.
5. Crystal: A lightweight Agile methodology that emphasizes people, interactions,
and communication. It designed for small to medium-sized teams working on
projects with relatively simple requirements.
6. Dynamic Systems Development Method (DSDM): An Agile methodology that
emphasizes collaboration, iteration, and flexibility. It includes a strong focus on
the business value of software and designed for projects with tight deadlines.
7. Feature-Driven Development (FDD): An Agile methodology that emphasizes
iterative development, feature-based planning, and regular feedback. It designed
for large, complex projects with many teams working together.
41
decided to choose the Waterfall model for the development. Team B after a heavy
discussion decided to take a leap of faith and choose Agile as their development model.
The Development Plan of the Team A is as follows:
Requirement analysis and Gathering – 1.5 Months
Design of System – 2 Months
Coding phase – 4 Months
System Integration and Testing – 2 Months
User Acceptance Testing – 5 Weeks
The Development Plan for the Team B is as follows:
Since this was an Agile, the project was broken up into several iterations.
The iterations are all of the same time duration.
At the end of each iteration, a working product with a new feature has to be
delivered.
Instead of Spending 1.5 months on requirements gathering, they will decide the
core features that are required in the product and decide which of these features
can be developed in the first iteration.
Any remaining features that cannot be delivered in the first iteration will be
delivered in the next subsequent iteration, based on the priority.
At the end of the first iterations, the team will deliver working software with the
core basic features.
The team has put their best efforts into getting the product to a complete stage. But then
out of the blue due to the rapidly changing environment, the company’s head came up
with an entirely new set of features that wanted to be implemented as quickly as possible
and wanted to push out a working model in 2 days. Team A was now in a fix, they were
still in their design phase and had not yet started coding and they had no working model
to display. Moreover, it was practically impossible for them to implement new features
since the waterfall model there is not revert to the old phase once you proceed to the next
stage, which means they would have to start from square one again. That would incur
heavy costs and a lot of overtime. Team B was ahead of Team A in a lot of aspects, all
thanks to Agile Development. They also had a working product with most of the core
requirements since the first increment. And it was a piece of cake for them to add the new
42
requirements. All they had to do was schedule these requirements for the next increment
and then implement them.
When to use the Agile Model?
When frequent changes are required.
When a highly qualified and experienced team is available.
When a customer is ready to have a meeting with a software team all the time.
When project size is small.
Advantage (Pros) of Agile Method:
Frequent Delivery
Little or no planning required.
Easy to manage.
Face-to-Face Communication with clients.
Efficient design and fulfils the business requirement.
Anytime changes are acceptable.
It reduces total development time.
Agile puts the customer at the center of the development process, resulting in
higher customer satisfaction.
Gives flexibility to developers.
Disadvantages of Agile model
It is totally depends on customer interaction. If the customer is not clear with their
requirements, the development team can go in the wrong direction.
Documentation is less, so the transfer of technology to the new team members is
challenging.
Requires skilled team members: Agile requires skilled team members who are
able to work collaboratively and communicate effectively.
Lack of predictability: Agile is highly flexible, which can make it difficult to
predict the final outcome.
It is not suitable for handling complex dependencies.
43
UNIFIED PROCESS MODEL
Unified Process (UP) is an iterative and incremental software development process
framework that helps in designing and building high-quality software systems.
Inception is the first phase of UP, which focuses on understanding and defining
the project goals, scope, and constraints. It is an essential phase that lays the
foundation for the project's success. Thia framework used for object-oriented
modeling. The framework is also known as Rational Unified Process (RUP) and
the Open Unified Process (Open UP). Some of the key features of this process
include:
It defines the order of phases.
It is component-based, meaning a software system is built as a set of software
components. There must be well-defined interfaces between the components for
smooth communication.
It follows an iterative, incremental, architecture-centric, and use-case driven
approach
44
Phases of Unified Process:
Unified Process (UP) is characterized by its iterative and incremental approach to
software development. The phases in Unified Process provide a structured framework for
managing the various activities and tasks involved in building a software system. Here's
an in-depth look at each phase:
1. Inception
2. Elaboration
3. Construction
4. Transition
5. Production
1. Inception: The main goal of this phase involves delimiting the project scope. This is
where we define why we are making this product in the first place. It should have the
following:
What are the key features?
How does this benefit the customers?
Which methodology will we follow?
What are the risks involved in executing the project?
Schedule and cost estimates.
45
2. Elaboration: In this phase, the project requirements are analyzed in more detail, and
the architecture of the system is defined. Key activities include developing use cases,
creating the architectural baseline, identifying key components, and refining the project
plan. The goal of this phase is to mitigate major risks and establish a solid architectural
foundation for the project.
3. Construction: This is the phase where the actual implementation of the system takes
place. Key activities include developing, testing, and integrating the system components,
as well as continuously verifying that the system meets the requirements. The goal of this
phase is to build a complete, high-quality software product that is ready for deployment.
4. Transition: In this final phase, the software is deployed to end users. Key activities
include user training, final system testing, and transitioning the system to the operations
and maintenance team. The goal of this phase is to ensure a smooth transition from
development to production and to address any issues that arise during deployment.
These phases are iterative, meaning that they may be revisited multiple times throughout
the project to incorporate feedback, make improvements, and address changes in
requirements. This iterative approach allows for flexibility and adaptability, making the
Unified Process well-suited for complex and evolving software projects.
5. Production –
The final phase of the model.
The project is maintained and updated accordingly.
46
Analyst: Responsible for gathering and analyzing requirements from stakeholders
and translating them into detailed specifications. The analyst also helps to identify
risks and propose mitigation strategies.
Designer: Responsible for creating detailed designs for the system, including
class diagrams, sequence diagrams, and other UML diagrams. The designer works
closely with the architect to ensure that the design aligns with the overall
architecture.
Developer: Responsible for implementing the system according to the design
specifications. The developer writes code, tests it, and integrates it with other
components of the system.
Tester: Responsible for testing the system to ensure that it meets the specified
requirements and is free of defects. The tester develops test cases, executes them,
and reports any issues found.
47
Challenges of Unified Process
Challenges include complexity, overhead, learning curve, scope management, and
adoption resistance.
Challenges Description
Perceived complexity and resource-intensiveness, requiring additional
Complexity
time and effort, especially for small teams.
The associated overhead, including documentation and formalized
Overhead
processes, may increase project costs and reduce productivity.
Requirement for a solid understanding of UP principles and practices,
Learning Curve
posing challenges for teams transitioning from traditional methods.
SPECIALIZED MODEL
The specification models are use when only collection on specialized technique methods
are expected for developing the specific software.
Definition and Characteristics of Specialized Process Models
Specialized process models in software engineering are tailored frameworks designed to
address specific needs and challenges within the software development lifecycle. These
models enhance the efficiency and effectiveness of software projects by providing
structured approaches that cater to unique project requirements.
48
incorporate elements from established methodologies like Agile, Waterfall, or DevOps,
but modify them to better suit the specific characteristics of the project at hand.
Key Characteristics
Adaptability: Specialized process models are flexible and can be adjusted based
on the project's scope, team size, and technology stack.
Focus on Specific Domains: These models often target specific industries or
types of software, such as embedded systems, web applications, or enterprise
solutions.
Role Definition: They clearly define roles and responsibilities within the
development team, ensuring that each member understands their contributions to
the project
49
Identify the component based products and analyze them for fitting in the existing
application domain.
Analyze the component integration issues.
Design the software architecture to accommodate the components.
Integrate the components into the software architecture.
Conduct comprehensive testing for the developed software.
Software re-usability is the major advantage of component based development.
The re-usability reduces the development cycle time and overall cost.
50
incompleteness and inconsistency are those problems that can be overcome if we
use formal methods model.
The formal methods model offers defect-free software. However there are some
drawbacks of this model which resists it form getting used widely. These
drawbacks are.
The formal methods model is time consuming and expensive. For using this
model, the developers need the strong mathematical background or some
extensive training. If this model is chosen for development then the
communication with customer becomes very difficult.
51
Examples of Specialized Process Models
1. Agile Methodologies: Agile frameworks like Scrum and Kanban are often
specialized to fit the needs of teams working on rapidly changing projects. They
emphasize iterative development, customer collaboration, and responsiveness to
change.
2. DevOps: This model integrates development and operations to improve
collaboration and productivity by automating infrastructure, workflows, and
continuously measuring application performance.
3. Spiral Model: This model combines iterative development with the systematic
risk assessment of the project, making it suitable for large, complex projects
where risk management is crucial.
52