Auteurs

NaamStudentnummer
599907
674152
657079
679586
668329
655269


Docenten

NaamFunctie
Procesbegeleider
Skillsbegeleider 
KlasITA-OOSE-A
GroepsnaamSmalltalk
CourseOOSE

Datum

 

Versie

1. Introduction

Regterschot Racing has requested us to build an API where a member of the racecrew can view the data sent by a racecar in real-time. This data needs to be converted into charts that accurately represents the data in a clear way. This means that the data should be understood by the raceteam. All graphs are placed in a dashboard that is seen by crewmembers that are logged into the application. Viewers can also see a restricted set of data. Regterschot wants this API to be deployed in a web-application. The data that is retrieved from the broker, will eventually end up in a database. The web-application needs to have a constant connection to the database, to show past data. The present data is retrieved from a broker that the team at Regterschot Racing had already made. This broker will send data  to the application twenty times per second. It is important that the communication with the database and broker provides a fast and reliable way to bring data to the website. The system needs to be easily expandable, so that it may be able to add new features in the future. Because Regterschot Racing wants this application to be expandable, we need to have a clear and informational instruction on how the code works. Our project will be followed up by multiple other groups that will build upon our code. These groups might be international and therefore everything needs to be documented in English, so that they can understand how our code works.

1.1. User Classes and Characteristics

For this product, we'll realize two types of users. Firstly, there's the crewmembers, who are our main scope. A crewmember can view a race and retrieve all of its real-time and past data. Second, there's the viewers, who can only view the race with a restricted set of data that is updated real time. Viewers cannot select what kind of data they wish to see, all data that is visible for them will be visible at all time whilst watching the race.

Both types of users can log in into our web-application. A crewmember can see more options when logged in, as they can view back races and watch live races, whereas a viewer can only watch live races.

1.2. Operating Environment

Our web-application's back-end will be built in Java 17 and Maven and our front-end will be built in Angular 14.0 and Bootstrap 5.0. The application will run in Wildfly 25.0.0, which allows us to run the website locally. We will use Java Database Connection (JDBC) to establish a connection between our database and our web-application. We'll also use a Broker to establish a connection between the racecar's sensors and our application, which allows us to receive a constant stream of data. The broker will also send data to the database, so that past data can be seen as well.

1.3. Design and Implementation Constraints

The product owner has not given a lot of constraints for this project. There are still a few technical limitations that limit our options. The car's data is being sent to the database twenty times per second. Because Regterschot Racing wants a constant stream of data to the application, it is required to use TCP as a communication protocol. This data must be converted into graphs because a clear overview of all data is demanded.  We will have to use Google Charts because Google Charts runs in a web-application and can update the data twenty times per second (Lijden & Kooy, 2022).

1.4. Product Functions

Summary of all the functions:

  • The product must present data from the sensors of the racecar.
  • The user has to be able to login to the site and choose how the data is presented.
  • The product stores all the data from the sensor for future purposes.
  • The crewmember is able to add, delete and update a tab.
  • The crewmember can place charts in the tab that contains data from the chosen sensor.
  • The viewer and crewmember can watch past and present races.

1.5. Purpose of this document

This document serves as a guideline for the multiple features and behaviors that our application will have. This document includes a list of elements that will attempt to define the intended functionality required by the customer to satisfy their different users. In addition to specifying how the system should behave, this document will also define what key performance parameters will need to be met by the system. To accomplish this, the document has been divided into multiple sections:

Section Function
Domain Houses a model that displays all of the different concepts that are present within the domain.
Use-cases  All different actions that a user should be able to perform and the system's response to these different user actions.
Functional and non-functional requirements All requirements that the system should abide by.



2. Domain Model

This is the domain model. It represents all concepts and attributes that are present within Regterschot Racing's desire for our application. This model shows all concepts as yellow squares, with the attributes underneath the concepts they belong to. Between the squares are lines that represent the interaction between the different concepts. The arrow on the lines indicate in which way the concepts interact with each other. Next to the line, near the concepts are numbers and asterisks that represent how many interactions on concept has with another concept. The line between Tab and Graph for example shows us that every 1 tab consists of 0 or more graphs.

An explanation of all terms found in the domain model can be found below.

figure 1: Domain model

