Requirements for a software product and for the requirements themselves: analysis, types, attributes, SWEBOK

Lecture



The topic of requirements in software engineering, development, and systems testing is a fundamental and integral part of the process of creating high-quality and effective products. Software development and systems engineering begin with defining what must be created and how this is to be achieved. This is where requirements come into play, serving as a bridge between the customer's vision and the final result.

In this review we will delve into the world of requirements, examining their analysis, various types, key attributes, and their connection to SWEBOK (Guide to the Software Engineering Body of Knowledge). We will analyze how requirements form the fundamental basis for development, provide an understanding of the functional and non-functional aspects of projects, and contribute to the effective management of the entire development lifecycle. Our study will cover not only the essence of requirements, but also how their analysis and proper management affect the success of projects and the compliance of the resulting products with customer expectations and software engineering standards.

Let's consider the following questions:

  • Task life cycle
  • Types of requirements
  • Requirements analysis
  • What are Exit/Acceptance Criteria
  • Pitfalls and the concept of Consistency

A requirement — is a specification (description) of what must be implemented.
Requirements describe what needs to be implemented, without detailing the technical side of the solution. What, not how.

Requirements for requirements:

  • • Correctness
  • • Unambiguity
  • • Completeness of the requirement set
  • • Consistency of the requirement set
  • • Verifiability (testability)
  • • Traceability
  • • Understandability

Requirements analysis — is part of the software development process that includes gathering software requirements, systematizing them, identifying relationships, and documenting them. In English, this discipline is also known as Requirements Engineering. When gathering requirements, it is important to take into account possible contradictions between the requirements of different stakeholders, such as customers, developers, or users.

The completeness and quality of requirements analysis play a key role in the success of the entire project. Software requirements must be documentable, feasible, testable, and detailed enough for system design. Requirements can be functional and non-functional.

Requirements analysis includes three types of activity:

  • Requirements gathering — communicating with customers and users to determine what their requirements are; domain analysis.
  • Requirements analysis — determining whether the gathered requirements are unclear, incomplete, ambiguous, or contradictory; resolving these problems; identifying relationships between requirements.
  • Requirements documentation — requirements can be documented in various forms, such as a plain description, use cases, user stories, or process specifications.

Requirements analysis can be a long and difficult process, in the course of which many subtle psychological skills come into play. New systems change the surrounding environment and relationships between people, so it is important to identify all stakeholders, take all their needs into account, and ensure that they understand the implications of the new systems. Analysts can use several methods to elicit the following requirements from the customer: conducting interviews, using focus groups, or creating requirement lists. More modern methods include building prototypes and use cases. Where necessary, the analyst will use a combination of these methods to elicit the precise requirements of stakeholders so that the resulting system satisfies business needs.

Phases of requirements analysis

The process of analyzing requirements for an information system includes the following phases:

  • Requirements development
    • Requirements elicitation
    • Requirements analysis
    • Requirements specification
    • Requirements verification
  • Requirements management

Elicitation and analysis of requirements

Identifying stakeholders

A stakeholder — is an individual or organization having rights, a share, requirements, or interests with respect to a system or its properties that satisfy their needs and expectations (ISO/IEC 15288:2008, ISO/IEC 29148:2011).

Surveying stakeholders

Surveying stakeholders is a widely used technique when gathering requirements. Such surveys can reveal requirements that fall outside the scope of the project or that contradict previously gathered ones. However, each stakeholder will have their own requirements, expectations, and vision of the system.

Joint Requirements Development sessions (JRD)

Requirements often have a complex, overlapping functional purpose that is not known to individual stakeholders. Such requirements are often missed or not fully defined during their surveys. Such requirements can be uncovered by holding JRD sessions. Such sessions are conducted under the supervision of a trained facilitator. Stakeholders take part in discussions to define requirements, analyze their details, and reveal hidden, overlapping relationships between requirements.

Requirements specification

Requirement lists

The traditional way to document requirements — is to create requirement lists. In a complex system, such requirement lists can run to hundreds of pages.

A fitting metaphor would be an extremely long shopping list at a store. Such lists are extremely inefficient in modern analysis, although they are still used to this day.

Advantages

  • Provides a checklist of requirements.
  • Provides a contract between customers and developers.
  • For a large system, it can provide a high-level description.

Disadvantages

  • Such lists can run to hundreds of pages. It is practically impossible to read such documents in their entirety and obtain a clear understanding of the system.
  • Such requirement lists enumerate individual requirements abstractly, detached from one another and from the context of use
    • This abstraction removes the ability to see how requirements relate to one another or work together.
    • This abstraction hinders correctly prioritizing requirements; while a list does make it easier to prioritize individual items, removing one item from context can render an entire use case or business requirement useless.
    • This abstraction increases the likelihood of requirements being misinterpreted; since the greater the number of people who read them, the greater the number of (different) interpretations of the system will be.
    • This abstraction means that it is extremely difficult to be sure that you have all the necessary requirements.
  • Such lists create a false sense of mutual understanding between stakeholders and developers.
  • Such lists give stakeholders a false sense of security that developers must achieve certain things. However, because of the nature of these lists, they inevitably miss important requirements that will be uncovered later in the process. Developers can use new requirements to renegotiate timelines and terms in their favor.

Alternatives to requirement lists

Alternatives to large, predefined requirement lists can be found in user stories, which define requirements in plain language.

Measurable goals

Best practices use a compiled requirement list simply as a prototype and repeatedly ask the question «why?», until the actual business goals are uncovered. Stakeholders and developers can then design tests to measure what level of each goal has been achieved so far.

Such goals change more slowly than a long list of well-defined but unmeasurable requirements. Once a small set of critical, measurable goals has been established, rapid prototyping and short development stages can deliver real value to stakeholders even before the project is finished.

Prototypes (mock-ups)

In the mid-1980s, prototyping (prototyping) was seen as the solution to the requirements analysis problem. Prototypes — are mock-ups of a system. Mock-ups let users envision a system that has not yet been built. Prototypes help users imagine what the system will be like and make it easier for users to make design decisions without waiting for the system to be finished. The greatest improvements in mutual understanding between users and developers have often been observed with the introduction of prototypes. Early reviews of the system lead to fewer changes at later stages of development and consequently significantly reduce costs.

However, over the following decade, prototyping, although recognized as an effective technique, did not solve the requirements analysis problem:

  • As soon as managers see a prototype, it is hard for them to understand that the final design will not be ready for some time yet.
  • Designers often feel compelled to use the prototype in the real system, because they are afraid of «wasting time» by starting over from scratch.
  • Prototypes primarily help with design decisions and user interface design. However, they cannot tell you what the original requirements were.
  • Designers and end users may focus too heavily on user interface design and too little on building the system that serves the business process.
  • Prototypes are excellent for user interfaces, but of little use for complex data processing or asynchronous processes, which may involve complex database updates and/or computations.

Prototypes can be flat diagrams (often called wireframes) or working programs using synthetic functionality. Wireframes can be presented as graphic documents. In cases where the finished software must have a graphic design, color is removed from the wireframe (that is, a grayscale palette is used). This helps prevent misunderstandings about the final look of the program.

Use cases

A use case (Use Case) — is a technique for documenting potential requirements for creating a new system or modifying an existing one. Each use case describes one or more ways the system interacts with the end user or another system to achieve a specific goal. Use cases usually avoid technical jargon, preferring instead the language of the end user or a domain expert. They are often created jointly by requirements analysts and stakeholders.

Use cases — are the most important tool for modeling requirements for the purpose of specifying the functionality of the software or system being developed as a whole. They may contain an additional textual description of all the ways users can work with the software or system. Such a textual description is called a scenario. As a rule, use cases answer the question «What must the system do for a specific actor (Actor)?», without answering the question «How must the system implement this?» In this case, the scenario text supplements the graphical representation of the use case in the form of a description of the sequence of steps or actions that a user can follow to achieve the desired goal while interacting with the system. Completeness of the functional requirements for the system being developed is achieved by specifying all use cases with the corresponding scenarios, reflecting all the wishes and needs of the users of the system being developed.

Software requirements specification

The software requirements specification (Software Requirements Specification, SRS) is a complete description of the behavior of the system to be created. It includes a set of use cases that describe all types of user interaction with the software. Use cases are also known as functional requirements. In addition to use cases, the software specification also contains non-functional (or supplementary) requirements. Non-functional requirements — are requirements that impose additional constraints on the system (such as performance requirements, quality standards, or design constraints).

Recommended approaches for the specification of software requirements are described by the IEEE 830—1998 standard. This standard describes possible structures, desirable content, and qualities of a software requirements specification.

Types of requirements

Requirements are systematized in several ways. Below are general classifications of requirements relating to technical management.

Customer requirements

Customers are those who perform the primary functions of system design, with special emphasis on the system's user as the key customer. User requirements define the main goal of the system and, at a minimum, answer the following questions:

  • Operational or deployment requirements: Where will the system be used?
  • Mission profile or scenario: How will the system achieve mission goals?
  • Performance requirements: Which system parameters are critical for achieving the mission?
  • Use cases: How should the system's various components be used?
  • Efficiency requirements: How efficient must the system be to accomplish the mission?
  • Operational life cycle: How long will the system be used?
  • Environment: What environment must the system be able to operate in effectively?

Functional requirements

Functional requirements explain what must be done. They identify the tasks or actions that must be performed. Functional requirements define the actions the system must be capable of performing, the input/output relationship in the system's behavior.

Non-functional requirements

Non-functional requirements — are requirements that define the criteria for the operation of the system as a whole, rather than individual behavioral scenarios. Non-functional requirements define system properties such as performance, maintainability, extensibility, reliability, and environmental factors of operation.

Derived requirements

Requirements that are implied by, or transformed from, a higher-level requirement. For example, a requirement for greater range or higher speed may lead to a requirement for low weight.

Known requirement classification models include FURPS and FURPS+, developed at Hewlett-Packard.

Problems of requirements analysis

Stakeholder problems

Steve McConnell, in his book «Rapid Development», describes in detail how users can hinder the gathering of requirements:

  • users do not understand what they want, or users have no clear idea of their requirements;
  • users disagree with previously recorded requirements;
  • users insist on new requirements after the cost and schedule have already been established;
  • communication with users is slow;
  • users often do not participate in requirements reviews or are unable to participate in them;
  • users are not technically trained;
  • users do not understand the software development process.

This can lead to a situation where user requirements keep changing even after the system or the development of a new product has already begun.

Engineer/developer problems

Possible problems caused by engineers and developers during requirements analysis:

  • Technical staff and end users may hold different opinions. As a result, they may mistakenly believe they are in agreement until the finished product is delivered.
  • Engineers and developers may try to adjust the requirements to fit an existing system or model, instead of designing a system that matches the customer's needs.
  • Analysis is often carried out by engineers or programmers rather than by staff with people skills and domain knowledge.

Solutions to the problems

One solution to the communication problem was to hire specialists in business or systems analysis.

Techniques introduced in the 1990s — prototyping, the Unified Modeling Language (UML), use cases, and agile development methodology — are also intended to solve the problems described above.

Exit criteria

Exit criteria are the criteria or requirements that must be met to complete a particular task or process, as used in some areas of business or science, such as software development.

The term exit criteria is often used in "R and D" ("Research and Development"), but it can be applied to any area where business process reengineering is (or can be) applied. The benefits of "business process reengineering" include the use of terminology: a clear understanding of goals, the use of language (and data) when discussing (or) measuring methods for getting things done, and taking a scientific approach toward evaluating and improving the methods being used.

For example, to verify the quality of programs using the Fagan method, low-level documents must meet certain criteria, exit criteria (as specified in the higher-level document), before the development process can be accepted into the next stage.

In the telecommunications field, when testing new software or hardware for release, a set of test specifications is created to test the new product and ensure it meets the minimum acceptable operating characteristics. This test specification will state the minimum criteria required for the testing process to be considered complete and the product ready for release, i.e.: exiting the testing phase of the program.

Acceptance Criteria

Are we building the product? And are we building the product right?

Acceptance criteria are important, yet in my experience, often a forgotten or underestimated aspect of the iterative planning process. Acceptance criteria play a very important role, because projects have succeeded or failed based on the team's ability to satisfy their customers' documented and perceived acceptance criteria. When we clearly define acceptance criteria, we avoid surprises at the end of the sprint, or the release, and ensure a higher level of customer satisfaction. In other words, we can answer these two important questions: Are we building the right product? And, are we building the product right?

What are acceptance criteria?

Acceptance criteria are the conditions that a software product must satisfy in order to be accepted by the user, the customer, or, in the case of system-level functionality, the consuming system.

Acceptance criteria represent a set of statements, each with a clear pass/fail outcome, that define functional and non-functional requirements and are applied at the Epic, Feature, and Story levels. Acceptance criteria represent our "Definition of Done", and by Done I mean Done well.

Moreover, partial acceptance is not possible: either the acceptance criteria are satisfied or they are not.

When are acceptance criteria defined?

A pitfall that I urge my teams to avoid is writing acceptance criteria after development has already begun. This leads to simply checking that the built functionality works, rather than verifying that the functionality meets user needs and expectations. If we write and review acceptance criteria before implementation begins, we are more likely to capture the customer's intent rather than the reality of development.

What makes good acceptance criteria?

Acceptance criteria define when a work item is complete and functions as expected. Acceptance criteria should be expressed clearly, in plain language the customer would use, without ambiguity about the expected result. This is what sets our testers up for success, since they will take our acceptance criteria and translate them into automated test cases to run as part of our continuous integration build.

What. Not how.

Another pitfall I coach my teams to avoid is the "how" trap. Acceptance criteria should specify intent, but not the solution (for example, "The user can approve or reject an invoice", rather than "the user can click a checkbox to approve an invoice"). Criteria should be independent of implementation, and discuss what is expected, rather than how the functionality will be implemented.

Acceptance criteria formats

The Given / When / Then format is a useful way to define acceptance criteria:

Given some preconditions When I perform some action Then I expect some result

When we write acceptance criteria in this format, it not only provides a consistent structure, but it also helps determine when testers start and finish testing for that particular work item.

Sometimes it is difficult to construct acceptance criteria using the given-when-then format. This is particularly true when working with user stories at the system level. In those cases, I have found that using a verification checklist works well.

Another advantage of verification checklists is that they are also easy to mark off individually as complete as we implement the functionality.

What are some of the problems or techniques you have found when writing acceptance criteria?

Introduction to requirements analysis. Types and properties of requirements. Levels of requirements

Standard definition of the term «requirement»

The IEEE standard

  • • A requirement for a software system – is:
  • • A capability needed by a user to solve a problem or achieve a goal.
  • • A capability that must be met (achieved) by a system or its components to satisfy a contract, standard, specification, or other formal documents.
  • • A documented representation of items 1 – 2

The ISO 12207 standard

  • • The developer must establish and document the following requirements for the software product:
  • • functional and technical requirements, including performance, physical characteristics, and environmental conditions under which the software item must be created;
  • • requirements for the external interfaces of the software item;
  • • qualification requirements;
  • • safety requirements, including requirements relating to operating methods, maintenance, environmental impact, and personnel injury safety;
  • • etc.

Other definitions of the term «requirement»

Ian Sommerville & Pete Sawyer

A requirement – is a specification of what is to be obtained.

Requirements describe the behavior of a system, or the attributes and properties of a system.

Requirements can also act as constraints on the process of developing a system

L. Novikov, in the Russian edition of the Rational Unified Process notation

  • • A condition or capability that a system must satisfy
  • • A requirement is defined as “a condition or capability to which a system must conform”

Requirements – are separate (discrete) statements that together form a coherent picture

A requirement can describe particular characteristics or properties of a software product

A requirement can itself have a set of properties (attributes)

Requirements can have a complex structure of relationships and connections (for example, hierarchical)

Classification of requirements

Requirements for a software product and for the requirements themselves: analysis, types, attributes, SWEBOK

The “Software Requirements” knowledge area in SWEBOK (Software Engineering Body of Knowledge)

Requirements for a software product and for the requirements themselves: analysis, types, attributes, SWEBOK

SWEBOK defines the structure of the «Software Requirements» knowledge area and identifies the main activities involved in the development and management of requirements

Classification of requirements according to SWEBOK

Product and Process Requirements – parameters relating to the product or to the process of its creation

  • - a distinction is drawn between the corresponding requirements as properties of the product to be obtained, and of the process by which the product will be created
  • - it is noted that a number of requirements may be implicit, and software requirements can give rise to process requirements
  • - for example:
  • - operating in 24 x 7 mode (as a business requirement) will certainly lead to a restriction in the choice of particular software tools, deployment platforms, and architectural decisions;
  • - in turn, choosing the J2EE platform (Java 2 Enterprise Edition) and implementing it as a specific application server will almost certainly require the use of unit testing as a development-process practice, and JUnit as the tool implementing that practice

SWEBOK Functional and Non-functional Requirements

: functional requirements specify “what” the system must do, i.e. they describe the functions performed by the software; functional requirements are often presented in the form of scenarios (use cases); non-functional requirements impose certain constraints, i.e. under “what conditions” (for example, response speed when performing a given operation)

Independent or general properties (Emergent Properties) – these properties denote requirements that are addressed to the system as a whole and cannot be attributed to its individual elements. That is, such requirements relate to the synergistic effect that such a system may possess («the whole is greater than the sum of its parts»). An example would be a requirement for the «throughput» of a call center, which will depend on how the communications equipment, the operator, and the software interact under specific conditions.

Quantifiable Requirements – requirements that can be quantitatively defined/measured, for example, the system must provide a throughput of “so many requests per second”; at the same time, it is extremely important to understand that framing the question (that is, formulating the requirement) as “the system must provide increased throughput” without specifying particular quantitative characteristics is simply an improperly defined requirement.

System Requirements and Software Requirements – this division is based on the definition of a “system” given by INCOSE (International Council on Systems Engineering): “a combination of interacting elements <created> to achieve defined purposes; may include hardware, software, firmware, other means, people, information, techniques (approaches), services, and other supporting elements”; thus it is implied that a system is a broader concept than software and includes the environment in which the software operates as such; from this, naturally, follow requirements for the system as a whole and for the software (or software system) in particular. Often, in the literature on requirements management, system requirements are described as “user requirements”; SWEBOK restricts the use of the term “user requirement” to requirements for the end-user/customer system

Classification of requirements according to Karl Wiegers

Requirements for a software product and for the requirements themselves: analysis, types, attributes, SWEBOK

Classification of requirements according to K. Wiegers.

To manage requirements changes today, an approach formulated by the American software engineer and IT consultant Karl Wiegers is often used. The main content of K. Wiegers's approach is set out in his book «Software Requirements».

When creating an information system, two types of requirements are distinguished: functional and non-functional. Wiegers identifies three types of functional requirements:

  • 1) business requirements. This type of requirement is formed by the customer of the system and is based, first of all, on the goals of creating the ordered product. Business requirements define what benefits the customer should obtain from the finished product, as well as what problems or tasks will be solved as a result of its use. As a result of formulating business requirements, the boundaries of the system being created are outlined, and a general vision of the project is also formed. For example, at the business-requirements level, requirements for supporting business processes may be formulated. If the project is a CRM system, then the business requirements for it would include communication, reporting, and management processes;
  • 2) user requirements — these are the tasks that the system will solve to support users. Functional requirements at this level are represented in the form of scenarios (user journeys), algorithms, and «event — response» tables. The formation of user requirements can also be based on key roles that will be used to work with the system. The capabilities of each role, whether «Client», «Investor», «Partner», etc., will differ further on;
  • 3) functional requirements — these are the main requirements for the functionality of the system, which are then described in detail in the form of a technical specification and passed on to developers for implementation.

However, as practice has shown, functional requirements alone are not enough for the system, since a system built on their basis alone will not satisfy all business requirements. In this regard, K. Wiegers identifies three types of non-functional requirements for the system:

  • 1) business rules, which include regulatory requirements (for example, environmental regulations or safety standards), industry standards, corporate standards, and other constraints inevitably imposed by the external environment or by company policy;
  • 2) quality attributes, which are not related to the functionality of the system but are a mandatory condition for the effective use of the system being created in the future. Requirements of the «Quality attributes» type can include the ability to integrate with other systems, interoperability, support for software products, etc.;
  • 3) constraints, which typically include forced technical or resource limitations (performance levels, technical protocols, etc.).

It is worth noting separately that in his work K. Wiegers pointed out the difference in the sources used to form functional and non-functional requirements. Thus, the main sources for forming functional requirements are the functional descriptions of automation objects, company departments, roles, etc. Non-functional requirements, in turn, can be formulated on the basis of quality characteristics. The process of forming requirements is built on the basis of a survey of the enterprise, including interviews with employees and stakeholders, observation of the work process, questionnaires, etc.

Levels of requirements

Business requirements contain the high-level tasks and goals of the developing organization or of the system's customers. As a rule, they are voiced by those who fund the project, the buyers of the system, the manager of the actual users, or the marketing department. These requirements explain why the organization needs such a system, or, in other words, describe the goals that the organization intends to achieve with its help. Business requirements are recorded in the corresponding section of the Software Requirements Specification, although they may also be recorded in the form of a vision and scope document, which is sometimes also called the project charter or the market requirements document

User requirements describe the goals and tasks that the system will allow users to accomplish. Excellent ways of representing this type of requirement include use cases, scenarios, and «event – response» tables. Thus, user requirements define what customers will be able to do with the help of the system. Classification of requirements

System requirements define the functionality and characteristics of the system that developers must build so that users can accomplish their tasks (within the scope of the business requirements). The term system requirements denotes high-level requirements for products that contain many subsystems, that is, systems (IEEE, 1998 c). By system, we mean the software or the subsystems of software and hardware. People – are part of the system, so certain system functions may extend to people as well. Classification of requirements

Functional requirements define the functions performed by the system, and depend on user needs and the type of task being solved. Functional user requirements describe functions in a generalized form. By elaborating these requirements, developers form a more detailed and precise description of the system's services – functional system requirements. Special attention must be paid to the precise description of requirements when documenting them. Inaccuracies in the description will be interpreted differently by users and developers. Such a situation will lead to the development of new requirements or the modification of existing ones, and, consequently, to changes in the system and its increased cost. A requirements specification containing user and system requirements must be comprehensive and consistent. It must define all the functions of the system, and there must be no incompatible or mutually exclusive function definitions. Classification of requirements

Non-functional requirements define the characteristics and constraints of the system and are not directly related to functional requirements. They are formed on the basis of existing quality attributes, external interface requirements, and constraints. Non-functional requirements are divided into: non-functional product requirements, non-functional process requirements, and external non-functional requirements

Business rules include corporate policies, government regulations, industry standards, and computational algorithms. Business rules are not requirements for software, because they lie outside the boundaries of any software system. However, they often impose constraints, determining who may perform particular use cases, or dictating what functions the system must have in order to comply with the relevant rules. Sometimes business rules become a source of quality attributes that are realized in functionality. Business rules – are one of the main sources of functional requirements for software, since they determine the capabilities the system must have in order to enforce the rules. Classification of requirements

