Rethinking Functional Requirements: A Novel Approach Categorizing System and Software Requirements
Manfred Broy · 2018
Requirements engineering (RE) constitutes an important success factor for software and systems development. Requirements documents, as they are worked out before and during the development of (software) systems, tend to get large and complex. Adequate structuring of requirements documents on the basis of a carefully chosen and adequate categorization is crucial to support their systematic elicitation, analysis, (seamless) specification, documentation, and implementation. So far, however, a well-defined categorization of requirements still constitutes one of the not sufficiently solved challenges in requirements engineering. Structuring large sets of requirements has to be done in combination with adequate choices of levels of abstraction to keep them structured and manageable. Different ways of categorizing and structuring requirements have been suggested in literature. Often, used categories are "functional" versus "nonfunctional" requirements as well as "quality requirements" versus "process constraints" and "product constraints." Other categorizations are derived from the different categories of stakeholders. However, the characterizations of these categories remain often vague, imprecise, and lack semantic coherence and consistency. In the following, we present a novel approach to categorizing requirements. We base the categorization on a functional and architectural modeling of systems, including both logical (set theoretical) and probabilistic models of behavior. In contrast to traditional categories, in which we distinguish between "functional" and "nonfunctional" requirements, we suggest to use the dichotomies of behavioral versus nonbehavioral properties to further structure behavior into logical versus probabilistic and furthermore into behavioral black box (interface) views versus behavioral glass box views. This provides a precise and more coherent classification of requirements.