SoftwareEngineering 100115
SoftwareEngineering 100115
Engineering on the other hand, is all about developing products, using well-
defined, scientific principles and methods.
Software evolution
The process of developing a software product using software engineering
principles and methods is referred to as Software Evolution. This includes the
initial development of software and its maintenance and updates, till desired
software product is developed, which satisfies the expected requirements.
Even after the user has the 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 the
requirement is not feasible. The only feasible and economical solution is to update
the existing software so that it matches the latest requirements.
- Static-type (S-type)
- Practical-type (P-type)
- Embedded-type (E-type)
Software paradigms
Software paradigms refer to the methods and steps, which are taken while
designing the software. There are many methods proposed and are implemented. But,
we need to see where in the software engineering concept, 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.
Programming Paradigm
This paradigm is related closely to programming aspect of software
development. This includes –
Coding
Testing
Integration
Need of Software Engineering
The need of software engineering arises because of higher rate of change in
user requirements and environment on which the software is working. Following are
some of the needs stated:
Large software - It is easier to build a wall than a house or
building,likewise, as the size of the software becomes large, engineering has to
step to give it a scientific process.
Operational:
This tells us how well the software works in operations. It can be
measured on
Budget
Usability
Efficiency
Correctness
Functionality
Dependability
Security
Safety
Transitional
This aspect is important when the software is moved from one platform
to another:
Portability
Interoperability : is the ability of different systems,
devices, applications or products to connect and communicate in a coordinated way,
without effort from the end user.
Ex: two of the same electronic health record systems exchanging patient information
between two different doctors'offices.
Reusability
Adaptability
Maintenance
This aspect briefs about how well the 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.
Communication
This is the first step where the user initiates the request for a
desired software product. The user contacts the service provider and tries to
negotiate the terms, submits the request to the service providing organization in
writing.
Requirement Gathering
This step onwards the software development team works to carry on the
project. The team holds discussions with various stakeholders from problem domain
and tries to bring out as much information as possible on their requirements. The
requirements are contemplated and segregated into user requirements,
system requirements and functional requirements. The requirements are
collected using a number of practices as given –
studying the existing or obsolete system and software,
conducting interviews of users and developers,
referring to the database or
collecting answers from the questionnaires.
Feasibility Study
After requirement gathering, the team comes up with a rough plan of
software process. At this step the team analyzes if a software can be designed to
fulfill all requirements of the user, and if there is any possibility of software
being no more useful. It is also analyzed if the project is financially,
practically, and technologically feasible for the organization to take up. There
are many algorithms available, which help the developers to conclude the
feasibility of a software project.
System Analysis
At this step the developers decide a roadmap of their plan and try to
bring up the best software model suitable for the project. System analysis includes
understanding of software product limitations, learning system related problems or
changes to be done in existing systems beforehand, identifying and addressing the
impact of project on organization and personnel etc. The project team analyzes the
scope of the project and plans the schedule and resources accordingly.
Software Design
Next step is to bring down whole knowledge of requirements and analysis
on the desk and design the software product. The inputs from users and information
gathered in requirement gathering phase are the inputs of this step. The output of
this step comes in the form of two designs; logical design, and physical design.
Engineers produce meta-data and data dictionaries, logical diagrams, data-flow
diagrams, and in some cases pseudo codes.
Coding
This step is also known as programming phase. The implementation of
software design starts in terms of writing program code in the suitable programming
language and developing error-free executable programs efficiently.
Testing
An estimate says that 50% of whole software development process should
be tested. Errors may ruin the software from critical level to its own removal.
Software testing is done while coding by the developers and thorough testing is
conducted by testing experts at various levels of code such as module testing,
program testing, product testing, in-house testing, and testing the product at
user’s end. Early discovery of errors and their remedy is the key to
reliable software.
Integration
Software may need to be integrated with the libraries, databases, and
other program(s). This stage of SDLC is involved in the integration of software
with outer world entities.
Implementation
This means installing the software on user machines. At times, software
needs post-installation configurations at user end. Software is tested for
portability and adaptability and integration related issues are solved during
implementation.
2) Design: In this phase the system and software design is prepared from
the requirement specifications which were studied in the first phase. System Design
helps in specifying hardware and system requirements and also helps in defining
overall system architecture.
Activities in this phase - Perform Architectural Design for the software,
Design Database (If applicable), Design User Interfaces, Select or Develop
Algorithms (If Applicable), Perform Detailed Design.
The system design specifications serve as input for the next phase of
the model.
ITERATIVE MODEL:
An iterative life cycle model does not attempt to start with a full specification
of requirements. Instead, development begins by specifying and implementing just
part of the software, which is then reviewed to identify further requirements. This
process is then repeated, producing a new version of the software at the end of
each iteration of the model.
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.
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. Verify: The verify phase is where the software is estimated and checked as
per the current requirement. Then, further requirements are reviewed discussed and
reviewed to propose for an update in the next iteration.
The advantages of the Iterative and Incremental SDLC Model are as follows −
Some working functionality can be developed quickly and early in the life
cycle.
Risks are identified and resolved during iteration; and each iteration is an
easily managed milestone.
The disadvantages of the Iterative and Incremental SDLC Model are as follows −
More resources may be required.
System architecture or design issues may arise because not all requirements
are gathered in the beginning of the entire 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.
The spiral model has four phases. A software project repeatedly passes
through these phases in iterations called Spirals.
Spiral model is one of the most important Software Development Life Cycle
models, which provides support for Risk Handling. In its diagrammatic
representation, it looks like a spiral with many loops. The exact number of loops
of the spiral is unknown and can vary from project to project. Each loop of the
spiral is called a Phase of the software development process. The exact number of
phases needed to develop the product can be varied by the project manager depending
upon the project risks. As the project manager dynamically determines the number of
phases, so the project manager has an important role to develop a product
using the spiral model.
The Radius of the spiral at any point represents the expenses(cost) of the
project so far, and the angular dimension represents the progress made so far in
the current phase.
Each phase of the Spiral Model is divided into four quadrants as shown in the
above figure. The functions of these four quadrants are discussed below-
Identify and resolve Risks: During the second quadrant, all the possible
solutions are evaluated to select the best possible solution. Then the risks
associated with that solution are identified and the risks are resolved using the
best possible strategy. At the end of this quadrant, the Prototype is built for the
best possible solution.
Develop next version of the Product: During the third quadrant, the
identified features are developed and verified through testing. At the end of the
third quadrant, the next version of the software is available.
Review and plan for the next Phase: In the fourth quadrant, the Customers
evaluate the so far developed version of the software. In the end, planning for the
next phase is started.
The Prototyping Model also supports risk handling, but the risks must be
identified completely before the start of the development work of the project. But
in real life project risk may occur after the development work starts, in that
case, we cannot use the Prototyping Model. In each phase of the Spiral Model, the
features of the product dated and analyzed, and the risks at that point in time are
identified and are resolved through prototyping. Thus, this model is much more
flexible compared to other SDLC models.
Risk Handling: The projects with many unknown risks that occur as the
development proceeds, in that case, Spiral Model is the best development model to
follow due to the risk analysis and risk handling at every phase.
Good for large projects: It is recommended to use the Spiral Model in large
and complex projects.
Flexibility in Requirements: Change requests in the Requirements at later
phase can be incorporated accurately by using this model.
Customer Satisfaction: Customer can see the development of the product at the
early phase of the software development and thus, they habituated with the system
by using it before completion of the total product.
Complex: The Spiral Model is much more complex than other SDLC models.
Expensive: Spiral Model is not suitable for small projects as it is
expensive.
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.
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.
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.
Works well for smaller projects where requirements are very well understood.
Easy to manage due to the rigidity of the model. Each phase has specific
deliverables and a review process.
Not suitable for the projects where requirements are at a moderate to high
risk of changing.
The Big bang model is an SDLC model that starts from nothing. It is the
simplest model in SDLC (Software Development Life Cycle) as it requires almost no
planning. However, it requires lots of funds and coding and takes more time. The
name big bang model was set after the “Great Big Bang” which led to the development
of galaxies, stars, planets, etc. Similarly, this SDLC model combines time,
efforts, and resources to build a product. The product is gradually built as the
requirements from the customer come, however, the end product might not meet the
actual requirements.
Design :
The product requirements are understood and implemented as they arrive. The
complete modules or at least the part of the modules are integrated and tested. All
the modules are run separately and the defective ones are removed to find the
cause. It is a suitable model where requirements are not well understood and the
final release date is not given.