Functional Requirements
In this section are collected the functional requirements of the system in the form of User Stories.
User Stories
Users Management
As a new user
I want to register with the system using my information
So that I can access the application featuresAs a registered user
I want to log in with my credentials
So that I can access my account and use the applicationAs a logged user
I want to update my profile information
So that I can keep up-to-date my personal detailsAs a logged user
I want to delete my profile
So that I can remove my data from the system when I no longer wish to use it
Group Management
- As a registered user
I want to create a new group by specifying the name
So that I can later go and interact with it - As a group member
I want to add one or more users to this existing group
So they can be displayed in the member list - As a group member
I want to remove one or more users from this existing group
So they can no longer be displayed in the member list - As a group member
I want to leave the group
So I can no longer be displayed in the member list - As a group member
I want to update the group name
So I can change it
Location tracking
As a logged user
I want to be able to start sharing my location with other group member
So that I’m able to be monitoredAs a logged user who is sharing their position with a set of groups
I want to be able to stop sharing it with group members
So that I can go where I want without letting know those memberAs a logged user
I want to be able to receive location updates from my group members who are sharing their location
So that I can view their live location on a map in real-timeAs a logged user
I want to be able to get the last known location and state of my group members
So that I can see their last reported location and status when live sharing is unavailableAs a logged user
I want to be able to send an SOS alert comprising of my location to all members of all groups I’m participating despite the fact I’m or not sharing my location
So that if I am in a dangerous situation my friends are notified and knows where I amAs a logged user
I want to start sharing my location to all group members after the trigger of an SOS alert
So that my live location is automatically shared after an SOS alert to aid respondersAs a logged user who is sharing their position
I want to be able to share a journey towards a location specifying the time by which I’ll be there
So that my friends know where I’m goingAs a logged user in SOS mode
I want to be able to stop the SOS
So that my friend are notified I’m not in danger anymoreAs a logged user who is sharing a journey
I want to be able to stop it prematurely
So that my friend knows a change in my plan have occurredAs a logged user
I want to be able to see the entire path taken by my group members who are sharing a journey or triggered an SOS alert
So that I know where they have been during the dangerous situationAs a logged user
I want to be able to receive a notification when one of my group members start a journey or trigger an SOS alert
So that I’m aware of itAs a logged user
I want to be able to receive a notification if one of my group members who triggered an SOS alert goes offline or deactivate it
So that I can take appropriate actionAs a logged user
I want to be able to receive a notification if one of my group members who started a journey stops moving, doesn’t arrive on time, goes offline, reaches their destination or deactivate it
So that I can take appropriate action
Chat
As a logged user
I want to connect to a group
So that I can communicate with other group membersAs a group member
I want to send a message to the group
So that I can communicate with other group membersAs a group member
I want to disconnect from the group
So that I can no longer communicate with other group members
Acceptance tests
Following BDD principles, starting from the above user stories, a set of acceptance test specifications have been defined. These specifications are written in Gherkin using Cucumber, providing a structured and human-readable format that facilitates communication between stakeholders, even for those who have not a technical background. Moreover, they serve end-to-end tests, ensuring that the system meets the defined requirements while aligning with end final users’ expectations and needs (see the Validation section for more details about tests). By leveraging this approach, the tests remain clear, maintainable, and closely tied to business objectives.
User Management
Scenario: Register a New User
Given that the user is not yet registered
When registering with valid details
Then the system successfully registers the user
Scenario: Login with Valid Credentials
Given logged user with the correct email and password
When system returns a valid authentication token
Then authentication token can be use to authorize requests
Scenario: Update User Profile
Given new user logged in
When updating the profile information
Then the system successfully updates the user data
When requesting the deletion of the user profile
Then the system deletes the user data and confirms the deletion
Location tracking
Feature: Users real-time tracking
Background:
Given I am a logged user
* with a registered device
And I am in a group with other users
Scenario: User can track other users in their groups in real-time
When I access my group tracking information
Then I should see the real-time location of online group members
And the last known location of offline group members
Scenario: User is able to share their location with other group members
When I start sharing my location
Then my last known location should be updated
And my state should be `Active`
Scenario: User can stop sharing their location with other group members
When I stop sharing my location with that group
Then the group's members should not see my location anymore
* my state should be updated to `Inactive`
But my last known location should still be available
Feature: Users routes tracking
Background:
Given I am a logged user
* with a registered device
And I am in a group with other users
Scenario: User can activate a route that is recorded and visible to group members
When I activate the routing mode indicating a destination and the ETA
Then my state is updated to `Routing`
* my group's members receive a notification indicating I've started a routing
And my group's members can see the route I've been taken since activating routing mode
Scenario Outline: A route can be stopped
Given I'm in routing mode
When <event>
Then the routing is stopped
* the route discarded
* my state is updated to `Active`
And my group's members receive a notification indicating <event>
Examples:
| event |
| I have arrived at the destination |
| I have stopped the routing |
Scenario Outline: Route notifications
Given I'm in routing mode
When <event>
Then my group's members receive a notification indicating <event>
Examples:
| event |
| I have gone offline |
| I have not arrived by the estimated time |
| I have been stuck in the same position for a while |