Requirements
Our team used a 4-Phase Requirement Elicitation process.
Phase One
This involved gathering requirements, which were put together using both the product brief and the information we had received during our initial and follow-up Team-Customer meetings.
Phase Two
This had our primary developers taking the requirements gathered in Phase One and prioritising them in accordance with the importance of each requirement.
Phase Three
Requirements would be scrutinised for possibly ambiguities or incorrectness by all members of the team, with the customer providing clarification where necessary.
Phase Four
The documentation of all requirements would be formalised with clear and easy-to-read tables to give a systematic and formatted view of everything.
The requirements document begins with a SSON (Simple Statement Of Need) which gives a clear picture of what a final and complete version of the system should be able to provide.
In the documentation, requirements are split into four separate tables, one for each type of requirement. These are:
For User, Functional, and Non-Functional each is given a unique ID beginning with a prefix dependent on the type of requirement (UR, FR, NFR, respectively).
All requirements in the User table are prioritised using the key words Shall, Should, and May.
Shall means that requirement will absolutely be in the final version of the product.
Should means that while the requirement should be in the final version, we cannot absolutely guarantee we will be able to include it.
May means that while the requirement would be beneficial to the overall quality of the product, it is not an absolute necessity and will only be included if we have the time and resources.
Each functional and non-functional requirement is connected to a corresponding user requirement that it helps satisfy. In the Functional and Non-Functional tables, each requirement references the ID of the requirement in the User table it is linked to. In the Non-Functional table each requirement also has a “Fit Criteria”, this is a brief description of what will be done to make sure that specific requirement is met.
Finally, the Constraint table consists of two columns. Constraint, which simply contains the type of constraint, and Description, which details the specifics of that particular constraint.
Simple Statement Of Need |
A casual single-player game based on the York Dragon Race, where users play as a boat team competing in a race, consisting of three legs and a final. |
User Requirements
ID |
Description |
Priority |
UR_PLAYABLE |
The game shall be playable |
Shall |
UR_RUNNABLE |
The game shall be runnable on standard computer hardware |
Shall |
UR_MOVE_BOAT |
The user shall be able to move their boat |
Shall |
UR_AI |
The user shall have competing AI boats to race against |
Shall |
UR_TIME_PUNISHMENT |
The user shall receive a time punishment for leaving their designated lane |
Shall |
UR_INSTRUCTIONS |
The user shall receive instructions on how to play the game |
Shall |
UR_TIRED |
The boat paddlers shall get tired as the race goes on |
Shall |
UR_CASUAL |
The game should be a casual gaming experience |
Should |
UR_CHOOSE_BOAT |
The user should have a selection of boats to choose from |
Should |
UR_COMPLETABLE |
The game should be able to be completed within a given time frame |
Should |
UR_FAIR |
The game should be balanced |
Should |
UR_DIFFICULT |
The difficulty of each leg should be more than the last |
Should |
UR_OBSTACLES |
The user should have objects in the river to dodge |
Should |
UR_OBSTACLES_DAMAGE |
The users robustness should decrease every time an object is hit |
Should |
UR_PRACTICE |
The first leg should not count towards qualifying times for the final race |
Should |
Functional Requirements
ID |
Description |
User_Requirements_ID |
FR_START_LEVEL |
The system shall start a leg after a boat is picked |
UR_PLAYABLE |
FR_END_LEVEL |
The system shall end the leg when the player crosses the finish line |
UR_PLAYABLE |
FR_END_LEVEL_DNF |
The system shall end the leg when all other opponents have crossed the finish line |
UR_PLAYABLE |
FR_CONTROLS |
The system will allow the user to use the keyboard to control their boat |
UR_RUNNABLE |
FR_COLLIDE_BOAT |
When two boats collide both take damage |
UR_MOVE_BOAT |
FR_AI_REMAINING |
AI shall control the remaining boats for the user to race against |
UR_AI |
FR_ADDITIONAL_TIME |
The time spent outside of a boat’s designated lane will be added to their finishing time |
UR_TIME_PUNISHMENT |
FR_DISPLAY_INSTR |
When the game is launched the user will receive instructions on how to play |
UR_INSTRUCTIONS |
FR_TIRED_INCREASE |
A boat’s acceleration and maneuverability will decrease as time goes on |
UR_TIRED |
FR_CHALLENGE |
The game should not expect users to perform difficult tasks |
UR_CASUAL |
FR_BOAT_SELECTION |
The look and stats of the boat the user selects will be the same as the boat the user controls in the race |
UR_CHOOSE_BOAT |
FR_UNIQUE_BOAT |
No two boats in the boat selection screen should be the same |
UR_CHOOSE_BOAT |
FR_END_BOAT_BREAK |
The system will end when the user’s boat breaks |
UR_COMPLETABLE |
FR_CALCULATE_FINAL |
The system will calculate the combined times of legs 2 and 3 for each team, with the fastest three teams going to the final |
UR_COMPLETABLE |
FR_END_FINAL |
The system will award the player a medal after the final |
UR_COMPLETABLE |
FR_PODIUM |
The system will display the finalists on a podium |
UR_COMPLETABLE |
FR_AI_RULES |
AI should follow the same rules as the user does |
UR_FAIR |
FR_AI_IMPROVE |
The AI should increase in difficulty at the end of each leg |
UR_DIFFICULT |
FR_OBSTACLES_INCR |
The number of obstacles used in each leg should be more than the last leg |
UR_DIFFICULT |
FR_OBSTACLES_MOVE |
Obstacles should move in a variation of patterns depending on their type |
UR_OBSTACLES |
FR_CALC_DAMAGE |
The amount of damage taken to the user’s robustness should be calculated using the type of obstacle and the speed of the colliding objects |
UR_OBSTACLES_DAMAGE |
FR_IGNORE |
Performance in first leg will not be recorded |
UR_PRACTICE |
Non-Functional Requirements
ID |
Description |
User_Requirements_ID |
Fit Criteria |
NFR_RESILIENCE |
A malfunction in another boat or part of the race should not affect the user’s performance in the race |
UR_PLAYABLE |
If another boat runs out of health or gets stuck it will not affect the user |
NFR_USABILITY |
The game shall be in plain English with no especially difficult words |
UR_PLAYABLE |
All text is in clearly worded English |
NFR_VISIBILITY |
Any text or information displayed should be clearly visible |
UR_PLAYABLE |
The colour of text is in a contrasting colour to the background and in a readable size |
NFR_RELIABILITY |
The system shall reliably run from the start state to an end state |
UR_RUNNABLE |
Crash Likelihood: <1% |
NFR_RESOURCES |
The system shouldn’t demand lots of resources |
UR_RUNNABLE |
<1% of resources of a standard computer |
NFR_PORTABLE |
There should be no issue playing the game on a different OS |
UR_RUNNABLE |
Game file executes correctly across all Operating Systems |
NFR_RESPONSE |
The system should respond to user inputs quickly |
UR_MOVE_BOAT |
Time to respond: <0.1s |
NFR_SIMPLE |
Users should be ready to play the game shortly after reading the instructions |
UR_INSTRUCTIONS |
1-2 minutes spent reading instructions |
NFR_OPERABILITY |
The game should be playable with minimal training |
UR_CASUAL |
90% of players should be able to win Leg 1 after just looking at the instructions |
NFR_TIME |
The game should be finished in under X minutes |
UR_COMPLETABLE |
Time taken to complete game is <=10 minutes |
NFR_INTEGRITY |
Stats of boats should not be changeable mid-game and presets should be fairly balanced |
UR_FAIR |
All boats are capable of winning |
NFR_ACCURATE |
Time taken for a boat to complete a leg and time taken out of its own lane will be recorded accurately |
UR_FAIR |
>1% margin of error |
NFR_PRECISION |
The system should reliably detect collisions |
UR_OBSTACLES |
Collisions detected 99% of the time |
Constraint Requirements
Constraint |
Description |
Process |
The game must be coded in Java |
Design |
Game will be playable on regular computer hardware running on popular operating systems |