2011 Winter Project Week: Slicer4-ITK4 Continuous Integration
Key Investigators
- Bill Lorensen
- Luis - Kitware
Objective
Identify API changes in ITK4 that cause compilation or run-time errors in Slicer4. NA-MIC is a major customer of the insight Toolkit, ITK. It is critical that ITK developers understand the impact of API changes on customers. As part of the ITKv4 contract Slicer3 will be one of the sequestered applications. This project goes beyond that and will continuously integrate Slicer4 and ITK4.
Slicer4 development is under-way and ITK version 4 has recently started. One of the goals of ITK 4 is to improve, simplify and clean-up the application programming interface (API). Every attempt is being made to keep the API compatible with ITK 3.x.
The API changes may be planned or accidental. This project will establish mechanisms to discover, resolve and document API issues that affect Slicer4. We expect that a similar process will be created for other major ITK customers.
Approach, Plan
This project will use the DMAIC methodology of the Six Sigma management process to "Define", "Measure", "Analyze", "Improve" and "Control" compiler warnings in Slicer3. This project will concentrate on warnings produced by the GNU gcc 4.3 compiler. Similar approaches can be applied to other Slicer3 compilers.
The basic methodology (from Wikipedia) consists of the following five steps:
- Define process goals that are consistent with customer demands and the NA-MIC's strategy.
- Measure key aspects of the current process and collect relevant data.
- Analyze the data to verify cause-and-effect relationships. Determine what the relationships are, and attempt to ensure that all factors have been considered.
- Improve or optimize the process.
- Control to ensure that any deviations from target are corrected before they result in defects. Set up pilot runs to establish software quality, move on to production, set up control mechanisms and continuously monitor the process.
Progress
- Define
- The goal is to provide a mechanism to identify and document incompatible Slicer4/ITK4 API changes.
- Measure
- A baseline dashboard was created on December 27, 2010. There mere 605 compilation errors.
- Analyze
- A description of each API incompatibility and how to address it will be provided.
- Improve
- Control
Measure - ITK4 Changes that Affect Slicer4
Here we summarize the API change that caused Slicer4 to not compile or run incorrectly. For each API change we list the major classes affected, how the issue was resolved and whether the change is compatible with ITK3.x. We also include a pointer to the ITK Migration Guide section that deals with the issue.
API Change | Classes Affected | Resolution | Works for ITK3 | ITK Migration Doc |
---|---|---|---|---|
Remove OStringStream |
Many |
Replace OStringStream with std::stringstream |
Yes |
Nothing yet |
Remove New method for Rigid3DTransform |
vtkSlicerTransformLogic ResampleVolume2.cxx |
Introduced ITKv3_COMPATIBILITY cmake variable that when ON, permits a New() on Rigid3DTransform. This mimics the old behaviour. |
NA |
Nothing yet |
New Transform pure virtual methods |
itkWarpTransform3D.h |
Nothing yet |
No |
Nothing yet |
Remove Brains2MaskImageIO |
BRAINSTools |
Skip building for ITKv4 |
NA |
Nothing yet |
Upgrade GDCM to v2 |
DicomToNrrdConverter |
Skip building for ITKv4 |
NA |
Nothing yet |
Analyze
Here we rationalize the API changes.
- Remove OStringStream
- Early in the development of ITK, some compilers did not support stringstream. There was a wrapper to hide differences between std::stringstream and the old ostrstream(which has been deprecated).
- Remove New method for Rigid3DTransform
- New Transform pure virtual methods
- Remove Brains2MaskImageIO
- Upgrade GDCM to v2