Skip to content

FEUP-ESOF-2020-21/open-cx-t2g5-5headers

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

90 Commits
 
 
 
 
 
 

Repository files navigation

  • openCX-t2g5-5headers Development Report

    Welcome to the documentation pages of the ConfMate of openCX!

    You can find here detailed about the ConfMate 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):

    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!

    Carlos Lousada

    José David Rocha

    Tiago Marques

    Tomás Mendes


    Product Vision

    ConfMate is an app designed to redefine giveaways on conferences. Instead of relying on luck, we allow conference hosts to select who they want to give/sell the products to, based on requeriments they set.


    Elevator Pitch

    Most conferences have a common problem: products promoted by the hosts are often given away randomly and, most of the times, the attendees that receive them don't even give much use to them. That’s the reason why we decided to create ConfMate, an app designed to redefine conferences' giveaways. This way, instead of purely relying on luck, ConfMate allows hosts to select who they want to give or sell the products to, based on requirements they previously set. With our safe and reliable app, ConfMate will definitely make justice to conferences' giveaways.


    Requirements

    Use case diagram

    Use case diagram

    Book Products

    Actor: Attendee Description: By selecting a product from a given conference they can apply for the given product. Additionally, they can also fill out a small text, explaining the reason why they think they are a good match for the product.

    Preconditions and Post conditions: The user must be logged in order to book a product.

    Normal flow

    • The attendee navigates to the Products Tab.

    • The attendee taps on the product he wishes to apply to.

    • The attendee presses the button to apply for a product.

    • The attendee types why he should receive the product.

    • The attendee confirms his appliance.

    Alternative Flows and Exceptions

    • The attendee navigates to a Talk description.

    • The attendee taps the "Check Promoted Products" button.

    • The attendee taps on the product he wishes to apply to.

    • The attendee presses the button to apply for a product.

    • The attendee types why he should receive the product.

    • The attendee confirms his appliance.

    Promote Products

    Actor: Host
    Description: The hosts can choose to promote products on their own talks as well as choosing the receivers of such products.

    Preconditions and Post conditions: The host must have created at least one talk in order to complete the adding of a product.

    Normal flow:

    • The host presses the button to add a product to his talk.
    • The host fills out a small form with the product description.
    • The hosts selects the talk which he wants to add the product to.

    Giveaway Products

    Actor: Host
    Description: The hosts can choose the attendees who will receive the products. Normal flow:

    • The hosts navigates to the Products Tab.

    • The hosts taps on the product he wishes to check.

    • The host presses the button to check the candidates of his product.

    • The host scrolls through the list of attendees and selects who he wants to give the product to.

    • The hosts checks if the attendee selected is the one he wants to give the product to, by reading the text the attendee wrote with the justification for applying.

    • The hosts presses "YES" and gives the product to the attendee.

    Alternative Flows and Exceptions:

    • The hosts taps on his Talk.

    • The hosts taps on the "Check Promoted Products".

    • The host taps on the product he wishes to check.

    • The host presses the button to check the candidates of his product.

    • The host scrolls through the list of attendees and selects who he wants to give the product to.

    • The hosts checks if the attendee selected is the one he wants to give the product to, by reading the text the attendee wrote with the justification for applying.

    • The hosts presses "YES" and gives the product to the attendee.


    User Stories

    User Story Map

    Story #1 - Promote Products

    As a host I want to be able to promote and recommend products I find relevant to the conference.

    User interface mockups

    Mockup 1 Mockup 2

    Acceptance Tests

    Scenario: Promoting/recommending products on the conference
    	Given that I wish to promote/recommend a certain product I find relevant
    	When I tap the "Add Products" button
    	Then the app starts displaying the selected product on the conference's forum

    Value/Effort

    Value: Must have

    Effort: XL


    Story #2 - Giveaway Prodcuts

    As a host I want to be able to choose which attendees I wish to giveaway the products to.

    User interface mockups

    Mockup 3

    Acceptance Tests

    Scenario: Choosing which attendees should receive the products
    	Given that I wish to choose which attendees should receive the products
    	When I tap the "Choose Attendees" button
    	Then I will able be to pick between the candidates who I want to give the products to

    Value/Effort

    Value: Must have

    Effort: XL


    Story #3 - Apply For Products

    As an attendee I want to be able to apply for products.

    User interface mockups

    Mockup 4

    Acceptance Tests

    Scenario: Applying a product related to a certain conference
    	Given that I wish to apply for a promoted producted
    	When I tap the "Apply for" button
    	Then I will able be to the possible candidates capable of receiving the selected product

    Value/Effort

    Value: Must have

    Effort: XL


    Story #4 - Book Room

    As a host I want to be able to book a room to host my conference.

    User interface mockups

    Mockup 5

    Acceptance Tests

    Scenario: Booking a room to host a conference
    	Given that I wish to book a room to host my conference
    	When I click "Book Room"
    	Then the app shows me the available rooms 
    	When I tap the "Choose Room" button
    	Then the app books the selected room
        When I tap the "Create Talk" button
    	Then the system creates the conference and displays it on the "All Talks" menu

    Value/Effort

    Value: Must Have

    Effort: S


    Story #5 - Book Seat

    As an attendee I want to be able to book a seat for conferences that I wish to attend.

    User interface mockups

    Mockup 6

    Acceptance Tests

    Scenario: Booking a seat for a conference
    	Given I want to book a seat for a certain conference
    	When I click the "Book conference seat" button
    	Then the app shows me the available seats
    	When I click the "Select Seat"
    	Then the app books the seat for the selected conference

    Value/Effort

    Value: Must Have

    Effort: M


    Story #6 - Get Notifications

    As an attendee I want to be able to receive a notification whenever i receive (or don't receive) a product.

    User interface mockups

    Mockup 6

    Acceptance Tests

    Scenario: Getting a Notification
    	Given I want to get a product
    	When the Hosts gives me the product
    	Then the app sends me a notification

    Value/Effort

    Value: Must Have

    Effort: M

    Domain Model

    enter image description here

    Our app concepts are easily understood, consisting of talks, products and profiles. Every user profile can be connected to a talk as an attendee or host and can also apply for products, justifying his option on this subject. Furthermore, talks have limited seats and featured products that will be given away by the host to attendees that chose the products that he is promoting.


    Architecture and Design

    The architecture of a software system encompasses the set of key decisions about its overall organization. This way, logical and physical architectures are two main themes that will be covered in this specific topic.

    Logical architecture

    enter image description here

    To structure our app on a high-level, we decided to implement the MVC architectural pattern, since it is a good standard for this type of project.

    Firstly, the Model contains all the application data: profiles, talks and products.

    Furthermore, the View component represents the concrete display of the app state (mainly composed by widgets).

    Finally, the Controller connects both previously referred components: the Model sends data for the View to display and the View sends user inputs for the Model to process. This process is completed using a set of objects that query the database (firestore), provide authentication functions, accept products, book seats, among other actions.

    Physical architecture

    enter image description here

    The user installs ConfMate on their smartphone and whenever they need to connect with our database (firestore), it communicates with it via HTTPS requests, storing and retrieving all the information needed.

    Discussing about the programming language we chose, Flutter was the best concrete option, because of two main issues: it was not only required but also very appealing due to many provided built-in features.

    Prototype

    To help on validating all the architectural, design and technological decisions made, we usually implement a vertical prototype, a thin vertical slice of the system.

    In this subsection please describe in more detail which, and how, user(s) story(ies) were implemented.


Implementation

Regular product increments are a good practice of product management.

While not necessary, sometimes it might be useful to explain a few aspects of the code that have the greatest potential to confuse software engineers about how it works. Since the code should speak by itself, try to keep this section as short and simple as possible.

Use cross-links to the code repository and only embed real fragments of code when strictly needed, since they tend to become outdated very soon.


Test

There are several ways of documenting testing activities, and quality assurance in general, being the most common: a strategy, a plan, test case specifications, and test checklists.

In this section it is only expected to include the following:

  • test plan describing the list of features to be tested and the testing methods and tools;
  • test case specifications to verify the functionalities, using unit tests and acceptance tests.

A good practice is to simplify this, avoiding repetitions, and automating the testing actions as much as possible.


Configuration and change management

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.


Project management

Software project management is an art and science of planning and leading software projects, in which software projects are planned, implemented, monitored and controlled.

In the context of ESOF, we expect that each team adopts a project management tool capable of registering tasks, assign tasks to people, add estimations to tasks, monitor tasks progress, and therefore being able to track their projects.

Example of tools to do this are:

We recommend to use the simplest tool that can possibly work for the team.


Evolution - contributions to open-cx

Describe your contribution to open-cx (iteration 5), linking to the appropriate pull requests, issues, documentation.