Welcome to the documentation pages of the Meetix of openCX!
- Business modeling
- Requirements
- Architecture and Design
- Implementation
- Test
- Configuration and change management
- Project management
Please contact us!
Thank you!
Ana Teresa Cruz | [email protected]
André Nascimento | [email protected]
António Bezerra | [email protected]
Mariana Truta | [email protected]
Rita Peixoto | [email protected]
Meetix is an app for easy online conference networking. The app allows attendees to see and like each other's profiles and get notified when they match, providing meaningful connections.
Online conferences provide us the chance to hear from speakers anywhere in the world without getting off the couch. However, networking is often overlooked.
Meetix sets out to solve this problem with an incredibly simple approach.
Conference organizers can register their event in less than 30 seconds. Just add basic information and relevant topics and you're up and running.
The same goes for attendees - no complex forms or weird links. Find your conference and create a profile with relevant contact info and interests. A few taps later, you're able to see, filter and like other profiles and get notified when you match with someone.
Meetix focuses on meaningful connections, no bells, and whistles.
-
Actor: User
-
Description: To use the app, all users must create an account before adhering to any conference and setting up a personal profile for that conference. This process consists simply of choosing an e-mail and password for future logins.
-
Preconditions and Postconditions: The only precondition is to have the app installed on the device. Since this use case assumes the user has no account prior to this step, the program is left in a state where it requires the user to create an account.
-
Normal Flow:
- User provides an e-mail.
- User provides a password.
-
Alternative Flows and Exceptions: E-mail not linked to an existing account. E-mail must comply with the format [email protected]. If any of these conditions aren’t met, the user will not be able to create an account and the register button won’t be available.
-
Actor: User
-
Description: In order to use the app, all users must log in before adhering to any conference. This process consists simply of inputting the correct e-mail and password combination to access the user's account.
-
Preconditions and Postconditions: The only precondition is to have already an account in the app. Afterward, the app is completely available for the user.
-
Normal Flow:
- User provides an e-mail.
- User provides a password.
-
Alternative Flows and Exceptions: E-mail and password combination correct. If this condition isn't met, the user will not be able to log in to the app.
-
Actor: Conference Staff
-
Description: For an attendee to join a conference, the conference must already exist and be available in the app. The process of creating a conference consists of inputting the data for that conference.
-
Preconditions and Postconditions: The only precondition is to be logged in to the app. When the creation of the conference is done successfully, then it appears on the available conferences to the other users.
-
Normal Flow:
- Staff provides a name.
- Staff provides the start and end dates.
- Staff provides a photo.
- Staff provides the topics list.
-
Actor: User
-
Description: In order to fully use the app, a user must join a conference. This process consists of clicking on available conferences on the menu search conferences, creating the profile for that conference, and selecting the topics they’re interested in.
-
Preconditions and Postconditions: The only precondition is to be logged in to the app. Then the user has full access to all available features such as joining a conference. After joining and creating the profile, the user can enter the conference workspace.
-
Normal Flow:
- The user selects a conference.
- The user provides the data for their conference profile.
- The user selects the interests of the provided list.
-
Actor: User
-
Description: If they wish so, the user can change the information displayed on their conference profile, with the possibility to add, remove, or change any attributes on their profile.
-
Preconditions and Postconditions: To edit a profile, the user must be in the conference workspace, and in their profile choose the edit button. Now that the profile was updated the user experience will be adjusted to their new information.
-
Normal Flow:
- User opens the conference workspace and on their profile page, clicks the edit button.
- A form with the current information and possibilities to add new information or remove information will open.
- The user will edit their profile according to their will.
- The user hits save and their information will appear updated throughout the app.
-
Alternative Flows and Exceptions: If the user does not wish to update can click the cancel button. The inserted information needs to be valid to be saved.
-
Actor: User
-
Description: The user can view the top20 profiles that match the most with their conference profile.
-
Preconditions and Postconditions: The user must have a profile with at least one interest in order to match other user interests.
-
Normal Flow:
-
When in a conference workspace, the user should go to the see top 20 page.
-
A list with the top 20 profiles that match the most with the user will appear.
-
The user is able to see each one of those profiles and like them.
-
-
Actor: User
-
Description: After the user is in a conference workspace, it is possible to search and filter other profiles for the same conference.
-
Preconditions and Postconditions: The user must be logged in.
-
Normal Flow:
- In the conference workspace, the user clicks on the "Profiles" button to see all the profiles for that conference.
- The user can search for specific profiles or add filters to the list.
-
Actor: User
-
Description: When in a list of profiles of the conference or when searching for profiles, the user can open someone’s profile.
-
Preconditions and Postconditions: The user must be in a conference workspace searching/viewing the list of profiles. After opening the profile, the user can see the display of the profile with the corresponding information.
-
Normal Flow:
-
Out of a list of profiles, the user clicks on one of the profiles.
-
The profile opens up and the user can view it.
-
-
Actor: User
-
Description: In order to match with other profiles, the user must like the profiles they would like to connect with.
-
Preconditions and Postconditions: The user must be in someone’s profile and have joined that conference. After this, the other user will be able to see that this user liked their profile.
-
Normal Flow:
-
The attendee enters someone’s profile.
-
Clicks on the like button.
-
-
Actor: User
-
Description: After liking someone's profile, that user can "like back", creating a match. The user can view the profiles that matched theirs.
-
Preconditions and Postconditions: To be able to have matches the user must have liked profiles before.
-
Normal Flow:
- The user must be in a conference workspace and click on the "Matches" page.
- Their matches will be displayed.
As a conference attendee, I want to be able to join a conference and create my conference profile, so that I can use the app's main features.
User interface mockups
Acceptance Tests
Scenario: Joining a conference
Given I’m trying to join a conference
When I click on the conference event
Then the system opens a page for me to create my conference profile
When I complete this form with my information and interests, clicking the "Next" button
Then the system adds me to that conference’s attendee list, saving my information for matching purposes
Scenario: Not adding an image
Given I'm creating my profile
When I do not upload any image and click the "Next" button
Then the system assigns me a default image
Value/Effort
Value: Must have
Effort: M
As a conference attendee, I want to be able to choose the topics I’m interested in so that I can see profiles that have similar interests to mine.
User interface mockups
Acceptance Tests
Scenario: Joining a conference
Given I’m trying to join a conference
When I'm filling the form with my information
Then the system opens an alert dialog where it allows me to choose the topics of the conference I’m interested in
When I choose the interests and click the "Submit" button
Then I expect to see the chosen interests in the form
When I click on the "Next" button
Then the system saves my information for matching purposes
Scenario: Joining a conference and not selecting interests
Given I’m trying to join a conference
When I'm filling the form with my information
Then the system opens an alert dialog where it allows me to choose the topics of the conference I’m interested in
When I do not choose any interests and click the "Submit" button
Then I expect to see no interests in the form
When I click on the "Next" button
Then the system saves my information even though I can't use all the functionalities of the app
Scenario: Editing the conference profile
Given I’m trying to edit my profile
When I'm changing the interests field
Then the system opens an alert dialog where it allows me to choose the topics of the conference I’m interested in
When I choose the interests and click the "Submit" button
Then I expect to see the chosen interests in the form
When I click on the "Save changes" button
Then the system saves my new information
Scenario: Editing the conference profile and not selecting interests
Given I’m trying to edit my profile
When I'm changing the interests field
Then the system opens an alert dialog where it allows me to choose the topics of the conference I’m interested in
When I choose no interests and click the "Submit" button
Then I expect to see no interests in the form
When I click on the "Save changes" button
Then the system saves my information even though I can't use all the functionalities of the app
Value/Effort
Value: Must have
Effort: L
As a user, I want to be able to open a person’s profile to see its information, so that I can see my conference profile or another person's profile and decide if I'm interested or not.
User interface mockups
Acceptance Tests
Scenario: Visualize my conference profile
Given I’m logged in, I have clicked on a conference and I’m on a screen that lists conference profiles
When I open the app drawer and click the "My Profile" button
Then the app opens my profile for that conference
Scenario: Visualize a person’s profile
Given I’m logged in, I have clicked on a conference and I’m on a screen that lists conference profiles
When I click on someone's profile
Then the app opens the person's profile and shows me their information
Value/Effort
Value: Must have
Effort: M
As a conference attendee, I want to be able to like a person's profile, so that I can later be matched with this person.
User interface mockups
Acceptance Tests
Scenario: Like a person’s profile
Given I’m logged in, I have joined a conference and I’m in someone's profile
When I click the "Like" button,
Then the app registers the action and shows my profile on the other user's "Liked Me" page, and changes the button to "Liked"
Scenario: Like a person’s profile without having a personal profile
Given I’m logged in, I have clicked on a conference without creating a profile, and I’m in someone's profile
When I click the "Liked" button,
Then the app shows me a message that I have to create a profile to like someone's profile
Value/Effort
Value: Must have
Effort: M
As a conference attendee, I want to be able to see the top 20 profiles who have the most interests in common with me, so that I can view profiles that are more relevant to me.
User interface mockups
Acceptance Tests
Scenario: See top 20 profiles
Given I’m logged in and I have joined a conference,
When I click on the "Top 20" button located at bottom of the screen
Then the app shows me the top 20 profiles for this conference with whom I have the most interests in common
When I click on a profile,
Then the system sends me to the person’s profile
Scenario: See top 20 profiles having no interests selected
Given I’m logged in and I have joined a conference,
When I click on the "Top 20" button located at bottom of the screen and have no interests selected
Then the app shows me a message that there are no profiles to show
Scenario: See top 20 profiles without having a personal profile
Given I’m logged in and I have clicked on a conference without creating a profile,
When I click on the "Top 20" button located at bottom of the screen
Then the app shows me a message that there are no profiles to show
Value/Effort
Value: Must have
Effort: XL
As a conference attendee, I want to be able to see the profiles that have matched with me, so that I can know the people who liked me back.
User interface mockups
Acceptance Tests
Scenario: See profiles that I've matched with
Given I’m logged in and I have joined a conference,
When I click on the "Matches" button located at bottom of the screen
Then the app shows me the profiles that matched with me
When I click on a profile,
Then the system sends me to the person’s profile
Scenario: See profiles that I've matched with without having matches
Given I’m logged in and I have joined a conference,
When I click on the "Matches" button located at bottom of the screen and I have no matches
Then the app shows me a message that I have no matches
Scenario: See profiles that I've matched with without having a personal profile
Given I’m logged in and I have clicked a conference without creating a profile,
When I click on the "Matches" button located at bottom of the screen
Then the app shows me a message that I have no matches
Value/Effort
Value: Must Have
Effort: M
As a user, I want to be able to view all active conferences, so that I might join them.
User interface mockups
Acceptance Tests
Scenario: View all conferences
Given I’m logged in
When I open the app drawer and I click the "Available conferences" button
Then the app shows me a list of conferences available
Scenario: View all conferences having no conferences happening
Given I’m logged in and no conferences are happening
When I open the app drawer and I click the "Available conferences" button
Then I expect to see a message telling me that there are no active conferences
Value/Effort
Value: Must Have
Effort: S
As a conference staff, I want to be able to create a conference, set its active dates, photo and insert the topics list, so that the conference becomes available to be joined by users.
User interface mockups
Acceptance Tests
Scenario: Creating a conference
Given I’m logged in
When I open the app drawer and I click the "Create conference" button
Then the app takes me to a form where I enter the conference details
When I finish inputting data
Then the app saves the conference and shows me the conference list page
Scenario: Creating a conference and inserting invalid dates
Given I'm inserting the start and end dates
When I insert an end date that's before the start date and I click the create conference button
Then the app warns me that the information is invalid and does not allow me to create a conference
Scenario: Creating a conference and not adding topics
Given I'm inserting the conference topics
When I click the create conference button with no topics added
Then the app does not allow me to create a conference
Value/Effort
Value: Should Have
Effort: L
As a conference attendee, I want to be able to see the profiles that have liked mine, so that I can potentially match them.
User interface mockups
Acceptance Tests
Scenario: Seeing who liked my profile
Given I’m logged in and I have joined a conference,
When I click on the "Liked You" button located at bottom of the screen
Then the app shows me the profiles that liked mine
When I click on a profile,
Then the system sends me to the person’s profile
Scenario: Seeing who liked my profile and having no other attendee liking me
Given I’m logged in and I have joined a conference,
When I click on the "Liked You" button located at bottom of the screen
Then the app shows me a message that I have no other attendee liking me
Scenario: See who liked my profile without having a personal profile
Given I’m logged in and I have clicked a conference without creating a profile
When I click on the "Liked You" button located at bottom of the screen
Then the app shows me a message that I have no other attendee liking me
Value/Effort
Value: Should Have
Effort: M
As a conference attendee, I want to be able to edit my conference profile, changing my interests or any information displayed in my profile, so that it can be updated.
User interface mockups
Acceptance Tests
Scenario: Editing my profile’s information
Given I’m in my profile
When I click on the edit button
Then I can edit my information
When I fill the form with all valid information that I want to change and I click the "Save changes" button
Then I expect the system to save my new information
Scenario: Editing my profile’s information and leaving some fields blank
Given I’m in my profile
When I click on the edit button
Then I can edit my information
When I fill the form and leave some fields blank and I click the "Save changes" button
Then I expect to see those fields remained the same
Scenario: Editing my profile’s information
Given I’m in my profile
When I click on the edit button
Then I can edit my information
When I click the "Cancel" button
Then I expect the system to not save any new information
Value/Effort
Value: Should Have
Effort: M
As conference staff, I want to be able to edit the conference I have created and change dates and topics so that all the information is up to date.
User interface mockups
Acceptance Tests
Scenario: Edit conference
Given I’m logged in and I've opened a conference that I've created
When I open the app drawer and I click on the "Edit conference" button
Then the app shows a form to edit conference details
When I fill the form with all valid information that I want to change and I click the "Save changes" button
Then the app saves the changes
Scenario: Edit conference and leaving some fields blank
Given I’m logged in and I've opened a conference that I've created
When I open the app drawer and I click on the "Edit conference" button
Then the app shows a form to edit conference details
When I fill the form and leave some fields blank and I click the "Save changes" button
Then I expect to see those fields remained the same
Scenario: Edit conference
Given I’m logged in and I've opened a conference that I've created
When I open the app drawer and I click on the "Edit conference" button
Then the app shows a form to edit conference details
When I click the "Cancel" button
Then I expect the system to not save any new information
Value/Effort
Value: Should Have
Effort: M
As a conference attendee, I want to be able to leave a conference that I have joined so that I'm no longer an attendee for this conference and my profile is deleted.
User interface mockups
Acceptance Tests
Scenario: Leaving a conference
Given I’m logged in and I've opened a conference that I've joined
When I open the app drawer and I press the "Leave conference" button
Then the app shows me an alert dialog that asks for my confirmation
When I press the "Leave" button
Then the app deletes my registration and profile for this conference and takes me to the conferences list page
Scenario: Leaving a conference
Given I’m logged in and I've opened a conference that I've joined
When I open the app drawer and I press the "Leave conference" button
Then the app shows me an alert dialog that asks for my confirmation
When I press the "Cancel" button
Then I expect the system to remain the same
Value/Effort
Value: Should Have
Effort: S
As conference staff, I want to be able to delete the conference I have created, so that this conference is no longer available.
User interface mockups
Acceptance Tests
Scenario: Deleting a conference
Given I’m logged in and I've opened a conference that I've created
When I open the app drawer and I press the "Delete conference” button
Then the app shows me an alert dialog that asks for my confirmation
When I press the "Delete" button
Then the app deletes this conference and takes me to the conferences list page
Scenario: Deleting a conference
Given I’m logged in and I've opened a conference that I've created
When I open the app drawer and I press the "Delete conference” button
Then the app shows me an alert dialog that asks for my confirmation
When I press the "Cancel" button
Then I expect the system to remain the same
Value/Effort
Value: Should Have
Effort: S
As a user, I create an account in Meetix, so that I have access to all the available features.
User interface mockups
Acceptance Tests
Scenario: Trying to create an account
When I click on the "Sign up" button of the init menu
Given my email is valid and has no account associated with it yet
When I enter a password and press the button register
Then I expect my account to be created
Scenario: Trying to create an account
When I click on the "Sign up" button of the init menu
Given my email is already associated with an account
When I try to press the button register
Then I expect to not be able to create the account with a message warning me why
Scenario: Trying to create an account
When I click on the "Sign up" button of the init menu
Given my email is not valid
When I try to press the button register
Then I expect to not be able to create the account with a message warning me why
Value/Effort
Value: Should Have
Effort: M
As a user, I want to be able to log in to the app, so that I can use all the available features.
User interface mockups
Acceptance Tests
Scenario: Log in
When I click on the "Sign in" button of the init menu
Given a correct email and password combination
When I press the "Sign in" button
Then I expect to be able to log in to the account
Scenario: Log in
When I click on the "Sign in" button of the init menu
Given either one of my email or password isn’t valid
When I press the "Sign in" button
Then I expect to not be able to log in to the account, with a message warning me why
Scenario: Log out
When I open the app drawer
Given I am logged in
When I press the "Logout" button
Then I expect the app to terminate my session and take me back to the "Sign In" page
Value/Effort
Value: Should Have
Effort: S
As a user, I want to be able to edit my account (change email/password), so that I can change my information.
User interface mockups
Acceptance Tests
Scenario: Edit account
Given I’m logged in and I'm on the conferences list page
When I open the app drawer and I click on the "Account settings" button
Then the app shows me my account editable
When I change my email, password, or username with valid information and the current password is correct and I click on the "Save changes" button
Then the app updates my account
Scenario: Edit account
Given I’m logged in and I'm on the conferences list page
When I open the app drawer and I click on the "Account settings" button
Then the app shows me my account editable
When I change my email, password, or username with invalid information and the current password is correct and I click on the "Save changes" button
Then the app does not allow me to update my account and shows me an error telling me what's wrong
Scenario: Edit account
Given I’m logged in and I'm on the conferences list page
When I open the app drawer and I click on the "Account settings" button
Then the app shows me my account editable
When I leave some fields blank and I click on the "Save changes" button
Then these fields will not be updated
Scenario: Edit account
Given I’m logged in and I'm on the conferences list page
When I open the app drawer and I click on the "Account settings" button
Then the app shows me my account editable
When I edit some fields to the same values they were before and I click on the "Save changes" button
Then these fields will not be updated
Scenario: Edit account
Given I’m logged in and I'm on the conferences list page
When I open the app drawer and I click on the "Account settings" button
Then the app shows me my account editable
When I edit the email and this new email is already being used by another user and I click on the "Save changes" button
Then the app will not allow me to change my email and shows me an error telling me why
Scenario: Edit account
Given I’m logged in and I'm on the conferences list page
When I open the app drawer and I click on the "Account settings" button
Then the app shows me my account editable
When I edit the password and it's a weak password and I click on the "Save changes" button
Then the app will not allow me to change my password and shows me an error telling me why
Value/Effort
Value: Could Have
Effort: S
As a user, I want to be able to see all the profiles for a given conference, so that I can find profiles that interest me.
User interface mockups
Acceptance Tests
Scenario: See all profiles
Given I’m logged in and I have clicked on a conference,
When I click on the "Profiles" button located at the bottom of the screen
Then the app shows me all profiles for this conference
Scenario: See all profiles and having no profiles for that conference created
Given I’m logged in and I have clicked on a conference,
When I click on the "Profiles" button located at the bottom of the screen and there are no profiles for that conference
Then the app shows me a message that there are no profiles for this conference
Value/Effort
Value: Should Have
Effort: S
As a conference staff, I want to see my profile with something that signals that I'm the conference staff so that users can also see that I'm the one who created the conference.
User interface mockups
Acceptance Tests
Scenario: View profiles
Given I'm in a conference workspace and I'm viewing users' profiles
When the user id matches the conference creator id
Then the app shows me a conference staff profile
When I'm viewing a conference staff profile
Then the system shows me a profile similar to other users with something that signals that the user is a conference staff.
Scenario: View profiles.
Given I'm in a conference workspace and I'm viewing users' profiles
When the user id does not match the conference creator id
Then the app shows me a regular conference profile with nothing that distinguishes what kind of user it is.
Value/Effort
Value: Could Have
Effort: S
As a conference user, I want to be able to see the conferences I have joined/created and switch between them so that I can network in multiple conferences.
User interface mockups
Acceptance Tests
Scenario: See joined conferences
Given I’m logged in
When I open the app drawer and I click on the "Joined conferences" button
Then the app shows me all the conferences that I've joined
When I click on the conference event
Then the app switches me to this conference’s workspace
Scenario: See joined conferences
Given I’m logged in and I have joined conferences without creating a profile,
When I open the app drawer and I click on the "Joined conferences" button
Then the app shows me a message that I have not joined any conferences
Scenario: See created conferences
Given I’m logged in
When I open the app drawer and I click on the "Created conferences" button
Then the app shows me all the conferences that I've created
When I click on the conference event
Then the app switches me to this conference’s workspace
Scenario: See created conferences
Given I’m logged in and I have not created any conferences,
When I open the app drawer and I click on the "Created conferences" button
Then the app shows me a message that I have not joined any conferences
Value/Effort
Value: Could Have
Effort: XL
As a user, I want to be able to search all the profiles for a given conference, so that I can have a selected view according to what I'm looking for.
User interface mockups
Acceptance Tests
Scenario: Search profiles
Given I’m logged in and I have joined a conference
When I click on the "Profiles" button located at the bottom of the screen
Then the app shows me all profiles for this conference
When I click on the "Search" button
Then the app shows me a page with a search bar
When I click on th "Search bar" and insert a string containing a name, interest, occupation or location
Then the app shows me all profiles with fields that match the string
Value/Effort
Value: Could Have
Effort: XL
As a conference attendee, I want to be able to search for a specific conference by name or interests, so that I can easily find what I'm looking for.
User interface mockups
Acceptance Tests
Scenario: Searching for conferences
Given I’m logged in
When I click the button to search for active conferences to join
Then the app shows me a page with a search bar
When I click on the "Search bar" and insert a string to search for either the conference name or interests,
Then the app shows me all active conferences matching the string if any
Value/Effort
Value: Could Have
Effort: L
As a user, I want to be able to delete my account, so that I no longer can use this app.
User interface mockups
Acceptance Tests
Scenario: Deleting account
Given I’m logged in and I'm on the conferences list page
When I open the app drawer and I click on the "Account settings" button
Then the app shows me my account
When I click on the "Delete Account" button
Then the app shows me an alert dialog that asks for my confirmation and password
When I press the "Delete" button
Then the app deletes my account and all my information (photos, likes, etc.)
Scenario: Deleting account
Given I’m logged in and I'm on the conferences list page
When I open the app drawer and I click on the "Account settings" button
Then the app shows me my account
When I click on the "Delete Account" button
Then the app shows me an alert dialog that asks for my confirmation and password
When I press the "Delete" button and the password is not correct or empty
Then the app does not allow me to delete my account and shows me an error telling me why
Scenario: Deleting account
Given I’m logged in and I'm on the conferences list page
When I open the app drawer and I click on the "Account settings" button
Then the app shows me my account
When I click on the "Delete Account" button
Then the app shows me an alert dialog that asks for my confirmation
When I press the "Cancel" button
Then I expect the system to remain the same
Scenario: Deleting account
Given I’m logged in and I'm on the conferences list page and I'm staff in some conferences
When I open the app drawer and I click on the "Account settings" button
Then the app shows me my account
When I click on the "Delete Account" button
Then the app shows me an alert dialog that asks for my confirmation and password
When I press the "Delete" button
Then the app deletes my account and all my information (photos, likes, etc.) and also all the conferences I've created and all the information corresponding to these conferences
Value/Effort
Value: Could Have
Effort: S
The users of our app can either be attendees or staff. Staff is the person who creates the conference (1 - *). When users join a conference, they have to create a profile (1 - 1), that will be their profile in that conference (* - 1). Attendees can like other attendees (1 - *) and if the like is mutual they match (1 - *).
The architecture of a software system encompasses the set of key decisions about its overall organization.
The following topics refer to the logical and physical architecture, which will show the connection between each machine and the used technologies.
We decided to use the MVC architecture pattern which splits the code into three parts keeping the view, model, and controller independent of each other.
-
The Model only contains the data such as the information about the conferences, user data, etc.
-
The View displays this data, collects and sends user interactions to the Controller.
-
The Controller is the brain of the app. It determines how data in the Model has changed accordingly to the actions reported by the View.
Our application has three big packages, corresponding to the MVC architecture parts. We also divided the view package into smaller, more manageable, sub-packages, divided by functionality.
The meetix-widgets package contains widgets implementing custom elements that are reused in the other packages.
In this subsection, it is documented the high-level physical structure decisions made in our software system (machines, connections, software components installed, and their dependencies).
Before starting to implement the application, we needed to decide the programming language: Flutter was the obvious choice since it was recommended by the professors and is one of the most prominent mobile development frameworks.
The following diagram details the physical architecture of our project:
For the backend, we chose Firebase as it is simple to set up and easy to integrate with Flutter. To avoid large data processing workloads in the app, we offloaded some logic to the backend using Cloud Functions - namely the interest matching algorithm. We also use it to ensure data integrity, using functions as database triggers.
To allow the user to search through the database information, we connected to the Algolia server, a full-text search provider. This allows us to avoid heavy workloads on the device and provide more comprehensive search results.
Communication with these services uses HTTPS requests. Therefore, to use our app, the user needs an internet connection.
To help on validating all the architectural, design, and technological decisions made, we implemented a vertical prototype, a thin vertical slice of the system.
The prototype's role in our development process was about testing if the tool Flutter was adequate to do what we aimed to do and also about advancing the development of the app itself.
Our prototype implemented a simplified version of user story 17, showing a list of names on a page. We later integrated this with firebase to also test if the backend solution would be adequate.
Changelogs for the 4 different product increments can be found here
To ensure the application works as intended, we implemented automated tests using flutter's testing framework and the flutter_gherkin package.
We did not implement true unit tests, since our application offloads the bulk of the data processing needs to Firebase's Cloud Functions. Therefore, the unit tests we could implement in flutter, wouldn't be very meaningful, testing only getters for our model classes.
We opted instead to use flutter's widget tests framework to test how elements are displayed and laid out. These are component tests that provide more meaningful results since they allow us to know if the information we get from both Cloud Firestore and Cloud Functions requests is being handled properly by the app.
The features to be tested are the following:
- Displaying a list of profiles
- Displaying a profile
- Displaying a list of conferences
We decided to test these features because they cover the bulk of the user's activities when using the app. They also provide good coverage of the occasions where we are displaying data from the aforementioned cloud services.
We used the flutter_gherkin package to automate some of our acceptance tests.
The features to be tested are the following:
- Logging into the app
- Logging out of the app
- Signing up for the app
We decided to test these features not necessarily because they are the most crucial to test, but because of the instability and limitations of the testing API. These were chosen as a good proof-of-concept for automating acceptance tests since, while simple, they require user interaction through both taps and text input.
In order to succesfully run these tests the user must be logged out, open the terminal in the test_driver folder and run dart test_config.dart
in the terminal.
During the development of our app, every time a new feature was added, its robustness was checked using its acceptance tests. At the end of each product iteration, we would also perform more in-depth testing, checking that all the new features worked well together.
These tests verify that when given a list of mock profiles, the app correctly displays their information. We achieve this by verifying if the app generates the correct text and icon elements for the given profiles. We also check that if the profile list is empty, the app displays the correct error.
These tests verify that when given a mock profile, the app correctly displays its information. We achieve this by verifying if the app generates the correct text and icon elements for the given profile. We also check that if the profile has some fields with null values, the app does not display unwanted tags.
These tests verify that when given a list of mock conferences, the app correctly displays their information. We achieve this by verifying if the app generates the correct text and icon elements for the given conferences. We also check that if the conference list is empty, the app displays the correct error.
These tests verify that when the user is logged out and in the "Sign In" page, they can log in successfully. We achieve this by verifying that when a valid email and password combination is inserted, the app logs in the user and redirected them to a page that lists available conferences. We also check that if this combination is invalid, the app displays the correct warning message and stays on the "Sign In" page.
These tests verify that when the user is logged in and on a page that lists conferences, they can log out successfully. We achieved this by verifying that when the "Logout" button of the app drawer is pressed, the app redirects the user to the "Sign In" page.
These tests verify that when the user tries to create an account with an invalid email, the account is not created. We achieved this by verifying that when the user inserts an email that is already associated with an existing account or inserts a badly formatted email, the app stays on the "Sign Up" page and the respective warning message is shown.
These tests verify if the workflow of our app is as intended. We achieved this by trying to do both valid and invalid actions and testing edge cases. We tested the features individually but also, when applicable, the way they affected other parts of the app that depended on, or interacted with, them. Anytime a feature was added, we also tested the full current flow of the app.
To control and maintain the integrity of our project's components(code, models, documents), configuration, and change management are key activities.
To manage feature requests, bug fixes, and improvements, we used GitHub issues, following the GitHub flow.
The planning and management of our project were made using the Github Projects tool: https://github.com/FEUP-ESOF-2020-21/open-cx-t7g5-5-estrelinhas/projects/1.
Here we registered our tasks, assigned them to the team members, added estimations to tasks, and monitored their progress. This tool showed itself to be suitable for keeping track of our project.