As visible in the diagram above, a user is a generalization of both crewmembers and viewers. A crewmember can perform certain actions within the domain than a viewer, therefore the user concept has been split. The crewmember and viewer do however have the same attributes as a player, so they will inherit those attributes from the user. 

2.1. Glossary

Concept Description
RegterschotRacing The company that wants us to build an application to view data from a racecar's sensors in real-time. RegterschotRacing manages who gets to use the application and which races the application will be used at.
User The person that uses the Regterschot Racing application. A user can either be a Crewmember or a Viewer
Username The name the user will use.
Password The hashed key of the account that the user utilizes.
Token The code used to authenticate a user into one of the two user roles.
Crewmember A person who is part of the Regterschot Racing racing team that reads and analyses the real-time data from the racecar.
Viewer A person who wants to view the race but has no access to the real-time data dashboards.
Race The race where the racecar will be used.
Lap The laps that make up the race.

Dashboard

A dashboard shows all relevant statistics and data received from the racecar. This dashboard is updated in real-time or shows data of one or more specific rounds.
Racecar The racecar that the dashboard is showing the data for.
Tab A part of the dashboard where graphs can be loaded into.
Name Name of the tab.
Sensor A device that measures or detects data the way it's used for.
Data Values of the sensor.
Timestamp Timestamp that the data uses.
Graph Shows the data produced by the sensors.
Color Color used for the data in the graph.
TimeScope Start time and end time of the graph.
Raceteam The team that participates in a race that consists of crewmembers and racers.
Name the name for the raceteam.
Racecar The car participating in the race.
Brand The brand of the car.
Type The type of racecar. For example '320 4fl E46'.

Table 1: Domain model glossary

3. Use-case Diagrams

Use-case diagrams are used to show which actors within a domain can perform what actions. The diagram contains all of the actors on the left-hand side, the system in a central box and any external actors that do not perform any user actions on the right-hand side. All actions that the actors perform are inside the central box and have a line to either crewmember or viewer to represent who can perform that specific user action.

3.1. Use case diagram

The use-case diagram for Regterschotracing looks like this, with the viewer and crewmember that were mentioned in the domain model now acting as actors that interact with our system. A viewer can watch a race and enjoy the enticing race from the comfort of their own couch. A crewmember must analyse the data from the racecar in graphs that are placed in tabs whilst watching a race, so there's two distinct user-actions that solely crewmembers can perform. Furthermore, the graphs that are used by a crewmember connect to an external actor, the broker. This is a service that can send a long stream of data to our application without requiring constant requests for fetching said data.

The <<CRUD>> and <<CRD>> indicate that this particular use-case is a collection of multiple use-case that closely relate to one another.

Figure 2: Use-case diagram

3.2. Use case diagram Tabs CRUD

The <<CRUD>> and <<CRD>> would look like the diagram below when expanded. The CRUD acronym stands for Create, Read, Update & Delete. This simple collectivization shows that an actor can interact with a certain use-case, in this case a tab. They can add new tabs, they can read the data that is present within the tabs, they can update the tab by adding new graphs or removing graphs and they can delete tabs by removing them from the view.

Figure 3: Tab <<CRUD>> use-case diagram

Figure 4: Graph <<CRD>> use-case diagram

4. Use Case Descriptions

In this chapter, all of the use-cases in the use-case diagram will be expanded and explained, adding a primary actor, potential stakeholders, a brief description, pre- and postconditions as well as a main success path and any potential alternative paths to successfully complete the use-case. Next to this overview of the use-case, an SSD or System Sequence Diagram has been added, which shows the user actions as well as the system's responses to these user actions.

4.1. View race

Fully dressed description

Primary Actor: User.
Stakeholders & Interests: 

Brief Description: An actor wants to see a list of old races so he can choose one to watch back.

Preconditions: The actor has logged in to the website.
Postconditions: There is a list of all the races that happened.
Main success scenario (basic flow):
Actor Action System Responsibility

1. The user goes to the race-overview page.


2. The system will get all the races from the database and show them on the page.


Extensions (alternative flow):


Table 2: View race fully dressed format.

System sequence diagram

Figure 5: System sequence diagram view race.

4.2.  View specific round(s)

Fully dressed description

Primary Actor: Crewmember.
Stakeholders & Interests: 

Brief Description: A crewmember wants to view the data of a specific round during the current race, to analyse that specific round and see if there's anything wrong with the car or the driver.

