Se CHP 4
Se CHP 4
Software engineering encompasses a broad range of practices aimed at developing high-quality software
efficiently. Here are some key software engineering practices:
These practices are essential for developing software that is reliable, maintainable, scalable, and secure.
However, the specific practices adopted may vary depending on the project's requirements, technology stack,
and organizational context.
Software engineering plays a crucial role in modern society for several reasons:
Creation of High-Quality Software: Software engineering principles ensure that software products are
developed systematically, with an emphasis on quality. This results in reliable, efficient, and
maintainable software systems that meet user requirements.
Efficiency and Productivity: By employing best practices and methodologies, software engineering
helps teams work more efficiently. Techniques like agile development and DevOps streamline the
development process, allowing teams to deliver software faster without compromising quality.
Cost-Effectiveness: Effective software engineering practices help minimize development costs by
reducing rework, identifying defects early in the development lifecycle, and optimizing resource
utilization.
Scalability: Properly engineered software can accommodate growth and scale to handle increasing
demands. Scalability is essential in today's rapidly evolving technological landscape, where software
systems need to adapt to changing requirements and user bases.
Maintainability and Upgradability: Well-designed software is easier to maintain and update over time.
Software engineering principles emphasize modular design, clean code, and documentation, making it
easier for developers to understand, modify, and extend existing systems.
Security: Security is paramount in software engineering. By following secure coding practices and
incorporating security measures throughout the development process, software engineers can
mitigate vulnerabilities and protect sensitive data from unauthorized access or cyber threats.
User Satisfaction: Software engineering focuses on understanding user needs and preferences, leading
to the development of user-friendly interfaces and intuitive software experiences. Ultimately, this
results in higher user satisfaction and adoption rates.
Innovation: Software engineering drives innovation by enabling the development of new technologies,
applications, and solutions to address emerging challenges and opportunities. From artificial
intelligence and machine learning to virtual reality and blockchain, software engineers play a key role
in shaping the future of technology.
Compliance and Regulation: In many industries, software must adhere to strict regulatory
requirements and compliance standards. Software engineering ensures that systems are developed in
accordance with legal and industry standards, reducing the risk of non-compliance and potential legal
issues.
Global Connectivity: Software engineering facilitates global connectivity by enabling the development
of communication tools, social media platforms, e-commerce platforms, and other applications that
connect people and businesses across geographical boundaries.
Overall, software engineering is essential for creating robust, efficient, and secure software solutions that
drive innovation, enhance productivity, and improve the quality of life for people around the world.
There are several basic principles of good software engineering approach that are commonly followed by
software developers and engineers to produce high-quality software. Some of these principles include:
1. Modularity: Breaking down the software into smaller, independent, and reusable components or modules.
This makes the software easier to understand, test, and maintain.
2. Abstraction: Hiding the implementation details of a module or component and exposing only the
necessary information. This makes the software more flexible and easier to change.
3. Encapsulation: Wrapping the data and functions of a module or component into a single unit, and
providing controlled access to that unit. This helps to protect the data and functions from unauthorized
access and modification.
4. DRY principle (Don’t Repeat Yourself): Avoiding duplication of code and data in the software. This makes
the software more maintainable and less error-prone.
5. KISS principle (Keep It Simple, Stupid): Keeping the software design and implementation as simple as
possible. This makes the software more understandable, testable, and maintainable.
6. YAGNI (You Ain’t Gonna Need It): Avoiding adding unnecessary features or functionality to the software.
This helps to keep the software focused on the essential requirements and makes it more maintainable.
7. SOLID principles: A set of principles that guide the design of software to make it more maintainable,
reusable, and extensible. This includes the Single Responsibility Principle, Open/Closed Principle, Liskov
Substitution Principle, Interface Segregation Principle, and Dependency Inversion Principle.
8. Test-driven development: Writing automated tests before writing the code, and ensuring that the code
passes all tests before it is considered complete. This helps to ensure that the software meets the
requirements and specifications.
By following these principles, software engineers can develop software that is more reliable, maintainable,
and extensible.It’s also important to note that these principles are not mutually exclusive, and often work
together to improve the overall quality of the software.
Communication Practices:
Effective communication practices are vital in software engineering to ensure successful collaboration,
understanding, and alignment among team members, stakeholders, and clients. Here are some key
communication practices commonly employed in software engineering:
Clear Documentation: Documenting project requirements, design decisions, code, and processes is
crucial for maintaining clarity and consistency throughout the software development lifecycle. Clear
and well-organized documentation helps developers understand the system, facilitates knowledge
transfer, and ensures continuity in case of team changes.
Regular Meetings: Regular meetings, such as daily stand-ups, sprint planning sessions, and
retrospectives, allow team members to discuss progress, challenges, and priorities. These meetings
promote transparency, alignment, and collaboration among team members and stakeholders.
Effective Use of Tools: Leveraging communication and collaboration tools such as project management
software, version control systems (e.g., Git), issue tracking systems (e.g., Jira), and communication
platforms (e.g., Slack, Microsoft Teams) can enhance communication efficiency and enable real-time
collaboration among distributed teams.
Active Listening: Active listening involves fully concentrating, understanding, responding, and
remembering what others are saying. It's essential for fostering empathy, trust, and effective
communication within software development teams. Encouraging open dialogue and soliciting
feedback from team members fosters a culture of mutual respect and continuous improvement.
User Stories and Requirements Workshops: Collaboratively defining user stories and requirements
through workshops and discussions involving developers, designers, product owners, and other
stakeholders ensures that everyone has a shared understanding of project objectives and user needs.
This collaborative approach helps mitigate misunderstandings and ensures that the final product meets
stakeholder expectations.
Iterative Feedback Loops: Embracing an iterative development approach allows for frequent feedback
loops, where stakeholders can provide feedback on intermediate deliverables (e.g., prototypes,
demos) early in the development process. This iterative feedback helps validate assumptions, identify
issues, and make necessary adjustments before significant resources are invested.
Effective Written Communication: Clear and concise written communication, including emails, chat
messages, and documentation, is essential for conveying complex ideas, discussing technical details,
and documenting decisions. Writing with clarity and precision reduces the risk of misunderstandings
and promotes efficient collaboration.
Empathy and Respect: Building a culture of empathy and respect within software development teams
fosters trust, psychological safety, and effective communication. Understanding and appreciating each
team member's perspective, background, and expertise encourages open communication and
enhances team cohesion.
Conflict Resolution: Conflicts and disagreements are inevitable in any collaborative environment.
Effective conflict resolution strategies, such as active listening, mediation, and compromise, help
address conflicts constructively and prevent them from escalating, fostering a positive and productive
work environment.
Continuous Improvement: Encouraging a culture of continuous improvement and learning within
software development teams promotes ongoing reflection, experimentation, and adaptation. Regular
retrospectives and post-mortems provide opportunities to reflect on past experiences, identify areas
for improvement, and implement actionable changes to enhance communication and collaboration
practices.
By prioritizing effective communication practices, software engineering teams can overcome challenges,
foster collaboration, and deliver successful outcomes that meet stakeholder expectations and contribute to
the overall success of software projects.
Planning Practices:
Planning practices in software engineering are crucial for the successful delivery of software projects. These
practices help teams organize their efforts, allocate resources effectively, set realistic goals, and manage risks.
Here are some key planning practices in software engineering:
Requirement Analysis: This involves understanding and documenting the needs and expectations of
stakeholders. It includes gathering requirements, analyzing them for feasibility and completeness, and
prioritizing them based on their importance to the project's success.
Project Scope Definition: Defining the scope of the project helps in setting boundaries and determining
what will be included in the project deliverables. A well-defined scope prevents scope creep, which can
lead to project delays and cost overruns.
Estimation Techniques: Estimating project effort, time, and cost is essential for planning and
budgeting. Various estimation techniques such as expert judgment, analogous estimation, parametric
estimation, and three-point estimation can be used to forecast project resources accurately.
Scheduling: Developing a project schedule involves breaking down the project into smaller tasks or
work packages, estimating the duration and dependencies of each task, and creating a timeline for
their completion. Techniques like Gantt charts, PERT charts, and Kanban boards can be used for
scheduling.
Resource Allocation: Allocating resources such as human resources, hardware, software, and budget
to different project activities ensures that the project has the necessary resources to meet its
objectives. Resource leveling and resource smoothing techniques can help in optimizing resource
allocation.
Risk Management: Identifying, analyzing, and mitigating risks is essential for minimizing the impact of
potential threats to the project's success. Risk management involves identifying risks, assessing their
likelihood and impact, developing risk response strategies, and monitoring risks throughout the project
lifecycle.
Communication Planning: Establishing effective communication channels and protocols ensures that
project stakeholders are kept informed about the project's progress, changes, and issues.
Communication plans define who needs to be communicated with, what information needs to be
shared, and how often communication should occur.
Change Management: Change is inevitable in software projects, and having a change management
process in place helps in assessing, prioritizing, and implementing changes while minimizing disruption
to the project. Change control boards or change review boards can be used to evaluate and approve
changes.
Quality Assurance Planning: Planning for quality involves defining quality standards, metrics, and
processes to ensure that the software meets the required quality levels. Quality assurance plans may
include activities such as code reviews, testing strategies, and quality audits.
Contingency Planning: Anticipating and planning for unforeseen events or disruptions helps in
maintaining project progress and minimizing the impact of risks. Contingency plans outline alternative
courses of action to be taken in case of emergencies or unexpected changes.
By incorporating these planning practices into software engineering processes, teams can improve project
outcomes, enhance stakeholder satisfaction, and increase the likelihood of project success.
Modelling Practices:
Modeling practices in software engineering involve creating abstract representations of software systems,
their components, behaviors, and interactions. These models help software engineers understand, design,
analyze, and communicate various aspects of a software project. Here are some common modeling practices
in software engineering:
Requirements Modeling: This involves capturing and representing the functional and non-functional
requirements of the software system. Techniques such as use case diagrams, user stories, and
requirement traceability matrices are used to document and organize requirements.
Architectural Modeling: Architectural modeling focuses on representing the high-level structure of a
software system. This includes identifying components, their interactions, and the relationships
between them. Architectural diagrams such as UML (Unified Modeling Language) component
diagrams, package diagrams, and deployment diagrams are commonly used for architectural modeling.
Design Modeling: Design modeling involves creating detailed representations of individual
components and their interactions within the software system. Techniques such as class diagrams,
sequence diagrams, activity diagrams, and state diagrams are used to describe the static and dynamic
aspects of the system's design.
Behavioral Modeling: Behavioral modeling focuses on capturing the dynamic behavior of the software
system in response to external stimuli. Techniques such as sequence diagrams, state diagrams, and
activity diagrams are used to model the flow of control, data, and events within the system.
Data Modeling: Data modeling involves representing the structure and relationships of the data used
by the software system. Techniques such as entity-relationship diagrams (ERDs) and class diagrams are
used to model data entities, attributes, and their associations.
User Interface (UI) Modeling: UI modeling focuses on designing and visualizing the user interface of
the software system. Techniques such as wireframes, mockups, and UI flow diagrams are used to
represent the layout, navigation, and interaction elements of the user interface.
Testing and Quality Assurance Modeling: Testing and quality assurance modeling involve creating
models to plan, design, and execute testing activities. Techniques such as test case diagrams, test
coverage matrices, and defect tracking models are used to manage the testing process and ensure
software quality.
Simulation and Analysis Modeling: Simulation and analysis modeling involve using mathematical and
computational techniques to predict and evaluate the performance, reliability, and scalability of the
software system. Techniques such as simulation models, queuing models, and reliability models are
used for performance analysis and optimization.
Documentation Modeling: Documentation modeling involves creating models to document various
aspects of the software system, including requirements, design decisions, architecture, and user
documentation. Techniques such as documentation templates, version control systems, and wikis are
used to manage and maintain documentation throughout the software development lifecycle.
Domain-Specific Modeling: Domain-specific modeling involves creating specialized models and
languages tailored to specific application domains or industries. Techniques such as domain-specific
languages (DSLs) and domain-specific modeling languages (DSMLs) are used to capture domain-specific
concepts, rules, and constraints more effectively.
Overall, modeling practices in software engineering play a vital role in improving communication, facilitating
design decisions, managing complexity, and ensuring the quality and reliability of software systems
throughout the development lifecycle.
Construction Practices:
In software engineering, construction practices refer to the activities involved in turning design specifications
into a working software product. These practices encompass coding, testing, debugging, and integration. Here
are some key construction practices in software engineering:
Coding Standards: Establishing coding standards ensures consistency and readability across the
codebase. Consistent coding styles make it easier for developers to understand and maintain the code.
Coding standards may include naming conventions, formatting rules, and guidelines for code
organization.
Modularization: Breaking down the software into smaller, manageable modules improves
maintainability and reusability. Modularization allows developers to work on isolated components
independently, facilitating easier testing, debugging, and collaboration.
Code Reviews: Conducting code reviews is an essential practice for identifying defects, ensuring
adherence to coding standards, and sharing knowledge among team members. Code reviews promote
collaboration and help maintain code quality throughout the development process.
Unit Testing: Writing unit tests to verify individual components or units of code ensures that they
function correctly in isolation. Unit testing helps catch bugs early in the development cycle, reduces
the risk of regressions, and facilitates refactoring.
Integration Testing: Integration testing verifies the interactions between different modules or
components of the software. It ensures that these components work together as expected when
integrated into the larger system. Integration testing helps detect interface issues, interoperability
issues, and other integration-related issues.
Continuous Integration (CI): CI is a practice where developers frequently integrate their code changes
into a shared repository, and automated builds and tests are run automatically. CI helps identify
integration issues early, ensures code stability, and accelerates the development process by providing
rapid feedback.
Continuous Deployment (CD): CD extends CI by automatically deploying code changes to production or
staging environments after passing automated tests. CD helps streamline the release process, reduce
manual errors, and deliver new features or updates to users quickly and reliably.
Refactoring: Refactoring involves restructuring existing code to improve its design, readability, and
maintainability without changing its external behavior. Refactoring eliminates code smells, reduces
technical debt, and ensures that the codebase remains clean and flexible over time.
Version Control: Using version control systems like Git enables developers to track changes,
collaborate effectively, and manage codebase versions. Version control facilitates code sharing,
branching, merging, and rollback, ensuring the integrity and traceability of the software development
process.
Documentation: Documenting code, APIs, and system architecture is crucial for understanding the
software's functionality, usage, and design rationale. Clear and comprehensive documentation helps
onboard new developers, troubleshoot issues, and maintain the software effectively.
By incorporating these construction practices into the software development process, teams can produce
high-quality software products that are reliable, maintainable, and scalable.
Software deployment
Software deployment in software engineering refers to the process of making a software application
available for use in a specific environment, typically the production environment where end-users
interact with the application. It involves packaging the application, configuring the deployment
environment, and releasing the software for use. Here's an overview of the software deployment
process:
Environment Setup: Before deploying the software, it's essential to set up the target environment
where the application will run. This includes configuring servers, databases, network infrastructure,
and other necessary components. It's crucial to ensure that the deployment environment matches the
development and testing environments to avoid compatibility issues.
Packaging: The software application is packaged into a deployable unit, which may include executable
binaries, configuration files, libraries, dependencies, and other resources needed to run the
application. Common packaging formats include Docker containers, virtual machine images, ZIP files, or
installer packages.
Version Control: It's important to track the versions of the software being deployed using version
control systems like Git. Version control helps manage changes, track history, and ensure that the
correct version of the software is deployed.
Configuration Management: Configuration files and settings must be managed properly to ensure
consistency across different deployment environments. Configuration management tools like Ansible,
Puppet, or Chef automate the provisioning and configuration of servers and infrastructure
components.
Testing: Before deployment, the software should undergo thorough testing to ensure that it functions
as expected in the production environment. This may include functional testing, performance testing,
security testing, and compatibility testing across different platforms and devices.
Deployment Strategy: There are several deployment strategies to choose from based on the specific
requirements of the application and the organization's preferences:
1. Manual Deployment: In manual deployment, software updates are deployed manually by
copying files to the target servers and configuring the environment manually. While simple,
manual deployment is prone to human errors and may be time-consuming for large-scale
applications.
2. Automated Deployment: Automated deployment involves using continuous
integration/continuous deployment (CI/CD) pipelines to automate the deployment process.
CI/CD tools like Jenkins, GitLab CI/CD, or Travis CI automate the building, testing, and
deployment of software updates, streamlining the release process and reducing the risk of
errors.
3. Rolling Deployment: In a rolling deployment, software updates are gradually rolled out to a
subset of servers or instances at a time, while maintaining availability and minimizing
downtime. This approach allows for smooth transitions and enables quick rollback in case of
issues.
4. Blue-Green Deployment: Blue-green deployment involves maintaining two identical production
environments (blue and green), with one serving live traffic while the other is updated with
new software releases. Once the update is successful, traffic is switched to the updated
environment, minimizing downtime and risk.
5. Canary Deployment: Canary deployment involves releasing new software updates to a small
subset of users or servers first, then gradually expanding the rollout based on feedback and
monitoring metrics. Canary deployments help identify issues early and mitigate risks before
deploying to the entire user base.
Monitoring and Rollback: After deployment, it's essential to monitor the application's performance,
availability, and user experience in the production environment. Monitoring tools like Prometheus,
Grafana, or Datadog provide real-time insights into system health and performance metrics. If issues
arise, a rollback mechanism should be in place to revert to a previous stable version quickly.
Post-Deployment Tasks: Once the software is deployed, there may be additional post-deployment
tasks, such as updating documentation, notifying users about new features or changes, and performing
data migrations or database schema updates if necessary.
By following best practices and implementing efficient deployment strategies, software engineering teams can
ensure smooth, reliable, and automated deployment processes, enabling rapid and frequent releases while
maintaining the stability and quality of the software application.
Requirements Engineering Process in Software Engineering
Requirements Engineering is the process of identifying, eliciting, analyzing, specifying, validating, and
managing the needs and expectations of stakeholders for a software system. In this article, we’ll learn about
its process, advantages, and disadvantages.
What is Requirements Engineering?
A systematic and strict approach to the definition, creation, and verification of requirements for a software
system is known as requirements engineering. To guarantee the effective creation of a software product, the
requirements engineering process entails several tasks that help in understanding, recording, and managing
the demands of stakeholders.
Requirements Engineering Process
Requirements Engineering Process
1. Feasibility Study
2. Requirements elicitation
3. Requirements specification
4. Requirements for verification and validation
5. Requirements management
1. Feasibility Study
The feasibility study mainly concentrates on below five mentioned areas below. Among these Economic
Feasibility Study is the most important part of the feasibility analysis and the Legal Feasibility Study is less
considered feasibility analysis.
1. Technical Feasibility: In Technical Feasibility current resources both hardware software along required
technology are analyzed/assessed to develop the project. This technical feasibility study reports whether
there are correct required resources and technologies that will be used for project development. Along
with this, the feasibility study also analyzes the technical skills and capabilities of the technical team,
whether existing technology can be used or not, whether maintenance and up-gradation are easy or not
for the chosen technology, etc.
2. Operational Feasibility: In Operational Feasibility degree of providing service to requirements is
analyzed along with how easy the product will be to operate and maintain after deployment. Along with
this other operational scopes are determining the usability of the product, Determining suggested solution
by the software development team is acceptable or not, etc.
3. Economic Feasibility: In the Economic Feasibility study cost and benefit of the project are analyzed.
This means under this feasibility study a detailed analysis is carried out will be cost of the project for
development which includes all required costs for final development hardware and software resources
required, design and development costs operational costs, and so on. After that, it is analyzed whether the
project will be beneficial in terms of finance for the organization or not.
2. Requirements Elicitation
It is related to the various ways used to gain knowledge about the project domain and requirements. The
various sources of domain knowledge include customers, business manuals, the existing software of the same
type, standards, and other stakeholders of the project. The techniques used for requirements elicitation
include interviews, brainstorming, task analysis, Delphi technique, prototyping, etc. Some of these are
discussed here. Elicitation does not produce formal models of the requirements understood. Instead, it widens
the domain knowledge of the analyst and thus helps in providing input to the next stage.
Requirements elicitation is the process of gathering information about the needs and expectations of
stakeholders for a software system. This is the first step in the requirements engineering process and it is
critical to the success of the software development project. The goal of this step is to understand the problem
that the software system is intended to solve and the needs and expectations of the stakeholders who will use
the system.
Several techniques can be used to elicit requirements, including:
Interviews: These are one-on-one conversations with stakeholders to gather information about their
needs and expectations.
Surveys: These are questionnaires that are distributed to stakeholders to gather information about their
needs and expectations.
Focus Groups: These are small groups of stakeholders who are brought together to discuss their needs and
expectations for the software system.
Observation: This technique involves observing the stakeholders in their work environment to gather
information about their needs and expectations.
Prototyping: This technique involves creating a working model of the software system, which can be used
to gather feedback from stakeholders and to validate requirements.
It’s important to document, organize, and prioritize the requirements obtained from all these techniques to
ensure that they are complete, consistent, and accurate.
3. Requirements Specification
This activity is used to produce formal software requirement models. All the requirements including the
functional as well as the non-functional requirements and the constraints are specified by these models in
totality. During specification, more knowledge about the problem may be required which can again trigger the
elicitation process. The models used at this stage include ER diagrams, data flow diagrams(DFDs), function
decomposition diagrams(FDDs), data dictionaries, etc.
Requirements specification is the process of documenting the requirements identified in the analysis step in a
clear, consistent, and unambiguous manner. This step also involves prioritizing and grouping the requirements
into manageable chunks.
The goal of this step is to create a clear and comprehensive document that describes the requirements for the
software system. This document should be understandable by both the development team and the
stakeholders.
Several types of requirements are commonly specified in this step, including
1. Functional Requirements: These describe what the software system should do. They specify the
functionality that the system must provide, such as input validation, data storage, and user interface.
2. Non-Functional Requirements: These describe how well the software system should do it. They specify
the quality attributes of the system, such as performance, reliability, usability, and security.
3. Constraints: These describe any limitations or restrictions that must be considered when developing
the software system.
4. Acceptance Criteria: These describe the conditions that must be met for the software system to be
considered complete and ready for release.
To make the requirements specification clear, the requirements should be written in a natural language and
use simple terms, avoiding technical jargon, and using a consistent format throughout the document. It is also
important to use diagrams, models, and other visual aids to help communicate the requirements effectively.
Once the requirements are specified, they must be reviewed and validated by the stakeholders and
development team to ensure that they are complete, consistent, and accurate.
4. Requirements Verification and Validation
Verification: It refers to the set of tasks that ensures that the software correctly implements a specific
function.
Validation: It refers to a different set of tasks that ensures that the software that has been built is traceable to
customer requirements. If requirements are not validated, errors in the requirement definitions would
propagate to the successive stages resulting in a lot of modification and rework. The main steps for this
process include:
1. The requirements should be consistent with all the other requirements i.e. no two requirements should
conflict with each other.
2. The requirements should be complete in every sense.
3. The requirements should be practically achievable.
Reviews, buddy checks, making test cases, etc. are some of the methods used for this.
Requirements verification and validation (V&V) is the process of checking that the requirements for a software
system are complete, consistent, and accurate and that they meet the needs and expectations of the
stakeholders. The goal of V&V is to ensure that the software system being developed meets the requirements
and that it is developed on time, within budget, and to the required quality.
1. Verification is checking that the requirements are complete, consistent, and accurate. It involves reviewing
the requirements to ensure that they are clear, testable, and free of errors and inconsistencies. This can
include reviewing the requirements document, models, and diagrams, and holding meetings and
walkthroughs with stakeholders.
2. Validation is the process of checking that the requirements meet the needs and expectations of the
stakeholders. It involves testing the requirements to ensure that they are valid and that the software
system being developed will meet the needs of the stakeholders. This can include testing the software
system through simulation, testing with prototypes, and testing with the final version of the software.
3. Verification and Validation is an iterative process that occurs throughout the software development
life cycle. It is important to involve stakeholders and the development team in the V&V process to ensure
that the requirements are thoroughly reviewed and tested.
It’s important to note that V&V is not a one-time process, but it should be integrated and continue throughout
the software development process and even in the maintenance stage.
5. Requirements Management
Requirement management is the process of analyzing, documenting, tracking, prioritizing, and agreeing on the
requirement and controlling the communication with relevant stakeholders. This stage takes care of the
changing nature of requirements. It should be ensured that the SRS is as modifiable as possible to incorporate
changes in requirements specified by the end users at later stages too. Modifying the software as per
requirements in a systematic and controlled manner is an extremely important part of the requirements
engineering process.
Requirements management is the process of managing the requirements throughout the software
development life cycle, including tracking and controlling changes, and ensuring that the requirements are still
valid and relevant. The goal of requirements management is to ensure that the software system being
developed meets the needs and expectations of the stakeholders and that it is developed on time, within
budget, and to the required quality.
Several key activities are involved in requirements management, including:
1. Tracking and controlling changes: This involves monitoring and controlling changes to the requirements
throughout the development process, including identifying the source of the change, assessing the impact
of the change, and approving or rejecting the change.
2. Version control: This involves keeping track of different versions of the requirements document and
other related artifacts.
3. Traceability: This involves linking the requirements to other elements of the development process,
such as design, testing, and validation.
4. Communication: This involves ensuring that the requirements are communicated effectively to all
stakeholders and that any changes or issues are addressed promptly.
5. Monitoring and reporting: This involves monitoring the progress of the development process and
reporting on the status of the requirements.
Requirements management is a critical step in the software development life cycle as it helps to ensure that
the software system being developed meets the needs and expectations of stakeholders and that it is
developed on time, within budget, and to the required quality. It also helps to prevent scope creep and to
ensure that the requirements are aligned with the project goals.
Depending upon information gathered after interaction, SRS is developed which describes requirements of
software that may include changes and modifications that is needed to be done to increase quality of product
and to satisfy customer’s demand.
Introduction
Purpose of this Document – At first, main aim of why this document is necessary and what’s purpose of
document is explained and described.
Scope of this document – In this, overall working and main objective of document and what value it will
provide to customer is described and explained. It also includes a description of development cost and
time required.
Overview – In this, description of product is explained. It’s simply summary or overall review of product.
General description
In this, general functions of product which includes objective of user, a user characteristic, features, benefits,
about why its importance is mentioned. It also describes features of user community.
Functional Requirements
In this, possible outcome of software system which includes effects due to operation of program is fully
explained. All functional requirements which may include calculations, data processing, etc. are placed in a
ranked order. Functional requirements specify the expected behavior of the system-which outputs should be
produced from the given inputs. They describe the relationship between the input and output of the system.
For each functional requirement, detailed description all the data inputs and their source, the units of
measure, and the range of valid inputs must be specified.
Interface Requirements
In this, software interfaces which mean how software program communicates with each other or users either
in form of any language, code, or message are fully described and explained. Examples can be shared memory,
data streams, etc.
Performance Requirements
In this, how a software system performs desired functions under specific condition is explained. It also
explains required time, required memory, maximum error rate, etc. The performance requirements part of an
SRS specifies the performance constraints on the software system. All the requirements relating to the
performance characteristics of the system must be clearly specified. There are two types of performance
requirements: static and dynamic. Static requirements are those that do not impose constraint on the
execution characteristics of the system. Dynamic requirements specify constraints on the execution behaviour
of the system.
Design Constraints
In this, constraints which simply means limitation or restriction are specified and explained for design team.
Examples may include use of a particular algorithm, hardware and software limitations, etc. There are a
number of factors in the client’s environment that may restrict the choices of a designer leading to design
constraints such factors include standards that must be followed resource limits, operating environment,
reliability and security requirements and policies that may have an impact on the design of the system. An SRS
should identify and specify all such constraints.
Non-Functional Attributes
In this, non-functional attributes are explained that are required by software system for better performance.
An example may include Security, Portability, Reliability, Reusability, Application compatibility, Data integrity,
Scalability capacity, etc.
Preliminary Schedule and Budget
In this, initial version and budget of project plan are explained which include overall time duration required
and overall cost required for development of project.
Appendices
In this, additional information like references from where information is gathered, definitions of some specific
terms, acronyms, abbreviations, etc. are given and explained.
Uses of SRS document
Development team require it for developing product according to the need.
Test plans are generated by testing group based on the describe external behaviour.
Maintenance and support staff need it to understand what the software product is supposed to do.
Project manager base their plans and estimates of schedule, effort and resources on it.
customer rely on it to know that product they can expect.
As a contract between developer and customer.
in documentation purpose.
Use-Case Model
The Use-case model is defined as a model which is used to show how users interact with the system in order
to solve a problem. As such, the use case model defines the user's objective, the interactions between the
system and the user, and the system's behavior required to meet these objectives.
Various model elements are contained in use-case model, such as actors, use cases, and the association
between them.
We use a use-case diagram to graphically portray a subset of the model in order to make the communication
simpler. There will regularly be a numerous use-case diagram which is related to the given model, each
demonstrating a subset of the model components related to a specific purpose. A similar model component
might be appearing on a few use-case diagrams; however, each use-case should be consistent. If, in order to
handle the use-case model, tools are used then this consistency restriction is automated so that any variations
to the component of the model (changing the name, for instance) will be reflected automatically on each use-
case diagram, which shows that component.
Basic Use-Case Diagram Symbols and Notations
There are following use-case diagram symbols and notations:
System
With the help of the rectangle, we can draw the boundaries of the system, which includes use-cases. We need
to put the actors outside the system's boundaries.
Use-Case
With the help of the Ovals, we can draw the use-cases. With the verb we have to label the ovals in order to
represent the functions of the system.
Actors
Actors mean the system's users. If one system is the actor of the other system, then with the actor stereotype,
we have to tag the actor system.
Relationships
With the simple line we can represent relationships between an actor and use cases. For relationships
between use-case, we use arrows which are labeled either "extends" or "uses". The "extends" relationship
shows the alternative options under the specific use case. The "uses" relationship shows that single use-case is
required to accomplish a job.
Use-Cases