Lecture Notes Software Engineering
Lecture Notes Software Engineering
Classification of Software
The software can be classified based on various criteria, including:
Purpose: Software can be classified as system software (e.g. operating
systems, device drivers) or application software (e.g. word processors,
games).
Platform: Software can be classified as native software (designed for a
specific operating system) or cross-platform software (designed to run on
multiple operating systems).
Deployment: Software can be classified as installed software (installed on
the user’s device) or cloud-based software (hosted on remote servers and
accessed via the internet).
License: Software can be classified as proprietary software (owned by a
single entity) or open-source software (available for free with the source
code accessible to the public).
Development Model: Software can be classified as traditional software
(developed using a waterfall model) or agile software (developed using an
iterative and adaptive approach).
Size: Software can be classified as small-scale software (designed for a
single user or small group) or enterprise software (designed for large
organizations).
User Interface: Software can be classified as Graphical User Interface
(GUI) software or Command-Line Interface (CLI) software.
These classifications are important for understanding the characteristics and
limitations of different types of software, and for selecting the best software
for a particular need.
Types of Software
The software is used extensively in several domains including hospitals, banks,
schools, defense, finance, stock markets, and so on. It can be categorized
into different types:
Based on Application
Based on Copyright
Based on Application
The software can be classified on the basis of the application. These are to be
done on this basis.
1. System Software
System Software is necessary to manage computer resources and support the
execution of application programs. Software like operating systems,
compilers, editors and drivers, etc., come under this category. A computer
cannot function without the presence of these. Operating systems are needed
to link the machine-dependent needs of a program with the capabilities of
the machine on which it runs. Compilers translate programs from high-level
language to machine language.
2. Application Software
Application software is designed to fulfill the user’s requirement by interacting
with the user directly. It could be classified into two major categories:-
generic or customized. Generic Software is software that is open to all and
behaves the same for all of its users. Its function is limited and not
customized as per the user’s changing requirements. However, on the other
hand, Customized software is the software products designed per the client’s
requirement, and are not available for all.
3. Networking and Web Applications Software
Networking Software provides the required support necessary for computers to
interact with each other and with data storage facilities. Networking software
is also used when software is running on a network of computers (such as
the World Wide Web). It includes all network management software, server
software, security and encryption software, and software to develop web-
based applications like HTML, PHP, XML, etc.
4. Embedded Software
This type of software is embedded into the hardware normally in the Read-
Only Memory (ROM) as a part of a large system and is used to support
certain functionality under the control conditions. Examples are software
used in instrumentation and control applications like washing machines,
satellites, microwaves, etc.
5. Reservation Software
A Reservation system is primarily used to store and retrieve information and
perform transactions related to air travel, car rental, hotels, or other
activities. They also provide access to bus and railway reservations, although
these are not always integrated with the main system. These are also used to
relay computerized information for users in the hotel industry, making a
reservation and ensuring that the hotel is not overbooked.
6. Business Software
This category of software is used to support business applications and is the
most widely used category of software. Examples are software for inventory
management, accounts, banking, hospitals, schools, stock markets, etc.
7. Entertainment Software
Education and Entertainment software provides a powerful tool for educational
agencies, especially those that deal with educating young children. There is a
wide range of entertainment software such as computer games, educational
games, translation software, mapping software, etc.
8. Artificial Intelligence Software
Software like expert systems, decision support systems, pattern recognition
software, artificial neural networks, etc. come under this category. They
involve complex problems which are not affected by complex computations
using non-numerical algorithms.
9. Scientific Software
Scientific and engineering software satisfies the needs of a scientific or
engineering user to perform enterprise-specific tasks. Such software is
written for specific applications using principles, techniques, and formulae
particular to that field. Examples are software like MATLAB, AUTOCAD,
PSPICE, ORCAD, etc.
10. Utility Software
The programs coming under this category perform specific tasks and are
different from other software in terms of size, cost, and complexity.
Examples are anti-virus software, voice recognition software, compression
programs, etc.
11. Document Management Software
Document Management Software is used to track, manage, and store
documents to reduce the paperwork. Such systems are capable of keeping a
record of the various versions created and modified by different users
(history tracking). They commonly provide storage, versioning, metadata,
security, as well as indexing and retrieval capabilities.
Based on Copyright
Classification of Software can be done based on copyright. These are stated as
follows:
1. Commercial Software
It represents the majority of software that we purchase from software
companies, commercial computer stores, etc. In this case, when a user buys
software, they acquire a license key to use it. Users are not allowed to make
copies of the software. The company owns the copyright of the program.
2. Shareware Software
Shareware software is also covered under copyright but the purchasers are
allowed to make and distribute copies with the condition that after testing
the software, if the purchaser adopts it for use, then they must pay for it. In
both of the above types of software, changes to the software are not
allowed.
3. Freeware Software
In general, according to freeware software licenses, copies of the software can
be made both for archival and distribution purposes but here, distribution
cannot be for making a profit. Derivative works and modifications to the
software are allowed and encouraged. Decompiling of the program code is
also allowed without the explicit permission of the copyright holder.
4. Public Domain Software
In the case of public domain software, the original copyright holder explicitly
relinquishes all rights to the software. Hence software copies can be made
both for archival and distribution purposes with no restrictions on
distribution. Modifications to the software and reverse engineering are also
allowed.
What is SDLC?
SDLC stands for software development life cycle. It is a process followed for
software building within a software organization. SDLC consists of a precise
plan that describes how to develop, maintain, replace, and enhance specific
software. The life cycle defines a method for improving the quality of software
and the all-around development process.
To this day, we have more than 50 recognized SDLC models in use. But None of
them is perfect, and each brings its favorable aspects and disadvantages for a
specific software development project or a team.
In this article, We’ve listed the top five most popular SDLC models below.
1. Waterfall Model
It is the fundamental model of the software development life cycle. This is a very
simple model. The waterfall model is not in practice anymore, but it is the
basis for all other SDLC models. Because of its simple structure, the waterfall
model is easier to use and provides a tangible output. In the waterfall model,
once a phase seems to be completed, it cannot be changed, and due to this less
flexible nature, the waterfall model is not in practice anymore.
2. Agile Model
The agile model was mainly designed to adapt to changing requests quickly. The
main goal of the Agile model is to facilitate quick project completion. The
agile model refers to a group of development processes. These processes have
some similar characteristics but also possess certain subtle differences among
themselves.
The Agile Model was primarily designed to help a project adapt quickly to
change requests. So, the main aim of the agile model is to facilitate quick
project completion. To accomplish this task, agility is required. Agility is
achieved by fitting the process to the project and removing activities that may
not be essential for a specific project. Also, anything that is a waste of time and
effort is avoided.
The Agile Model refers to a group of development processes. These processes
share some basic characteristics but do have certain subtle differences among
themselves.
Agile SDLC Models/Methods
Models: Crystal Agile methodology places a strong emphasis on fostering
effective communication and collaboration among team members, as well as
taking into account the human elements that are crucial for a successful
development process. This methodology is particularly beneficial for
projects with a high degree of uncertainty, where requirements tend to
change frequently.
Atern: This methodology is tailored for projects with moderate to high
uncertainty where requirements are prone to change frequently. Its clear-cut
roles and responsibilities focus on delivering working software in short time
frames. Governance practices set it apart and make it an effective approach
for teams and projects.
Feature-driven development: This approach is implemented by utilizing a
series of techniques, like creating feature lists, conducting model
evaluations, and implementing a design-by-feature method, to meet its goal.
This methodology is particularly effective in ensuring that the end product is
delivered on time and that it aligns with the requirements of the customer.
Scrum: This methodology serves as a framework for tackling complex
projects and ensuring their successful completion. It is led by a Scrum
Master, who oversees the process, and a Product Owner, who establishes the
priorities. The Development Team, accountable for delivering the software,
is another key player.
Extreme programming (XP): It uses specific practices like pair
programming, continuous integration, and test-driven development to
achieve these goals. Extreme programming is ideal for projects that have
high levels of uncertainty and require frequent changes, as it allows for
quick adaptation to new requirements and feedback.
Lean Development: It is rooted in the principles of lean manufacturing and
aims to streamline the process by identifying and removing unnecessary
steps and activities. This is achieved through practices such as continuous
improvement, visual management, and value stream mapping, which helps
in identifying areas of improvement and implementing changes accordingly.
Unified Process: Unified Process is a methodology that can be tailored to
the specific needs of any given project. It combines elements of both
waterfall and Agile methodologies, allowing for an iterative and incremental
approach to development. This means that the UP is characterized by a
series of iterations, each of which results in a working product increment,
allowing for continuous improvement and the delivery of value to the
customer.
All Agile methodologies discussed above share the same core values and
principles, but they may differ in their implementation and specific practices.
Agile development requires a high degree of collaboration and communication
among team members, as well as a willingness to adapt to changing
requirements and feedback from customers.
In the Agile model, the requirements are decomposed into many small parts that
can be incrementally developed. The Agile model adopts Iterative
development. Each incremental part is developed over an iteration. Each
iteration is intended to be small and easily manageable and can be completed
within a couple of weeks only. At a time one iteration is planned, developed,
and deployed to the customers. Long-term plans are not made.
Steps in the Agile Model
The agile model is a combination of iterative and incremental process models.
The steps involve in agile SDLC models are:
Requirement gathering
Design the Requirements
Construction / Iteration
Testing / Quality Assurance
Deployment
Feedback
3. Iterative Model
In the iterative model, each cycle results in a semi-developed but deployable
version; with each cycle, some requirements are added to the software, and the
final cycle results in the software with the complete requirement specification.
4. Spiral Model
The spiral model is one of the most crucial SDLC models that provides support
for risk handling. It has various spirals in its diagrammatic representation; the
number of spirals depends upon the type of project. Each loop in the spiral
structure indicates the Phases of the Spiral model.
The Spiral Model is a Software Development Life Cycle (SDLC) model that
provides a systematic and iterative approach to software development. It is
based on the idea of a spiral, with each iteration of the spiral representing a
complete software development cycle, from requirements gathering and
analysis to design, implementation, testing, and maintenance.
What Are the Phases of Spiral Model?
The Spiral Model is a risk-driven model, meaning that the focus is on managing
risk through multiple iterations of the software development process. It
consists of the following phases:
Planning: The first phase of the Spiral Model is the planning phase, where
the scope of the project is determined and a plan is created for the next
iteration of the spiral.
Risk Analysis: In the risk analysis phase, the risks associated with the
project are identified and evaluated.
Engineering: In the engineering phase, the software is developed based on
the requirements gathered in the previous iteration.
Evaluation: In the evaluation phase, the software is evaluated to determine
if it meets the customer’s requirements and if it is of high quality.
Planning: The next iteration of the spiral begins with a new planning phase,
based on the results of the evaluation.
The Spiral Model is often used for complex and large software development
projects, as it allows for a more flexible and adaptable approach to software
development. It is also well-suited to projects with significant uncertainty or
high levels of risk.
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.
Spiral Model
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-
Objectives determination and identify alternative
solutions: Requirements are gathered from the customers and the objectives
are identified, elaborated, and analyzed at the start of every phase. Then
alternative solutions possible for the phase are proposed in this quadrant.
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 the 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.
Risk Handling in Spiral Model
A risk is any adverse situation that might affect the successful completion of a
software project. The most important feature of the spiral model is handling
these unknown risks after the project has started. Such risk resolutions are
easier done by developing a prototype. The spiral model supports coping with
risks by providing the scope to build a prototype at every phase of software
development.
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.
Why Spiral Model is called Meta Model?
The Spiral model is called a Meta-Model because it subsumes all the other SDLC
models. For example, a single loop spiral actually represents the Iterative
Waterfall Model. The spiral model incorporates the stepwise approach of
the Classical Waterfall Model. The spiral model uses the approach of
the Prototyping Model by building a prototype at the start of each phase as a
risk-handling technique. Also, the spiral model can be considered as
supporting the Evolutionary model – the iterations along the spiral can be
considered as evolutionary levels through which the complete system is built.
Advantages of the Spiral Model
Below are some advantages of the Spiral Model.
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 a later
phase can be incorporated accurately by using this model.
Customer Satisfaction: Customers 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.
Iterative and Incremental Approach: The Spiral Model provides an
iterative and incremental approach to software development, allowing for
flexibility and adaptability in response to changing requirements or
unexpected events.
Emphasis on Risk Management: The Spiral Model places a strong
emphasis on risk management, which helps to minimize the impact of
uncertainty and risk on the software development process.
Improved Communication: The Spiral Model provides for regular
evaluations and reviews, which can improve communication between the
customer and the development team.
Improved Quality: The Spiral Model allows for multiple iterations of the
software development process, which can result in improved software
quality and reliability.
Disadvantages of the Spiral Model
Below are some main disadvantages of the spiral model.
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.
Too much dependability on Risk Analysis: The successful completion of
the project is very much dependent on Risk Analysis. Without very highly
experienced experts, it is going to be a failure to develop a project using this
model.
Difficulty in time management: As the number of phases is unknown at the
start of the project, time estimation is very difficult.
Complexity: The Spiral Model can be complex, as it involves multiple
iterations of the software development process.
Time-Consuming: The Spiral Model can be time-consuming, as it requires
multiple evaluations and reviews.
Resource Intensive: The Spiral Model can be resource-intensive, as it
requires a significant investment in planning, risk analysis, and evaluations.
The most serious issue we face in the cascade model is that taking a long length
to finish the item, and the product became obsolete. To tackle this issue, we
have another methodology, which is known as the Winding model or spiral
model. The winding model is otherwise called the cyclic model.
When To Use the Spiral Model?
When a project is vast in software engineering, a spiral model is utilized.
A spiral approach is utilized when frequent releases are necessary.
When it is appropriate to create a prototype
When evaluating risks and costs is crucial
The spiral approach is beneficial for projects with moderate to high risk.
The SDLC’s spiral model is helpful when requirements are complicated and
ambiguous.
If modifications are possible at any moment
When committing to a long-term project is impractical owing to shifting
economic priorities.
5. V-Shaped Model
The V-shaped model is executed in a sequential manner in V-shape. Each stage
or phase of this model is integrated with a testing phase. After every
development phase, a testing phase is associated with it, and the next phase
will start once the previous phase is completed, i.e., development & testing. It
is also known as the verification or validation model.
The V-Model is a software development life cycle (SDLC) model that provides a
systematic and visual representation of the software development process. It is
based on the idea of a “V” shape, with the two legs of the “V” representing the
progression of the software development process from requirements gathering
and analysis to design, implementation, testing, and maintenance.
The V-Model is a linear and sequential model that consists of the following
phases:
1. Requirements Gathering and Analysis: The first phase of the V-Model is the
requirements gathering and analysis phase, where the customer’s
requirements for the software are gathered and analyzed to determine the
scope of the project.
2. Design: In the design phase, the software architecture and design are
developed, including the high-level design and detailed design.
3. Implementation: In the implementation phase, the software is actually built
based on the design.
4. Testing: In the testing phase, the software is tested to ensure that it meets the
customer’s requirements and is of high quality.
5. Deployment: In the deployment phase, the software is deployed and put into
use.
6. Maintenance: In the maintenance phase, the software is maintained to ensure
that it continues to meet the customer’s needs and expectations.
7. The V-Model is often used in safety-critical systems, such as aerospace and
defense systems, because of its emphasis on thorough testing and its ability
to clearly define the steps involved in the software development process.
Verification: It involves static analysis technique (review) done without
executing code. It is the process of evaluation of the product development
phase to find whether specified requirements meet.
Validation: It involves dynamic analysis technique (functional, non-functional),
testing done by executing code. Validation is the process to evaluate the
software after the completion of the development phase to determine whether
software meets the customer expectations and requirements.
So V-Model contains Verification phases on one side of the Validation phases on
the other side. Verification and Validation phases are joined by coding phase in
V-shape. Thus it is called V-Model.
Design Phase:
Unit Testing: Unit Test Plans are developed during module design phase.
These Unit Test Plans are executed to eliminate bugs at code or unit level.
Integration testing: After completion of unit testing Integration testing is
performed. In integration testing, the modules are integrated and the system
is tested. Integration testing is performed on the Architecture design phase.
This test verifies the communication of modules among themselves.
System Testing: System testing test the complete application with its
functionality, inter dependency, and communication.It tests the functional
and non-functional requirements of the developed application.
User Acceptance Testing (UAT): UAT is performed in a user environment
that resembles the production environment. UAT verifies that the delivered
system meets user’s requirement and system is ready for use in real world.
Industrial Challenge: As the industry has evolved, the technologies have
become more complex, increasingly faster, and forever changing, however,
there remains a set of basic principles and concepts that are as applicable today
as when IT was in its infancy.
This is a highly disciplined model and Phases are completed one at a time.
V-Model is used for small projects where project requirements are clear.
Simple and easy to understand and use.
This model focuses on verification and validation activities early in the life
cycle thereby enhancing the probability of building an error-free and good
quality product.
It enables project management to track progress accurately.
Clear and Structured Process: The V-Model provides a clear and structured
process for software development, making it easier to understand and
follow.
Emphasis on Testing: The V-Model places a strong emphasis on testing,
which helps to ensure the quality and reliability of the software.
Improved Traceability: The V-Model provides a clear link between the
requirements and the final product, making it easier to trace and manage
changes to the software.
Better Communication: The clear structure of the V-Model helps to improve
communication between the customer and the development team.
Disadvantages:
Key Highlights
SWOT is used to help assess the internal and external factors that contribute to a
company’s relative advantages and disadvantages.
A SWOT analysis is generally used in conjunction with other assessment
frameworks, like PESTEL and Porter’s 5-Forces.
Findings from a SWOT analysis will help inform model assumptions for the
analyst community.
Examples
Strengths
Strengths may be any number of areas or characteristics where a company excels
and has a competitive advantage over its peers. Advantages may be more
qualitative in nature and therefore difficult to measure (like a great corporate
culture, strong brand recognition, proprietary technology, etc.), or they may be
more quantitative (like best-in-class margins, above-average inventory
turnover, category-leading return on equity, etc.).
Weaknesses
Weaknesses are areas or characteristics where a business is at a
competitive disadvantage relative to its peers. Like strengths, these can also be
more qualitative or quantitative. Examples include inexperienced management,
high employee turnover, low (or declining) margins, and high (or excessive)
use of debt as a funding source.
Opportunities
The “Opportunities” section should highlight external factors that represent
potential growth or improvement areas for a business. Consider opportunities
like a growing total addressable market (TAM), technological advancements
that might help improve efficiency, or changes in social norms that are creating
new markets or new sub-segments of existing markets.
Threats
Threats are external forces that represent risks to a business and its ability to
operate. The categories tend to be similar to the “Opportunities” section, but
directionally opposite. Consider examples like an industry in decline (which is
the same as a decreasing TAM), technological innovation that could disrupt the
existing business and its operations, or evolving social norms that make
existing product offerings less attractive to a growing number of consumers.
How to Conduct a SWOT Analysis
A SWOT analysis is rarely completed in isolation; it generally makes up one part
of a broader business analysis. And while it is itself an assessment framework,
a SWOT analysis is also an effective tool to help summarize other findings.
For example, an analyst can’t really assess a company’s strengths and
weaknesses without first understanding the business and its industry. They may
wish to leverage other tools and frameworks in order to accomplish this,
including:
Hax’s Delta Model – This will help to understand competitive positioning.
Ansoff’s Matrix – This will help visualize the relative risk of a management
team’s growth strategies.
Financial ratio analysis – This will help identify trends (year-over-year), as well
as a firm’s relative performance (using benchmarking data).
The same is true for external factors – opportunities and threats. It’s nearly
impossible to understand these without first considering:
The industry life cycle – Does the business operate in a growing, mature, or
declining industry? This itself informs both opportunities and threats.
An analysis of the broader business environment or the industry itself – Think
frameworks like PESTEL or Porter’s 5 Forces.
What is a SWOT Analysis Used For?
A SWOT analysis is used differently by different stakeholders.
For example, a management team will use the framework to support strategic
planning and risk management. SWOT helps them visualize the firm’s relative
advantages and disadvantages in order to better understand where and how the
organization should allocate resources, either towards growth or risk reduction
initiatives.
The analyst community, on the other hand, may seek to understand (and
quantify) strengths, weaknesses, opportunities, and threats in order to assess
the business more completely.
Consider that findings from a SWOT analysis may help inform model
assumptions among analysts. It could be an equity researcher trying to estimate
the fair market value of a company’s shares, or a credit analyst looking to
better understand a borrower’s creditworthiness.
In general, the SWOT framework is considered by many to be one of the most
useful tools available for strategic planning and business analysis.
Functional Requirements: These are the requirements that the end user
specifically demands as basic facilities that the system should offer. It can be a
calculation, data manipulation, business process, user interaction, or any other
specific functionality which defines what function a system is likely to
perform. All these functionalities need to be necessarily incorporated into the
system as a part of the contract. These are represented or stated in the form of
input to be given to the system, the operation performed and the output
expected. They are basically the requirements stated by the user which one can
see directly in the final product, unlike the non-functional requirements. For
example, in a hospital management system, a doctor should be able to retrieve
the information of his patients. Each high-level functional requirement may
involve several interactions or dialogues between the system and the outside
world. In order to accurately describe the functional requirements, all scenarios
must be enumerated. There are many ways of expressing functional
requirements e.g., natural language, a structured or formatted language with no
rigorous syntax and formal specification language with proper syntax.
Functional Requirements in Software Engineering are also called Functional
Specification.
Non-functional requirements: These are basically the quality constraints that the
system must satisfy according to the project contract. Nonfunctional
requirements, not related to the system functionality, rather define how the
system should perform The priority or extent to which these factors are
implemented varies from one project to other. They are also called non-
behavioral requirements. They basically deal with issues like:
• Portability
• Security
• Maintainability
• Reliability
• Scalability
• Performance
• Reusability
• Flexibility
NFR’s are classified into following types:
• Interface constraints
• Performance constraints: response time, security, storage space, etc.
• Operating constraints
• Life cycle constraints: maintainability, portability, etc.
• Economic constraints
The process of specifying non-functional requirements requires the knowledge of
the functionality of the system, as well as the knowledge of the context within
which the system will operate.
They are divided into two main categories: Execution qualities like security and
usability, which are observable at run time. Evolution qualities like testability,
maintainability, extensibility, and scalability that embodied in the static
structure of the software system.
Domain requirements: Domain requirements are the requirements which are
characteristic of a particular category or domain of projects. Domain
requirements can be functional or nonfunctional. Domain requirements
engineering is a continuous process of proactively defining the requirements
for all foreseeable applications to be developed in the software product line.
The basic functions that a system of a specific domain must necessarily exhibit
come under this category. For instance, in an academic software that maintains
records of a school or college, the functionality of being able to access the list
of faculty and list of students of each grade is a domain requirement. These
requirements are therefore identified from that domain model and are not user
specific.
Other common classifications of software requirements can be:
1. User requirements: These requirements describe what the end-user wants from
the software system. User requirements are usually expressed in natural
language and are typically gathered through interviews, surveys, or user
feedback.
2. System requirements: These requirements specify the technical characteristics
of the software system, such as its architecture, hardware requirements,
software components, and interfaces. System requirements are typically
expressed in technical terms and are often used as a basis for system design.
3. Business requirements: These requirements describe the business goals and
objectives that the software system is expected to achieve. Business
requirements are usually expressed in terms of revenue, market share,
customer satisfaction, or other business metrics.
4. Regulatory requirements: These requirements specify the legal or regulatory
standards that the software system must meet. Regulatory requirements may
include data privacy, security, accessibility, or other legal compliance
requirements.
5. Interface requirements: These requirements specify the interactions between
the software system and external systems or components, such as databases,
web services, or other software applications.
6. Design requirements: These requirements describe the technical design of the
software system. They include information about the software architecture,
data structures, algorithms, and other technical aspects of the software.
By classifying software requirements, it becomes easier to manage, prioritize,
and document them effectively. It also helps ensure that all important aspects
of the system are considered during the development process.
Advantages of classifying software requirements include:
1. Better organization: Classifying software requirements helps organize them
into groups that are easier to manage, prioritize, and track throughout the
development process.
2. Improved communication: Clear classification of requirements makes it easier
to communicate them to stakeholders, developers, and other team members. It
also ensures that everyone is on the same page about what is required.
3. Increased quality: By classifying requirements, potential conflicts or gaps can
be identified early in the development process. This reduces the risk of errors,
omissions, or misunderstandings, leading to higher quality software.
4. Improved traceability: Classifying requirements helps establish traceability,
which is essential for demonstrating compliance with regulatory or quality
standards.
Disadvantages of classifying software requirements include:
1. Complexity: Classifying software requirements can be complex, especially if
there are many stakeholders with different needs or requirements. It can also be
time-consuming to identify and classify all the requirements.
2. Rigid structure: A rigid classification structure may limit the ability to
accommodate changes or evolving needs during the development process. It
can also lead to a siloed approach that prevents the integration of new ideas or
insights.
3. Misclassification: Misclassifying requirements can lead to errors or
misunderstandings that can be costly to correct later in the development
process.
What is SRS?
A software requirements specification (SRS) is a description of a software
system to be developed. It lays out functional and non-functional requirements
and may include a set of use cases that describe user interactions that the
software must provide.
The output of requirement engineering is the requirement specification document
(SRD). it can be considered as a contract between the development team and
the customer which can be also used to resolve any disagreement that may
arise in future.
it is the specification for the particular software product , program or set of
programs that perform certain function. it serves a number of purposes
depending upon who is writing it. the srs document must be written in two
phase:
First SRS should be written by the customer and second SRS should be written
by the developer. first srs is used to define an expectations of the user and
second srs is written for different purpose and serves as a contract document
between customer and developer.
Why SRS?
In order to fully understand one’s project, it is very important that they come up
with an SRS listing out their requirements, how are they going to meet them
and how will they complete the project. It helps the team to save upon their
time as they are able to comprehend how are going to go about the project.
Doing this also enables the team to find out about the limitations and risks
early on.
The following is a sample SRS that I wrote for one of my projects.
SRS’s characteristics include:
Correct
Unambiguous
Complete
Consistent
Ranked for importance and/or stability
Verifiable
Modifiable
Traceable
Project Plan: MeetUrMate
1. Introduction
This document lays out a project plan for the development of the “MeetUrMate”
open source repository system by Anurag Mishra.
The intended readers of this document are current and future developers working
on “MeetUrMate” and the sponsors of the project. The plan will include, but is
not restricted to, a summary of the system functionality, the scope of the
project from the perspective of the “MeetUrMate” team (me and my mentors),
scheduling and delivery estimates, project risks, and how those risks will be
mitigated, the process by which I will develop the project, and metrics and
measurements that will be recorded throughout the project.
2. Overview
In today’s world, owning to the heavy workload on the employees, they are
having a huge amount of stress in their lives. Even with the presence of so
many gadgets in and around them, they are not able to relieve their stress. I aim
to develop an application that would enable them to share the thing of their
liking and meet the person who has the same passion as theirs. For eg. If
someone wants to share their art, they can share it through the platform, if
someone wants to sing any song, they can record it and share the same. They
can also share videos (with some funny commentary in the background), share
mysteries that other people can solve, post any question. Through my platform,
I’ll enable them to meet people who share common interests and passions, chat
with them, and have some fun.
2.1 Customers
Everyone. Anyone can use this application ranging from a child to an old-age
person.
2.2 Functionality
Users should be able to register through their already existing accounts.
They should be able to share snaps/videos/snaps.
People should be able to like and comment on any post. One person can
follow another person who shares common interests and likings which
would enable them to find mates apart from their usual friend circle.
Each user can have his/her profile picture, status
People can post mysteries and other people can solve the mysteries.
Users will get points for the popularity of their posts/the number of
mysteries they solve.
Add own funny commentary on any video
Post any questions regarding their interests and people can answer.
P.S. Italic points features can be inculcated later.
2.3 Platform
It will be launched both as a Web-based application and a Mobile app for
Android.
2.4 Development Responsibility
I, Anurag Mishra, would be developing the software and I am responsible for the
creation of the Database and all the other related kinds of stuff.
3. Goals and Scopes
Users should be able to register through their already existing accounts.
They should be able to share snaps/videos/snaps.
People should be able to like and comment on any post.
One person can follow another person who shares common interests and
likings which would enable them to find mates apart from their usual friend
circle.
Each user can have his/her profile picture, status.
People can post mysteries and other people can solve the mysteries.
Users will get points for the popularity of their posts/the number of
mysteries they solve.
4. Deliverables
I’ll deliver the following during the course of development:
Feature specification
Product design
Test plan
Development document
Source code
5. Risk Management
5.1 Risk Identification
Following will be the risk involved in my project:
1) People are already using Facebook to find friends. So, what would be the real
cause that would motivate them to join my application?
5.2 Risk Mitigation
Even though most of the users would already be using Facebook, our platform
would still offer them many things that are not there on Facebook. For eg.
1. They don’t meet people who share common interests and passions as much.
Our application would enable them to meet people (apart from usual friends)
who share common interests and passions on a more frequent basis.
2. Users of FB cannot share songs on the go that they have sung whereas on
our app they can do that on the go.
3. People can post mysteries/cases and other people can solve them. Moreover,
people will get points in case they solve the mysteries or on the basis of the
popularity of their posts.
4. More importantly, people need not register for my application, instead, they
can log in using their already existing accounts of Google/Facebook.
Thus, I think that there is a considerable amount of difference between
Facebook/Instagram/Twitter and my application and it would attract many
people.
6. Scheduling and Estimates
Milestone Description Release Date Release
Iteration
(Front-end development)
(Back-end)
back-end)
1. Correctness:
User review is used to ensure the correctness of requirements stated in the
SRS. SRS is said to be correct if it covers all the requirements that are
actually expected from the system.
2. Completeness:
Completeness of SRS indicates every sense of completion including the
numbering of all the pages, resolving the to be determined parts to as much
extent as possible as well as covering all the functional and non-functional
requirements properly.
3. Consistency:
Requirements in SRS are said to be consistent if there are no conflicts
between any set of requirements. Examples of conflict include differences in
terminologies used at separate places, logical conflicts like time period of
report generation, etc.
4. Unambiguousness:
A SRS is said to be unambiguous if all the requirements stated have only 1
interpretation. Some of the ways to prevent unambiguousness include the
use of modelling techniques like ER diagrams, proper reviews and buddy
checks, etc.
6. Modifiability:
SRS should be made as modifiable as possible and should be capable of
easily accepting changes to the system to some extent. Modifications should
be properly indexed and cross-referenced.
7. Verifiability:
A SRS is verifiable if there exists a specific technique to quantifiably
measure the extent to which every requirement is met by the system. For
example, a requirement starting that the system must be user-friendly is not
verifiable and listing such requirements should be avoided.
8. Traceability:
One should be able to trace a requirement to design component and then to
code segment in the program. Similarly, one should be able to trace a
requirement to the corresponding test cases.
9. Design Independence:
There should be an option to choose from multiple design alternatives for
the final system. More specifically, the SRS should not include any
implementation details.
10.Testability:
A SRS should be written in such a way that it is easy to generate test cases
and test plans from the document.
8. Testability: A good SRS document can serve as a basis for test cases and
verification, which can ensure that the software meets the requirements and
specifications.
10.Reduced Rework: A good SRS document can help to identify and resolve
issues early in the development process, which can reduce the need for
rework and improve the overall quality of the software.
Disadvantages of having a poorly written SRS include:
1. Confusion and misunderstandings between stakeholders and developers, as
the requirements are not clearly defined or are vague
Increased rework and change requests, as the SRS does not accurately
capture the requirements of the software system
2. Reduced quality of the final software system, as a poorly written SRS can
result in requirements being missed or not fully met
3. Reduced stakeholder satisfaction, as a poorly written SRS does not
accurately capture the needs of the business and its users
4. Reduced traceability and verifiability, as a poorly written SRS can’t be
traced to other documents and artifacts and its requirements can’t be tested
and validated.
5. It is important to note that, regardless of the quality of the SRS, gathering
and validating requirements is an iterative process, that should be
continuously reviewed and updated throughout the software development
process.
6. Time-consuming: Creating a good SRS document can be a time-consuming
process, especially for complex software projects, which can delay the
development process.
7. Changes and Updates: Changes or updates to the SRS document can cause
delays in the software development process and can be difficult to manage.
A data store will reside at the center of this architecture and is accessed
frequently by the other components that update, add, delete or modify the
data present within the store.
The figure illustrates a typical data centered style. The client software access
a central repository. Variation of this approach are used to transform the
repository into a blackboard when data related to client or data of interest for
the client change the notifications to client software.
This data-centered architecture will promote integrability. This means that
the existing components can be changed and new client components can be
added to the architecture without the permission or concern of other clients.
Data can be passed among clients using blackboard mechanism.
Advantage of Data centered architecture
Repository of data is independent of clients
Client work independent of each other
It may be simple to add additional clients.
Modification can be very easy
Data centered architecture
2] Data flow architectures:
This kind of architecture is used when input data is transformed into output
data through a series of computational manipulative components.
The figure represents pipe-and-filter architecture since it uses both pipe and
filter and it has a set of components called filters connected by lines.
Pipes are used to transmitting data from one component to the next.
Each filter will work independently and is designed to take data input of a
certain form and produces data output to the next filter of a specified form.
The filters don’t require any knowledge of the working of neighboring
filters.
If the data flow degenerates into a single line of transforms, then it is termed
as batch sequential. This structure accepts the batch of data and then applies
a series of sequential components to transform it.
Advantages of Data Flow architecture
It encourages upkeep, repurposing, and modification.
With this design, concurrent execution is supported.
The disadvantage of Data Flow architecture
It frequently degenerates to batch sequential system
Data flow architecture does not allow applications that require greater user
engagement.
It is not easy to coordinate two different but related streams
Data Flow architecture
3] Call and Return architectures: It is used to create a program that is easy
to scale and modify. Many sub-styles exist within this category. Two of them
are explained below.
A number of different layers are defined with each layer performing a well-
defined set of operations. Each layer will do some operations that becomes
closer to machine instruction set progressively.
At the outer layer, components will receive the user interface operations and
at the inner layers, components will perform the operating system
interfacing(communication and coordination with OS)
Intermediate layers to utility services and application software functions.
One common example of this architectural style is OSI-ISO (Open Systems
Interconnection-International Organisation for Standardisation)
communication system.
Layered architecture: