Functional Requirements
Requirements Overview
Registration and Authentication:
- Ability to register to the system.
- Ability to login into the system.
Friendship system:
- Ability to send friend requests to other users.
- Possibility of accepting or rejecting friend requests.
- Notification system for receiving new friend requests.
- System for managing the status (online) and last login time of users.
Interactions with friends:
- Messaging management among friends.
- Notification system for the arrival of new messages.
- Ability to join a session with a friend.
Server management:
- Possibility of creating a new server.
- Possibility of entering an existing server.
- [Server Admin] Possibility to remove members from the server.
- [Server Admin] Possibility to modify the server settings.
Channel management:
- [Server Admin] Possibility of creation of channels (text or multimedia).
- [Server Admin] Possibility of removing channels.
- Messaging system for text channels.
- Notification system for new messages sent within textual channels.
- Ability to access the session of multimedia channels.
Session management:
- Ability to communicate through other participants in the same session.
- Ability to turn on and off the microphone and camera.
User Stories
In order to capture and describe the functional requirements listed before, we have decided to use the User Stories approach.
These user stories are written from the perspective of the end-users and describe the features and functionalities that they expect from the application.
Registration and Authentication
User Registration
As a new user,
I want to register to the system,
so that I can create an account and start using the application.User Login
As a registered user,
I want to log into the system,
so that I can access my account and use the application's features.
Friendship System
Send Friend Requests
As a user,
I want to send friend requests to other users,
so that I can connect with them and add them to my friends list.Accept/Reject Friend Requests
As a user,
I want to accept or reject friend requests,
so that I can manage my connections and decide who I want to be friends with.Friend Request Notifications
As a user,
I want to receive notifications for new friend requests,
so that I am aware when someone wants to connect with me.Manage Status and Last Login
As a user,
I want to manage my online status and see the last login time of my friends,
so that I can know when they are available to interact.
Interactions with Friends
Messaging Friends
As a user with friends,
I want to send and receive messages with my friends,
so that we can communicate through the application.Message Notifications
As a user,
I want to receive notifications for new messages,
so that I know when I have a new message from a friend.Join Friend's Session
As a user with friends,
I want to join a session with a friend,
so that we can interact in real-time within the same session.
Server Management
Create New Server
As a user,
I want to create a new server,
so that I can have a dedicated space for group interactions.Join Existing Server
As a user,
I want to join an existing server,
so that I can participate in its activities and discussions.Remove Members from Server [Server Admin]
As a server admin,
I want to remove members from the server,
so that I can manage who has access to the server.Modify Server Settings [Server Admin]
As a server admin,
I want to modify the server settings,
so that I can customize the server to meet the needs of its members.
Channel Management
Create Channels [Server Admin]
As a server admin,
I want to create text or multimedia channels,
so that members can have organized spaces for different types of communication.Remove Channels [Server Admin]
As a server admin,
I want to remove channels,
so that I can manage and declutter the server by removing unnecessary channels.Text Channel Messaging
As a server member,
I want to send and receive messages in text channels,
so that I can communicate with others in the server.Text Channel Message Notifications
As a server member,
I want to receive notifications for new messages in text channels,
so that I am aware of new conversations and updates.Access Multimedia Channels
As a server member,
I want to access multimedia channels,
so that I can join and participate in multimedia sessions.
Session Management
Join Session As a user,
I want to join multimedia session,
so that I can start videochat.Leave Session As a session participant,
I want to leave multimedia session,
so that I can stop videochat.Microphone and Camera Control
As a session participant,
I want to manage my audio/video,
so that I can control what others see.
Feature Specifications (BDD)
Once the user stories are defined, the first thing that we did was proceeded to create some feature specifications that capture and describe the details of each user story.
To do this, we used the Behavior-Driven Development (BDD) approach, which focuses on defining the behavior of the system from the perspective of the end-users. The feature specifications are written in a structured format that includes the following sections, using the Gherkin syntax:
Feature: A high-level description of the feature or functionality.
Scenario: A specific use case or situation that describes the behavior of the system.
Given: The initial context or state of the system before the scenario starts.
When: The action or event that triggers the scenario.
Then: The expected outcome or result of the scenario.
The feature specifications provide a detailed description of the expected behavior of the system based on the user stories. In this way, we were able to define some Acceptance Criteria that will be used to validate the implementation of the features, useful both for the development team and the stakeholders.
You can find an example of a feature specification below:
Feature: User Registration and Authentication
Scenario: User registers to the system
Given I am not logged in
When I make a REGISTER request with valid credentials
Then I should be registered to the system
Scenario: User logs in to the system
Given I am registered
And I am not logged in
When I make a LOGIN request with valid credentials
Then I should be logged in to the system
Feature: Channel Management
Scenario: Admin creates a channel in a server
Given I am an authenticated user
And I have created a server
When I create a new channel in a server
Then I should be able to access the channel
Scenario: Admin removes a channel
Given I am an authenticated user
And I have created a server
And there is a channel in the server
When I remove the channel
Then the channel should be removed from the server
Scenario: User sends a message in a text channel
Given I am an authenticated user
And I have created a server
And there is a text channel in the server
When I send a message in a text channel
Then the message should be displayed in the channel
Feature: Server Management
Scenario: User creates a new server
Given I am the logged user
When I create a new server
Then I should be able to access the server as owner
Scenario: User join a server
Given I am the logged user
And another user has a server
When I join the server
Then I should be able to access the server as member
Feature: Interactions with Friends
Scenario: User sends a message to a friend
Given I am logged user
And I have a friend
When I send a message to the friend
Then the friend should receive the message
Feature: Friendship System
Scenario: User sends a friend request
Given I am a logged user
And another user exists
When I send a friend request to the other user
Then the other user should have a pending friend request
Scenario: User accepts a friend request
Given I am a logged user
And another user exists
And I have a pending friend request from the other user
When I accept the friend request
Then the other user should be added to my friend list
Scenario: User rejects a friend request
Given I am a logged user
And another user exists
And I have a pending friend request from the other user
When I reject the friend request
Then the other user should not be added to my friend list