For most of my time in software, I’ve been told that the requirements are the source of most defects (and misunderstandings). You can get this picture from many articles, magazines, books, etc. My experiences in this area tend to support this assertion – even when it’s me writing the requirements. Because of this, I’ve tried to improve my requirements gathering skills by applying practices from books such as this and this. I have participated in document reviews, mandated that people review my documents and lent heavily towards agile practices to eliminate this bug-ridden process from software development that I’m involved in.
What has surprised me most is that there has not been a good way of augmenting human abilities with Requirements Quality. What I’m really talking about is an automated assistant or consistent quality test when writing requirements. There are many options with unit, system and integration testing but none it seems for requirements. There are many requirements management tools, but they just seem to turn documents into databases. I heavily use word’s grammar checking capability. It’s helped me reduce passive sentences from my documents. I have also used word’s readability statistics to help me understand how complex my documents are. However, these practices wax and wane with my interest and commitment to other things, like deadlines.
This unease with requirements tooling is on it’s way to being resolved. This document from the SEI discusses a project that applies lexical and syntactic analysis to indicate the quality of a requirement. A quick summary follows. There are three main requirement characteristics that this tool measures. Unambiguity, the ability of a sentence to have a single interpretation. Understandability, the ability of a requirement to be easily understood by any reader. Specification Completion, the ability of each requirement to uniquely identify its object or subject.
To break it further down, each characteristic group has the following characteristics.
Unambiguity
Vagueness – vague words
Subjectivity – opinions or feelings
Optionality - when the sentence contains a part that can or cannot be considered
Implicity - object of the sentence is generically expressed
Weakness - sentence contains a weak verb
Completeness
Under-specification - when a sentence contains a class of object without specifying an instance of this class
Understandability
Multiplicity – when there is more than 1 subject or verb
Readability – statistical method to calculate readability.
The tool processes each sentence and analyses it for the above characteristics. Sentences that are possibly defective are highlighted and require the reviewer to make decisions. What this means is that reviewing or creating a document will be simplified, leaving human reviewers to concentrate on more high-level tasks.
There’s another potentially fantastic feature, that of views. Views are subsets of a document that deal with a particular area. For example, when viewing the “security” view of a document, it shows you all the statements that meet the criteria defining the security view. Obviously, the view is only as good as the criteria, but fine-tuning the criteria is a small problem to deal with once you have the view. Imagine centralizing all the requirements about scalability, or performance, or any of the other ‘iliities – brilliant.
Unfortunately, this tool is not available for download in any place I can see. Its home page can be found here.
I would love to see a tool such as CaliberRM build this into their toolset, the quality of requirements would increase dramatically.



