Maintainability refers to the ease with which a product can be maintained in order to isolate and correct defects or their cause, repair or replace faulty or worn-out components without having to replace still working parts, prevent unexpected breakdowns, maximize a product’s useful life, maximize efficiency, reliability, and safety, meet new requirements, make future maintenance easier, or cope with a changed environment.
Depending on the used programming language, maintainability is also related to the adherence to the official language programming standards. Examples:
- For C:
- C11: The international standard which defines the C programming language is available from ISO. The current revision is ISO/IEC 9899:2011. You can obtain something very close to the standard for free because of the working drafts available, the latest is N1570.
- C99: The former standard ISO/IEC 9899:1999 is unavailable from official sources, due to the ISO adoption of C11. The closest free working draft is N1256.
- For C++:
- Draft C++17: Check the C++ standard draft sources at Github.
- C++14: The current ISO C++ standard is officially known as ISO International Standard ISO/IEC 14882:2014(E) – Programming Language C++. You can get it from ISO or ANSI. The latest free working document available is N4296.
- C++11: The former ISO C++ standard was ISO/IEC 14882:2011. You can get it from ISO. The closest free working document available is N3337.
In other programming languages, this could refer to the minimum (oldest) / maximum (most recent) working version(s) of the corresponding compiler or interpreter. Examples:
- Python interpreter above 2.7 and/or 3.4.
- Matlab version above Release R2017a.
- The Java Language Specification.
Indicators of Maintainability
It follows a list of possible maintainability indicators for a software-defined GNSS receiver:
- Time to Fix Defects.
- Source code under a version control system.
- Well–established programming language.
- Automated build environments.
- Availability of an issue tracking system.
- Availability of “debugging modes” and tools.
- Availability of static and dynamic code analysis tools.
- Definition of a source tree structure.
- Automated documentation system.
- Availability and observance of a coding style guide.
- Availability of required and optional software dependencies (type of license, pricing, maintenance / development status).