Scooby Help

Development Process

The development process adopted follows the SCRUM framework, incorporating its guidelines and applying insights gained during the course.

The project was managed in an agile manner to maximize teamwork. Automatic tools tailored for this development were used, promoting both personal and group growth through frequent interactions among team members.

Roles

  • Domain expert: Giovanni Antonioni, providing technical guidance and quality assurance

  • Product owner: Valerio Di Zio, coordinating the team and planning sprint activities

  • Developer: Giovanni Antonioni, Valerio Di Zio, Luca Rubboli and Francesco Magnani

Meetings

The team engaged in various types of meetings throughout the project development.

Initial Planning

The team conducted approximately 2-3 meetings at the project’s outset to define the various requirements (Product backlog) with an appropriate level of abstraction. These meetings also clarified the use cases for various stakeholders and organized the initial stages of work, such as the initial sprint.

Sprint Review and Sprint Planning

Sprint review and sprint planning meetings were held at the end and beginning of each sprint (Sunday and Monday, respectively). These meetings were scheduled consecutively to accommodate the needs of all group members.

Starting from the macro requirements (e.g., developing a core API feature, formulating the DSL) outlined in the product backlog, the objectives of each sprint were defined. Activities for each group member were also determined during these meetings.

At the end of each sprint, a meeting was held to evaluate the week’s work, identify any incomplete features or shortcomings, and highlight problems encountered and key points to considered in the next sprint.

Daily Updates

Daily updates were continuously exchanged between the group members. Additional meetings were convened as needed to provide assistance or analyze critical problems, which could extend the duration of these meetings.

YouTrack

The tool YouTrack was used to organize activities, manage the backlog, allocate tasks, and track additional project materials. YouTrack provides numerous features to support agile development: the following two were intensively used.

Knowledge Base

The Knowledge Base allows the creation of hypertext articles to form a publicly available knowledge repository. It was used to maintain important textual artifacts that documented crucial decisions about various project aspects. For instance, the Glossary contained a list of significant terms and entities relevant to the design phase.

Agile Board

The Agile board facilitated the organization, visualization, and tracking of tasks assigned to group members (i.e., tickets). Four columns were set up: Open, In Progress, To Be Checked, and Completed. Each ticket was labeled with one of the following categories:

  • Configuration

  • Test

  • Enhancement

  • Report

  • Design

  • Development

  • Refactoring

  • Integration

  • Fix

  • Documentation

During each sprint planning session, tickets for the upcoming week were created and mostly assigned to group members, though some tickets remained unassigned for flexibility. Members would later assign these tasks to themselves as needed.

Version Control (DVCS)

Git was used in conjunction with GitHub, following the Gitflow model and using semantic commits. Two main branches were maintained: main for stable releases and code, and develop for sufficiently tested development code.

We adopted Pull Requests as main technique to propagate updates. This choice, mixed with previous stated technologies, allowed us to ask for other members' revision and, moreover, link changes to open issues if related.

New branches were created following the Gitflow nomenclature, such as feature/<FEATURE_NAME>, fix/<FIXED_NAME>, and test/<TESTED_NAME>.

CI/CD

GitHub Actions were employed to automate deployment and code verification. These actions included:

  • Automatic deployment of documentation to GitHub Pages.

  • Automatic code testing on pull requests.

  • Automatic releases with attached artifacts upon tagging the main branch.

Testing

A Test Driven Development (TDD) approach was followed to ensure robust development. This methodology involves defining and implementing a test before developing the actual feature, leading to the creation of comprehensive tests for a significant portion of the code.

Apart from trivial features, the process included defining and implementing a test, then developing the desired feature until the test(s) passed, and finally refactoring to improve code quality.

Testing on Pull Requests

The GitHub action for automatic testing was configured to trigger on any pull request. However, successful completion of all tests was required only for pull requests to the develop branch. This additional constraint ensured more rigorous development and greater attention to the implemented tests.

Build

We used SBT (Simple Build Tool) for build automation. SBT facilitated easy dependency management, compilation, test execution, and artifact creation, such as generating fat JAR files.

Documentation

The entire project's code is documented using scaladoc, the standard documentation tool for Scala projects.

Both the project documentation and this report are written in Markdown format and deployed using Writerside, a tool that helps create clear and organized documentation.

Additional Tools

Several additional tools were utilized in this project:

Cucumber

Cucumber is a tool for Behavior Driven Development (BDD). Its integration into the project's testing section allowed the implementation of test step definitions using feature files. This made it an excellent tool for validating project requirements written in natural language using the Gherkin syntax.

Scalafmt

Scalafmt is a code formatter for Scala. It helped to reduce the time spent on code reviewing and cleaning.

Last modified: 07 August 2024