Requirement Engineering
Requirement Engineering
1. Product Requirements
Product requirements specify what the software product must do to fulfill its purpose and
meet user expectations. They focus on the features and functionalities that the end product
should offer. These requirements describe the system's behavior, performance, usability, and
other characteristics that are directly visible to users and stakeholders.
● Functional Requirements: These define specific features, such as “The system must
allow users to log in with a username and password” or “The software should calculate
monthly sales reports.”
● Non-functional Requirements: These define qualities or constraints of the system,
such as “The system should load within 3 seconds” (performance) or “The system must
ensure data security with encryption” (security).
● Interface Requirements: These specify how the system will interact with other systems,
hardware, or users, such as “The software must support integration with third-party
payment gateways.”
2. Process Requirements
Process requirements specify how the software development process itself should be
conducted. They focus on the practices, tools, and methodologies that need to be used to
create the software, ensuring the project is managed effectively and that quality standards are
met. Process requirements help in defining the framework and rules for development, testing,
deployment, and maintenance.
Process requirements help ensure that the development process is organized, consistent, and
aligned with the organization's standards, ultimately supporting the successful delivery of the
product requirements.
Summary
Together, these requirements ensure that the right product is built and that it’s built in the right
way.
1. Functional Requirements
Functional requirements describe what the system should do. They focus on the specific
actions, tasks, or functions that the software needs to perform to meet user needs. Essentially,
these requirements define the features and behaviors of the system.
Functional requirements are usually defined in response to business needs and user goals, and
they are often detailed in a Software Requirements Specification (SRS) document. These
requirements are essential because they directly impact the end-user experience, and they
need to be clear, complete, and testable to ensure that the software fulfills its intended purpose.
1. User Authentication: The system must allow users to log in using a username and
password.
2. Search Feature: The application should enable users to search for products by name or
category.
3. Order Processing: The system should allow users to place orders and process
payments.
4. Notifications: The software should notify users of changes in their account status via
email.
5. Data Validation: The system must ensure that entered data meets certain validation
rules (e.g., email format for email fields).
● Describes what the system should do (e.g., “The system must generate a report of
daily sales”).
● Interacts with the user or other systems (e.g., integrations, user inputs).
● Often defined as “use cases” or “user stories” (e.g., “As a user, I want to be able to
add items to my cart”).
● Should be testable: There should be a way to verify if the requirement is met.
Functional requirements are critical as they outline the core capabilities of the software and
ensure that it performs the actions for which it was designed.
2. Non-Functional Requirements
Non-functional requirements describe how the system should perform rather than what it
should do. They define the quality attributes of the system and outline constraints on its
operation. These requirements are often known as "quality attributes" and help determine the
usability, reliability, performance, and scalability of the system.
1. Performance: The system must handle 10,000 concurrent users without slowing down.
2. Scalability: The application should support additional servers and databases as the
user base grows.
3. Reliability: The system should be available 99.9% of the time (uptime requirement).
4. Usability: The system interface should be easy to navigate and accessible to users with
disabilities.
5. Security: Sensitive data, such as passwords, must be encrypted and stored securely.
● Describes how the system performs or operates under certain conditions (e.g., “The
system should load within 2 seconds”).
● Focuses on quality attributes such as speed, security, reliability, and usability.
● Constraints on the system rather than features or functionalities (e.g., “The system
should not allow more than three failed login attempts”).
● Defines performance metrics and standards that help ensure a high-quality
experience.
Both functional and non-functional requirements are essential for a successful software project.
Functional requirements are necessary to ensure that the system does what it’s supposed to
do, fulfilling user needs and business goals. Without them, the software lacks purpose and fails
to serve its users.
Non-functional requirements, on the other hand, ensure that the software operates efficiently,
reliably, and securely. They influence user satisfaction, operational stability, and maintainability,
which are vital for long-term success. A system with excellent functionality but poor
non-functional attributes (e.g., slow performance, frequent downtime) is likely to frustrate users
and be unsustainable.
Emergent Properties
In software requirement engineering, emergent properties are characteristics of a software
system that arise from the interaction and combination of individual system components. They
are properties that cannot be attributed to any single part of the system on its own but are the
result of how the system's components work together as a whole.
1. System-Wide: Emergent properties apply to the system as a whole and depend on the
way components interact. They are not properties of any single module or component.
2. Complexity-Driven: They often appear in complex systems where multiple components
work together, making them challenging to predict from the properties of individual
components.
3. Holistic: Emergent properties emphasize the idea that "the whole is greater than the
sum of its parts." They are only evident when all the parts function together.
1. Performance: This refers to how fast or efficiently the system responds to user actions,
processes data, or completes tasks. Performance depends on how components work
together; for example, how quickly data flows between the database, business logic, and
UI layers affects overall response time.
2. Reliability: Reliability is the ability of the system to consistently perform its intended
functions without failure. Even if individual components are reliable, the overall reliability
of the system depends on component interactions, error handling, fault tolerance, and
recovery mechanisms.
3. Scalability: Scalability is the ability of the system to handle increased loads by adding
resources, like more users or larger datasets. It depends on interactions between
components such as databases, servers, and network infrastructure.
4. Usability: Usability refers to how easy and intuitive it is for users to interact with the
system. It’s not just about the interface design but also about how components like the
database and backend logic support smooth interactions.
5. Security: Security is an emergent property as it depends on how the system manages
data access, handles user authentication, secures communication channels, and
implements permissions and encryption. Secure behavior depends on various system
elements working in harmony to prevent vulnerabilities.
6. Maintainability: Maintainability is the ease with which developers can update, fix, or
improve the system. It depends on factors like code organization, modularity,
documentation, and how well the system’s components interact without introducing
unnecessary complexity.
7. Interoperability: This is the ability of the system to work well with other systems.
Interoperability emerges from consistent standards, protocols, and APIs that allow
seamless data exchange and interaction with external systems.
Emergent properties are essential in software engineering because they affect the overall
system behavior and quality in ways that are often difficult to predict. Here are some reasons
why emergent properties matter:
Emergent properties are often complex to manage due to the following reasons:
1. Interdependency of Components: Since these properties emerge from interactions
between components, even minor changes in one part of the system can affect the
overall system behavior. Predicting the impact of such changes is challenging.
2. Difficulty in Testing: Testing emergent properties can be complicated. For example,
while a module can be tested for individual functionality, testing system performance or
reliability under various loads often requires simulation of real-world conditions, which
can be costly and time-consuming.
3. Unpredictability: Some emergent properties only reveal themselves during system
operation under real-world conditions. Issues with reliability or performance may not be
apparent until the system is in production and handling real users.
4. Balance and Trade-offs: Improving one emergent property may negatively affect
another. For example, adding complex security measures can sometimes slow down
performance or make usability harder. Software engineers need to find a balance that
aligns with user needs and project goals.
1. Web Application with High Traffic: A social media platform may perform well with a
small number of users but encounter performance issues as user activity scales up.
Here, performance and scalability are emergent properties affected by how the
database, cache, server, and network interact under heavy load.
2. E-commerce Platform Security: An e-commerce system handling sensitive customer
information needs to be secure. Security is an emergent property based on encryption,
access control, network security, and secure data storage working together to prevent
unauthorized access.
3. Healthcare Software Reliability: In healthcare software, reliability is crucial because
downtime or errors could risk patient safety. Reliable behavior emerges from
redundancy, error handling, and robust communication between software components.
4. Automobile Embedded Systems: In a car’s embedded system, the safety of the
vehicle is an emergent property. Safety depends on the interaction between various
systems (e.g., braking, steering, and stability control) to ensure the car behaves correctly
in different scenarios.
1. Modular Design: Breaking the system into independent, well-defined modules can
make it easier to understand and manage interactions between components, helping to
control emergent behavior.
2. Robust Testing: Conducting performance, scalability, and security tests under
real-world conditions can help identify potential issues in emergent properties before
deployment.
3. Clear Standards and Protocols: Establishing consistent coding standards, design
patterns, and protocols can ensure that components interact in predictable ways,
minimizing unexpected emergent behaviors.
4. Continuous Monitoring: Monitoring the system in production allows engineers to detect
and respond to issues with emergent properties, like performance degradation or
security vulnerabilities, as they arise.
5. Documentation of Dependencies: Documenting component dependencies and
interactions can help engineers understand how changes in one part of the system might
affect emergent properties across the system.
Summary
Emergent properties are a vital aspect of software systems, representing qualities that arise
only when all components interact as a whole. They include attributes like performance,
security, reliability, and scalability, which are crucial for a successful, sustainable software
system. By understanding and managing emergent properties, software engineers can ensure
that the system not only meets its functional requirements but also performs optimally and
provides a quality experience for users.
Quantifiable Requirements
In software requirements engineering, quantifiable requirements refer to requirements that
can be measured, tested, and verified objectively. They are specifications written in a way that
allows stakeholders to verify if the requirements have been met. Making requirements
quantifiable helps ensure that both developers and clients have a clear understanding of what is
expected, and it provides a basis for measuring project success.
1. Use Specific Metrics: Where possible, include specific metrics (e.g., "2 seconds,"
"99.9% uptime," "1,000 transactions per second") rather than vague terms like "fast" or
"responsive."
2. Avoid Subjective Language: Avoid words like "user-friendly," "efficient," or "intuitive,"
unless these terms are further defined with measurable criteria.
3. Define Testing Methods: Specify how the requirement will be tested to ensure all
stakeholders agree on how the system’s compliance with the requirement will be
measured.
4. Set Realistic Targets: Ensure that the targets set in quantifiable requirements are
realistic and achievable based on the project's scope, budget, and timeline.
Summary
1. System Requirements
System requirements define the overall functionality, constraints, and capabilities of the entire
system, encompassing both hardware and software components. They cover the system as a
whole and focus on how different parts of the system work together to meet the needs of
stakeholders.
System requirements are typically broader and address aspects like performance, security,
hardware compatibility, and interoperability with other systems.
● Alignment with Business Goals: System requirements ensure that the end product
aligns with the overall business objectives and satisfies stakeholder needs.
● Foundation for Design and Development: These requirements guide both software
and hardware design choices.
● Helps with Integration: System requirements clarify how different components (both
internal and external) interact, ensuring compatibility and interoperability.
2. Software Requirements
Software requirements are more detailed and specific than system requirements. They describe
the behavior, functions, and features of the software itself, typically focusing on what the
software should accomplish to fulfill system requirements.
Software requirements are derived from the system requirements and are usually defined after
the high-level system requirements are outlined. They specify the exact tasks that the software
component of the system should perform.
● Guides Development and Testing: Software requirements are the foundation for
writing code and testing software functionality.
● Improves Clarity and Reduces Rework: Clearly defined software requirements reduce
misunderstandings, which can minimize costly changes later.
● Ensures Consistency with System Requirements: Software requirements ensure that
the software component fulfills the broader system requirements.
Scope Entire system, including both Only the software component of the
hardware and software system
Purpose Ensures all components of the Ensures that the software fulfills its
system work together to meet goals role in the system
Suppose we’re building an online banking system. Here’s how system and software
requirements might be defined:
● System Requirements:
○ Performance: The system should support 1,000 concurrent users.
○ Security: The system should ensure secure data transfer through SSL
encryption.
○ Interface: The system must be compatible with mobile and web platforms.
● Software Requirements (for the banking application):
○ Functional: Users should be able to view their account balance, transfer funds,
and view transaction history.
○ Non-functional: The app should respond within 3 seconds to user actions.
○ Security: The software should require two-factor authentication for logging in.
○ UI: The software should display account details in a clear, readable format.
Conclusion
System and software requirements are both essential in the software development lifecycle, but
they serve different purposes. System requirements focus on the overall structure and operation
of the entire system, ensuring that the hardware, software, and external systems all work
together effectively. Software requirements, on the other hand, are specific to the software
component, providing the detailed specifications that developers need to build the application.
Both types of requirements are crucial for guiding the development process, ensuring alignment
with business goals, and enabling effective testing and validation of the final product. Properly
defined system and software requirements set clear expectations, reduce development risks,
and contribute to a successful project outcome.