Welcome to the documentation pages of the AsQuestions of openCX!
- Business modeling
- Requirements
- Architecture and Design
- Implementation
- Test
- Configuration and change management
- Project management
Please contact us!
Thank you!
Caio Nogueira
Diogo Almeida
João Pinto
Miguel Silva
Pedro Queirós
Telmo Botelho
AsQuestions aims to encourage and simplify speaker-audience interaction during talks by providing an easy-to-use interface for posting, rating, and answering questions.
Clearing up the audience's doubts during a talk is often a difficult task for the speaker. It is impossible to guarantee that the most relevant questions don't end up unanswered. To solve this issue, AsQuestions provides a talk-targeted interface that allows attendees to post their doubts for everyone in the room. The audience can then upvote the ones they want to see answered and downvote the ones they find less interesting. This way, the speaker can effortlessly see what questions and topics to cover in the Q&A section of the talk.
-
Actor. Attendee.
-
Description. This use case exists so that the attendee can post their questions into the database to later be answered.
-
Preconditions and Postconditions. To post a question the attendee must first join a talk’s page, being previously logged in. In the end, the user's question will be added to the database, and displayed on the forum.
-
Normal Flow.
- The attendee presses the button to add a question to the talk.
- The attendee types his question.
- The attendee selects a slide to anex to the question.
- If the question have the allowed length, the system saves the question to the database, and displays it on the talk page.
-
Alternative Flows and Exceptions.
- The attendee presses the button to add a question to the talk.
- The attendee types his question.
- The attendee selects a slide to anex to the question.
- If the question is too short, the system will respond with an error message.
- The user can then retype his question, and proceed as normal.
-
Actor. Attendee.
-
Description. This use case exists for filter questions, making the most requested to the top of the list.
-
Preconditions and Postconditions. To upvote or downvote a question the attendee must first join a talk’s page, being previously logged in. After voting, the vote will then be added to the total count.
-
Normal Flow.
- The attendee presses the up or downvote button.
- The system adds the vote to the respective count or removes it if the button had been pressed earlier.
-
Actor. All Users
-
Description. This use case exists so that the users can answer each other's questions.
-
Preconditions and Postconditions. To make an answer the user must first join a talk's page, being previously logged in. In the end, the user's answer will be added to the database, and displayed as a reply to the chosen question.
-
Normal Flow.
- The user selects a question he wants to answer.
- The user types his answer.
- If it's within the allowed length, the system saves the answer to the database, and displays it as a reply to the selected question.
-
Alternative Flows and Exceptions.
- The attendee selects a question he wants to answer.
- The attendee types his answer.
- If the answer is shorter than the character limit, the system sends an error message.
- The user can then retype his answer and proceed as normal.
-
Actor. Speaker
-
Description. This use case exists so that the speaker can create a talk page where the users can interact.
-
Preconditions and Postconditions. To create a talk page the only precondition is to the user be logged in. In the end, the speaker talk page will be added to the database, and displayed as talk.
-
Normal Flow.
- The speaker presses the create a talk button.
- The speaker creates is talk.
- The system saves it to the database and displays it on the talks page.
-
Actor. Moderator.
-
Description. This use case exists so talk moderators can delete questions that are not relevant to the topic at hand.
-
Preconditions and Postconditions. To delete a question the user must first join a talk's page, being previously logged in as a moderator. In the end, the selected question will be removed.
-
Normal Flow.
- The moderator chooses a question.
- The moderator signals the system to remove it.
- The system removes the question from the database.
-
Actor. Moderator
-
Description. This use case exists so that the moderator can make it easy for the speaker to see the most relevant user's questions.
-
Preconditions and Postconditions. To prioritize a question the user must first join a talk's page, being previously logged in as a moderator. In the end, the user's question prioritized will be rearranged to the database and displayed as the top of the list of questions on that talk page.
-
Normal Flow.
- The moderator selects a question he wants to prioritize.
- The moderator selects the send question to speaker button.
- The system rearranges the questions on the database and displays the prioritized questions on top of the talk page.
-
Actor. All users.
-
Description. This use case exists so that users can check each other profiles.
-
Preconditions and Postconditions. To check a profile the user has to have the app installed on the device, be logged in, and be in a talk page.
-
Normal Flow.
- The user selects one profile in the talk page questions.
- The system displays the user profile stored in the database.
As an attendee, I want to post questions so that the speaker or other attendees can answer them.
User interface mockups
Acceptance Tests
Scenario: Posting a question
Given there are 4 questions asked in the forum
When I tap the "Post a Question (+ icon)" button
And I write and submit a question
Then there are 5 questions asked in the forum.Value/Effort
Value: Must have
Effort: XL
As an attendee, I want to be able to mention a specific part of the presentation with my question (like a slide) to help the speaker better understand it.
User interface mockups
Acceptance Tests
Scenario: Mentioning/Tagging a part of the presentation with my question
Given that I'm posting a question in the forum
When I click on the "Add a Slide (Clip icon)" button
Then the app allows me to refer a slide related to my question, through its number or picture
When I click on the "Confirm Selection (Verified icon)"
Then the app attaches that slide to my questionValue/Effort
Value: Should have
Effort: M
As an attendee, I want to see and answer questions so that I can help the other attendees.
User interface mockups
Acceptance Tests
Scenario: Answering other attendees' questions
Given there are 4 questions asked in the forum,
When I click on one of them
Then the app shows me the question and its comment thread
When I tap the Textbox
Then the system allows me to write an answer
When I tap the "Submit Answer" button
Then the system posts the answer to the threadValue/Effort
Value: Must have
Effort: L
As an attendee, I want to be able to see and upvote/downvote questions so that the speaker knows which questions are most relevant for the audience.
User interface mockups
Acceptance Tests
Scenario: Upvoting/Downvoting posted questions
Given there are 3 questions asked in the forum
When I click on the "Upvote (Arrow up icon)" buttons next to the questions
Then their score increases improving their visibility in the forum
When I click on the "Downvote (Arrow down icon)" buttons next to the questions
Then their score decreases lowering their visibility in the forumValue/Effort
Value: Must Have
Effort: M
As a speaker, I want to answer my audience’s questions so that they can leave the session clarified and informed.
User interface mockups
Acceptance Tests
Scenario: Answering questions from the audience
Given I'm logged in as a speaker and there are 3 questions asked in the forum
When I click on one of them
Then the app shows me the question and its comment thread
When I tap the Textbox
Then the system allows me to write an answer
When I tap the "Submit Answer" button
Then the system posts the answer to the thread and attaches it at the top, marking it as the speaker's responseValue/Effort
Value: Must Have
Effort: XL
As a speaker, I want to be able to create a forum for my audience to place their questions about the presentation.
User interface mockups
Acceptance Tests
Scenario: Creating a forum for the audience's questions
Given I’m logged-in as a speaker
Then the app shows me a menu of options
When I click the "Create Talk Room" button
Then the app shows me a form to fill with information about the talk
When I click the "Create" button
Then the app creates the empty question forum and takes me to itValue/Effort
Value: Must Have
Effort: XL
As a moderator, I want to be able to control what questions are passed to the speaker so that the most relevant are answered.
User interface mockups
Acceptance Tests
Scenario: Controlling which questions are passed to the speaker
Given I’m logged-in as a moderator and there are 4 questions asked in the forum
When I click on "Send question to speaker (Star icon)"
Then the system puts the question on top of the list for the speaker, ignoring the upvote/downvote system
When I click on "Delete Question (Trash bin icon)"
Then the app deletes that question from the forumValue/Effort
Value: Should Have
Effort: M
As a user, I want to be able to navigate between the various app sections.
User interface mockups
Acceptance Tests
Scenario: Navigating between the different app sections
Given I'm logged in as any type of user (attendee/speaker/moderator)
When I click on "Navigate to the Home Page (Home Icon)" button on the Navigation Bar
Then the app takes me to the Home Page
When I click on "Navigate to the Talk Questions Section (Message Icon)" button on the Navigation Bar
Then the app takes me to the Talk Questions section
When I click on "Navigate to the User Profile (Person Icon)" button on the Navigation Bar
Then the app takes me to the User Profile section
When I click on "Navigate to Settings (Settings Icon)" button on the Navigation Bar
Then the app takes me to the SettingsValue/Effort
Value: Must Have
Effort: XL
As a user, I want to be able to see my profile and other users' profiles.
User interface mockups
Acceptance Tests
Scenario: Checking User Profiles
Given I'm logged in as any type of user (attendee/speaker/moderator) and I'm currently on the talk Questions page
When I click on a person's icon near their question
Then the app takes me to their profile, where I can see their bio and the talks they're attending
When I click on "Navigate to the User Profile (Person Icon)" button on the Navigation Bar
Then the app takes me to my profile, where I can see more details and edit my account detailsValue/Effort
Value: Should Have
Effort: L
As a user, I want a Sign In/Sign Up page.
User interface mockups
Acceptance Tests
Scenario: Choosing between signing in and signing up
Given I just opened the app and I'm currently logged off of any account
When I click Sign In
Then the app takes me to a Sign In/Login page, where I can log in to the application
When I click Sign Up
Then the app takes me to a Sign Up/Register page, where I can fill in data and create an accountValue/Effort
Value: Must Have
Effort: L
As a user, if I don't currently have an account, I want to be able to Sign Up/Register.
User interface mockups
Acceptance Tests
Scenario: Creating a new account
Given I'm currently on the Sign Up/Register page
When I fill in all the required information
Then the app creates my account using the data provided and let's me Sign In with that infoValue/Effort
Value: Must Have
Effort: L
As a user, I want to be able to log in to my account
User interface mockups
Acceptance Tests
Scenario: Logging in to an existing account
Given I'm currently on the Sign Up/Login page
When I fill in my email and password
Then the app logs me in to my account and takes me to the Home PageValue/Effort
Value: Must Have
Effort: L
As a user, I want to see, join and search for different talks.
User interface mockups
Acceptance Tests
Scenario: Browsing different talks
Given I'm currently in the Home Page screen
When I click on one of the talks shown in the page
Then the app takes me to the talk's respective forumValue/Effort
Value: Must Have
Effort: L
Our app concepts are simple and easy to understand, consisting of talks, users and posts. Every user can be connected to a talk, either as an attendee or as a host/moderator. Attendees can create questions on the talk's forum, possibly using the presentation's slides to help the host better understand what the question is about - or answer another user's post, by creating a comment on the respective post.
The architecture of a software system encompasses the set of key decisions about its overall organization. The following sections show the connection between the technologies and modules used in this project.
Our high-level logical structure of the code will follow the Architectural Pattern - MVC (Model-View-Controller), since it is an industry standard and usually recommended for this type of project. This pattern splits the code in three different parts, keeping them independent of each other.
- The first one is the Model which contains all the application data, such as information about each talk, question or user, etc.
- The View displays the information from the Model to the users and sends input information to the Controller.
- The Controller links the other parts, deciding how the data from the Model will change according to the actions made by the user and reported by the View.
For this project we are using Flutter, a software development kit created by Google as our mobile application framework since it is one of the most used mobile development frameworks, having many appealing built-in features.
For the app's database, we decided to use Firebase since both Firebase and Flutter were developed by Google, which makes its integration on the project simple. This database server is used to save all needed data such as users, talks, questions and comments, etc.
The communication between both sides of the application is done over HTTPS, retrieving/storing all information needed from the database.
For the application prototype, we decide to start with our Story #3, which states that "As an attendee, I want to see and answer questions so that I can help the other attendees.", this being the basis of our app.
We've laid out the general structure of a talk room page, and while we still don't have a real database to connect to, we've added the functionality to allow users to create and submit their questions, which will be temporarily stored by the app and then be displayed in the talks page. Also, work has begun on the question voting system, which for the moment only stores the counting in a local variable.
Changelogs for the 4 different product increments can be found here.
In order to test our app's features we implemented acceptance tests using the gherkin package. These tests are divided in two parts, the features and the steps. The features are described in .feature files using the same language used in the acceptance tests. The steps are defined in .dart files and are responsible for performing the actions described in the features. We decided to implement automated tests for the most important features of our app, such as:
- Highlighting a question
- Posting a question and anexing a slide
- Upvoting/Downvoting a question
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 will use a very simple approach, just to manage feature requests, bug fixes, and improvements, using GitHub issues and following the GitHub flow.
Our project management tool of choice was Github Projects, since it is simple and allows us to register, assign and monitor tasks.



















