This document describes intended and preferred conventions for development and maintenance of the Quality Tools for BlueJ software product.
Please note that this project is released with a Contributor Code of Conduct. By participating in this project you agree to abide by its terms.
- Review the Project Board to verify that the issue does not already appear as a project task.
- Search the Issues to determine related issues (epics, dependencies, not yet triaged, ...).
- Create a new issue using the "New Issue" button on the Issues page.
- Choose an appropriate issue template (e.g., "Bug report", "User Story").
- Change the title of the issue.
- Modify the body of the issue in accordance with the template.
Here is the basic GitHub workflow for this project:
- Fork the repository.
- Create a feature branch in your fork.
- Follow the Agile Principles outlined for the project (i.e., working, incremental, behavior-driven, test-dreiven).
- Include supporting documentation as appropriate.
- Before initiating a pull request (PR):
- Verify quality, including adherence to conventions.
- Build, run, and test a distribution build.
- Submit a pull request (PR) from your branch.
- One or more reviewers will review the request and may make comments in the PR conversation.
- Participate in the conversation associated with the PR, updating your branch as appropriate.
- After reviewer approval, someone with commit access will merge the PR.
For example, no merge results in a non-buildable state or a buildable product that does not execute.
Architectural elements, tests, and implementation code match requirements associated with the current and previous versions of the product.
For example, tests and code for features identified for future versions are excluded from the project code base.
Tracing backward from tests reveals the requirement(s) that such tests verify in the product.
Tracing backward from code likewise reveals the requirement(s) that such code implements in the product.
For example, new code is not merged into the project code base prior to the existence of automated test code for that new code.
Tracing backward from the code reveals the tests used to verify the behavior of the code.
The intent is for code to be developed using a test-first methodology, in which automated tests are written prior to writing the implementation.
Tests associated with successful implementation remains in the code base as regression tests.
(Note: Test coverage tools may facilitate tracing forward from a test to code that the test is intended to verify.)
-
Project-specific conventions take precedence.
-
If no project-specific convention is applicable, use the Sun Convention guide.
-
If something is not covered in the project-specific or the Sun Convention guide, use the Google Convention guide.
-
If a topic is not covered by any guides, use best judgement and consider opening a project issue to formalize the decision.
- Style conventions are embodied in configuration files for the Checkstyle tool and located in the config/checkstyle directory.
- Multiple authors are indicated using multiple @author tags, one tag per line, one author per tag.
The following tools are established as comprising and contributing to the build environment for the QT4BJ project.
(✔ indicates already integrated into the build environment.)
✔ Gradle
Build-automation system using Groovy-based domain-specific language (DSL)
✔ JUnit5
Framework for unit-testing Java code
✔ JaCoCo
Determines code coverage of Java tests
Identifies violations of coding conventions
☐ PMD
Identifies common programming weaknesses
☐ SpotBugs
Identifies bugs and potentially buggy code in Java code; a successor to FindBugs
✔ JaCoCo
Provides complexity analysis of Java source code
The following tools are under consideration for inclusion in the QT4BJ build environment.
Continuous integration
Code coverage analysis
Automated web accessibility testing
.
├── .github/ISSUE_TEMPLATE/ # Templates for new issues (e.g., user stories, bug reports)
├── archive/ # Historical artifacts
├── config/ # Build configuration
├── docs/ # GitHub Pages website content
├── gradle/ # See Gradle documentation
├── src/ # Source files
├── .gitignore # Directories and file types to be ignored by git
├── CODE_OF_CONDUCT.md # Contributor code of conduct
├── DevelopmentConventions.md # Development and maintenance conventions
├── LICENSE # Open source license file
├── README.md
├── RequirementsSourceInfo.md # Goals of previous, related project
├── Vision.md # Vision statement and stakeholder identification
├── build.gradle # See Gradle documentation
├── gradlew # See Gradle documentation
├── gradlew.bat # See Gradle documentation
├── settings.gradle # See Gradle documentation
└── toolsForIntegration.md # List of code analysis tools to be implemented and descriptions
Github Issue Templates
.
├── ...
├── .github
│ ├──ISSUE_TEMPLATE
│ ├── bug_report.md # Bug report template
│ ├── user-story.md # User story template
│ └── ... # etc.
└── ...
Archive
.
├── ...
├── archive # Historical artifacts
│ ├── decisionNotes # Documentation that informed project decision-making
| ├── AntGradleComparison.md # Comparison report of Ant and Gradle build tools
│ ├── IvyAntGradleMavenComparisonReport.md
| # Comparison report of Ant, Ivy, Gradle and Maven build tools
│ └──
└── ...
Build Configuration
.
├── ...
├── config # Build configuration
│ ├── checkstyle # Configuration files for Checkstyle tasks
| ├── checkstyle.xml # Checkstyle configuration and specification
│ ├── suppressions.xml # Checkstyle suppression specification
│ └──
└── ...
GitHub Pages Website
.
├── ...
├── docs # GitHub Pages website content
│ ├── README.md # Project overview
│ ├── _config.yml # Jekyll configuration
│ └── ... # etc.
└── ...
Gradle Wrapper
├── ...
├── gradle # See Gradle documentation
│ ├── wrapper # Gradle Wrapper
│ ├── gradle-wrapper.jar # Gradle packages and distributions
│ ├── gradle-wrapper.properties # Gradle Wrapper configuration
│ └──
└── ...
Source
├── ...
├── src # Project source code
│ ├── main # Implementation source code
│ ├── java
│ ├── edu/msudenver/bluejext/qualitytools/ # QT4BJ implementation
│ └──
│ ├── test # Testing source code
│ ├── java
│ ├── edu/msudenver/bluejext/qualitytools/ # QT4BJ tests
│ └──
└── ...
Gradle structure based on Organizing Gradle Projects