ND SOFTWARE ENGINEERING 4 3 Software Requirements and Modeling
ND SOFTWARE ENGINEERING 4 3 Software Requirements and Modeling
These implicit relationships are fundamental to the development process and benefit from
being built as a natural part of the developer’s work. These relationships are central to the
modelling process and are constructed, and maintained, as the models are matured. The
implicit traceability is limited to the relationships available in our modelling notation.
Explicit Traceability
So why would we want any additional explicit traceability?
We are to adopt the principles of requirements traceability we would need to integrate the
Requirements, model items and other traceability items into a traceability hierarchy. We
may also want to add additional traceability relationships into our development process.
The following figure shows an example traceability hierarchy showing the relationship
between "features"
defined in a vision
document and
"software
requirements" defined
in a use case model and
a supplementary
specification. It also
shows how the
software requirements
are traced into the Test
Requirements, Design
and User
Documentation
Sample Requirements Structure
In addition to the documents required by ISO/IEC 29110, students have to produce a lessons
learned report and an analysis of the metrics collected. This report captures, from their
point of view, what went well, what could have been done better and what surprised them
during the 10-week project.
3.4. Develop User and System Requirements Documents using
Appropriate Tools
System requirements are assessed to determine whether the proposed system can
effectively operate on the given system specification. Assessing technical feasibility includes
evaluating the ability of computer hardware and software to handle workloads adequately.
If the requirements cannot be met, then the project needs to determine if the requirements
should be modified, or if another technology is more appropriate. The feasibility assessment
process includes the following steps. The information produced by the assessment process
should be documented in a report.
1. Does the infrastructure design meet the need specified during the Identification
Phase?
2. Are the engineering and architectural requirements of the project achievable? If so,
are they achievable at a price comparable with similar infrastructure?
3. Can the service be specified in terms of outputs? If so, can the service be measured
adequately though performance indicators?
4. Can the main technological changes in the service delivery be satisfactorily
estimated?
5. Assess the probability that the requirements can be met by the chosen technology.
Consider whether the design will reach any technical limitations, such as number of
gates, complexity, operating frequency, and packaging limitations (e.g. number of
pins).
6. Check the availability of the selected technology. Consider how long the chip and
tools will be supported, in relation to mission duration. When will the parts become
obsolete? Also consider the availability of technical support.
7. Estimate the design complexity
8. Estimate the power consumption
9. Perform a preliminary timing analysis to assess the feasibility of speed requirements
10. Are safety and security issues covered?
11. Select a production test approach and verify feasibility against all requirements
12. Identify and evaluate suitability and qualification status of complex electronic
technologies
13. Identify suitable packaging; make a baseline selection
14. Determine availability and status of design and test tools and libraries and necessary
personnel
Requirements are best determined by systems analysts and business people together
Strategies for analyzing the requirements:
Business Process Analysis (BPA)
Business Process Improvement (BPI)
Business Process Reengineering (BPR)
A formal review is conducted with all parties involved. The review serves two purposes:
1. To substantiate the thoroughness and accuracy of the Feasibility Study
2. To make a project decision - either approve it, reject it, or ask that it be revised
before making a final decision. If approved, it is very important that all parties sign
the document which expresses their acceptance and commitment to it. If the
Feasibility Study is rejected, the reasons for its rejection should be explained and
attached to the document.
It is often useful to examine each requirement against a set of checklist questions. Here is a
small subset of those that might be asked:
1. Are requirements stated clearly? Can they be misinterpreted?
2. Is the source (e.g., a person, a regulation, a document) of the requirement
identified? Has the final statement of the requirement been examined by or against
the original source?
3. Is the requirement bounded in quantitative terms?
4. What other requirements relate to this requirement? Are they clearly noted via a
cross-reference matrix or other mechanism?
5. Does the requirement violate any system domain constraints?
6. Is the requirement testable? If so, can we specify tests (sometimes called validation
criteria) to exercise the requirement?
7. Is the requirement traceable to any system model that has been created?
8. Is the requirement traceable to overall system/product objectives?
9. Is the specification structured in a way that leads to easy understanding, easy
reference, and easy translation into more technical work products?
10. Has an index for the specification been created?
11. Have requirements associated with performance, behaviour, and operational
characteristics been clearly stated? What requirements appear to be implicit?
Requirements validation determines whether the requirements are substantial to design the
system. The problems encountered during requirements validation are listed below.
1. Unclear stated requirements
2. Conflicting requirements are not detected during requirements analysis
3. Errors in the requirements elicitation and analysis
4. Lack of conformance to quality standards.
To avoid the problems stated above, a requirements review is conducted, which consists of
a review team that performs a systematic analysis of the requirements. The review team
consists of software engineers, users, and other stakeholders who examine the specification
to ensure that the problems associated with consistency, omissions, and errors are detected
and corrected. In addition, the review team checks whether the work products produced
during the requirements phase conform to the standards specified for the process, project,
and the product.
At the review meeting, each participant goes over the requirements before the meeting
starts and marks the items which are dubious or need clarification. Checklists are often used
for identifying such items. Checklists ensure that no source of errors, whether major or
minor, is overlooked by the reviewers.
A 'good' checklist consists of the following:
1. Is the initial state of the system defined?
2. Is there a conflict between one requirement and the other?
3. Are all requirements specified at the appropriate level of abstraction?
4. Is the requirement necessary or does it represent an add-on feature that may not be
essentially implemented?
5. Is the requirement bounded and has a clear defined meaning?
6. Is each requirement feasible in the technical environment where the product or
system is to be used?
7. Is testing possible once the requirement is implemented?
8. Are requirements associated with performance, behaviour, and operational
characteristics clearly stated?
9. Are requirements patterns used to simplify the requirements model?
10. Are the requirements consistent with the overall objective specified for the
system/product?
11. Have all hardware resources been defined?
12. Is the provision for possible future modifications specified?
13. Are functions included as desired by the user (and stakeholder)?
14. Can the requirements be implemented in the available budget and technology?
15. Are the resources of requirements or any system model (created) stated clearly?
The checklists ensure that the requirements reflect users' needs and provide groundwork for
design. Using the checklists, the participants specify the list of potential errors they have
uncovered. Lastly, the requirements analyst either agrees to the presence of errors or states
that no errors exist.
3.4.3. Validate the Requirement
The primary goal of systems engineering (SE) is to develop a solution that meets the needs
and requirements of stakeholders. Validation is the process by which engineers ensure that
the system will meet these needs and requirements.
A validation action is defined and then performed (see Figure, below).
Refer to Sample Software Requirements Specification Report or SRS Sample or SRS Contents
3.5. Produce Functional and Nonfunctional Software
Requirements
The Functional Requirements Specification documents the operations and activities that a
system must be able to perform.
Functional Requirements should include:
Descriptions of data to be entered into the system
Descriptions of operations performed by each screen
Descriptions of work-flows performed by the system
Descriptions of system reports or other outputs
Who can enter the data into the system
How the system meets applicable regulatory requirements
The Functional Requirements Specification is designed to be read by a general audience.
Readers should understand the system, but no particular technical knowledge should be
required to understand the document.
Examples of Functional Requirements
Functional requirements should include functions performed by specific screens, outlines of
work-flows performed by the system, and other business or compliance requirements the
system must meet. Download an example functional requirements specification or use
these quick examples below.
1. Interface requirements
Field 1 accepts numeric data entry.
Field 2 only accepts dates before the current date.
Screen 1 can print on-screen data to the printer.
2. Business Requirements
Data must be entered before a request can be approved.
Clicking the Approve button moves the request to the Approval Workflow.
All personnel using the system will be trained according to internal SOP AA-
101.
3. Regulatory/Compliance Requirements
The database will have a functional audit trail.
The system will limit access to authorized users.
The spreadsheet can secure data with electronic signatures.
4. Security Requirements
Members of the Data Entry group can enter requests but can not approve or
delete requests.
Members of the Managers group can enter or approve a request but can not
delete requests.
Members of the Administrators group cannot enter or approve requests but
can delete requests.
Depending on the system being described, different categories of requirements are
appropriate. System Owners, Key End-Users, Developers, Engineers, and Quality Assurance
should all participate in the requirement gathering process, as appropriate to the system.
Requirements outlined in the Functional Requirements Specification are usually tested in the
Operational Qualification.
Non-functional requirements
1. Product requirements – Requirements which specify that the delivered product
must behave in a particular way, e.g. execution speed, reliability etc.
2. Organisational requirements – Requirements which are a consequence of
organisational policies and procedures, e.g. process standards used, implementation
requirements etc.
3. External requirements – Requirements which arise from factors which are external
to the system and its development process, e.g. interoperability requirements,
legislative requirements
Refer to Sample Software Requirements Specification Report or SRS Sample or SRS Contents
3.6. Produce Software Architectures from the Requirements
Abstraction and Data hiding are the crucial concepts of the object-oriented programming.
Abstraction is a method of expressing the important properties without involving the
background details.
Data hiding insulates the data from the straight access by other programs.
Abstraction provides a way to create user-defined data types for designing real-world
objects having same properties. Data hiding protects the data and function from the
unauthorized access.
Comparison Chart
The table on the next page illustrates the distinguishing features of Encapsulation,
Abstraction, and Data Hiding in C++.
Comparison table – Encapsulation, Abstraction and Data Hiding
Encapsulation Data Abstraction Data Hiding in C++
Encapsulation binds the data & functions Data Abstraction is a mechanism of hiding the Data hiding is a process of combining data and functions into a single unit.
together which keeps both safe from implementation from the user & exposing the The ideology behind data hiding is to conceal data within a class, to
prevent its direct access from outside the class. It helps programmers to
outside interference. Data encapsulation interface.
create classes with unique data sets and functions, avoiding unnecessary
led to data hiding. penetration from other program classes.
Example:
Let’s look at an example of encapsulation. Discussing data hiding & data encapsulation, data hiding only hides class
Here, we are specifying the getter & setter #include <iostream> data components, whereas data encapsulation hides class data parts and
1 private methods.
function to get & set the value of using namespace std;
2 Now you also need to know access specifier for understanding data hiding.
variable num without accessing it directly.
3 private, public & protected are three types of protection/ access specifiers
Example: class Abstraction available within a class. Usually, the data within a class is private & the
4 functions are public. The data is hidden, so that it will be safe from
{ accidental manipulation.
#include<iostream> 5
1 private:
using namespace std; Private members/methods can only be accessed by methods defined
2 6 int num1, num2; as part of the class. Data is most often defined as private to prevent
7 direct outside access from other classes. Private members can be
3 accessed by members of the class.
class Encapsulation
4 8 public: Public members/methods can be accessed from anywhere in the
{ program. Class methods are usually public which is used to manipulate
5 9
private: the data present in the class. As a general rule, data should not be
6 10 void set(int a, int declared public. Public members can be accessed by members and
// data hidden from objects of the class.
7 outside world 11 b) Protected member/methods are private within a class and are
8 int num; 12 { available for private access in the derived class.
22int main(){
23 Base obj;
24
25 obj.read();
26 obj.print();
27
28 return 0;
29}
Output: 5 Output: num1 = 50; num2 = 100 Output: Enter any Integer value
10
The value is 10
3.6.2. Regrouping Requirements
In order to better understand and manage the large number of requirements, it is important
to organize them in logical clusters
It is possible to classify the requirements by the following categories (or any other
clustering that appears to be convenient)
o Features
o Use cases
o Mode of operation
o User class
o Responsible subsystem
This makes it easier to understand the intended capabilities of the product
And more effective to manage and prioritize large groups rather than single
requirements
For classification by Feature is [a set of logically related (functional) requirements that
provides a capability to the user and enables the satisfaction of a business objective]
The description of a feature should include
o Name of feature (e.g. Spell check)
o Description and Priority
o Stimulus/response sequences
o List of associated functional requirements
In more recent years the notion of reusing specifications including requirements has started
to get traction. The reuse is particularly important where organizations create a family of
products with similar features or where there is a community of users within an industry or
domain. Other types of requirements such as security and regulatory requirements will
typically apply to a number of projects. Business Rules and Stakeholders Concerns will also
typically apply across many projects and are best catalogued outside individual projects
structures. Enterprise Architect provides a number of sophisticated mechanisms for
managing the reuse of elements across projects including structuring the repository for
reuse, importing requirements from other sources and a Reusable Asset Service.
Requirements reusability consists of reusing requirements and all that comes with it,
including requirements, tests, and use cases derived from the original ones, and all the
traceability between them; attributes and hierarchy. The following procedure can be used to
create a formalised Reuse of Requirements Repository.
1. Create a Standard for Authoring Requirements
Creating a standardized language set for documenting requirements is imperative to
not only the success of your project but also to ensure future requirements projects
follow a similar format. This will help maintain a level of similarity between
requirements, preventing discrepancy when reviewing. The following rules of thumb
can be followed to ensure a standardized language set for requirements writing:
Create an authoring standard, which includes using a proper syntax for both
functional and non-functional requirements
Create a standard for documenting business models and business rules
Create a custom template of relevant attributes, including data definitions,
standards, rationale, design elements, etc
Use standard units, terms, and definitions to maintain consistency
Use standard templates for documenting user personas, roles and privileges,
etc
Avoid ambiguity and vagueness to ensure clarity and quality
Much of this can be automated using requirements analysis tools
2. Write Good Requirements
Nothing beats this. Authoring clear and concise requirements ensures that
engineering teams reap the maximum benefits from requirements reusability. Good
requirements have no ambiguities and are supplemented by rationale, data
definitions, and acceptance criteria. Every requirement should have a unique
identifier and a flag for marking its priority. It is important to use a predetermined
level of detail in a requirement, adding product specific details or details about
implementation can add confusion if the requirement gets reused for another
project without reconsidering contextual information.
3. Be Mindful of Intellectual Property Rights
Reusing requirements can cause Intellectual Property rights violations if you are
reusing something that is not yours by law or available free for public use. When
creating a process, ensure that requirements that came from your users aren’t part
of your repository of reusable requirements.
4. Carefully Select What to Reuse
Not all requirements are fit to be reused. When choosing which requirements to
reuse, consider if they may change over time, or if they are standardized to be
relevant to a number of projects. Here are a few examples of requirements
document categories that may be eligible for reuse:
Non-functional requirements (performance criteria, page load time, etc.)
Functional Requirements
User classes and personas
Business models and rules
Security requirements
Compliance and standards (safety requirements, building codes, etc.)
Glossary and data definitions
Accessibility requirements (web content accessibility guidelines, etc.)
Symmetrical user functions (create, read, update, delete and search, etc.)
Core functions (signup, sign in and recover password, device reset, etc.)
Document templates (requirement specifications, design documents, etc.)
Information sources on domain knowledge
Requirements engineers can create reuse patterns to ensure that only relevant and
useful requirements are being copied or linked to newly conceived project ideas.
5. Maintain the Repository
Once you have a categorized set of reusable requirements, the next step is
maintenance. Regardless of the requirements style or context, the repository should
be kept up-to-date at all times. This is done to reduce the risk of reusing obsolete
information and to take note of all changes being made. Make sure to update
requirements as new information or data is available, this ensures reusable
requirements longevity.
6. Do a Reusability Retrospective
Another best practice is to host retrospective meetings periodically to ensure that
the requirements reusability process is up to date. Collecting feedback and lessons
learned should be part of the process, with a way to track which pointers are being
implemented to improve the process. Do this often to keep track of problems and
work on solutions collaboratively. Keep a backlog of ideas / changes to be tested /
implemented in the process and review in every retrospective meeting; this will
reset the sail towards an exponentially improved requirements reusability process.
1. COPY AND PASTE: There are several ways of reusing requirements, and copy and
paste is the most widely used technique. Even though very basic, it may be a good
starting point. There are multiple variants of this method, such as copying and
pasting in read-only mode.
2. COPY AND LINK: An advanced evolution of the copy and paste is to be able to keep a
reference from the pasted requirement to the original one. This is a much more
powerful option, as it will allow us to create a branch (a diverging version with the
same unique identifier) from the original requirement, but still receive updates if the
original requirement is modified. This will allow us to keep working on our own
branch, or merge to the original one at any point in time. This is a extremely efficient
way of performing a change and populating it to all the ongoing projects in the
company, and specially useful to deal with product variants and branches.
3. LINK: This mode allows to display a representation of a set of requirements from
another project in read-only mode. Any changes made to the original requirements
are automatically populated to the rest of the projects reusing them. This mode is
specially useful when dealing with standards and norms, in which projects need not
to modify them, but need to make sure they keep up to date.
4. SHARE: This mode allows projects to share the ownership of a set of requirements,
being requirements editable and automatically available to all the projects at the
same time.
Requirements Engineering is time-intensive, and much of a project’s success depends on
getting it right. Reusing requirements is a way to save time and to ensure the quality of
requirements as they have been written, implemented and tested before. If done hastily or
without care, reusing requirements can cause waste, so project engineers must streamline
the process by following its best practices and creating a culture that values smart work and
reuse of available resources and knowledge.
3.6.5. Automation of the Requirements
Accurately capture and communicate requirements, goals, progress, and interdependencies throughout the development process
End-to-end live traceability of people, data, and processes
Real-time impact analysis showing the effect of changes related to upstream and downstream requirements
Integrate with ALM, PLM, QA, MBSE
Define, organize, and execute requirements-based test plans and test cases and Reuse validated requirements to quickly replicate features across products
Rational Doors: Rational DOORS is a requirements management application. It is a useful tool for optimizing, collaborating, and verifying requirements across the organization. This RM tool
allows to capture, trace, analyze and manage changes to information.
Features:
Requirements management is performed from the centralized location for better team collaboration
It provides tractability by linking requirements to design items, test plans, test cases, etc.
It offers scalability to address changing requirements management needs
Test tracking toolkit for manual test environments to link requirements to test cases
It helps users to manage changes to requirements either with pre-defined change proposal system or a more customizable change control workflow
Download link: https://www.ibm.com/developerworks/downloads/r/ordng/index.html
Tool Features
Visure Visure Solutions, Inc. is a trusted specialized requirement ALM partner for companies of all sizes across safety-critical and business-critical industries.
Features:
1. Models of the existing system are used during requirements engineering. They help
clarify what the existing system does and can be used as a basis for discussing its
strengths and weaknesses. These then lead to requirements for the new system.
2. Models of the new system are used during requirements engineering to help explain
the proposed requirements to other system stakeholders. Engineers use these
models to discuss design proposals and to document the system for
implementation. In a model-driven engineering process, it is possible to generate a
complete or partial system implementation from the system model.
The most important aspect of a system model is that it leaves out detail. A model is an
abstraction of the system being studied rather than an alternative representation of that
system. Ideally, a representation of a system should maintain all the information about the
entity being represented but unfortunately, the real world (also knows as the universe of
discourse) is utterly complex so weed to simplify. An abstraction consciously simplifies and
picks out the most evident characteristics.
You may develop different models to represent the system from different perspectives
[SOMMERVILLE2010]. For example:
Context models normally show that the system's environment contains other systems but
the types of relationships between the systems of the environment and the system that is
being specified are not shown. That is why it is common to create some models describing
business processes showing what activities humans or automated processes will execute.
UML provides activity diagrams in order to describe those high-level use processes.
It is easy to figure out where the boundaries of this system are. We can tell which
functionalities belong to the system and which are those that are external to it.
3.7.2. Interaction Model
All systems involve interaction of some kind. This can be user interaction, which involves
user inputs and outputs, interaction between the system being developed, and other
systems or interaction between the components of the system.
Modelling user interaction is important as it helps to identify user requirements.
Modelling system to system interaction highlights the communication problems
that may arise.
Modelling component interaction helps us understand if a proposed system
structure is likely to deliver the required system performance and dependability.
Sommerville covers two related (complementary) approaches to interaction modelling:
1. Use case modelling, which is mostly used to model interactions between a system
and external actors (users or other systems).
2. Sequence diagrams, which are used to model interactions between system
components, although external agents may also be included.
Use case models and sequence diagrams present interaction at different levels of detail
and so may be used together. The details of the interactions involved in a high-level use
case may be documented in a sequence diagram.
Each use case represents a discrete task that involves external interaction with a system.
Actors in a use case may be people or other systems. Use cases can be represented using a
UML use case diagram and in a more detailed textual/tabular format.
Simple use case diagram:
Structural model represents the framework for the system and this framework is the place
where all other components exist. Structural modelling captures the static features of a
system. They consist of the following:
Classes diagrams
Objects diagrams
Deployment diagrams
Package diagrams
Composite structure diagram
Component diagram
Structural models of software display the organization of a system in terms of the
components that make up that system and their relationships. Structural models may
be static models, which show the structure of the system design, or dynamic models, which
show the organization of the system when it is executing. You create structural models of a
system when you are discussing and designing the system architecture.
UML class diagrams are used when developing an object-oriented system model to show
the classes in a system and the associations between these classes. An object class can be
thought of as a general definition of one kind of system object. An association is a link
between classes that indicates that there is some relationship between these classes. When
you are developing models during the early stages of the software engineering process,
objects represent something in the real world, such as a patient, a prescription, doctor, etc.
Generalization is an everyday technique that we use to manage complexity. In modelling
systems, it is often useful to examine the classes in a system to see if there is scope for
generalization. In object-oriented languages, such as Java, generalization is implemented
using the class inheritance mechanisms built into the language. In a generalization, the
attributes and operations associated with higher-level classes are also associated with the
lower-level classes. The lower-level classes are subclasses inherit the attributes and
operations from their superclasses. These lower-level classes then add more specific
attributes and operations.
An aggregation model shows how classes that are collections are composed of other classes.
Aggregation models are similar to the part-of relationship in semantic data models.
3.7.4. Behavioural Modelling