Software Process Model (12)
What is Software Development Life Cycle? Software
Process Model
Software Development Life Cycle (SDLC) is a
process used by the software industry to design, develop and test high quality
softwares. The SDLC aims to produce a high-quality software that meets or
exceeds customer expectations, reaches completion within times and cost
estimates. It is a process followed for a software project, within a software
organization. It consists of a detailed plan describing how to develop,
maintain, replace and alter or enhance specific software. The life cycle
defines a methodology for improving the quality of software and the overall
development process.
System Development Life Cycle Phases / Stages:
System Study
The Study
phase is the most crucial step in creating a successful system. During this
phase you decide exactly what you want to do and the problems you’re trying to
solve by defining the problems, the objectives and the resources such as
personnel and costs.
System Analysis
The
end-users requirements should be determined and documented, what their
expectations are for the system, and how it will perform. A feasibility study
will be made for the project as well, involving determining whether it’s
organizationally, economically, socially, technologically feasible. It’s very
important to maintain strong communication level with the clients to make sure
you have a clear vision of the finished product and its function.
System Design
The design
phase comes after a good understanding of customer’s requirements, this phase
defines the elements of a system, the components, the security level, modules,
architecture and the different interfaces and type of data that goes through
the system.
System Development
System
Development is the process of defining, designing, testing and
implementing a software application. This includes the internal development of
customized systems as well as the acquisition of software developed by third
parties. System development is also referred to as software development,
software engineering or application development. System development includes
the management of the entire process of the development of computer software.
System Testing
Bringing different components and subsystems together
to create the whole integrated system, and then introducing the system to
different inputs to obtain and analyze its outputs and behavior and the way it
functions. Testing is becoming more and more important to ensure customer’s
satisfaction, and it requires no knowledge in coding, hardware configuration or
design.
System Implementation
This phase
comes after a complete understanding of system requirements and specifications.
It’s the actual construction process after having a complete and illustrated
design for the requested system.
System Maintenance
In this phase, periodic maintenance for the system
will be carried out to make sure that the system won’t become obsolete, this
will include replacing the old hardware and continuously evaluating system’s
performance, it also includes providing latest updates for certain components
to make sure it meets the right standards and the latest technologies to face
current security threats.
Software engineer:
Software
engineering is the application of engineering concepts to software development.
Its main goal is the creation, improvement, and maintenance of software. Software
engineering takes into account engineering aspects like the hardware and
software environment when working on a program.
While
software engineers’ job descriptions often heavily overlap with software
developers, software engineers and software developers are not the same. The
main difference is that software engineers apply engineering concepts and
principles to software development. Engineers consider beyond the code they’re
writing and onto the environment that the program will reside.
What Does a Software Engineer Do?
1. Updating programs.
2. Creating new programs.
3. Analysis.
4. Keep track of software development.
Types of Software Engineering:
Software Engineer
Software
engineers develop software for electronic devices. These developers use programming
languages such as C++, Java, and Python to create applications that will run on
computers. They work on both the user interface and the back-end, which refer
to what the user sees and the mechanics that make a program work, respectively.
2. Embedded Systems Engineer
These
engineers are responsible for designing, developing, testing, and maintaining
embedded systems. Embedded systems are combinations of hardware and software
designed to perform specific tasks. For example, an embedded systems engineer
may work on the software which powers ATMs or the program which controls a
robot.
3. Security Engineer
A security
engineer is responsible for creating systems, methods, and policies to ensure
an information system meets certain standards and has no security flaws.
Security engineers often operate as “white-hat” ethical hackers and attempt to
break into existing systems to determine if any security problems exist.
4. Quality Assurance Engineer
Quality
Assurance (QA) engineers write, review, test, and maintain software. These engineers
are responsible for ensuring the development team writes a consistent quality
of code. They create standards and policies to ensure all code is efficient and
works correctly.
System
Analyst
1.
Defining user requirements
A
systems analyst has the responsibility of observing users and their
requirements from a system. This can be done through conversational interviews
with the users and anticipating the new needs of users from already existing
systems. This helps in identifying the requirements from new systems via
examination of current systems and updating configurations for new systems.
2.
Prioritizing requirements
Systems
analysts use social and analytical skills in prioritizing system
specifications. Most enterprise systems have a lot of requirements but these
are frequently constrained due to a lack of resources.
Different
users in an organization have different needs from a system, but a systems
analyst helps to prioritize the user’s needs in accordance with the available
resources. This helps to ensure that maximum productivity is obtained from a
working system.
3.
Problem analysis
Systems
analysts tend to observe data and facts about an operating business. They use
technological techniques in identifying problems and removing unnecessary
details so as to enable the fulfillment of real needs from a system.
4.
Drawing specifications
Systems
analysts also assign the relevant responsibilities of managing system
requirements to the right individuals and team members. They specify
programming tasks to programmers and managerial tasks to managers. They also
document these system tasks in detail, using specification documents, and
review the output to ensure that it matches the required specification.
5.
System design and evaluation
Systems
analysts guide the development of every system in an organization, from the
specification of requirements to the designing of the system itself. They
ensure that the built systems correspond to the system specifications by
carrying out system evaluation. They also test the performance of the built
system to ensure that it meets the required performance as specified.
6.
Keeping up to date with technological advancements
Systems
analysts are real agents of change in the use of technology in an organization.
They tend to observe the overall use of technology in an organization and work
to keep up with evolving technological demands by replacing outdated
technologies with the latest ones.
Requirement Collection Methods
Requirement
Engineering
The process to
gather the software requirements from client, analyze and document them is known
as requirement engineering.
The
goal of requirement engineering is to develop and maintain sophisticated and
descriptive
‘System
Requirements Specification’ document.
It is a four step
process, which includes –
Feasibility Study
Requirement Gathering
Software Requirement Specification
Software Requirement Validation
What Is a
Feasibility Study?
A
feasibility study is simply an assessment of the practicality of a proposed
project plan or method. This is done by analyzing technical, economic, legal,
operational and time feasibility factors. Just as the name implies, you’re
asking, “Is this feasible?” For example, do you have or can you create the
technology to do what you propose? Do you have the people, tools and the resources necessary?
Types of
Feasibility Study:
Technical
Feasibility
This
assessment focuses on the technical resources available to the organization. It
helps organizations determine whether the technical resources meet capacity and
whether the technical team is capable of converting the ideas into working
systems. Technical feasibility also involves the evaluation of the hardware,
software, and other technical requirements of the proposed system.
Economic
Feasibility
This assessment
typically involves a cost/ benefits analysis of the project, helping organizations
determine the viability, cost, and benefits associated with a project before
financial resources are allocated. It also serves as an independent project assessment
and enhances project credibility—helping decision-makers determine the positive
economic benefits to the organization that the proposed project will provide.
Legal
Feasibility
This assessment
investigates whether any aspect of the proposed project conflicts with legal
requirements like zoning laws, data protection acts or social media laws.
Operational
Feasibility
This
assessment involves undertaking a study to analyze and determine whether—and how
well—the organization’s needs can be met by completing the project. Operational
feasibility studies also examine how a project plan satisfies the requirements
identified in the requirements analysis phase of system development.
Scheduling
Feasibility (Time Feasibility)
This
assessment is the most important for project success; after all, a project will
fail if not completed on time. In scheduling feasibility, an organization
estimates how much time the project will take to complete.
Importance
of Feasibility Study
Improves project
teams’ focus
Identifies new
opportunities
Provides
valuable information for a “go/no-go” decision
Narrows the
business alternatives
Identifies a
valid reason to undertake the project
Enhances the
success rate by evaluating multiple parameters
Aids decision-making
on the project
Identifies
reasons not to proceed
Requirement
Gathering
If
the feasibility report is positive towards undertaking the project, next phase
starts with gathering requirements from the user. Analysts and engineers
communicate with the client and end-users to know their ideas on what the
software should provide and which features they want the software to include.
Software
Requirement Specification
SRS
is a document created by system analyst after the requirements are collected
from various stakeholders. SRS defines how the intended software will interact
with hardware, external interfaces, speed of operation, response time of
system, portability of software across various platforms, maintainability,
speed of recovery after crashing, Security, Quality, Limitations etc.
User
Requirements are expressed in natural language.
Technical
requirements are expressed in structured language, which is used inside the
organization.
Design
description should be written in Pseudo code.
Format of Forms
and GUI screen prints.
Conditional and
mathematical notations for DFDs etc.
Software
Requirement Validation
After
requirement specifications are developed, the requirements mentioned in this document
are validated. User might ask for illegal, impractical solution or experts may interpret
the requirements incorrectly. This results in huge increase in cost if not
nipped in the bud. Requirements can be checked against following conditions -
If they can be
practically implemented
If they are
valid and as per functionality and domain of software
If there are any
ambiguities
If they are
complete
If they can be
demonstrated
Software
Requirements
Functional
Requirements
Requirements,
which are related to functional aspect of software fall into this category. They
define functions and functionality within and from the software system.
Search option
given to user to search from various invoices.
User should be
able to mail any report to management.
Users can be
divided into groups and groups can be given separate rights.
Should comply
business rules and administrative functions.
Software is
developed keeping downward compatibility intact.
Non-Functional
Requirements
Requirements,
which are not related to functional aspect of software, fall into this category.
They are implicit or expected characteristics of software, which users make
assumption of.
Security
Logging
Storage
Configuration
Performance
Cost
Interoperability
Flexibility
Disaster recovery
Accessibility
Concept of
system design
The
process of defining the entire requirements of a system such as the
architecture, modules, interface and design is called system design. We can say
that system design ranges from discussing about the system requirements to
product development. System development creates or alters the system so that
the processes, practices and methodologies are changed to develop the system. A
systematic approach is needed to manage the system requirements and design methodology.
System design can be classified as logical design and physical design. Logical design
represents the abstract dataflow while physical design represents the input and
output processes in the system.
The
various subsets of System Design:
1. Logical
Design
It
is the abstract representation of the data flow, inputs, and outputs of the
system. It explains the sources, destinations, data stores and data flows all
in a process that satisfies the user needs. The logical design of a system is prepared
while keeping the level of detail that virtually tells the information flow and
out of the system in mind. The data flow and ER diagrams are used respectively.
2.
Physical Design
The
process of actual input and output of the system is related to physical design.
The main criteria of physical design are to manage how the data is verified,
processed, and displayed as the result. It basically revolves around the
interface design, process design, and data design of the user.
3.
Architectural Design
It
is also called the high level of design that emphasizes the design of system
architecture. It explains the nature and root of the system.
4.
Detailed Design
It
follows the Architectural Design and emphasizes the development of every
subject.
Advantages
of system design
It eliminates
inconsistencies.
It speeds up the
process.
It makes the
life of the customer easier and simpler.
It provides a
lot of resources.
System
Design skills
Reliability
It means the
ability of a system to endure faults or problems to prevent failures or
complete shutdowns.
Scalability
Scalability is the
system’s ability to perform and give a reasonable performance in the situation
of heavy load.
Maintainability
This means writing
code that simply is understood and upgraded by someone who is not the original
author of the code.
Software
Quality Measures
1.
Portability:
A software device is said to be portable, if it can be freely made to work in various
operating system environments, in multiple machines, with other software products,
etc.
2.
Usability:
A software product has better usability if various categories of users can
easily invoke the functions of the product.
3.
Reusability:
A software product has excellent reusability if different modules of the product
can quickly be reused to develop new products.
4.
Correctness:
A software product is correct if various requirements as specified in the SRS document
have been correctly implemented.
5.
Maintainability: A software product is maintainable if bugs can be
easily corrected as and when they show up, new tasks can be easily added to the
product, and the functionalities of
the product can be
easily modified, etc.
6.
Functional suitability: A solution must correctly perform
functions that will satisfy all customer needs.
7.
Performance efficiency: A solution must have enough capacity and
computing power to operate correctly and without delays.
8.
Compatibility: A solution must provide interoperability, i.e. be
compatible with various operating systems, networks or devices.
9.
Reliability: A
solution must recover from faults without affecting user experience.
10.
Security:
A solution must provide impeccable data protection.
Software
Testing Approaches:
1. White
Box Testing:
It
is also called Glass Box, Clear Box, and Structural Testing. White Box Testing
is based on the application’s internal code structure. In white-box testing, an
internal perspective of the system, as well as programming skills, are used to
design test cases. This testing is usually done at the unit level.
2. Black
Box Testing:
It
is also called Behavioral/Specification-Based/Input-Output Testing. Black Box
Testing is a software testing method in which testers evaluate the
functionality of the software under test without looking at the internal code
structure.
Software
development models
The
software development models are the various processes or methodologies that are
being selected for the development of the project depending on the project’s
aims and goals. There are many development life cycle models that have been
developed in order to achieve different required objectives. The models specify
the various stages of the process and the order in which they are carried out.
Waterfall
model
Requirement
Gathering and analysis − All possible requirements of the system
to be developed are captured in this phase and documented in a requirement
specification document. System Design − The requirement
specifications from first phase are studied in this phase and the system design
is prepared. This system design helps in specifying hardware and system
requirements and helps in defining the overall system architecture.
Coding
and Unit Testing − With inputs from the system design, the
system is first developed in small programs called units, which are integrated
in the next phase. Each unit is developed and tested for its functionality,
which is referred to as Unit Testing.
Integration
and Testing −
All the units developed in the implementation phase are integrated into a
system after testing of each unit. Post integration the entire system is tested
for any faults and failures.
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.
Maintenance −
There are some issues which come up in the client environment. To fix those
issues, patches are released. Also to enhance the product some better versions
are released. Maintenance is done to deliver these changes in the customer
environment.
Advantages:
The requirements are simple and explicitly declared; they remain unchanged
during the Entire project development.
The start and
end points for each phase is fixed, which makes it easy to cover progress.
The release date for the complete product, as well as its final cost, can be
determined before development.
It gives easy to control and clarity for the customer due to a strict reporting
system.
Disadvantages:
This model
cannot accept the changes in requirements during development.
It becomes tough to go back to the phase. For example, if the application has
now shifted to the coding phase, and there is a change in requirement, It
becomes tough to go back and change it.
Since the testing done at a later stage, it does not allow identifying the
challenges and risks in the earlier phase, so the risk reduction strategy is
difficult to prepare.
Prototype
Model
1.
Requirements gathering and analysis
A
prototyping model starts with requirement analysis. In this phase, the
requirements of the system are defined in detail. During the process, the users
of the system are interviewed to know what their expectation from the system
is.
2. Quick
design
The
second phase is a preliminary design or a quick design. In this stage, a simple
design of the system is created. However, it is not a complete design. It gives
a brief idea of the system to the user. The quick design helps in developing
the prototype.
3.
Building Prototype
In
this phase, an actual prototype is designed based on the information gathered
from quick design. It is a small working model of the required system.
4.
Customer evaluation
In
this stage, the proposed system is presented to the client for an initial
evaluation. It helps to find out the strength and weakness of the working
model. Comment and suggestion are collected from the customer and provided to
the developer.
5.
Refining prototype
If
the user is not happy with the current prototype, you need to refine the
prototype according to the user's feedback and suggestions. This phase will not
over until all the requirements specified by the user are met. Once the user is
satisfied with the developed prototype, a final system is developed based on
the approved final prototype.
6.
Engineer product
Once
the final system is developed based on the final prototype, it is thoroughly
tested and deployed to production. The system undergoes routine maintenance for
minimizing downtime and prevents large-scale failures.
Advantages:
Helps team
member to communicate effectively
User
satisfaction exists because the customer can feel the product at a very early
stage.
There will be
hardly any chance of software rejection.
It helps you to
find out the missing functionality in the system.
It also
identifies the complex or difficult functions.
Encourages
innovation and flexible designing.
It is a
straightforward model, so it is easy to understand.
No need for
specialized experts to build the model
The prototype
serves as a basis for deriving a system specification.
The prototype
helps to gain a better understanding of the customer's needs.
Prototypes can
be changed and even discarded.
A prototype also
serves as the basis for operational specifications.
Prototypes may
offer early training for future users of the software system.
Disadvantages:
Prototyping is a
slow and time taking process.
Prototyping may
encourage excessive change requests.
Poor
documentation because the requirements of the customers are changing.
The client may lose interest in the final product when he or she is not happy
with the initial prototype.
Developers who want to build prototypes quickly may end up building
sub-standard development solutions.
Agile
Model
Phases of Agile
Model:
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.
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.
Advantages:
Customer
satisfaction by rapid, continuous delivery of useful software.
Working software
is delivered frequently (weeks rather than months).
Face-to-face
conversation is the best form of communication.
Close daily
cooperation between business people and developers.
Continuous
attention to technical excellence and good design.
Regular
adaptation to changing circumstances.
Even late
changes in requirements are welcomed
Disadvantages:
In case of some software deliverables, especially the large ones, it is
difficult to assess the effort required at the beginning of the software
development life cycle.
There is lack of
emphasis on necessary designing and documentation.
The project can easily get taken off track if the customer representative is
not clear what final outcome that they want.
Only senior programmers are capable of taking the kind of decisions required
during the development process. Hence it has no place for newbie programmers,
unless combined with experienced resources.
Comments
Post a Comment