ITK/Procedure for Contributing New Classes and Algorithms
- 1 Introduction
- 2 The Rationale
- 2.1 Technical Correctness
- 2.2 Technical correctness of new contributions
- 2.3 Avoid duplication of functionalities
- 2.4 Maximize reuse of existing code
- 2.5 Maximize generalization of the algorithm implementations
- 2.6 Enforce validation, testing and code coverage
- 2.7 Maximize maintainability
- 2.8 Ensure that new algorithms are properly documented
- 2.9 Gather feedback from the community
- 2.10 Hold a continuously open forum
- 3 The Procedure
This page describes the procedure for contributing new algorithms and classes to the Insight Toolkit.
The rationale behind this procedure is to pursue the following goals
- Technical correctness of new contributions
- Avoid duplication of functionalities
- Maximize reuse of existing code
- Maximize generalization of the algorithm implementations
- Enforce validation, testing and code coverage
- Maximize maintainability
- Ensure that new algorithms are properly documented
- Gather feedback from the community
- Hold a continuously open forum where algorithmic, and performance issues are discussed.
Since some of these goals may be conflicting, it will be the prerrogative of the Oversight Committee to rule on whether one criteria should be given more importance over another one.
The community should pounder whether the technical concepts behind a new algorithm are acceptable. Technical correctness requires the contributor to provide a background on the proposed algorithm. Some algorithms may be so widely known that a simple citation to a major paper describing the algorithm may be enough for satisfying the requirement of technical correctness. Less known algorithms would require more detailed descriptions in order to make the case for their technical correctness. There are no hard rules on how deep this description should be. The only clear cut criteria is that it should be clear enough for not raising major objections from the community.
Technical correctness of new contributions
Avoid duplication of functionalities
Maximize reuse of existing code
Maximize generalization of the algorithm implementations
Enforce validation, testing and code coverage
Once any class is included in the toolkit, the developers community gets engaged in maintaining this code for as long as the Toolkit is available. This can easily mean five to ten years of software maintenance. It is a well known fact that 80% of the cost and effort of software development is spent in maintenance and bug fixes. The bulk of this maintenance effort is the time spend by future developers in understanding
Therefore it is quite important for any class contributed to the toolkit to be analyzed for maintainability.
Among the most important criteria for maintainabilu
Ensure that new algorithms are properly documented
Gather feedback from the community
Hold a continuously open forum
The procedure for contributing new classes and algorithms to [ITK] is the following.
- An Author will propose an algorithm to the developers list or to the weekly tcon.
This will be an initial check to make sure that the algorithm is not already available in ITK, or that it can not be constructed with components already existing on the toolkit.
- The Author will prepare a working prototype of source code and will tested with realistic data.
- The Author will submit a paper to the Insight Journal.
The paper must include the following
- The source code of the prototype
- The source code of the test
- The realistic input data required by the test
- The full list of parameters required by the test
- The output data produced by the test
- A document (preferably a hyperlinked PDF) describing the algorithm and how to use the new classes
- The source code of the prototype and it test will be automatically compiled an executed by the testing system of the Insight Journal.
The Automatic Testing System of the Insight Journal
How to Prepare a Submission to the Insight Journal
The full description of the process on how to prepare a submission to the Insight Journal can be found at
The CMakeList.txt Template for a Paper
The following CMakeLists.txt template is explained in the link above. However we added here a direct link just for convenience