Professional Documents
Culture Documents
Oose Unit 1 (2021)
Oose Unit 1 (2021)
System Engineering: The process of analyzing and designing an entire system, including the
hardware and the software.
Software Engineering: The discipline for creating software applications. A systematic approach to
the design, development, testing, and maintenance of software.
A lot of systems today have a mix of hardware and software that is tightly integrated, like modern
smartphones, tablets, etc. To create such systems, involve a lot of different disciplines.
In Figure 1-2 we see a typical network and infrastructure that the software relies on.
Figure 1-3 we see the complexity of software development and different components that are
involved.
Part 1: Introduction
21 1 Introduction
In Figure 1-4 we see the different phases involved in the Software Development Lifecycle (SDLC).
• Planning
• Requirements Analysis
• Design
• Implementation
• Testing
• Deployment and Maintenance
In Figure 1-5 we see examples of some of the different activities involved in the different phases of
software development.
Part 1: Introduction
22 1 Introduction
As you see, software development involves lot of phases the are executed by different disciplines
and different people. We will discuss and explain all these things later in this document.
Part 1: Introduction
Software Development
In this chapter, we will give a short overview of software development, the challenges and what
kind of different software categories we have, what kind of documents that are needed and created
during the software development process, what kind of skills needed, etc.
In Figure 3-1 we see how a software application typically interacts with users, the underlying
operating system and hardware.
34
3.1 Challenges
Collaboration and communication within the team and with stakeholders, etc. is crucial when it comes
to creating good software.
Creating software is complicated. It is important to understand the customer’s needs! In some way,
you need to find out what the customer needs.
Market research, etc. is a good start, but in the end, you need to go much deeper to understand the
customer. Most of the time the customer doesn’t even know what they need.
Software Development Phases
45
Documentation
Testing
Deployment, Installation and Maintenance
This chapter introduces these phases. Figure 5-1 shows an overview of the different phases
involved in Software Development:
45
46 5 Software Development Phases
Requirements
In the requirements, we describe what the system should do. The requirements include both
functional requirements and non-functional requirements [1].
Functional Requirements: Statements of services the system should provide, how the system
should react to inputs and how the system should behave in different situations. May state what the
system should not do.
The requirements are often collected in a so-called “Software Requirements Specification (SRS)”
document.
Introduction
o Purpose
o Definitions
o System overview
o References
Overall description
o Product perspective
System Interfaces
User Interfaces
Hardware interfaces
Software interfaces
Communication Interfaces
Memory Constraints
Operations
Site Adaptation Requirements
o Product functions
o User characteristics
o Constraints, assumptions and dependencies
Specific requirements
o External interface requirements
o Functional requirements
o Performance requirements
o Design constraints
Standards Compliance
o Logical database requirement
o Software System attributes
Reliability
Availability
Security
Maintainability
Portability
Other requirements
The Requirements is normally given by the Customer if we deal with customized products. The
software requirements document is the official statement of what is required of the system. It
should include both a definition of user requirements and a specification of the system
requirements. It is NOT a design document. As far as possible, it should include a set of WHAT
the system should do rather than HOW it should do it [1].
Design
In the design phase, we use the specification and transform it into descriptions of how we should
do it.
In principle, requirements should state what the system should do and the design should describe
how it does this – but in practice this is not so easy! - In practice, requirements and design are
inseparable.
Technical Design – Platform and Architecture Design, i.e., how to build the software.
UX Design – Design of User eXperience (UX) and the Graphical User Interface (GUI),
sometimes also called Human Machine Interface (HMI). This is what the end user of the
software sees.
Technical Design
Technical Design is the Platform and Architecture Design, i.e., how to build the software.
UX Design
UX Design is the Design of the User eXperience (UX) and the Graphical User Interface (GUI),
sometimes also called Human Machine Interface (HMI). This is what the end user of the software
sees.
Implementation
Implementation = Coding.
Most of the software has a Graphical User Interface (GUI). Normally you separate the GUI design
and code in different layers or files.
[http://geek-and-poke.com]
Testing
Testing can be performed on different levels and by different persons. Testing is a very important
part of software development. About 50% of the software development is about testing your
software.
Deployment
What is Deployment?
Software deployment is all the activities that make a software system available for use.
Examples:
Installation
Deployment strategies may vary depending of what kind of software we create, etc.
When the software is deployed, or installed, you normally go into a Maintenance phase. The
maintenance of software involves bug fixes of the software after the software is released, etc. At
some time, you also need to start planning new releases of the software.
Software development process:
These processes or models may be divided in 2 main categories; Plan-driven models and
Agile methods. The Waterfall model, V-model and the Spiral model is so-called plan-driven
models, while Scrum and eXtreme Programming are so-called Agile methods.
Traditionally plan-driven methods where used in software development, while today Agile
methods such as Scrum have become very popular, especially in smaller development teams.
Plan-driven models (e.g., Waterfall) generally produce more documentation than Agile models.
In Figure 6-2 we see the main difference between Agile development and ordinary plan-driven
development.
[http://geek-and-poke.com]
Plan-driven models
We have different plan-driven models such as the Waterfall model, V-model, Spiral model which
we will discuss in more details.
Waterfall model
Traditionally with the Waterfall model, you can only start on the next phase when the previous
phase is finished. Therefore, it is called the Waterfall method, see Figure 6-3.
In practice, there is impossible to create perfect requirements and design before you start
implementing the code, so it is common to go back and update these phases iteratively.
Waterfall approach was first SDLC Model to be used widely in Software Engineering to ensure success of the
project. In "The Waterfall" approach, the whole process of software development is divided into separate phases.
In this Waterfall model, typically, the outcome of one phase acts as the input for the next phase sequentially.
The V-model is an SDLC model where execution of processes happens in a sequential manner in a V-shape. It is
also known as Verification and Validation model.
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.
V-Model - Design
Under the V-Model, the corresponding testing phase of the development phase is planned in parallel. So, there are
Verification phases on one side of the ‘V’ and Validation phases on the other side. The Coding Phase joins the
two sides of the V-Model.
The following illustration depicts the different phases in a V-Model of the SDLC.
System Design
Once you have the clear and detailed product requirements, it is time to design the complete system. The system
design will have the understanding and detailing the complete hardware and communication setup for the product
under development. The system test plan is developed based on the system design. Doing this at an earlier stage
leaves more time for the actual test execution later.
Architectural Design
Architectural specifications are understood and designed in this phase. Usually more than one technical approach
is proposed and based on the technical and financial feasibility the final decision is taken. The system design is
broken down further into modules taking up different functionality. This is also referred to as High Level Design
(HLD).
The data transfer and communication between the internal modules and with the outside world (other systems) is
clearly understood and defined in this stage. With this information, integration tests can be designed and
documented during this stage.
Module Design
In this phase, the detailed internal design for all the system modules is specified, referred to as Low Level Design
(LLD). It is important that the design is compatible with the other modules in the system architecture and the
other external systems. The unit tests are an essential part of any development process and helps eliminate the
maximum faults and errors at a very early stage. These unit tests can be designed at this stage based on the
internal module designs.
Coding Phase
The actual coding of the system modules designed in the design phase is taken up in the Coding phase. The best
suitable programming language is decided based on the system and architectural requirements.
The coding is performed based on the coding guidelines and standards. The code goes through numerous code
reviews and is optimized for best performance before the final build is checked into the repository.
Validation Phases
The different Validation Phases in a V-Model are explained in detail below.
Unit Testing
Unit tests designed in the module design phase are executed on the code during this validation phase. Unit testing
is the testing at code level and helps eliminate bugs at an early stage, though all defects cannot be uncovered by
unit testing.
Integration Testing
Integration testing is associated with the architectural design phase. Integration tests are performed to test the
coexistence and communication of the internal modules within the system.
System Testing
System testing is directly associated with the system design phase. System tests check the entire system
functionality and the communication of the system under development with external systems. Most of the
software and hardware compatibility issues can be uncovered during this system test execution.
Acceptance Testing
Acceptance testing is associated with the business requirement analysis phase and involves testing the product in
user environment. Acceptance tests uncover the compatibility issues with the other systems available in the user
environment. It also discovers the non-functional issues such as load and performance defects in the actual user
environment.
V- Model ─ Application
V- Model application is almost the same as the waterfall model, as both the models are of sequential type.
Requirements have to be very clear before the project starts, because it is usually expensive to go back and make
changes. This model is used in the medical development field, as it is strictly a disciplined domain.
The following pointers are some of the most suitable scenarios to use the V-Model application.
Requirements are well defined, clearly documented and fixed.
Product definition is stable.
Technology is not dynamic and is well understood by the project team.
There are no ambiguous or undefined requirements.
The project is short.
Once an application is in the testing stage, it is difficult to go back and change a functionality.
No working software is produced until late during the life cycle.
Spiral Model:
The spiral model combines the idea of iterative development with the systematic, controlled aspects of the
waterfall model. This Spiral model is a combination of iterative development process model and sequential linear
development model i.e. the waterfall model with a very high emphasis on risk analysis. It allows incremental
releases of the product or incremental refinement through each iteration around the spiral.
Identification
This phase starts with gathering the business requirements in the baseline spiral. In the subsequent spirals as the
product matures, identification of system requirements, subsystem requirements and unit requirements are all
done in this phase.
This phase also includes understanding the system requirements by continuous communication between the
customer and the system analyst. At the end of the spiral, the product is deployed in the identified market.
Design
The Design phase starts with the conceptual design in the baseline spiral and involves architectural design, logical
design of modules, physical product design and the final design in the subsequent spirals.
Construct or Build
The Construct phase refers to production of the actual software product at every spiral. In the baseline spiral,
when the product is just thought of and the design is being developed a POC (Proof of Concept) is developed in
this phase to get customer feedback.
Then in the subsequent spirals with higher clarity on requirements and design details a working model of the
software called build is produced with a version number. These builds are sent to the customer for feedback.
Based on the customer evaluation, the software development process enters the next iteration and subsequently
follows the linear approach to implement the feedback suggested by the customer. The process of iterations along
the spiral continues throughout the life of the software.
Agile software development is a group of software development methods based on iterative and incremental
development.
Scrum
eXtreme Programming (XP)
In Figure 6-6 we see the key features with Agile Software Development.
In 2001, some software developers met to discuss development methods. They published the
Manifesto for Agile Software Development to define the approach now known as agile software
development.
We are uncovering better ways of developingsoftware by doing it and helping others do it.
Through this work, we have come to value:
Pair Programming
Code Reviews
Refactoring
Unit Testing - In XP you start by writing Unit Tests before you start coding
Standup Meetings
In XP, they practice so-called “Pair Programming” (Figure 6-11), meaning 2 developers working
together.
So, is Pair Programming Good or Bad? There exists various studies of the productivity of Pair
Programming [1]:
A reasonable question is: Should the 2 developers have the same skills or not?
Collective Ownership for the code created and the results of the project.
Scrum
Scrum [9] is a so-called Agile method, and it has become very popular today. In Figure 6-12 we see
an overview of the Scrum method.
Scrum is simple and easy to understand. The method is more flexible and more informal than plan- driven methods
• Daily Scrum Meeting (Max 15 min, every day at the same time) (also called
Standup Meeting)
An example of a Daily Scrum Meeting is shown in Figure 6-13. It is normal to held this meeting as a
“standup meeting”, where participants standing during the meeting.
• Max 15 min.
• The meeting is held at the same time and place every day
• Purpose:
– Track Progress
Here are some key factors that separates the traditional waterfall method versus the more flexible
Agile methods, such as Scrum:
Continuous informal Review process because each code line is looked at by at least 2
people
It supports Refactoring, which is a continuous process of software improvement
Less time is spent on repairing bugs.
Improved Code Quality
It reduces the overall risk
Agile Model
The meaning of Agile is swift or versatile."Agile process model" refers to a software development approach based
on iterative development. Agile methods break tasks into smaller iterations, or parts do not directly involve long
term planning. The project scope and requirements are laid down at the beginning of the development process.
Plans regarding the number of iterations, the duration and the scope of each iteration are clearly defined in
advance.
Each iteration is considered as a short time "frame" in the Agile process model, which typically lasts from one to
four weeks. The division of the entire project into smaller parts helps to minimize the project risk and to reduce the
overall project delivery time requirements. Each iteration involves a team working through a full software
development life cycle including planning, requirements analysis, design, coding, and testing before a working
product is demonstrated to the client.
1. Requirements gathering
2. Design the requirements
3. Construction/ iteration
1. Requirements gathering: In this phase, you must define the requirements. You should explain business
opportunities and plan the time and effort needed to build the project. Based on this information, you can evaluate
technical and economic feasibility.C++ vs Java
2. Design the requirements: When you have identified the project, work with stakeholders to define requirements.
You can use the user flow diagram or the high-level UML diagram to show the work of new features and show
how it will apply to your existing system.
3. Construction/ iteration: When the team defines the requirements, the work begins. Designers and developers
start working on their project, which aims to deploy a working product. The product will undergo various stages of
improvement, so it includes simple, minimal functionality.
4. Testing: In this phase, the Quality Assurance team examines the product's performance and looks for the bug.
5. Deployment: In this phase, the team issues a product for the user's work environment.
6. Feedback: After releasing the product, the last step is feedback. In this, the team receives feedback about the
product and works through the feedback.
Scrum
SCRUM is an agile development process focused primarily on ways to manage tasks in team-based development
conditions.
o Scrum Master: The scrum can set up the master team, arrange the meeting and remove obstacles for the process
o Product owner: The product owner makes the product backlog, prioritizes the delay and is responsible for the
distribution of functionality on each repetition.
o Scrum Team: The team manages its work and organizes the work to complete the sprint or cycle.
eXtreme Programming(XP)
This type of methodology is used when customers are constantly changing demands or requirements, or when they
are not sure about the system's performance.
Iterative Model
In this Model, you can start with some of the software specifications and develop the first version of the software.
After the first version if there is a need to change the software, then a new version of the software is created with a
new iteration. Every release of the Iterative Model finishes in an exact and fixed period that is called iteration.
The Iterative Model allows the accessing earlier phases, in which the variations made respectively. The final output
of the project renewed at the end of the Software Development Life Cycle (SDLC) process.
1. Requirement gathering & analysis: In this phase, requirements are gathered from customers and check by an
analyst whether requirements will fulfil 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.
The Unified Process has emerged as a popular iterative software development process for building
object oriented systems. The Unified Process (UP) combines commonly accepted best practices, such
as an iterative lifecycle and risk-driven development, into a cohesive and welldocumented
description. The best-known and extensively documented refinement of the Unified Process is the
Rational Unified Process(RUP).
UP is an iterative process
• UP practices provide an example structure to talk about how to do, and how to learn OOA/D.
UP PHASES:
1. Inception
2. Elaboration
3. Construction
4. Transition
INCEPTION:
Inception is the initial stage of the project. Inception is not a requirements phase but it is a
feasibility phase where complete investigation takes place to support a decision to continue or
stop .It deals with
• Approximate vision
• Business case
• Scope
• Vague estimates
ELABORATION:
In Elaboration phase the project team is expected to capture a healthy majority of the system
requirements It deals with
• Refined vision,
• Realistic estimate
CONSTRUCTION :
Construction phase encompasses on iterative implementation of the remaining lower risk and easier
elements, and preparation for deployment.
TRANSITION:
Transition phase focus on releasing the final product to the customers for usability.
UP DISCIPLINES:
UP describes work activities such as writing a use case within disciplines a set of activities and related artifacts in
one subject area within requirement analysis.
Artifact-any work such as code, web graphics, database schema, text documents, diagrams, models etc.
Several UP Disciplines:
1. Business Modeling- Domain Model artifact to visualize concepts in the application domain.
2. Requirements- use case model and specification artifacts to capture functional and non-functional
requirements.
3. Design- All aspects of design, including overall architecture, objects, databases, networking.