7

Problem domain

  • Functional requirements defines what a system does.
  • Non-Functional requirements defines quality attributes of what the system does as a whole.(performance, security, reliability, volume, useability, etc.)
  • Constraints limits the design space, they restrict designers to certain types of solutions.

Solution domain

  • Design ideas , defines how the system does it.

For example a stakeholder need might be we want to increase our sales, therefore we must improve the usability of our webshop so more customers will purchase, a requirement can be written for this. (problem domain)

Design takes this further into the solution domain by saying "therefore we want to offer credit card payments in addition to the current prepayment option".

My problem is that the transition phase from requirement to design seems really vague, therefore when writing a software requirement specification I am often confused whether or not I incorporated design ideas in my requirements, that would make my requirement wrong.

Another problem is that I often write functional requirements as what a system does, and then I also specify in what timeframe it must be done. But is this correct? Is it then a still a functional requirement or a non functional one? Is it better to seperate it into two distinct requirements?

Here are a few requirements I wrote:

FR1 Registration of Organizer

FR1 describes the registration of an Organizer on CrowdFundum

  • FR1.1 The system shall display a registration form on the website.
  • FR1.2 The system shall require a Name, Username, Document number passport/ID card, Address, Zip code, City, Email address, Telephone number, Bank account, Captcha code on the registration form when a user registers.
  • FR1.4 The system shall display an error message containing: “Registration could not be completed” to the subscriber within 1 seconds after the system check of the registration form was unsuccessful.
  • FR1.5 The system shall send a verification email containing a verification link to the subscriber within 30 seconds after the system check of the registration form was successful.
  • FR1.6 The system shall add the newly registered Organizer to the user base within 5 seconds after the verification link was accessed.

    FR2 Organizer submits a Project

FR2 describes the submission of a Project by an Organizer on CrowdFundum

- FR2 The system shall display a submit Project form to the Organizer accounts on the website.< - FR2.3 The system shall check for completeness the Name of the Project, 1-3 Photo’s, Keywords of the Project, Punch line, Minimum and maximum amount of people, Funding threshold, One or more reward tiers, Schedule of when what will be organized, Budget plan, 300-800 Words of additional information about the Project, Contact details within 1 secondin after an Organizer submits the submit Project form. - FR2.8 The system shall add to the homepage in the new Projects category the Project link within 30 seconds after the system made a Project webpage
- FR2.9 The system shall include in the Project link for the homepage : Name of the Project, 1 Photo, Punch line within 30 seconds after the system made a Project webpage.

Questions:
FR 1.1 : Have I incorporated a design idea here, would " the system shall have a registration form" be a better functional requirement?
F1.2 ,2.3 : Is this not singular? Would the conditions be better written for each its own separate requirement
FR 1.4: Is this a design idea? Is this a correct functional requirement or have I incorporated non functional(performance) in it? Would it be better if I written it like this:
FR1 The system shall display an error message when check is unsuccessful.
NFR: The system will respond to unsuccesful registration form checks within 1 seconds. Same question with FR 2.8 and 2.9.
FR2.3: The system shall check for "completeness", is completeness here used ambigiously? Should I rephrase it?
FR1.2: I added that the system shall require a "Captcha code" is this a functional requirement or does it belong to the "security aspect" of a non functional requirement.

I am eagerly waiting for your response. Thanks!

  • 1
    I think you might be overthinking this. The purpose of requirements gathering is to capture enough requirements to effectively describe the system being built. Requirements should be testable. Design is the way you implement the requirements. Design provides structural stability, flexibility and cohesiveness. Design is not the same thing as requirements gathering. If you're having trouble conceptualizing the design, write a Software Design Specification. Stop getting hung up in the vocabulary; you don't need to sound smart, you just need to be smart. – Robert Harvey Oct 23 '13 at 15:53
  • Hi Robert, Thanks for your response. However I am not doing a requirements gathering. I am writing a SRS, Software requirements specification. I know the difference between requirements and design per definition, however it is different when actually doing it. A SRS should only have functional, non functional and constraints, however I am not sure what exactly marks the stage between being a proper requirement and being a design idea. See point 1.4 for example, I want my system to do that, but if I specify it in this way, would it be a design idea? As I also included "HOW" a system does it. – Nicholas Chow Oct 23 '13 at 16:07
  • Is your goal to get the vocabulary right, or to make sure you have a sound design? I'm not sure why you think it's important to categorize it as a design idea. – Robert Harvey Oct 23 '13 at 16:11
  • My goal is to have no "sound design ideas" incorporated in each of my requirements. Because by incorporating it, it would limit the playing field of designers. My "fictional" client would like to give designers their own playing field with "how" they do it. The template I am using only tells me to write 3 kinds of requirements: Functional, Non functional and constraints. And one of the main criteria for grading is that the requirements need to be real requirements and not design ideas. For me this is really vague. The supervisors all just give me the definition again and say figure out. – Nicholas Chow Oct 23 '13 at 16:13
  • Then focus on the behavior that you expect from the system in your SRS, not on the implementation. Right? – Robert Harvey Oct 23 '13 at 16:15
