{"id":3433,"date":"2013-08-09T08:10:00","date_gmt":"2013-08-09T15:10:00","guid":{"rendered":"https:\/\/www.jamasoftware.com\/?p=3433"},"modified":"2023-01-12T16:56:45","modified_gmt":"2023-01-13T00:56:45","slug":"elements-of-requirements-style-part-3","status":"publish","type":"post","link":"https:\/\/www.jamasoftware.com\/legacy\/blog\/2013\/08\/09\/elements-of-requirements-style-part-3\/","title":{"rendered":"Elements of Requirements Style, Part 3"},"content":{"rendered":"<p>One of the most common types of requirements problem is missing information. Either entire requirements could be absent\u2014which are hard to spot, being invisible\u2014or individual requirements are missing information that help make them fully comprehensible. In this article I\u2019ll present some examples of both kinds of problems, along with some recommended solutions.<\/p>\n<h2>Omissions<\/h2>\n<p>When requirements lack important bits of information, it\u2019s hard for all readers to interpret them in the same way unless they make precisely the same assumptions. For instance, a functional requirement might describe a behavior without identifying the triggering cause that leads to that behavior:<\/p>\n<p>The system shall generate an error report and forward it to the user.<\/p>\n<p>This requirement doesn\u2019t identify the stimulus that leads the system to produce the error report. Another common mistake involves missing descriptions of how possible exceptions should be handled. In the previous example, what should happen if no errors occur during the processing being described? It\u2019s unspecified, thereby leaving it up to the developer to decide what to do. Options include:<\/p>\n<ul>\n<li>Do nothing (an assumed default perhaps).<\/li>\n<li>Present a \u201cCongratulations! No errors found.\u201d message but do not generate a report.<\/li>\n<li>Generate an empty report and forward it to the user.<\/li>\n<li>Generate a report stating that no errors were found and forward it to the user.<\/li>\n<\/ul>\n<p>Perhaps we add the following requirement to address the case in which no errors are encountered:<\/p>\n<p>If parsing is successful, the system shall not generate an error report.<\/p>\n<p>This is another description of the system doing nothing, though, as I discussed under \u201cNegative Requirements\u201d in a earlier article in this series. It would be better to state what the system <i>will<\/i> do if no error is encountered, even if it is to simply continue the processing.<\/p>\n<p>Another kind of incompleteness occurs when requirements describe system behaviors that involve some type of symmetry. Suppose you\u2019re specifying the functional requirements for a bookmark feature in a Web browser. You might say:<\/p>\n<p>The system shall display the user\u2019s defined bookmarks in a collapsible hierarchical tree structure.<\/p>\n<p>So, the user can collapse the bookmark tree, but what if he wants to expand it again? It\u2019s easy to overlook that sort of symmetrical or reverse operation. To remedy this, either you could add a second requirement stating that the tree can be expanded, or you could alter this requirement to say \u201c\u2026in a collapsible <b>and expandable<\/b> hierarchical tree structure.\u201d<\/p>\n<p>If you omit the reverse operation, the customer and the BA might assume that the missing portion of the symmetrical requirement is implied. If you request an undo capability, of course you want a redo capability as well, right? But implicit requirements make me nervous. They involve too many assumptions about the knowledge and thought processes that other stakeholders must have to ensure that we all get what we expect in the final product. I know of a organization that developed its own tool for editing and storing source code in a database, with no written requirements. Unfortunately, they forgot to include the ability to print the contents of the database. The team members no doubt assumed that a printing function would be included so didn\u2019t even think to mention it. They didn\u2019t mention it, and they didn\u2019t get it.<\/p>\n<h2>Boundaries<\/h2>\n<p>Boundary values in numerical ranges provide additional opportunities for creating ambiguity, as well as being places to look for missing requirements. Suppose you\u2019re writing software for a point-of-sale system and you need to comply with a business rule that states, \u201cOnly supervisors may issue cash refunds greater than $50.\u201d An analyst might derive several functional requirements from that business rule, such as the following:<\/p>\n<ol>\n<li>If the amount of the cash refund is less than $50, the system shall open the cash register drawer.<\/li>\n<li>If the amount of the cash refund is more than $50 and the user is a supervisor, the system shall open the cash register drawer. If the user is not a supervisor, the system shall display a message: \u201cCall a supervisor for this transaction.\u201d<\/li>\n<\/ol>\n<p>But what if the amount of the cash refund is exactly $50? Is this a third, unspecified case? Or is it one of the two cases already described? If so, which one? Such ambiguity forces the developer either to make his best guess or to track down someone who can answer the question definitively. This is an example of the BA generating an inconsistency between a higher-level piece of information\u2014the business rule\u2014and the functional requirements derived from it.<\/p>\n<p>You can resolve boundary ambiguities in one of two ways. The previous requirement #1 could be rewritten as, \u201cIf the amount of the cash refund is less than <i>or equal to<\/i> $50, the system shall open the cash register drawer.\u201d This preserves the original intent of the business rule and eliminates the ambiguity.<\/p>\n<p>Alternatively, you could use the words <i>inclusive<\/i> and <i>exclusive<\/i> to explicitly indicate whether the endpoints of a numerical range are considered to lie within the range or outside the range. To illustrate with a different example, you might say, \u201cThe system shall calculate a 20% discount on orders of 6 to 10 units, inclusive.\u201d This wording makes it perfectly clear that both endpoints of the range, 6 and 10, lie within the range subject to the 20-percent price discount. You still need to review a set of similar requirements to make sure the range endpoints don\u2019t overlap, though. For example, note the inconsistency between the following two requirements:<\/p>\n<ol>\n<li>The system shall calculate a 20% discount on orders of 6 to 10 units, inclusive.<\/li>\n<li>The system shall calculate a 30% discount on orders of 10 to 20 units, inclusive.<\/li>\n<\/ol>\n<p>The boundary value of 10 is incorrectly included in both ranges. Using a table to show this sort of information is more concise and makes these kinds of errors more evident:<\/p>\n<table border=\"1\" cellspacing=\"0\" cellpadding=\"0\">\n<tbody>\n<tr>\n<td valign=\"top\" width=\"319\">Units Purchased<\/td>\n<td valign=\"top\" width=\"319\">Discount Percentage<\/td>\n<\/tr>\n<tr>\n<td valign=\"top\" width=\"319\">1\u20135<\/td>\n<td valign=\"top\" width=\"319\">0<\/td>\n<\/tr>\n<tr>\n<td valign=\"top\" width=\"319\">6\u201310<\/td>\n<td valign=\"top\" width=\"319\">20<\/td>\n<\/tr>\n<tr>\n<td valign=\"top\" width=\"319\">11\u201320<\/td>\n<td valign=\"top\" width=\"319\">30<\/td>\n<\/tr>\n<tr>\n<td valign=\"top\" width=\"319\">21+<\/td>\n<td valign=\"top\" width=\"319\">40<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>Also read\u00a0<a title=\"Elements of Requirements Style, Part 1\" href=\"https:\/\/www.jamasoftware.com\/blog\/elements-of-requirements-style-part-1\">Elements of Requirements Style, Part 1<\/a><\/p>\n<p>Also read\u00a0<a title=\"Elements of Requirements Style, Part 2\" href=\"https:\/\/www.jamasoftware.com\/blog\/elements-of-requirements-style-part-2\">Elements of Requirements Style, Part 2<\/a><\/p>\n<p>Also read\u00a0<a title=\"Elements of Requirements Style, Part 4\" href=\"https:\/\/www.jamasoftware.com\/blog\/elements-of-requirements-style-part-4\">Elements of Requirements Style, Part 4<\/a><\/p>\n<p><i>Jama Software has partnered with Karl Wiegers to share licensed content from his books and articles on our web site via a series of blog posts, whitepapers and webinars.\u00a0 Karl Wiegers is an independent consultant and not an employee of Jama. \u00a0He can be reached at\u00a0<\/i><i><a href=\"http:\/\/www.processimpact.com\">http:\/\/www.processimpact.com<\/a><\/i><i>.\u00a0 Enjoy these free\u00a0<\/i><i><a href=\"https:\/\/www.jamasoftware.com\/resources\/\">requirements management resources<\/a><\/i><i>.<\/i><\/p>\n<input class=\"fooboxshare_post_id\" type=\"hidden\" value=\"3433\"\/>","protected":false},"excerpt":{"rendered":"<p>One of the most common types of requirements problem is missing information. Either entire requirements could be absent\u2014which are hard to spot, being invisible\u2014or individual requirements are missing information that help make them fully comprehensible. In this article I\u2019ll present some examples of both kinds of problems, along with some recommended solutions. Omissions When requirements [&hellip;]<\/p>\n","protected":false},"author":68,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"inline_featured_image":false,"footnotes":""},"categories":[50],"tags":[51,115,38],"industry":[],"class_list":["post-3433","post","type-post","status-publish","format-standard","hentry","category-requirements-management","tag-business-requirements","tag-elements","tag-karl-wiegers"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v28.1 (Yoast SEO v28.1) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>Elements of Requirements Style, Part 3 - Jama Software<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.jamasoftware.com\/blog\/2013\/08\/09\/elements-of-requirements-style-part-3\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Elements of Requirements Style, Part 3\" \/>\n<meta property=\"og:description\" content=\"One of the most common types of requirements problem is missing information. Either entire requirements could be absent\u2014which are hard to spot, being invisible\u2014or individual requirements are missing information that help make them fully comprehensible. In this article I\u2019ll present some examples of both kinds of problems, along with some recommended solutions. Omissions When requirements [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.jamasoftware.com\/blog\/2013\/08\/09\/elements-of-requirements-style-part-3\/\" \/>\n<meta property=\"og:site_name\" content=\"Jama Software\" \/>\n<meta property=\"article:published_time\" content=\"2013-08-09T15:10:00+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2023-01-13T00:56:45+00:00\" \/>\n<meta name=\"author\" content=\"Karl Wiegers\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Karl Wiegers\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"5 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/www.jamasoftware.com\\\/blog\\\/2013\\\/08\\\/09\\\/elements-of-requirements-style-part-3\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.jamasoftware.com\\\/blog\\\/2013\\\/08\\\/09\\\/elements-of-requirements-style-part-3\\\/\"},\"author\":{\"name\":\"Karl Wiegers\",\"@id\":\"https:\\\/\\\/www.jamasoftware.com\\\/#\\\/schema\\\/person\\\/e6a00f0ad439a5e1865476b36481aa47\"},\"headline\":\"Elements of Requirements Style, Part 3\",\"datePublished\":\"2013-08-09T15:10:00+00:00\",\"dateModified\":\"2023-01-13T00:56:45+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.jamasoftware.com\\\/blog\\\/2013\\\/08\\\/09\\\/elements-of-requirements-style-part-3\\\/\"},\"wordCount\":1051,\"keywords\":[\"business requirements\",\"elements\",\"karl wiegers\"],\"articleSection\":[\"Requirements &amp; Requirements Management\"],\"inLanguage\":\"en-US\"},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.jamasoftware.com\\\/blog\\\/2013\\\/08\\\/09\\\/elements-of-requirements-style-part-3\\\/\",\"url\":\"https:\\\/\\\/www.jamasoftware.com\\\/blog\\\/2013\\\/08\\\/09\\\/elements-of-requirements-style-part-3\\\/\",\"name\":\"Elements of Requirements Style, Part 3 - Jama Software\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.jamasoftware.com\\\/#website\"},\"datePublished\":\"2013-08-09T15:10:00+00:00\",\"dateModified\":\"2023-01-13T00:56:45+00:00\",\"author\":{\"@id\":\"https:\\\/\\\/www.jamasoftware.com\\\/#\\\/schema\\\/person\\\/e6a00f0ad439a5e1865476b36481aa47\"},\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.jamasoftware.com\\\/blog\\\/2013\\\/08\\\/09\\\/elements-of-requirements-style-part-3\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.jamasoftware.com\\\/blog\\\/2013\\\/08\\\/09\\\/elements-of-requirements-style-part-3\\\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.jamasoftware.com\\\/blog\\\/2013\\\/08\\\/09\\\/elements-of-requirements-style-part-3\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/www.jamasoftware.com\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Elements of Requirements Style, Part 3\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.jamasoftware.com\\\/#website\",\"url\":\"https:\\\/\\\/www.jamasoftware.com\\\/\",\"name\":\"Jama Software\",\"description\":\"Jama Connect\u00ae #1 in Requirements Management\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.jamasoftware.com\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/www.jamasoftware.com\\\/#\\\/schema\\\/person\\\/e6a00f0ad439a5e1865476b36481aa47\",\"name\":\"Karl Wiegers\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/6d4992a28dda9ae47cf239c04be9a0bc554586672cba38949c070d2fed228aef?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/6d4992a28dda9ae47cf239c04be9a0bc554586672cba38949c070d2fed228aef?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/6d4992a28dda9ae47cf239c04be9a0bc554586672cba38949c070d2fed228aef?s=96&d=mm&r=g\",\"caption\":\"Karl Wiegers\"},\"description\":\"Subject matter expert Karl Wiegers writes on best practices for writing requirements, requirements management, and requirements traceability.\",\"sameAs\":[\"alison@makes-magic.com\"],\"url\":\"https:\\\/\\\/www.jamasoftware.com\\\/blog\\\/author\\\/kwiegers\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Elements of Requirements Style, Part 3 - Jama Software","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.jamasoftware.com\/blog\/2013\/08\/09\/elements-of-requirements-style-part-3\/","og_locale":"en_US","og_type":"article","og_title":"Elements of Requirements Style, Part 3","og_description":"One of the most common types of requirements problem is missing information. Either entire requirements could be absent\u2014which are hard to spot, being invisible\u2014or individual requirements are missing information that help make them fully comprehensible. In this article I\u2019ll present some examples of both kinds of problems, along with some recommended solutions. Omissions When requirements [&hellip;]","og_url":"https:\/\/www.jamasoftware.com\/blog\/2013\/08\/09\/elements-of-requirements-style-part-3\/","og_site_name":"Jama Software","article_published_time":"2013-08-09T15:10:00+00:00","article_modified_time":"2023-01-13T00:56:45+00:00","author":"Karl Wiegers","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Karl Wiegers","Est. reading time":"5 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.jamasoftware.com\/blog\/2013\/08\/09\/elements-of-requirements-style-part-3\/#article","isPartOf":{"@id":"https:\/\/www.jamasoftware.com\/blog\/2013\/08\/09\/elements-of-requirements-style-part-3\/"},"author":{"name":"Karl Wiegers","@id":"https:\/\/www.jamasoftware.com\/#\/schema\/person\/e6a00f0ad439a5e1865476b36481aa47"},"headline":"Elements of Requirements Style, Part 3","datePublished":"2013-08-09T15:10:00+00:00","dateModified":"2023-01-13T00:56:45+00:00","mainEntityOfPage":{"@id":"https:\/\/www.jamasoftware.com\/blog\/2013\/08\/09\/elements-of-requirements-style-part-3\/"},"wordCount":1051,"keywords":["business requirements","elements","karl wiegers"],"articleSection":["Requirements &amp; Requirements Management"],"inLanguage":"en-US"},{"@type":"WebPage","@id":"https:\/\/www.jamasoftware.com\/blog\/2013\/08\/09\/elements-of-requirements-style-part-3\/","url":"https:\/\/www.jamasoftware.com\/blog\/2013\/08\/09\/elements-of-requirements-style-part-3\/","name":"Elements of Requirements Style, Part 3 - Jama Software","isPartOf":{"@id":"https:\/\/www.jamasoftware.com\/#website"},"datePublished":"2013-08-09T15:10:00+00:00","dateModified":"2023-01-13T00:56:45+00:00","author":{"@id":"https:\/\/www.jamasoftware.com\/#\/schema\/person\/e6a00f0ad439a5e1865476b36481aa47"},"breadcrumb":{"@id":"https:\/\/www.jamasoftware.com\/blog\/2013\/08\/09\/elements-of-requirements-style-part-3\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.jamasoftware.com\/blog\/2013\/08\/09\/elements-of-requirements-style-part-3\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.jamasoftware.com\/blog\/2013\/08\/09\/elements-of-requirements-style-part-3\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.jamasoftware.com\/"},{"@type":"ListItem","position":2,"name":"Elements of Requirements Style, Part 3"}]},{"@type":"WebSite","@id":"https:\/\/www.jamasoftware.com\/#website","url":"https:\/\/www.jamasoftware.com\/","name":"Jama Software","description":"Jama Connect\u00ae #1 in Requirements Management","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.jamasoftware.com\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Person","@id":"https:\/\/www.jamasoftware.com\/#\/schema\/person\/e6a00f0ad439a5e1865476b36481aa47","name":"Karl Wiegers","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/secure.gravatar.com\/avatar\/6d4992a28dda9ae47cf239c04be9a0bc554586672cba38949c070d2fed228aef?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/6d4992a28dda9ae47cf239c04be9a0bc554586672cba38949c070d2fed228aef?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/6d4992a28dda9ae47cf239c04be9a0bc554586672cba38949c070d2fed228aef?s=96&d=mm&r=g","caption":"Karl Wiegers"},"description":"Subject matter expert Karl Wiegers writes on best practices for writing requirements, requirements management, and requirements traceability.","sameAs":["alison@makes-magic.com"],"url":"https:\/\/www.jamasoftware.com\/blog\/author\/kwiegers\/"}]}},"_links":{"self":[{"href":"https:\/\/www.jamasoftware.com\/legacy\/wp-json\/wp\/v2\/posts\/3433","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.jamasoftware.com\/legacy\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.jamasoftware.com\/legacy\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.jamasoftware.com\/legacy\/wp-json\/wp\/v2\/users\/68"}],"replies":[{"embeddable":true,"href":"https:\/\/www.jamasoftware.com\/legacy\/wp-json\/wp\/v2\/comments?post=3433"}],"version-history":[{"count":0,"href":"https:\/\/www.jamasoftware.com\/legacy\/wp-json\/wp\/v2\/posts\/3433\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.jamasoftware.com\/legacy\/wp-json\/wp\/v2\/media?parent=3433"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.jamasoftware.com\/legacy\/wp-json\/wp\/v2\/categories?post=3433"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.jamasoftware.com\/legacy\/wp-json\/wp\/v2\/tags?post=3433"},{"taxonomy":"industry","embeddable":true,"href":"https:\/\/www.jamasoftware.com\/legacy\/wp-json\/wp\/v2\/industry?post=3433"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}