Classification of business rules

Facts – are simply true statements about the business, often describing links and relationships between important business terms. Facts are also called invariants – immutable truths about data entities and their attributes. Examples of facts: every product bears a unique barcode; delivery is paid for every order; every order line item contains data about the product and its price.

Constraints – define what operations the system and its users can perform. Here are some words and phrases that are often used to describe a restrictive business rule: must, cannot, and only. Most likely, the organization has security policies that define the procedure for accessing information systems. They usually state which passwords should be used, how often they must be changed, whether old passwords may be reused, and so on. All these restrictions on access to the application can be considered business rules.

Operation triggers. A rule that, under certain conditions, causes some action to be performed is called an operation trigger. A person can perform these actions independently. Alternatively, the rule can control certain program functions, thanks to which the application implements the desired behavior model when certain conditions are met. The conditions that determine whether an operation is executed are sometimes a complex combination of «true» and «false» values that hold for several separate conditions. An expression of the form «If <some condition is true or a certain event has occurred>, then <something will happen>», – is a sign that describes an operation trigger. .

Inference, sometimes also called inferred knowledge, is a rule that establishes new facts based on the truth of certain conditions. An inference creates a new fact based on other facts or calculations. Inferences are often written in the «if – then» format, which is also used for writing business rules that trigger operations; however, the «then» part of an inference contains a fact or assumption rather than an action. Here are a few examples of inferences: if a payment has not been received within 30 calendar days of the invoice being sent, the invoice is considered overdue; if a supplier cannot deliver the ordered goods within five days of receiving the order, the order is considered unfulfilled.

Computations. Computers perform calculations, and therefore one class of business rules defines calculations performed using mathematical formulas and algorithms. Many calculations are performed according to rules external to the enterprise, for example, income tax withholding formulas. Unlike operation-triggering business rules, which sometimes require creating specific functional requirements for the software in order to be implemented, calculation rules, in the form in which they are expressed, can be directly treated as software requirements. Business rules for calculations can be presented in text form or in symbolic form, for example as mathematical expressions, but presenting such rules as a table is much clearer than a long list of complex text expressions.

Non-functional product requirements

Non-functional product requirements define its operational qualities, i.e., they define how well the system will work. Such characteristics are often called software quality attributes or factors. The main difficulty is that quality attributes are hard to define (identify), they cannot be measured, and they strongly affect the implementation of the system.

Quality attributes are an additional description of the product's functions, expressed through a description of its characteristics that are important to users or developers. Such characteristics include ease and simplicity of use, portability, integrity, efficiency, and fault tolerance.

There is a large number of quality attributes.

For example, the ISO 9126 standard proposes evaluating software products according to six quality characteristics, recommending the use of 21 quality indicators (sub-characteristics). This same standard advises taking into account that perceptions of quality differ for different groups of stakeholders, citing as an example the perceptions of quality held by users, developers, and project managers.

Classification of quality attributes

Requirements for a software product and for the requirements themselves: analysis, types, attributes, SWEBOK

Attributes important to users

Availability refers to the planned up time during which the system is actually available for use and fully operational. Formally, availability is equal to the system's mean time to failure (MTTF) divided by the sum of the mean time to failure and the expected time to recover the system after a failure.

Efficiency is a measure of how efficiently the system uses processor performance, disk space, memory, or connection bandwidth.

Flexibility. This attribute is also called extensibility, augmentability, or scalability. Flexibility shows how easily new capabilities can be added to the product.

Integrity, which also includes security, is related to blocking unauthorized access to system functions, preventing information loss, protecting the software from viruses, and protecting the confidentiality and security of data entered into the system.

Interoperability shows how the system exchanges data or services with other systems. To assess interoperability, you need to know which applications clients will use alongside your product, and what data exchange is expected.

Reliability is the probability that the software will run without failures for a certain period of time. Fault tolerance is sometimes considered one of the characteristics of reliability. Indicators such as the percentage of successfully completed operations and the mean time the system runs before a failure are used to measure software reliability.

Fault tolerance, sometimes also called failure resilience, is the degree to which a system continues to correctly perform its functions despite incorrect input data, deficiencies in connected software or hardware components, or unexpected operating conditions.

Convenience and ease of use. This attribute is related to a host of factors that form the basis of what users often describe as user-friendliness. Convenience and ease of use are measured by the effort required to prepare input data, operate the system, and obtain the final output information.

Attributes important to developers and maintenance specialists

Ease of maintenance. This attribute shows how convenient it is to fix errors or modify the software. Ease of maintenance depends on how easy it is to understand how the software works, change it, and test it, and is closely related to flexibility and testability. This indicator is extremely important for products that undergo frequent changes and for those that are created quickly (and possibly with savings on quality).

