Feature flow

Getting features in the main branch

Most features should follow the path laid out on our project board. This document describes the requirements for features to move between columns of the board. Listing these requirements should reduce the bystander effect for doing code or QA reviews and make it easier for other developers to pick up these tasks. This would enable us to move features quickly from in progress to merged and avoid bottlenecks at either the review or QA stage. The required procedure to merge a feature into main are as follows.

1. Approved Features / Need Refinement → Refined Tasks

  • We are not reinventing the wheel: there is no high-quality library that already has this feature.

  • This issue is “bite-sized” and (only) leaves non-critical implementation details to the developer.

2. In Progress → Review

  • The authors of the ticket have created a pull request.

  • The Checklists for authors in our pull_request_template has been filled in by the authors.

3. Review → QA review

  • The Checklist for code reviewers in our pull_request_template has been filled in by a code reviewer.

4. QA Review → Ready for Merge

  • The Checklist for QA in our pull_request_template has been filled in by a QA reviewer.

5. Ready for merge → Done

The procedures above should guarantee that members of the kat-managers group can merge these features directly. We should actively aim to resolve any discussions about the implementation at stages 1 and 2. It is the responsibility of the authors to bring possible issues to the attention of anyone that might have an opinion about the issue.


Releasing features

Once a release branch has been created with a new set of functionality, it is important that we do a QA review again. This time, the QA has an extended checklist to also guarantee that there is no regression in the more advanced functionality of OpenKAT. Also, we need to assure that there is no regression between the different supported deployments options of OpenKAT.

Environments for the extended QA

  • Clone the source repository and run make reset [Linux and Darwin, perhaps different docker versions and installs]

  • Install the debian packages [On different distro’s: ubuntu 20.04 + 22.04, debian 11 + 12]

  • Install the container images

Ideally we would follow the following QA procedure on each of these environments:

Checklist for QA

  • I confirmed that there are no unintended functional regressions in this branch:

    • I have managed to pass the onboarding flow

    • Objects and Findings are created properly

    • Tasks are created and completed properly

Extended checklist for QA

Checking the UI/UX

  • Turning Boefjes on and off in the KATalogus

  • Create, turn off, and delete Boefjes-settings

  • Perform scans

  • Analyse results

  • Reports (Findings), per object, per report

  • Generating PDF-reports

  • Pagination of several tables

  • Translations

  • Manually starting Boefjes and normalizers

  • Manually adding and deleting objects and Findings

  • Automatic scheduling and starting of Boefjes and normalizers

  • Exporting the object list as JSON and CSV

  • Inspection of task details

  • Inspection of all pages interfaces, including de tree- and graph view of objects

  • UI/UX in general

Checking User/Organization management functionality

  • I can create and delete an organization

  • I can create and delete users

  • I can assign and revoke rights to these users

  • I can reset 2FA

Checking Performance

  • Verify that there is no significant performance regression


Tips and tricks for pull request QA testing

Think outside the box

  • Feel free to deviate from the checklist: testing things that are not obviously related to the PR is a good way to find bugs.

  • Thoroughness is key: embrace the “hacker mindset” and try to break (new) functionality by providing unexpected input, and attempt to perform unauthorized actions.

  • Try to break the UI: try resizing the window, using zoom functionality, and test multiple browsers.

  • Always remember that you are taking on the role of a user that is probably not as familiar with the application as you are: everything you encounter should feel intuitive and easy to use. Lack of intuitiveness deserves a QA comment.

Be pragmatic but versatile

  • Features updating the data model should usually be backward compatible, so we should not run make reset upon every review. Switch tactics with respect to updating your local environment regularly.

  • Small documentation changes do not require rebuilding and restarting all services to performa a QA review.

  • Properly gauge the impact of a feature: API changes in the KATalogus, for example, can affect Rocky, Mula and Octopoes, but never Bytes (in the current setup).

  • Changes that hit the core of every service (package updates) require performing the extended QA checklist.