What is Requirements Engineering(1)
What is Requirements Engineering(1)
What is Requirements Engineering(1)
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.
1. Feasibility Study
2. Requirements elicitation
3. Requirements specification
4. Requirements for verification and validation
5. Requirements management
1. Technical Feasibility
o Focus: Evaluates the technical capabilities required for the project.
o Questions Addressed:
Does the required technology exist?
Does the team have the necessary skills?
Are there integration or scalability issues with current systems?
o Outcome: Determines whether the project is technically doable.
2. Economic Feasibility (Cost-Benefit Analysis)
o Focus: Evaluates the financial viability of the project.
o Questions Addressed:
What are the initial and operational costs?
Will the project provide enough benefits to justify the cost?
What is the expected ROI (Return on Investment)?
o Outcome: Determines if the project is financially worthwhile.
3. Legal Feasibility
o Focus: Ensures compliance with laws and regulations.
o Questions Addressed:
Are there legal restrictions (software licenses, intellectual property)?
Does the project comply with data protection and privacy laws (e.g.,
GDPR)?
Are there industry-specific regulations to consider?
o Outcome: Identifies any legal obstacles to the project.
4. Operational Feasibility
o Focus: Assesses how well the proposed software fits within current workflows
and user expectations.
o Questions Addressed:
Will users accept and use the system?
Will it improve or hinder current operations?
What support and training will users require?
o Outcome: Evaluates the likelihood of the system being successfully adopted
and used.
5. Schedule Feasibility
o Focus: Determines if the project can be completed within a reasonable
timeframe.
o Questions Addressed:
Can the project meet deadlines?
Are the resources available to complete the project on time?
What are the critical milestones?
o Outcome: Helps determine if the project timeline is realistic.
6. Market Feasibility (for commercial projects):
o Focus: Assesses the demand and viability of the software in the marketplace.
o Questions Addressed:
Is there a market for this product?
Who are the potential customers?
What is the competition?
o Outcome: Assesses the potential for market success.
Conclusion
Or
A feasibility study in software engineering is a critical process that evaluates the practicality
of a proposed software project. It helps stakeholders decide whether or not to proceed with
the project by assessing multiple factors that determine its success. The main goal is to ensure
that the project is viable and beneficial before committing significant resources.
1. Technical Feasibility
Purpose: To evaluate whether the technology required for the project exists and is available
within the organization.
Considerations:
o Availability of software tools, platforms, and hardware.
o Skills of the development team.
o Compatibility with existing systems.
o Scalability and integration challenges.
3. Legal Feasibility
Purpose: To ensure that the project complies with all relevant laws and regulations.
Considerations:
o Software licenses and intellectual property rights.
o Data privacy laws (e.g., GDPR).
o Industry-specific regulations (e.g., healthcare, finance).
4. Operational Feasibility
Purpose: To evaluate whether the proposed system will function as intended and meet the
user’s needs.
Considerations:
o User acceptance.
o Workflow compatibility.
o The learning curve for users and the support required.
Purpose: To determine whether the project can be completed within the desired timeframe.
Considerations:
o Estimated development time.
o Project deadlines and critical milestones.
o Availability of resources within the timeframe.
6. Market Feasibility
Purpose: To assess the demand for the software in the market (especially relevant for
commercial software projects).
Considerations:
o Target market size and competition.
o Potential customers and their needs.
o Pricing and positioning strategies.
1. Define Project Scope: Clearly outline the project’s goals, requirements, and expectations.
2. Gather Requirements: Collect both functional and non-functional requirements from
stakeholders.
3. Analyze Data: Assess the gathered data and analyze each feasibility aspect (technical,
economic, legal, etc.).
4. Prepare Feasibility Report: Summarize findings and recommendations in a detailed report.
5. Decision-Making: Present the study’s results to stakeholders for a decision on whether to
move forward.
Feasibility studies are typically conducted during the early stages of the software
development lifecycle (SDLC) and serve as a guide for planning and project initiation.
Requirement Elicitation:
The goal of requirement elicitation is to ensure that the requirements are complete, clear, and
aligned with the business goals, so that the system can be designed and developed to meet the
users' needs effectively.
1. Identifying Stakeholders:
o Stakeholders are anyone who has an interest in or is affected by the system. This
includes end-users, customers, project managers, developers, and even regulatory
bodies.
o Identifying and engaging the right stakeholders is critical to capturing all relevant
requirements.
2. Understanding the Domain:
o This involves gaining knowledge of the business domain and understanding the
environment in which the system will operate.
o Analysts may need to study existing systems, review documents, and learn about
organizational processes.
3. Gathering Requirements:
o Gathering all potential requirements from stakeholders using various techniques like
interviews, surveys, brainstorming sessions, and more.
4. Clarifying and Refining Requirements:
o As raw requirements are gathered, it is important to ensure they are clear, complete,
and unambiguous.
o This may involve refining requirements based on feedback and additional discussions
with stakeholders.
5. Validating and Prioritizing Requirements:
o Requirements must be validated to ensure they are aligned with business objectives
and that stakeholders agree on their accuracy.
o Prioritizing helps to identify the most critical features to focus on first.
6. Documenting Requirements:
o After elicitation, the requirements are documented formally (often in a Software
Requirements Specification (SRS)) to ensure clarity and serve as a reference for
future project phases.
1. Interviews:
o One of the most common and direct ways to gather information.
o Stakeholders are interviewed to understand their needs, expectations, and problems.
o Interviews can be structured (with a pre-defined set of questions) or unstructured
(more open-ended, conversational).
2. Surveys and Questionnaires:
o Used when requirements need to be gathered from a large group of people.
o Typically involves sending out predefined questions that stakeholders respond to.
3. Workshops:
o These are structured meetings where stakeholders collaborate to brainstorm and
discuss requirements.
o Workshops are effective for resolving conflicts between different stakeholders and
for building consensus.
4. Observation:
o Involves observing users as they interact with existing systems or perform their tasks.
o This helps to uncover implicit requirements that stakeholders might not articulate,
especially related to usability and workflow.
5. Prototyping:
o A working model of the system or parts of the system is built and shown to
stakeholders.
o This helps to gather feedback and refine requirements early in the development
process.
6. Document Analysis:
o Involves reviewing existing documentation (such as manuals, system specifications,
business plans) to understand current processes and requirements.
o This is useful when transitioning from an old system to a new one.
7. Brainstorming:
o A group technique used to generate a large number of ideas or solutions related to the
system.
o Participants contribute ideas, and the results are later analyzed and refined into a set
of potential requirements.
8. Focus Groups:
o A group of stakeholders (often users) is gathered to discuss their needs and
expectations for the system.
o Focus groups are useful for gathering different perspectives and for discovering
requirements that may be common across multiple users.
9. Use Cases and Scenarios:
o Use cases and scenarios describe how the system will interact with users in specific
situations.
o This helps to uncover functional requirements by focusing on user interactions with
the system.
10. Storyboarding:
Conclusion:
Requirement Management
1. Requirement Documentation:
o Objective: To capture all requirements in a clear, structured, and accessible manner.
o The requirements are usually documented in a Software Requirements
Specification (SRS), ensuring that they are well-defined, unambiguous, and easily
understood by both technical and non-technical stakeholders.
o Tools like JIRA, Trello, or IBM Rational DOORS are often used to manage and
store requirements.
2. Requirement Analysis and Prioritization:
o After gathering requirements, they are analyzed to ensure that they are feasible and
realistic.
o Prioritizing requirements helps to identify which are critical to the success of the
project and which can be delivered later or discarded. Techniques such as MoSCoW
(Must have, Should have, Could have, Won’t have) or Kano Model are commonly
used to rank the importance of requirements.
3. Requirement Traceability:
o Traceability is crucial to ensure that each requirement is linked to its source
(stakeholders or business needs) and tracked through design, development, testing,
and deployment.
o This ensures that no requirement is forgotten and that all are tested and implemented.
o Traceability matrices are often used to map requirements to corresponding design
elements, code, and test cases.
4. Requirement Change Management:
o Requirements can change throughout the development process due to shifting
business priorities, stakeholder input, or technical constraints.
o Change control procedures ensure that all changes are documented, evaluated, and
approved before being implemented. This minimizes the impact of changes on the
project’s timeline, budget, and quality.
o Tools and processes are established to manage changes systematically, ensuring that
the team only works on approved and relevant changes.
5. Requirement Validation and Verification:
o Validation: Ensuring that the requirements meet the needs of the stakeholders and
align with business goals. This is often done through reviews, prototyping, or
stakeholder feedback sessions.
o Verification: Ensuring that the final system meets the documented requirements.
This typically occurs through testing, where requirements are mapped to test cases to
ensure that the system behaves as expected.
6. Requirement Version Control:
o As requirements evolve, version control is used to keep track of changes, ensuring
that the team works with the correct and most current versions of the requirements.
o This is particularly important in large projects where multiple stakeholders and teams
are involved, and requirements might change over time.
7. Requirement Monitoring and Reporting:
o During the development process, it's important to continually monitor the status of
each requirement to ensure that it is being implemented correctly and on time.
o Reporting helps keep all stakeholders informed of the progress and any issues related
to requirements.
1. Changing Requirements:
o As projects evolve, stakeholders often change or refine their needs, leading to
requirement changes. Managing these changes without negatively impacting the
project’s timeline and budget can be challenging.
2. Scope Creep:
o If new requirements are added continuously without proper evaluation or approval,
the project scope can expand beyond its original objectives, leading to delays, cost
overruns, and lower quality.
3. Conflicting Requirements:
o Different stakeholders may have conflicting requirements, leading to difficulties in
deciding which should take priority. Conflict resolution techniques are required to
handle these situations effectively.
4. Maintaining Traceability:
o As the number of requirements grows, it becomes harder to maintain traceability
across the development lifecycle. Proper tools and techniques are necessary to track
every requirement's status.
5. Communication Barriers:
o Misunderstandings between stakeholders and developers can lead to incorrect
requirements or gaps. Ensuring clear and constant communication is essential to
avoid these issues.
6. Complexity in Large Projects:
o In large projects with numerous stakeholders and requirements, managing and
tracking all the requirements can become overwhelming without proper tools and
processes in place.
Conclusion:
An SRS is a detailed document that outlines all the requirements, functions, and constraints
of a software system to be developed. It serves as a communication bridge between
stakeholders and the development team, ensuring that everyone is aligned on what the system
should do.
Functional requirements: What the system should do, the actions it must perform.
Non-functional requirements: Performance, usability, reliability, etc.
System interfaces: How the system will interact with hardware, other software, and users.
Assumptions and constraints: Limitations and expectations that guide development.
Formal system specification in software engineering refers to the use of mathematical and
logical methods to define the behaviour and requirements of a software system precisely and
unambiguously. This approach helps to ensure that the system meets its intended purpose and
reduces the risks of misunderstandings or errors during the development process.
Challenges:
Complexity: Formal methods can be difficult to learn and apply, especially for large
systems.
Scalability: Applying formal methods to very large systems can be resource-intensive.
Cost: The initial investment in time and resources can be significant.
Application Areas:
Formal system specifications can be classified into various types based on their approaches,
notations, and intended use cases. Here are some of the main types:
2. Model-Based Specifications
State Transition Models: Focus on the different states of a system and how it
transitions from one state to another based on inputs. Examples include:
o Finite State Machines (FSMs)
o State charts
Algebraic Specifications: Use algebraic structures to define operations and their
properties. An example is:
o Abstract Data Types (ADTs)
3. Logic-Based Specifications
4. Process Algebras
5. Refinement-Based Specifications
Specifications that evolve through refinement steps, gradually transforming an
abstract specification into a more concrete implementation. Examples include:
o B-Method
o Event-B
6. Hybrid Approaches
8. Graph-Based Specifications
Conclusion
Each type of formal specification has its strengths and is suited for different scenarios and
requirements. The choice of which type to use often depends on factors like system
complexity, criticality, domain, and the specific goals of the specification process.
Axiomatic Specification:
Axiomatic specification is a formal method used to define the behavior of software systems
by specifying the preconditions and postconditions of operations in terms of logical assertions
(or axioms). The goal is to provide a mathematically precise description of the system’s
behavior without describing how the operations are implemented.
Core Concepts:
1. States:
o The system is considered to be in different states (configurations) at various points in
time.
o The state can be represented by variables that define the system’s current condition.
2. Operations:
o Operations transition the system from one state to another.
o Each operation is described by:
Precondition: A logical condition that must be true before the operation can
be executed.
Postcondition: A logical condition that must hold true after the operation has
been executed, assuming the precondition was true.
3. Axioms:
o These are logical assertions (statements or conditions) that define the relationships
between inputs and outputs of the system.
o Axioms specify the rules governing how operations affect the system's state.
How it Works:
For example, consider a stack with two operations: push(x) to add an element and pop() to
remove the top element.
push(x):
o Precondition: None (the operation can always be performed).
o Postcondition: The element x is added to the top of the stack.
pop():
o Precondition: The stack is not empty.
o Postcondition: The top element of the stack is removed.
Consider a simple counter system with two operations: increment and reset.
1. State:
o The state is represented by an integer variable counter which stores the current value
of the counter.
2. Operations:
o increment()
Precondition: counter ≥ 0
Postcondition: counter' = counter + 1 (the counter’s value after incrementing is
the previous value plus 1)
o reset()
Precondition: counter ≥ 0
Postcondition: counter' = 0 (the counter’s value is reset to 0)
3. Axioms:
o For the increment operation: counter' = counter + 1
o For the reset operation: counter' = 0
Advantages of Axiomatic Specification:
1. Precision and Clarity: Provides a mathematically precise way to define system behavior.
2. Separation of Concerns: Focuses on "what" the system should do, rather than "how" it is
implemented.
3. Verification: Makes it easier to verify system correctness by reasoning about preconditions
and postconditions.
Disadvantages:
Conclusion:
Axiomatic specification helps in defining operations on a system in a clear and rigorous way
by using preconditions and postconditions. It enables formal verification of system behavior,
ensuring that the system transitions between valid states as expected during execution.
Algebraic Specification:
Algebraic specification is a formal method used to describe software systems and abstract
data types (ADTs) by defining the operations on them using algebraic equations. Rather than
focusing on how the data is stored or implemented, algebraic specification emphasizes the
relationships and properties of the operations through equational logic.
The key idea behind algebraic specification is that data types and their operations can be
described in terms of sets of values (domains) and equations that define the behaviour of
operations on these data types.
1. Signature:
o A signature defines the types (also known as sorts) and the operations that can be
performed on these types.
o Sorts: Represent different abstract data types (e.g., Stack, List, Natural).
o Operations: The functions or operations that manipulate these sorts (e.g., push, pop,
append).
2. Equations:
o The behavior of the operations is specified by equations. These equations define how
different operations relate to each other and describe the properties they must satisfy.
o Equations express the output of an operation in terms of other operations on the same
data type.
o They describe the laws or rules that the operations follow (such as associativity,
commutativity, identity).
3. Initial Algebra Semantics:
o This concept means that the meaning of operations is defined only by the equations
provided. The structure or implementation of the data type is irrelevant — what
matters are the behaviors described by the equations.
1. Types (Sorts):
o These are the abstract data types being modeled (e.g., integers, lists, stacks).
2. Operations:
o Operations are functions that manipulate the types. They are defined using a signature
and equations.
o Example: For a Stack, common operations could be:
push(element, stack): Adds an element to the stack.
pop(stack): Removes the top element from the stack.
top(stack): Retrieves the top element without removing it.
empty(): Returns an empty stack.
3. Equational Laws:
o These define how the operations behave in various situations and relate to each other.
o Example: Equations might describe how push and pop behave:
pop(push(x, S)) = S (Popping the top element of a stack after pushing an
element x returns the stack before x was pushed).
top(push(x, S)) = x (The top element of a stack after pushing x is x).
Signature:
Sorts: Stack
Operations:
o push: Element × Stack → Stack
o pop: Stack → Stack
o top: Stack → Element
o empty: → Stack
o isEmpty: Stack → Boolean
Equations:
These equations define how the stack operations interact. For example, when you push an
element onto the stack and then pop it, the stack returns to its previous state.
Conclusion:
Algebraic specification is a powerful formal method for describing abstract data types
through operations and equations. By focusing on the relationships between operations rather
than implementation details, it provides a way to rigorously define and verify the behavior of
data types in a system. It is particularly well-suited for defining modular and reusable
software components.
Verification is the process of 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.
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.
V&V 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.
Key Components
1. Software Quality:
o Definition: Software quality refers to the degree to which a software product meets
specified requirements and user expectations. It encompasses various attributes,
including functionality, reliability, usability, efficiency, maintainability, and
portability.
o Quality Attributes:
1. Quality Planning:
2. Quality Assurance:
o Includes reviews, audits, and process evaluations to verify compliance with quality
standards.
3. Quality Control:
o Monitoring and evaluating the actual outputs of the software development process.
o Involves testing and validation to ensure the software meets specified requirements
and functions correctly.
4. Documentation:
5. Continuous Improvement:
o Regularly assessing and refining processes based on feedback, metrics, and audits.
o Providing ongoing training for staff to ensure they understand quality standards and
practices.
Benefits of SQMS
Consistency: Helps ensure that software products are developed consistently to meet quality
standards.
Risk Management: Identifies and mitigates risks related to software quality early in the
development process.
Customer Satisfaction: By meeting or exceeding customer expectations, SQMS enhances
user satisfaction and loyalty.
Conclusion
An effective Software Quality Management System is essential for organizations aiming to produce
high-quality software that meets customer expectations. By implementing an SQMS, organizations
can foster a culture of quality, enhance their development processes, and ultimately deliver superior
software products.
ISO 9000 is a set of international standards for quality management and assurance developed by the
International Organization for Standardization (ISO). These standards provide a framework for
organizations to ensure that they consistently meet customer and regulatory requirements, while also
enhancing customer satisfaction.
o Customer Focus: Understanding and meeting customer needs and striving to exceed
their expectations.
2. Key Standards:
o ISO 9001: Specifies requirements for a quality management system and is the only
standard in the ISO 9000 family that organizations can be certified against.
o ISO 9004: Offers guidance for organizations to achieve sustained success through a
quality management approach.
Market Opportunities: ISO 9001 certification can enhance credibility and open up new
business opportunities, as many clients prefer or require ISO-certified suppliers.
Implementation Steps
1. Gap Analysis: Assess current processes against ISO 9001 requirements to identify areas for
improvement.
2. Training: Educate staff on quality management principles and the specific requirements of
ISO 9001.
4. Implementation: Put the quality management system into practice across the organization.
5. Internal Audit: Conduct regular audits to ensure compliance with the QMS and identify
areas for further improvement.
6. Management Review: Regularly review the QMS at the management level to ensure its
effectiveness and suitability.
7. Certification: Engage a third-party certification body to verify compliance and obtain ISO
9001 certification.
Conclusion
ISO 9000 provides a comprehensive framework for quality management that can help organizations
improve their processes, enhance customer satisfaction, and achieve operational efficiency. By
adopting ISO 9001, organizations commit to continuous improvement and a systematic approach to
quality management, leading to better performance and a competitive edge in the market.
The Capability Maturity Model (CMM), developed by the Software Engineering Institute (SEI) in the
late 1980s, is a framework that helps organizations improve their software development processes. It
provides a structured approach to assess and enhance the maturity of an organization’s software
development practices, aiming for increased quality and efficiency.
1. Maturity Levels: CMM defines five maturity levels that represent a progression in process
improvement:
o Level 1: Initial
o Level 2: Managed
Focus on managing projects and ensuring they are delivered on time and
within budget.
o Level 3: Defined
o Level 5: Optimizing
2. Process Areas: Each maturity level includes specific process areas that organizations should
focus on to achieve the respective level. Examples include:
o Requirements Management
o Project Planning
o Quality Assurance
o Configuration Management
Benefits of CMM
Predictability: Higher maturity levels lead to more predictable project outcomes, reducing
risks and uncertainties.
Efficiency: Streamlined processes improve efficiency, resulting in faster delivery and reduced
costs.
Implementation Steps
2. Gap Analysis: Identify areas for improvement and prioritize them based on organizational
goals.
5. Implementation: Execute the action plan, making necessary adjustments based on feedback
and observations.
6. Monitoring and Evaluation: Continuously monitor progress and evaluate the effectiveness
of implemented changes.
7. Reassessment: Periodically reassess the maturity level to gauge improvements and identify
new areas for enhancement.
Conclusion
The SEI Capability Maturity Model provides a comprehensive framework for organizations to assess
and improve their software development processes. By progressing through the maturity levels,
organizations can enhance their capabilities, produce higher-quality software, and ultimately achieve
greater success in their software development efforts.