Preconditions: The crewmember has logged in on the website and is watching a race.
Postconditions: The crewmember can now view the data of one or more specific rounds.
Main success scenario (basic flow):
Actor Action System Responsibility

1. A crewmember analyses the data of a specific round.

3. The crewmember inserts the desired rounds to view.

2. The system requests the crewmember to insert the range of rounds they want to view.

4. The system creates a new tab with only the desired rounds as data that can be viewed.

Extensions (alternative flow):


Table 3: View specific round(s) fully dressed format.

System sequence diagram

Figure 6: System sequence diagram view data per round.

4.3. View Graphs

Fully dressed description

Primary Actor: Crewmember.
Stakeholders & Interests

Brief Description: A crewmember wants to look at race data or wants to view detailed information of a race.

Preconditions: A crewmember has logged in to the web application and has selected a race.
Postconditions: A crewmember can now view and interact with the race and/or the race car's data.
Main success scenario (basic flow):
Actor Action System Responsibility

1. Crewmember reads data from a graph.

2. The system provides the graph with newly received data.


Extensions (alternative flow):


Table 4: View graphs fully dressed format.

System sequence diagram

Figure 7: System sequence diagram view graphs.

4.4. Tab CRUD

Create Tab

Fully dressed description

Primary Actor: Crewmember.
Stakeholders & Interests: 

Brief Description: A crewmember wants to create a new tab.

Preconditions: A crewmember has logged in to the web application and is on the dashboard page of a race

Postconditions: The crewmember can see their new created tab.
Main success scenario (basic flow): 
Actor Action System Responsibility

1. The crewmember creates a new tab.


3. The crewmember supplies the system with a tab name.



2. System asks for a tab name.


4. System validates if supplied tab name is correct.

5. System adds the new tab.

Extensions (alternative flow):


Table 5: Create tab fully dressed format.

System sequence diagram

Figure 8: system sequence diagram create tabs.

Update Tab

Fully dressed description

Primary Actor: Crewmember.
Stakeholders & Interests: 

Brief Description: A crewmember wants to update an existing tab.

Preconditions: A crewmember has logged in to the web application and the crewmember needs to have a tab
Postconditions: The crewmember can see their updated tab.
Main success scenario (basic flow): 
Actor Action System Responsibility

1. The crewmember updates a tab.


3. The crewmember supplies the system with a tab name.



2. System asks for a new tab name.


4. System validates if the supplied tab name is correct.

5. System updates the tab name.

Extensions (alternative flow):




Table 6: Update tab fully dressed format.

System sequence diagram

Figure 9: System sequence diagram update tab.

Read Tab

Fully dressed description

Primary Actor: Crewmember.
Stakeholders & Interests: 

Brief Description: A crewmember wants to read an existing tab.

Preconditions: A crewmember has logged in to the web application and the crewmember needs to have a tab.
Postconditions: The crewmember can see their tab.
Main success scenario (basic flow): 
Actor Action System Responsibility

1. The crewmember reads a tab.



2. System shows details of given tab.

Extensions (alternative flow):




Table 7: Read tab fully dressed format.

This use-case has no system sequence diagram, as there's nothing for the system to handle when a crewmember is continuously reading data. 

Delete Tab

Fully dressed description

Primary Actor: Crewmember.
Stakeholders & Interests: 

Brief Description: A crewmember wants to delete an existing tab.

Preconditions: A crewmember has logged in to the web application and the crewmember needs to have a tab.
Postconditions: The crewmember has deleted their tab.
Main success scenario (basic flow): 
Actor Action System Responsibility

1. The crewmember deletes a tab.


3. The crewmember confirms deletion.



2. System asks for a confirmation.

4. System deletes the tab.

Extensions (alternative flow):




Table 8: Delete tab fully dressed format.

System sequence diagram

Figure 10: System sequence diagram delete tab.

4.5. Place Graph

Fully dressed description

Primary Actor: Crewmember.
Stakeholders & Interests: 

Brief Description: A crewmember wants to view the data from the sensors in a graph, to do this they place their desired graph in their tab.

Preconditions: A crewmember has logged in to the web application and has at least one tab.
Postconditions: The crewmember can see the newly placed graphs.
Main success scenario (basic flow): 
Actor Action System Responsibility

1. The crewmember heads to the list of all available sensors that have graphs.


3. The crewmember selects the desired sensor to add a graph for.