Portability. Its measure can be considered the effort required to move the software from one operating environment to another. Portability is often also taken to include the ability to internationalize and localize the product.

Reusability. A constant challenge in software development – reusability – measures the effort required to convert software components for further use in other applications. The cost of developing software with reuse capability is significantly higher than that of creating a component that will only work in one application. It must be modular, well documented, independent of specific applications and the operating environment, and also possess certain universal capabilities.

Testability. This attribute is also called verifiability, and it shows how easily software components or the integrated product can be checked for defects.

Relationships between quality attributes

Most quality attributes conflict with each other, and for certain combinations of them trade-offs are unavoidable. Users and developers must decide which attributes are more important than others and adhere to these priorities when making decisions.

The table below reflects the relationships between the most common quality attributes. A «+» sign in a cell means that increasing the value of the attribute in the corresponding row has a positive effect on the attribute in the corresponding column. A «-» sign in a cell means that increasing the value of the attribute in that row has a negative effect on the attribute in the corresponding column. An empty cell means that the attribute in that row has little effect on the attribute in the column.

Positive and negative relationships between quality attributes

Requirements for a software product and for the requirements themselves: analysis, types, attributes, SWEBOK

Process non-functional requirements depend on the policies and organizational procedures of the customer and the developer. They define constraints related to the use of specific technologies and development standards, implementation constraints, such as the use of a specific programming language and design methods, documentation requirements, deadlines for producing the software product, and so on.

External non-functional requirements take into account factors external to the system and its development process. They define the interaction of the system being designed with other systems, personnel qualification requirements, legal requirements, logistical requirements, environmental requirements, ethical, environmental, and similar requirements.

Quality criteria for requirements

Quality criteria for individual statements of the requirements specification

Quality criteria for the requirements specification as a whole

Quality criteria for individual statements of the requirements specification

Completeness

A requirement is complete if and only if it contains all the information necessary to develop the corresponding functionality that should be implemented in the product.

If, in the process of developing requirements, some data is missing, the «TBD» (to be determined) mark should be used in the margin as a standard flag to highlight such a place. All gaps in each fragment of the requirements must be filled in before the requirements specification is finally approved.

Correctness

A requirement is correct if and only if it represents something required of the product being created.

Feasibility

A requirement is feasible if and only if it can be implemented within the known constraints of the product being created and its operating environment, including the agreed timeframe and budget.

Necessity

A requirement is necessary if and only if it reflects a capability that is genuinely needed by users or that is required to comply with external system requirements or standards. In addition, the requirement must originate from a person who has the authority to formulate requirements.

Ordering by importance and stability All requirements must be ordered by their importance to the customer and their stability. This ordering process is especially important for scope management. If resources are insufficient to implement all requirements within the allotted time and budget, it is useful to know which requirements are not so mandatory and which the customer considers critical.

Unambiguousness A requirement is unambiguous if and only if it can be interpreted in only one way. If the wording of a requirement can be interpreted differently by developers, users, and other project participants, it may well turn out that the system built will be completely different from what the customer envisioned.

Verifiability Requirements must be verifiable. A requirement as a whole is considered verifiable if and only if each of its constituent elementary requirements is verifiable. An elementary requirement is considered verifiable if and only if there exists a finite, cost-effective process by which a person or a machine can determine that the developed software system actually satisfies the given requirement. The practical task is to define requirements in such a way that they can subsequently be tested to determine whether they are actually being met.

Quality criteria for the requirements specification as a whole

Completeness A set of requirements is complete if and only if it describes all the important requirements of interest to users, including requirements related to functional capabilities, performance, design constraints, attributes, or external interfaces.

Consistency A set of requirements is consistent if and only if no subset of it, consisting of individual requirements, contradicts other subsets. Conflicts can take various forms and appear at different levels of detail.

Modifiability A set of requirements is modifiable when its structure and style are such that any change to the requirements can be made simply, completely, and consistently, without violating the existing structure and style of the entire subset. This requires that the requirements package have minimal redundancy and be well organized, with an appropriate table of contents, indexes, and cross-referencing capability.

Traceability A set of requirements is traceable when the origin of each of its constituent elementary requirements is clear and there is a mechanism that makes it possible to refer back to these requirements during further development activities. Traceability is extremely important. Developers can use it both to achieve a better understanding of the project and to provide a higher degree of confidence that all requirements are being met.

Assigning priorities to requirements

Priorities – is a way of resolving the conflict between competing requirements for limited resources. Determining the relative priority of each capability makes it possible to plan development so as to provide the greatest value at the lowest cost. Prioritization is most critical when working within very tight time constraints.

The project manager must balance the desired project scope against constraints determined by schedule, budget, human resources, and quality. One way to achieve this is to remove (or defer to a later version) low-priority requirements when new, more important requirements are accepted or other project conditions change.