5

I'm going to rely upon the SWEBOK (Software Engineering Book Of Knowledge) to guide my answer.

In the Software Requirements* chapter, we're provided with more formal definitions of the terms needed for your question.

Functional requirements describe the functions that the software is to execute; for example, formatting some text or modulating a signal. They are sometimes known as capabilities.

Nonfunctional requirements are the ones that act to constrain the solution. Nonfunctional requirements are sometimes known as constraints or quality requirements.

I point those out because there appears to be some overlap in the way you have been requested to generate your document. You stated: A SRS should only have functional, non functional and constraints and based upon the SWEBOK / IEEE definition you can see that non-functional requirements and constraints are one and the same.

And while some may protest of overkill, there are three main documents related to requirements work.

System Definition Document This document (sometimes known as the user requirements document or concept of operations) records the system requirements. It defines the high-level system requirements from the domain perspective.

System Requirements Specification In this view, system requirements are specified, the software requirements are derived from the system requirements, and then the requirements for the software components are specified.

Software Requirements Specification establishes the basis for agreement between customers and contractors or suppliers (in market-driven projects, these roles may be played by the marketing and development divisions) on what the software product is to do as well as what it is not expected to do.

So the problem with all of that is it appears clear cut when explained, but it ends up being muddy when implemented. To help focus my answer, I'm going to ignore the System Reqs Spec as it's a huge topic and not quite necessary for your question.

The primary challenge you're encountering is that you are mixing your SDD and your SoftRS (software) documents. Since the two documents are communication bridges between three camps, it's natural and unavoidable that you'll see some overlap between the two. The SDD is a bridge between the client and the analysts, whereas the SRS is a bridge between the analysts and the developers.

So how do you draw the line between the SDD and the SRS? Let's go back to the System's Engineering trinity:

  • what
  • why
  • how

And they really should go in that order because when we look at the V-model, we use those three in order to work our way through the layers. You start with the what & why at the system layer. As you capture those, you start generating ideas for the how, which goes into the next layer below in the V-Model. "Eventually" you finish up with a particular layer and you start revising the layer below in the same manner. The difference on the lower layers is that the upper layer's how becomes this layer's what.


Blah, blah, wall of text, let's tackle your questions.

FR 1.1 : Have I incorporated a design idea here, would " the system shall have a registration form" be a better functional requirement?

I'm going to start off with "meh" for an answer. "shall display" vs "shall have" on a form that requires user interaction is kind of pointless. If an argument erupted on a real project over the semantics between those two forms, I'd consider that a huge red flag and try to bail on the project. Seriously.

"Shall display" implies "have" whereas "shall have" implies "display" in this case. To be fully pedantic, you would need at least "shall have and display" to make it clear. Any of those three variants is fine though.

F1.2 ,2.3 : Is this not singular? Would the conditions be better written for each its own separate requirement

They are certainly related, and it gets tricky on how you want to express those. I rely upon team norms in this case as I have seen it go either way with equivalent results. The important part is to be consistent in how you handle compound requirements like this.

FR 1.4: Is this a design idea? Is this a correct functional requirement or have I incorporated non functional(performance) in it? Would it be better if I written it like this: FR1 The system shall display an error message when check is unsuccessful. NFR: The system will respond to unsuccesful registration form checks within 1 seconds. Same question with FR 2.8 and 2.9.

I would probably break these out, yes. Here's why: The first is providing function (display error message) while the second provides the constraints (specific amount of time) in providing that function. Constraints often change, but the functionality doesn't. By moving the constraint to its own requirement, we can get up front agreement on the functionality and then deal with the constraints (how fast was the message delivered) when we get into implementation.

FR2.3: The system shall check for "completeness", is completeness here used ambigiously? Should I rephrase it?

Your close to explaining completeness with the list of items you provide. However, you could be more clear in specifying what determines completeness or not in each of the items you listed.

FR1.2: I added that the system shall require a "Captcha code" is this a functional requirement or does it belong to the "security aspect" of a non functional requirement.

Depends upon what level of your design you are talking about. At a high level, it's a non-functional requirement because it's a constraint. At a low level, it's a functional requirement because it's specifying a function to be provided.


* SWEBOK is currently in a review state for the next release. Except for the main link, some of the additional links may go stale.

  • I'm really intrigued by this "how" becomes "what" bit. Is there literature I could get in order to learn more (something with examples would be great)? – leokhorn Sep 3 '18 at 7:10

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.