5. The crewmember selects the desired type of graph to add to the tab.


2. System shows all sensors to choose a graph from.


4. System shows all graphs that are included in the current selection.


6. System adds the graph to the tab.

Extensions (alternative flow):

2a. There are no sensors available in the database.
      end of usecase.

4a. There are no graphs available that are linked with the shown sensors.
      end of usecase.

Table 9: Place graph fully dressed format.

System sequence diagram

Figure 10: System sequence diagram place graph

4.6. Remove Graph

Fully dressed description

Primary Actor: Crewmember.
Stakeholders & Interests: 

Brief Description: A crewmember wants to delete a graph from a tab because he doesn't need it anymore. 

Preconditions: A crewmember has logged in to the web application and selected a tab to remove a graph from.
Postconditions: The crewmember has successfully removed a graph from his tab.
Main success scenario (basic flow): 
Actor Action System Responsibility

1. The crewmember removes a graph.


2. System removes the graph from the selected tab.

Extensions (alternative flow):


Table 10: Remove graph fully dressed format.

System sequence diagram

Figure 11: System sequence diagram remove graph.

5. Other functional requirements

On top of the requirements set by the different use-cases and the domain model, there's a few more requirements that we'll have to consider when developing our product. The requirements listed in the table below are all functional, meaning that our system needs these functionalities.

Code

Description

FR1 A user must be able to log in to the website to be able to either view a race or analyse the data of a specific race car.

FR2

A crewmember must be able to view all data sent from the sensors of a race car on a dashboard to be able to analyse the race and make impactful decisions.
FR3 All data sent by the sensors in a race car must be represented in any form of graph to provide an easy insight into the current race's situation.

6. Non-functional Requirements

6.1. Performance Efficiency

Code

Description

NFR1 Responses to all user-initiated actions in the web-interface must be be rendered on our systems in less than 3 seconds.

6.2. Security

Code

Description

NFR2 The application must be protected against SQL-injections and other safety hazards to ensure no user can hack themselves into the race's data and alter said data.
NFR3 Passwords must be hashed before they are stored into the database to prevent no user account can be hacked by an outsider.

6.3. Reliability

Code

Description

NFR4 All data sent by the race car must be accurate to the last decimal stored in the database or received from the broker. This way, the analysing race crew can work with actual accurate data instead of rounded numbers.
NFR5 There must be no code smells such as feature envy, shotgun surgery and tradition breaker present in the code. This is to ensure the reliability of our application in the future.

6.4. Documentation

Code

Description

NFR6 All documentation must be made in English to allow other groups that will continue our work after us to understand why we made certain choices.
NFR7

The main color used for the web-application should be #148484(). The secondary, complementary color to use in addition to the main color should be #81c8bd().

6.5. Supportability

Code Description
NFR8 All systems made by smalltalk should have an A rating on SonarQube reliability, security and maintainability, so future groups can work with our code without having to rewrite all of our code.
NFR9 Our code should be tested thoroughly, with at least 80% of the lines being tested by unit-tests. This way we know our code is working and does not contain any bugs or errors.

7. User interface sketches

7.1. Dashboard car statistics:


7.2. Login user:


8. List of Resources


Lijden, van, & Kooy. (2022, November 16). Onderzoeksverslag Visuele Dataweergave. Onderzoeken. Retrieved December 14, 2022, from https://confluenceoosevt.aimsites.nl/display/VQMSWB/Onderzoeksverslag+Visuele+Dataweergave




UserEditsCommentsLast Update
Jasper Kooy 9421655 days ago
Wijnand vanZyl 319682 days ago
Sem Gerrits 283662 days ago
Thomas Droppert 1670659 days ago
Auto Mation 120732 days ago
Martin van Lijden 111661 days ago
Bram Bakker 21659 days ago
Mark Giesen 01704 days ago

  • No labels

3 Comments

  1. Register user:
    Knop login bij het aanmaken van een user account? misschien moeten we dit aanpassen naar een blauwe tekst: "Ik heb al een account" of iets dergelijks.

    Login user:
    Ook hier weet ik niet of ik een register knop neer zou zetten. Misschien juist een "ik heb nog geen account" tekst oid. Misschien willen we ook een "remember me" inbouwen?

  2. technical limitations that limits options
    Wat staat hier?
  3. Racecar zelf racet toch niet? ik zou eerder driver zeggen