- 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.
- 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.
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!