Background
- One of the primary goals of creating remote modules was to ease the burden of core developers in maintaining the core ITK code base.
- There are currently 44 remote modules distributed with ITK, but there is no mechanism for knowing the quality of the code, or the quality of the testing for those modules.
- While attempting to update the 44 remote modules to the latest coding styles for C++11 & clang-format style guidelines it became clear that some of the modules have not compiled successfully for over a year, and that many of the modules have failing or invalid tests.
Goals of this proposal
- Provide a grading/ranking system for the remote modules to better convey the compliance level for which the module passes.
- Provide cmake filtering to hide modules of lower-class quality
- Provide ITK core developers a test-bed in Compliance levels 0,1,2 for ensuring backward compatibility testing, external tool support, and identifying migration guide support
- Provide ITK core developers with indications of which remote modules (3,4,5) have not reached a level of maturity which demands high levels of efforts to ensure that they continue to work with the latest ITK developments (Perhaps they have surpassed their useful lifespan, or been replaced with other mechanisms).
Initial Grading Level Criteria
Compliance level 0 (AKA ITK main modules, or remote modules that should become core modules)
- Widespread community dependance
- Above 90% code coverage
- Nightly dashboards and testing monitored rigorously
- All requirements below
Compliance Level 1 (Very high-quality code, perhaps small community dependance)
- Meets all ITK code style standards
- No external requirements beyond those needed by ITK proper
- Builds and passes tests on all supported platforms within 1 month of each core tagged release
- Active developer community dedicated to maintaining code-base
- 75% code coverage demonstrated for testing suite
- Continuous integration testing performed
- All requirements below
Compliance Level 2 (Quality code, perhaps niche community dependance)
- Compiles on niche community platforms (may depend on specific external tools like a java environment, or specific external libraries to work )
- All requirements below
Compliance Level 3 (Features under development)
- Continuous Integration with at primary use case testing passing on all platforms
- All requirements below
Compliance Level 4 ( Code of unknown quality )
- Some tests exist and pass on at least some platform
- All requirements below
Compliance Level 5
- Deprecated code, known to be of limited utility, perhaps has known bugs (i.e. the Neural network remote module)
Proposed Action Items
- Create subdirectories in the “Modules/Remote” directory for each category.
- For each ${mdlname}.remote.cmake file add a cmake comment block indicating how the compliance level was agreed upon (perhaps with links to discourse)
# This module was reviewed during the ITKv5.2 release.
# * Meets all ITK code style standards, as enforced by clang-format
# * Does not have external requirements beyond those needed by ITK proper
# * Builds and passes tests (as of ITKv5.2 release)
# * Active developer community dedicated to maintaining code-base as evidenced by external project build reviews indicate that this module is used by ANTs/Slicer/BRAINSTools packages, and
those developers have a history of maintaining this code-base.
# * 83.5% code coverage demonstrated for testing suite on 2020-02-17
# * Continuous integration testing performed, clang-format linting performed, and kwstyle testing performed
set(${mdlname}_COMPLIANCE_LEVEL 1)
- Add cmake variable ${mdlname}_COMPLIANCE_LEVEL=[1,2,3,4,5]
- Update itk_fetch_module to hide modules with lower compliance levels than requested default=0)
Please provide comments/suggestions to this proposal