Participating in prioritizing requirements is one of the customer's responsibilities in the «customer – developer» relationship. Discussing priorities helps not only to determine the order in which requirements are implemented, but also to clarify customer expectations. Both customers and developers should contribute to prioritizing requirements.

Customers need the functions that are most valuable to the business or to ease of work. However, once developers outline the costs, effort, technical risk, or trade-offs associated with each requirement, customers may change their minds and conclude that the requirement is not as important as they initially thought. Developers, in turn, sometimes decide to implement certain low-priority functions at an early stage because of their impact on the system architecture.

When assessing priorities, take into account the connections and relationships between different requirements, as well as their alignment with the project's business goals.

Priority scale Setting priorities: The Eisenhower Matrix

One approach to assessing priorities proposes taking into account two dimensions: importance and urgency. Each requirement is considered either important or not important, and either urgent or not urgent. This produces four combinations for defining the priority scale:

High-priority requirements – both important (users need the functions) and urgent (they are needed already in the next release). Some requirements have to be included in this category due to contractual or legal obligations, or for compelling business reasons.

Medium-priority requirements – important (users need the functions), but not urgent (they can wait for the next release). Low-priority requirements – not important (users can do without this function if necessary) and not urgent (users can wait, indefinitely even).

Requirements in the fourth cell seem urgent, but in reality they are not important. Do not waste time working on them – they will not make the product more valuable.

Requirements for a software product and for the requirements themselves: analysis, types, attributes, SWEBOK

Thus "Requirements" play a critical role in the software development process and systems engineering. Here are a few key takeaways on this topic, including the analysis and types of requirements, attributes, and a reference to SWEBOK (Guide to the Software Engineering Body of Knowledge).

  1. Types of requirements:

    • Functional requirements: Describe the functional capabilities of the system, i.e., what the system must do. This includes the main functions, tasks, and operations.
    • Non-functional requirements: Focus on system attributes such as performance, reliability, security, and usability. These requirements define "how" the system should work.
  2. Requirement attributes:

    • Clarity and understandability: Requirements must be clear and unambiguous to avoid misunderstandings and interpretation errors.
    • Completeness: All essential aspects of functional and non-functional requirements must be taken into account.
    • Maintainability: Requirements must be documented and easily accessible to all members of the development team.
    • Changeability: Requirements can change over time, and a change management process must be established.
    • Traceability: Tracking and verification methods are needed to make sure that requirements have been met.
  3. SWEBOK (Guide to the Software Engineering Body of Knowledge): SWEBOK is a reference guide that defines the knowledge and skills required for the professional practice of software engineering. It includes an extensive body of knowledge and practices related to requirements, design, development, testing, and project management in the field of software engineering.

  4. Requirements analysis: The requirements analysis process includes gathering, documenting, analyzing, and managing requirements. Requirements analysis helps determine which requirements are critical, which can be changed, and how they are interrelated.

In conclusion, requirements play a key role in the software development lifecycle and are important for achieving successful project outcomes. Their analysis, proper documentation, and management are essential for ensuring the quality of the developed system and its compliance with customer needs and software engineering standards. SWEBOK is a valuable resource for software engineering professionals, providing a common framework for defining the necessary knowledge and skills.

See also

  • [[b9511]]
  • [[b9966]]
  • [[b8995]]
  • [[b785]]
  • [[b5188]]
  • [[b5542]]
  • [[b7778]]
  • [[b12374]]

See also

Comments

Игорь 17-05-2021
Не статья, а набор слов.
"Лучшие методы рассматривают составленный список требований просто как подсказки и постоянно спрашивают «почему?», пока не будут выявлены истинные деловые цели"
... что это вообще значит?
Админ 09-06-2021
Лучшие практики используют составленный список требований просто как прототип и постоянно используют вопрос «почему?»., до тех пор, пока не будут обнаружены фактические бизнес-цели.

Затем заинтересованные стороны и разработчики могут разработать тесты, чтобы измерить, какой уровень каждой цели был достигнут на данный момент.
Лиза 10-03-2021
Статью не возможно читать . Такое чувство , что просто взяли иностранную статью всунули в Гугл переводчик и даже не читая скинули сюда . Просто мозг кипит , набор слов
Админ 10-03-2021
предложите предложения-исправления
Александр 01-12-2020
Ужасный перевод, смысл и идея статьи не понятны.
Админ 01-12-2020
что именно непонятно? какой раздел или понятие?

To leave a comment

If you have any suggestion, idea, thanks or comment, feel free to write. We really value feedback and are glad to hear your opinion.
To reply

Lectures and tutorial on "Quality Assurance"

Terms: Quality Assurance