Welcome to the documentation pages of the WHoWhat of openCX!
You can find here detailed about the WHoWhat, hereby mentioned as module, from a high-level vision to low-level implementation decisions, a kind of Software Development Report (see template), organized by discipline (as of RUP):
- Business modeling
- Requirements
- Architecture and Design
- Implementation
- Test
- Configuration and change management
- Project management
So far, contributions are exclusively made by the initial team, but we hope to open them to the community, in all areas and topics: requirements, technologies, development, experimentation, testing, etc.
Please contact us!
Thank you!
Emanuel Trigo, Muriel Pinho, Rodrigo Reis, Teresa Corado
Polling perspectives on a matter, creating a more captivating experience of a remote conference.
Presenters sometimes have a difficult time getting the attendees perspectives in a conference while keeping the audience engaged. WHoWhat solves that with an app that provides an easy and engaging way to poll audiences anywhere, in real-time.
In this section, we describe all kinds of requirements for our module: functional and non-functional requirements.
-
Actor. Name only the actor that will be initiating this use case, i.e. a person or other entity external to the software system being specified who interacts with the system and performs use cases to accomplish tasks.
-
Description. Provide a brief description of the reason for and outcome of this use case, or a high-level description of the sequence of actions and the outcome of executing the use case.
-
Preconditions and Postconditions. Include any activities that must take place, or any conditions that must be true, before the use case can be started (preconditions). Describe also the state of the system at the conclusion of the use case execution (postconditions).
-
Normal Flow. Provide a detailed description of the user actions and system responses that will take place during execution of the use case under normal, expected conditions. This dialog sequence will ultimately lead to accomplishing the goal stated in the use case name and description. This is best done as a numbered list of actions performed by the actor, alternating with responses provided by the system.
-
Alternative Flows and Exceptions. Document other, legitimate usage scenarios that can take place within this use case, stating any differences in the sequence of steps that take place. In addition, describe any anticipated error conditions that could occur during execution of the use case, and define how the system is to respond to those conditions.
-
Actor. Atendee
-
Description. This use case exists so that the attendee can answer a certain poll.
-
Preconditions and Postconditions. The poll must have already been created and started by its speaker.
-
Normal Flow.
- The attendee inserts a code that gives access to a session.
- The attendee taps the "connect" button.
- The attendee gets in the poll and is presented with its questions.
-
Alternative Flows and Exceptions.
- The attendee inserts an invalid code that gives access to a session.
- The code is rejected.
- The attendee inserts a valid code.
- The attendee taps the "connect" button.
- The attendee gets in the poll and is presented with its questions.
-
Actor. Speaker
-
Description. This use case exists in order to start a poll that has been previously created.
-
Preconditions and Postconditions. The user must have already created the poll.
-
Normal Flow.
- The speaker selects a poll from their created polls area.
- The speaker selects start poll session.
- The poll session is started.
-
Alternative Flows and Exceptions.
-
Actor. Speaker
-
Description. This use case exists so that the speaker can create new polls.
-
Preconditions and Postconditions. The user must have a valid account. After the creating the poll will be added to the account polls.
-
Normal Flow.
- The speaker chooses to create a new poll.
- A new poll screen will be prompt.
- The speaker type the poll information.
- The speaker chooses to add questions.
- The speaker type the question and options.
- The new poll is added to the database and the speaker account
-
Alternative Flows and Exceptions.
- The speaker chooses to create a new poll.
- A new poll screen will be prompt.
- The speaker invalid information.
- An error message will appear.
-
Actor. Speaker
-
Description. This use case exists so that the speaker can change at any time his polls attributes .
-
Preconditions and Postconditions. The speaker must have a valid poll selected . After being submitted the poll information is updated in the database.
-
Normal Flow.
- The speaker selects a valid poll.
- A new screen will open with the poll information.
- The speaker changes the poll information and submits.
- All the poll attributes will be updated on the database.
-
Alternative Flows and Exceptions.
- The speaker selects a valid poll.
- A new screen will open with the poll information.
- The speaker changes the poll information.
- The new information is invalid.
- An error message will appear warning the speaker to redo the changes.
-
Actor. Speaker
-
Description. This use case exists so that the speaker can delete his previous created polls.
-
Preconditions and Postconditions. The speaker must select a valid poll.
-
Normal Flow.
- The speaker select a valid poll.
- The speaker chooses to delete the selected poll.
- The poll will be deleted in the database.
-
Alternative Flows and Exceptions.
-
Actor. User
-
Description. this use case exists so that the user is able to create a personal account in order save their data such as the polls they will use in upcoming conferences.
-
Preconditions and Postconditions. in order to register in the app the user must insert their respective data, such as their personal email and a password.
-
Normal Flow.
- The user selects the register option.
- The user inserts their personal email and password.
- The user selects the submitting button.
- A new account is created with the data of the user.
- The screen is redirrected to the home page of the app with the user's new account logged in.
-
Alternative Flows and Exceptions.
-
Actor. User
-
Description. this use case exists so that the user is able to enter in their personal account associated with their already existing google account in order to save their data such as the polls they will use in upcoming conferences.
-
Preconditions and Postconditions. in order to register in the app via google the user must have a personal google account.
-
Normal Flow.
- The user selects the 'Log in with google' option.
- The user logs in their google account.
- The user selects the submitting button.
- The screen is redirrected to the home page of the app with the user's account logged in.
-
Alternative Flows and Exceptions.
-
Actor. User
-
Description. this use case exists so that the user can access their personal account in order to save their data such as the polls they will use in upcoming conferences.
-
Preconditions and Postconditions. in order to log in on the app the user must have previously registered in it and insert the same credentials.
-
Normal Flow.
- The user inserts the email and password associated with their account.
- The user selects the log in button.
- The screen is redirrected to the home page with the user's logged in account.
-
Alternative Flows and Exceptions.
- The user inserts an incorrect email or password associated with their personal account.
- The user selects the log in button.
- An error message appears, stating that one of the fields was typed incorrectly.
- The user inserts the correct data associated with their account.
- The user selects the log in button.
- The screen is redirrected to the home page with the user's logged in account.
-
Actor. User
-
Description. this use case exists so that the user can safely log out from their personal account saving all the changes they made.
-
Preconditions and Postconditions. In order to log out from the app, the user must be already logged in.
-
Normal Flow.
- The user taps the log out button.
- The user is redirected to the log in screen, safely logging out from their account.
-
Alternative Flows and Exceptions.
User story #1
As a attendee I want to insert a code in order to join a session
User interface mockup
Acceptance Test:
Scenario: insert a code that gives access to a session
Given an existing session code
When I insert the code
And I tap the "connect" button
Then I have joined the session
Value and effort
- Value: Must have
- Effort: M
User story #2
As a speaker I want to start a poll
User interface mockup
Acceptance Test:
Scenario: start a poll
When I tap the "WHoWhat" button and select my poll
And tap the Start Session button
Then I have started a session
Value and effort
- Value: Must have
- Effort: M
User story #3
As a user I want to register in the app
User interface mockup
Acceptance Test:
Scenario: register in the app
Given a user that has the app
When I tap the "Sign Up" button
And I insert my data
Then my account is created
Value and effort
- Value: Must have
- Effort: S
User story #4
As a speaker I want to create a poll
User interface mockup
Acceptance Test:
Scenario: create a poll
Given a speaker registered in the app
When I tap the "add poll" button and insert name and description
And I tap create and continue
Then my poll is created
Value and effort
- Value: Must have
- Effort: M
User story #5
As a user I want to manage my polls
User interface mockup
Acceptance Test:
Scenario: edit or delete a previously created poll
Given a user with previously created polls
When I tap the "profile" button and select my poll
And tap the "poll card"
Then I can edit or delete the data of the poll
Value and effort
- Value: Should have
- Effort: L
User story #6
As a user I want to login with my account
User interface mockup
Acceptance Test:
Scenario: login in the app
Given a user that has an created account
When I insert my data
And I tap the "Sign In" button
Then my account is used to sign in
Value and effort
- Value: Must have
- Effort: M
User story #7
As a speaker i want to insert the options to a question
User interface mockup
Acceptance Test:
Scenario: add options to question
Given a speaker that has a created poll
When I create a "question"
And I fill the options
Then options are added to the question
Value and effort
- Value: Must have
- Effort: L
User story #8
As a speaker i want to add and image representing my poll
User interface mockup
Acceptance Test:
Scenario: add image to poll
Given a speaker registered in the app
When I tap the "add poll" button and click on the image
And select and image from the gallery
Then my image is added to my poll
Value and effort
- Value: Must have
- Effort: M
User story #9
As a speaker i want to create the questions of a poll
User interface mockup
Acceptance Test:
Scenario: add question to poll
Given a speaker that has an created poll
When I select a created "poll" and
And press the "+" button
Then a question is added to poll
Value and effort
- Value: Must have
- Effort: M
User story #10
As a user I want to login with google
User interface mockup
Acceptance Test:
Scenario: login with google
Given a user that has an google account
When I Tap the "google" icon
And I insert my data
Then my google account is used to sign in
Value and effort
- Value: Should have
- Effort: S
User story #11
As a user I want to select a polls
User interface mockup
Acceptance Test:
Scenario: select a previously created poll
Given a user with a previously created poll
When I tap the "WHoWhat" button
And select my poll
Then i can start a session or edit the poll
Value and effort
- Value: must have
- Effort: M
User story #12
As a atendee I want to answer the question on a poll
User interface mockup
Acceptance Test:
Scenario: answer question in poll
Given a user who joined a session
When the session starts and the "questions" appear
Then i can select an option to answer the question
Value and effort
- Value: must have
- Effort: L
User story #13
As a user I want to select my polls
User interface mockup
Acceptance Test:
Scenario: select my previously created polls
Given a user with previously created polls
When I tap the "WHoWhat" button
Then i have acess to my polls
Value and effort
- Value: must have
- Effort: M
Our domain consists of two main classes Session and Poll and a Ternary relation called Answer.
- Poll is composed of Question and Session, having Zero or more Sessions and 1 or more Questions which in turn are composed of between 2 and 4 Options.
- Poll has one Speaker but a Speaker can have multiple Polls.
- Speaker and Atendee are generalizations of User.
- Session has exactly one Speaker and 0 or more Atendees
- Answer is a ternary relation between Session, Atendeee and Option, as an answer depends on those three to be created.
The architecture of a software system encompasses the set of key decisions about its overall organization.
We will be talking about the logical architecture, a high-level view of the code structure, and the physical architecture, which will show the connection between each machine and the used technologies.
We choose the MVC approach because it fits perfectly the project structure and it's simple.
The Model contains the main packages of data: Sessions, Polls, Users, Questions. The View is composed of Widgets and Pages that are responsible of displaying the information.
The Controller responsability is to query the database using Model (Authenticator and Database Controller) and retrieve the information to the View, in order to display it.
- We chose Flutter in order to integrate our app with the
open-cx
main project. - We chose Firebase for database management and backend server, because has a good integration with Flutter.
- Our project's physical architecture is simple, the user installs the WHoWhat app on his smartphone, serving as his client, and the app communicates with the firebase server via HTTPS requests, where our database is stored, the server handles the communication of the API with the Database, storing and retrieving all information needed for WHoWhat.
To design our project's UI we used Figma, which enabled us to create screen mockups, plan an usage flow to the app and link them together to create a usable prototype. Here's a GIF from the result:
The implementation was divided in iterations, here are the releases for each of them:
Releases include the source code and built versions for Android and iOS.
In the interest of verifying that the developed program performed as expected, multiple functional tests were conducted for each user story, previously mentioned in the report. For instance, in order to verify that the functionalities developed for the User Story #1 ("As an attendee I want to insert a code in order to join a session") ran properly and that each requisite was met, an individual assuming the role of an attendee inserted in the application a generated code that would allow said attendee to join a conference session as mentioned in the user story at hand, assuring the correct behaviour of the application.
Configuration and change management are key activities to control change to, and maintain the integrity of, a project’s artifacts (code, models, documents).
For the purpose of ESOF, we used a very simple approach, just to manage feature requests, bug fixes, and improvements, using GitHub issues and following the GitHub flow.
To plan and manage our product development we used Github Projects: WHoWhat Project Board
Describe your contribution to open-cx (iteration 5), linking to the appropriate pull requests, issues, documentation.