{"id":26,"date":"2014-12-11T21:23:59","date_gmt":"2014-12-11T21:23:59","guid":{"rendered":"http:\/\/dawilson.co.uk\/blog\/?p=26"},"modified":"2014-12-19T20:44:45","modified_gmt":"2014-12-19T20:44:45","slug":"no-comprende-the-non-functional-requirements-part-2","status":"publish","type":"post","link":"https:\/\/dawilson.co.uk\/blog\/no-comprende-the-non-functional-requirements-part-2\/","title":{"rendered":"No comprende the non-functional requirements: Part 2"},"content":{"rendered":"<p>In a <a title=\"No comprende the non-functional requirements: Part 1\" href=\"https:\/\/dawilson.co.uk\/blog\/?p=16\">previous post<\/a> I discussed\u00a0my difficulty\u00a0in understanding the concept of\u00a0non-functional requirements and how I\u00a0planned\u00a0to attend a lecture on the subject provided by my local branch of the Chartered Institute for IT.<\/p>\n<p>Having now\u00a0sat through this lecture, I am relieved to know that I was not alone in my confusion; and overjoyed that the concept clicked nicely into place\u00a0while\u00a0the speaker was providing\u00a0examples and answering the lively questions put forward by members of the audience.<\/p>\n<p>Indeed, the opening slide attested to the fact that there is ambiguity in the literature\u00a0by providing three very different definitions of what a non-functional requirement actually is. Indecently, all three definitions differ\u00a0again to the two\u00a0that I had been\u00a0given previously during my university studies.<\/p>\n<p>The\u00a0mist\u00a0began to clear for me during the next slide, which turned to discussion of what a non-functional requirement is not.\u00a0Or put another way &#8211;\u00a0reinforcing the definition of what\u00a0a functional requirement is; something that perhaps I had skimmed over in the past, feeling it to be understood intuitively.<\/p>\n<p>The fact is: a functional requirement must\u00a0&#8216;do&#8217; something; it embodies a process that can be depicted in a flow chart.\u00a0An example of this may be:\u00a0&#8216;the mobile phone shall send and receive\u00a0text messages&#8217;.<\/p>\n<p><span style=\"text-decoration: underline;\">Non-functional requirements are simply everything else.<\/span><\/p>\n<p>Sizes, shapes, colours, costs,\u00a0etc. are all non-functional requirements. They don&#8217;t &#8216;do&#8217; anything.<\/p>\n<p>At this point it started to become\u00a0apparent to me that the notion of functional requirements is possibly very widely misunderstood, and that\u00a0the vast majority of a project&#8217;s requirements\u00a0will actually fall into the\u00a0non-functional category.<\/p>\n<p>Furthermore, I have begun to develop my own theory regarding non-functional requirements as an attribute, or property, of another object. For example: a system may be made up of a set of components, but will also have its own\u00a0non-functional requirements. These system level non-functional requirements may relate to\u00a0the programming language or operating system used, the overall cost of the system, or characteristics of the target users.<\/p>\n<p>Each component will subsequently consist of a set of functional requirements, which together specify what the component does, but also includes a set of component level non-functional requirements. These may relate to the component&#8217;s size, complexity, or how it interfaces with other components.<\/p>\n<p>Finally, each functional requirement will in turn have its own set of non-functional requirements. At this level, these will relate to constraints on how the function is carried out; such as the expected length of a string being input into a webpage form field, or the font, colour, and size of a message that is displayed to the user.<\/p>\n<p>I find it particularly interesting that at each of the levels (system, component or functional requirement level)\u00a0a common set of non-functional requirements\u00a0would reoccur with each new project.\u00a0For example: the size of a system must always be considered,\u00a0as must the font and size of \u00a0a message to be displayed.<\/p>\n<p>These common categories of non-functional requirements could\u00a0quite easily be used as\u00a0the basis for a template or automated tool that could then\u00a0be used\u00a0to speed up\u00a0requirements gathering activity, whilst ensuring that all necessary requirements were captured and verifiable.<\/p>\n<p>Looking back\u00a0to my original post, I can now see that the definitions I had been given during my university\u00a0studies\u00a0were actually correct,\u00a0and perhaps the problem stemmed from my own limited understanding\u00a0surrounding functional requirements.<\/p>\n<p>From now on though, if I am in a discussion over whether or not a requirement is functional or non-functional, I will simply suggest to consider whether the requirement actually &#8216;does&#8217; something. If not, then it is definitely non-functional.<\/p>\n<p>DW.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>In a previous post I discussed\u00a0my difficulty\u00a0in understanding the concept of\u00a0non-functional requirements and how I\u00a0planned\u00a0to attend a lecture on the subject provided by my local branch of the Chartered Institute for IT. Having now\u00a0sat through this lecture, I am relieved to know that I was not alone in my confusion; and overjoyed that the concept &hellip; <\/p>\n<p class=\"link-more\"><a href=\"https:\/\/dawilson.co.uk\/blog\/no-comprende-the-non-functional-requirements-part-2\/\" class=\"more-link\">Continue reading<span class=\"screen-reader-text\"> &#8220;No comprende the non-functional requirements: Part 2&#8221;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_jetpack_memberships_contains_paid_content":false,"footnotes":""},"categories":[11],"tags":[8,6],"class_list":["post-26","post","type-post","status-publish","format-standard","hentry","category-assorted-musings","tag-requirements-engineering-2","tag-software-engineering"],"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/dawilson.co.uk\/blog\/wp-json\/wp\/v2\/posts\/26","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/dawilson.co.uk\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/dawilson.co.uk\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/dawilson.co.uk\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/dawilson.co.uk\/blog\/wp-json\/wp\/v2\/comments?post=26"}],"version-history":[{"count":9,"href":"https:\/\/dawilson.co.uk\/blog\/wp-json\/wp\/v2\/posts\/26\/revisions"}],"predecessor-version":[{"id":56,"href":"https:\/\/dawilson.co.uk\/blog\/wp-json\/wp\/v2\/posts\/26\/revisions\/56"}],"wp:attachment":[{"href":"https:\/\/dawilson.co.uk\/blog\/wp-json\/wp\/v2\/media?parent=26"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/dawilson.co.uk\/blog\/wp-json\/wp\/v2\/categories?post=26"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/dawilson.co.uk\/blog\/wp-json\/wp\/v2\/tags?post=26"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}