Changes between Version 7 and Version 8 of Guidelines/MaintenanceGuidelines


Ignore:
Timestamp:
Nov 26, 2008, 9:31:25 AM (14 years ago)
Author:
viboes
Comment:

A lot of changes including the Minor proof-reading from Steve which were overriden

Legend:

Unmodified
Added
Removed
Modified
  • Guidelines/MaintenanceGuidelines

    v7 v8  
    77Please be free to improve this page directly or post on the Boost mailing list [mailto:boost-AT-lists.boost.org] and [mailto:boost-users-AT-lists.boost.org].
    88
     9-----------------------------------------------------------------------------------------------
    910= Motivation =
    1011''To be added''
    1112
     13-----------------------------------------------------------------------------------------------
    1214= Introduction =
    1315Nobody wants to completely disallow changes, we need them.
     16
    1417Everybody wants to avoid breaking changes, but sometimes these are also necessary.
    1518
    16 This page describes guidelines that could be followed by the Boost community '''to avoid user code breaking when the user upgrades to a more recent Boost release'''.
    17 
    18 The difference between '''breaking changes''' and '''bugs''' concerns documentation. A documented modification breaking user code can not be considered as a bug while the same non documented modification could be a bug.
    19 
    20 The key issue are:
    21  * Documenting and tracking the changes.
    22  * Avoiding completely silent breakage by a deep inspection of code changes.
    23  * Using a deprecation period to give users notice that a breaking change is coming.
    24  * Running the regression tests from the _previous_ major release against the current release as a way to automatically detect and flag interface/behavioral changes.
    25  * Versioning individual Boost.Libraries.
    26 
    27 These guidelines are related mainly to how to document changes. There are also some guidelines that can be followed to detect breaking changes either by test or by inspections. And of course this pages contains also some guidelines related to the code itself.
    28 
    29 But, why user code can break when upgrading Boost?
     19This page describes guidelines that could help the Boost community to get stable libraries and as consequence  '''to avoid user code breaking when the user upgrades to a more recent Boost release'''.
     20
     21The difference between '''breaking changes''' and '''bugs''' concerns documentation. A documented modification breaking user code cannot be considered as a bug while the same undocumented modification could be a bug.
     22
     23-----------------------------------------------------------------------------------------------
     24== User code breaking cases ==
     25But why can user code break when the user upgrades to a more recent Boost release.
     26While this do not pretends to be exhaustive, some examples are given.
    3027
    3128 * '''Syntactical''' breaking: detected at compile time
    32 It is evident that the removal of files, namespaces, classes, function, variables or macros could break user code. What it is less evident is the addition namespaces, classes, function, variables at the namespace level or macros can also break user code. Note that modifications can be considered as deletion+addition.
    33 
    34 The following user code example
    35 
    36 {{{
    37 #!cpp
     29It is evident that the removal of files, namespaces, classes, function, variables or macros could break user code. What it is less evident is  that the addition of namespaces, classes, functions, variables at the namespace level or macros can also break user code. Note that
     30modifications can be considered as deletion+addition.
     31
     32The following code example
     33
     34{{{
     35#!cpp
     36#include <boost/file.hpp>
    3837using namespace boost;
    3938
     
    4847
    4948breaks when
    50  * we add the namespace foo in one of the files included by the user program
     49 * we add the namespace foo in file.hpp
    5150{{{
    5251#!cpp
     
    5958}}}
    6059
    61  * we add the class foo in one of the files included by the user program
     60 * we add the class foo in file.hpp
    6261{{{
    6362#!cpp
     
    7170
    7271
    73 
    74  * we add the function bar in one of the files included by the user program
     72 * we add the function bar in file.hpp
    7573{{{
    7674#!cpp
     
    8583
    8684Adding macros
    87 We should don't have user code breaking until we preserve the macro naming rule BOOST_LIBNAME_NAME.
     85We shouldn't have user code breaking if we preserve the macro naming rule BOOST_LIBNAME_NAME.
    8886
    8987 * '''Semantical''' breaking: detected at runtime
    90 Some times the user code will compile with the upgraded Boost release, but the code will not behaves as before. This kind of changes that could lead to this situation must be over documented because the compiler can not help the user to catch the breaking code.
    91 
    92 ''Add an example on overloading''
    93 
    94 These guidelines are not only addressed to the Boost library authors, but also to the users and the release manager team (RM). Every member of the Boost community has its role to play. Note that the author plays also the role of user of all libraries on which its library depends and on its own library when writing the library tests.
    95 
    96 
    97 = Deprecating features =
    98 
    99 C++ do not have deprecated attributes, so the author needs to emulate a warning when some deprecated feature is used.
    100 The #warning directive can be used to this purpose
    101 
     88Some times the user code will compile with the upgraded Boost release, but the code will not behave as before. The kind of changes that could lead to this situation must be over documented because the compiler can not help the user to catch the breaking code.
     89
     90The following code example
     91
     92{{{
     93#!cpp
     94#include <boost/file.hpp>
     95using namespace boost;
     96
     97
     98void bar(int i) {
     99  // ...
     100}
     101}}}
     102
     103breaks when
     104 * we add the function bar in one of the files included by the user program
     105{{{
     106#!cpp
     107// boost/file.hpp
     108namespace boost {
     109  void bar(char c) {
     110    // ...
     111  }
     112}
     113}}}
     114
     115
     116These guidelines are not only addressed to the Boost library developers, but also to the users and the release manager team (RM). Every member of the Boost community has his role to play. Note that the author plays also the role of user of all libraries on which his library depends and on his library depends and on its own library when writing the library tests.
     117
     118
     119The key issue to get stable libraries are:
     120 * Versioning individual Boost.Libraries.
     121 * Using a deprecation period to give users notice that a breaking change is coming.
     122 * Documenting and tracking the changes.
     123 * Avoiding completely silent breakage by a deep inspection of code changes and running the regression tests (functional tests) from the _previous_ major release against the current release as a way to automatically detect and flag interface/behavioral changes.
     124
     125These guidelines are related mainly to how to document changes, how breaking changes can be
     126detected either by test or by inspections, and of course guidelines related to the code itself.
     127
     128
     129-----------------------------------------------------------------------------------------------
     130== Versioning individual Boost libraries ==
     131
     132This page don't contains any advice related to individual Boost libraries packaging. There is already the CMake project working on that. But tagging individual Boost libraries with a specific version MAJOR.MINOR.PATCH has already the informational advantage.
     133
     134Versions are denoted using a standard triplet of integers: MAJOR.MINOR.PATCH. The basic intent is that MAJOR versions are incompatible, large-scale upgrades of the API. MINOR versions retain source and binary compatibility with older minor versions, and changes in the PATCH level are perfectly compatible, forwards and backwards.
     135
     136
     137-----------------------------------------------------------------------------------------------
     138== Deprecating features ==
     139
     140C++ don't have deprecated attributes, so the developer needs to emulate a warning when some deprecated feature is used. The #warning directive can be used to this purpose.
    102141
    103142{{{
     
    107146The main problem is that this warning will appear independently of whether the user code uses or not the deprecated feature. In order to palliate to this the inclusion of the deprecated feature could be accessible conditionally and only when included the warning will be reported or not.
    108147
    109 For compatibility purposes deprecated features should be included by default. So the library behaves as if the features have not been deprecated. If a user don't want to include a deprecated feature he/she can define one of the following macros:
     148For compatibility purposes deprecated features should be included by default. So the library behaves as if the features were not been deprecated. If a user don't want to include a deprecated feature he/she can define one of the following macros:
    110149
    111150 * '''BOOST_DONT_INCLUDE_DEPRECATED''': don't include any deprecated feature.
     
    119158 * '''BOOST_LIBX_DONT_INCLUDE_DEPRECATED_NAME''': don't include the deprecated feature name.
    120159
    121 Once one of this macros is defined the author can define another macro to make easier the work.
     160Once one of this macros is defined the developer can define another macro to make easier the work.
    122161
    123162 * '''BOOST_LIBX_NAME_DECLARED''': states that the deprecated feature name has been declared
    124163
    125164
    126 Deprecated warning are not reported by default, so the library behaves as if the features have not been deprecated. If the user wants this deprecated warnings to appear he/she can define one of the macros:
    127 
    128  * '''BOOST_WARMS_DEPRECEATED''': warms on all deprecated features
    129 
    130  * '''BOOST_WARMS_DEPRECEATED_ON_X_Y''': warms on all deprecated features to be removed on version X.Y
     165Deprecated warnings are not reported by default, so the library behaves as if the features were not been deprecated. If the user wants this deprecated warnings to appear he/she can define one of the macros:
     166
     167 * '''BOOST_WARNS_DEPRECATED''': warms on all deprecated features
     168
     169 * '''BOOST_WARNS_DEPRECATED_ON_X_Y''': warms on all deprecated features to be removed on version X.Y
    131170
    132171[wiki:Guidelines/MaintenanceGuidelines#delete_files See the examples below].
    133172
    134173
    135 
    136 
    137 
    138 
    139 = Cross version testing =
     174-----------------------------------------------------------------------------------------------
     175== Cross version testing ==
    140176
    141177Running the regression tests from the _previous_ major release against the current release is a way to automatically detect and flag interface/behavioral changes. Sure, there are many potential problems with such an approach:
     
    145181 * ...
    146182
    147 In order to have the better we can preserve the test of the older releases and run them on the current release.
    148 
    149 = Versioning individual Boost libraries =
    150 
    151 This page do not contains any advice related to individual Boost libraries packaging. There is already the CMake project working on that. But tagging individual Boost libraries with a specific version has already some advantages.
    152 
    153 
     183Another approach consist in preserving the test of the older releases and run them on the current release.
     184If the developer needs to change the tests while he evolves his library this is a symptom the interface have been changed and the same way the tests are broken, the user code can also be broken. If the developer forbids himself to modify the test, he will be able to identify breaking changes early on.
     185
     186-----------------------------------------------------------------------------------------------
    154187= Documentation =
    155188
    156 == Tag Boost library with specific library version [author] == #version
    157 Tagging each library release with a version, is the better way to signal to the user of possible incompatibilities.
     189-----------------------------------------------------------------------------------------------
     190== Tag Boost library with specific library version [developer] == #version
     191Tagging each library release with a version, is the better way to signal possible incompatibilities to the user.
    158192
    159193For example the thread library could have:
     
    165199 * '''1.0.0''' Initial release on 1.25
    166200
    167 == Feature Request for each deprecated/suppressed/modified/new feature [author, user] == #feature_request
    168 Each modification should be tracked with a ticket on the track system.
    169 
    170 == Release note and track system traceability [author] == #release_note
    171 The release note should include
     201-----------------------------------------------------------------------------------------------
     202== Make feature request for each feature [developer, user] == #feature_request
     203Each modification deprecated/suppressed/modified/new feature should be tracked with a ticket on the trac system.
     204
     205-----------------------------------------------------------------------------------------------
     206== Include the tracked tickets on the Release notes [developer] == #release_note
     207The release notes should include
    172208    * the list of all the bug tickets that have been solved
    173     * the list of all deprecated/suppressed/modified/new features with its associated ticket.
     209    * the list of all deprecated/suppressed/modified/new features with their associated tickets.
    174210
    175211For example the thread library could have (#XXXX should be replaced by the trac tickets):
     
    186222
    187223
    188 == Trac ticket and test cases association [author] == #ticket_test_case_map
     224-----------------------------------------------------------------------------------------------
     225== List the test cases associated to the trac system tickets [developer] == #ticket_test_case_map
    189226
    190227Each feature request or bug should have associated at least a test case. A table showing this association will help to check that each feature,bug is has the expected test coverage.   
    191228
    192 ||Ticket||Synopsis||Test Case||
     229||'''Ticket'''||'''Synopsis'''||'''Test Case'''||
    193230||#XXXX||foo foo foo bar bar bar ||test_foo_bar||
    194231
    195232
    196 == Dependency to other Boost library [author] == #dependency
    197 
    198 
    199 = Codding =
    200 == Do not use using sentences [user] ==#dont_using
    201 As seen before the use of using sentences in user code is one of the source of user code breaking, so it will be safer to use instead namespace synonyms and prefix each symbol with them.
     233-----------------------------------------------------------------------------------------------
     234== List the dependency upon other Boost library [developer] == #dependency
     235Each library lists the other libraries it depends upon and the minimum
     236version # - as it does with compilers now
     237
     238||'''Library'''||'''Version #'''||'''Build & Link'''||'''Comment'''||
     239||Thread||2.1.0||link||generic lock()||
     240
     241-----------------------------------------------------------------------------------------------
     242== Document behavior differences between release and debug variants [developer] == #debug
     243Document the differences in behavior that depends on the user defines, in particular the release and debug variants.
     244
     245
     246-----------------------------------------------------------------------------------------------
     247== Document behavior differences between toolsets [developer] == #toolsets
     248Document the differences in behavior that depends on the toolsets.
     249
     250
     251-----------------------------------------------------------------------------------------------
     252= Coding =
     253
     254
     255-----------------------------------------------------------------------------------------------
     256== Don't use using directives [user] ==#dont_using
     257As seen before, using directives in user code is one of the sources of user code breaking, so it will be safer to use namespace synonyms instead and prefix each symbol with them.
    202258
    203259Instead of doing
     
    220276}}}
    221277
    222 
    223 == Do not delete files prematurely [author] == #dont_delete_files
    224 
    225 Before deleting a file "file.hpp" deprecate it and let the user modify its code during some versions (e.g. until 1_40). Replace it by
     278-----------------------------------------------------------------------------------------------
     279== Avoid the use of include all features files at the /boost level [user] ==
     280Avoid the use of include all features files at the /boost level use instead specific files at boost/lib/file.hpp. Including less code reduce your user code breaking chances.
     281
     282-----------------------------------------------------------------------------------------------
     283== Be careful with the use of using namespace header files [developer] ==
     284To import symbols from another namespace the developer can use the using directive '''using namespace''' but limited to the function level.
     285
     286-----------------------------------------------------------------------------------------------
     287== Don't overload functions that are used by the TR1 (using using)[developer] ==
     288Overloading imported Boost.TR1 functions is equivalent to overload the std functions.
     289
     290-----------------------------------------------------------------------------------------------
     291== Avoid include-all-features files at the /boost level ==
     292Avoid include-all-file at the /boost level including all the functionalities of the library. Provide instead specific files at boost/lib/file.hpp.
     293
     294If you provide such files ensure that your tests works when you include them directly or include the specific ones.
     295
     296-----------------------------------------------------------------------------------------------
     297== Don't refine functions overloading without ensuring the same behavior ==
     298
     299If you need document them and warm the user.
     300
     301-----------------------------------------------------------------------------------------------
     302== Avoid the inclusion of symbols at the boost or boost::detail namespace ==
     303These symbols can collide with symbols of other libraries.
     304
     305Announce them on the Boost mailing list when you think this is the best choice.
     306
     307-----------------------------------------------------------------------------------------------
     308== Avoid different external behavior depending on the variant release or debug without documenting it ==
     309
     310Providing different external behavior depending on the variant release or debug could be a surprise for the user.
     311
     312If you need them document it and warm the user.
     313
     314-----------------------------------------------------------------------------------------------
     315== Avoid to change interfaces [developer] == #dont_change_interfaces
     316When you change the interface, you can see the changes that are needed at the Boost level, but you can not evaluate the cost induced by this change for the users. So before to change an interface deprecate it and let the user enough time to migrate to the new one.
     317
     318-----------------------------------------------------------------------------------------------
     319=== Don't delete files prematurely [developer] === #dont_delete_files
     320
     321Before deleting a file, "file.hpp", deprecate it and let the user modify his code during some versions (e.g. until 1_40). Replace it by
    226322
    227323{{{
     
    229325// boost/old_header_file.hpp
    230326// include whatever file is needed to preserve the old file contents
    231 #if defined(BOOST_WARMS_DEPRECEATED) || defined(BOOST_WARMS_DEPRECEATED_ON_1_40)
     327#if defined(BOOST_WARNS_DEPRECATED) || defined(BOOST_WARNS_DEPRECATED_ON_1_40)
    232328#warning "boost/old_header_file.hpp is deprecated, please include boost/new_header_file.hpp instead
    233329#endif
    234330}}}
    235331
    236 It will be up to the user to define the macros BOOST_WARMS_DEPRECEATED and BOOST_WARMS_DEPRECEATED_ON_1_40 when the user wants to be warmed for deprecated features on Boost or on the Boost version 1.40 respectively.
    237 
    238 == Do not delete namespaces prematurely [author] == #dont_delete_cpp_symbols
     332It will be up to the user to define the macros BOOST_WARNS_DEPRECATED and BOOST_WARNS_DEPRECATED_ON_1_40 when the user wants to be warmed for deprecated features on Boost or on the Boost version 1.40 respectively.
     333
     334-----------------------------------------------------------------------------------------------
     335=== Don't delete namespaces prematurely [developer] === #dont_delete_namespaces
    239336Use the using sentence to import from the new namespace to the old one.
    240337
    241 == Do not delete classes/functions/variables prematurely [author] == #dont_delete_cpp_symbols
    242 Instead of delete a class or a public/protected function/variable on the next version protect its declaration by any of the DONT_INCLUDE_DEPRECATED macros.
     338-----------------------------------------------------------------------------------------------
     339=== Don't delete classes/functions/variables prematurely [developer] === #dont_delete_cpp_symbols
     340Instead of deleting a class or a public/protected function/variable on the next version protect its declaration by any of the DONT_INCLUDE_DEPRECATED macros.
    243341
    244342{{{
     
    253351#else
    254352  #define BOOST_LIBX_NAME_DECLARED
    255   #if defined(BOOST_WARMS_DEPRECEATED) || defined(BOOST_WARMS_DEPRECEATED_ON_1_40)
     353  #if defined(BOOST_WARNS_DEPRECATED) || defined(BOOST_WARNS_DEPRECATED_ON_1_40)
    256354    #warning "name is deprecated, please use new_name instead"
    257355  #endif
     
    267365}}}
    268366
    269 When the declaration should been included, the author could define a BOOST_LIBX_NAME_DECLARED, which could be used on the class/function/variable definition. E.g.
     367When the declaration should been included, the developer could define a BOOST_LIBX_NAME_DECLARED, which could be used on the class/function/variable definition. E.g.
    270368
    271369{{{
     
    286384}}}
    287385
    288 == Do not modify functions prototypes prematurely [author] == #dont_modify_prototypes
    289 Instead of modifying an existing function prototype, do as you were deleted it and added the new one. As both prototypes should cohabit during some releases, check if this overloading could cause user code breaks.
    290 
    291 == Remove the deprecated features on a given release [author] == #deprecated_removal
    292 Once the deprecated period is expired the author should remove them.
    293 
     386-----------------------------------------------------------------------------------------------
     387=== Don't modify functions prototypes prematurely [developer] === #dont_modify_prototypes
     388Modifying an existing function prototype, if you were deleting it and adding the new one. Instead add the new when possible.
     389
     390As both prototypes should coexist for some releases, check if this overloading could cause user code breaks.
     391
     392-----------------------------------------------------------------------------------------------
     393=== Remove the deprecated features on a given release [developer] === #deprecated_removal
     394Once the deprecated period is expired the developer sould remove them.
     395
     396Don't forget to change the major version number.
     397
     398-----------------------------------------------------------------------------------------------
    294399= Test =
    295 
    296 == Regression Test and track system traceability == #ticket_test_case [user]
     400-----------------------------------------------------------------------------------------------
     401== Test headers [developer] ==
     402Steve Watanave has writen a Jamfile that make easier this task. See /boost/libs/units/test/test_header for an example.
     403
     404=== Include each header files twice [developer] ===
     405The inclusion of a header file  twice ensure that the file is self contained, and that it is well protected
     406
     407{{{
     408#!cpp
     409    #include <file.hpp>
     410    #include <file.hpp>
     411    int main() {return 0;}
     412}}}
     413
     414
     415-----------------------------------------------------------------------------------------------
     416=== include each couple of header files in both orders ===
     417The inclusion of two header file ensure that there are no duplicates declarations on the two files.
     418
     419Currently there are no tests inter-library. It would be a good idea to start by checking that any header file can be include with any other file.
     420
     421Note that when file1 and file 2 and the same this correspond to the preceding test.
     422
     423{{{
     424#!cpp
     425    #include <file1.hpp>
     426    #include <file2.hpp>
     427}}}
     428
     429{{{
     430#!cpp
     431    #include <file2.hpp>
     432    #include <file1.hpp>
     433}}}
     434
     435Note - It will be interesting to be able to get this automatically.
     436-----------------------------------------------------------------------------------------------
     437=== Include all header files ===
     438One more test could be useful, include all the Boost Headers files
     439{{{
     440#!cpp
     441    #include <file1.hpp>
     442    #include <file2.hpp>
     443    ...
     444    #include <filen.hpp>
     445}}}
     446
     447-----------------------------------------------------------------------------------------------
     448=== link all the header files twice ===
     449This ought to catch non-inlined functions and other duplicate definitions
     450
     451-----------------------------------------------------------------------------------------------
     452== Don't forget to test  ==
     453-----------------------------------------------------------------------------------------------
     454=== The implicitly generated member functions ===
     455The implicitly generated member functions are part of your interface.
     456
     457Add some simple tests that prove its correct behavior.
     458
     459-----------------------------------------------------------------------------------------------
     460=== The removed default member functions when you declare a constructor ===
     461When you declare a constructor the other default constructors are not generated, so
     462
     463-----------------------------------------------------------------------------------------------
     464=== The deleted (private) default member functions  ===
     465The default member functions =deleted (or declared private) are not part of the interface.
     466
     467Add some simple tests that prove the compilation fails when you use them.
     468
     469-----------------------------------------------------------------------------------------------
     470=== The explicit constructors ===
     471
     472-----------------------------------------------------------------------------------------------
     473=== The implicit constructors or conversions ===
     474
     475-----------------------------------------------------------------------------------------------
     476=== The const-ness of variables, function parameters and function return types and functions ===
     477When a variable, function parameter or function return type is non-const, test that you can modify them.
     478
     479When a variable, function parameter or function return type is const, test that you try to modify them the compilation fails.
     480
     481-----------------------------------------------------------------------------------------------
     482== Separate the functional test from the unit test (implementation test) ==
     483Functional test should take in account only the documented behavior. They can be used as regression test for new re-factorings of the implementation.
     484
     485Implementation test can be used to test details in the implementation but not as regression tests.
     486
     487-----------------------------------------------------------------------------------------------
     488== Track regression test on the trac system tickets == #ticket_test_case [user]
    297489A bug ticket should be associated to one or several test cases, either the test cases exists already and we are in face of a regression for some toolset, or a new toolset is considered, or a new test case is needed to reproduce the bug and the modification solve the problem.
    298490State clearly which test cases reproduce the bug it they exists and propose a new test case reproducing the bug otherwise [user]
    299491
    300 == Preserve the test from the preceding versions [author] == #released_tests
    301 The test from the preceding versions should not be changed when the author modifies its library. These not changed tests are a probe of compatibility with the preceding version. When these test must be changed they indicate a breaking user code issue. So instead of changing them add new ones stating explicitly on which version they were included. Old tests that should fail can be moved to the compile_fail or run_fail tests on the Jamfile.
    302 
    303 == Set read-only right on the released test files [author] == #read_only_released_tests
    304 In order to avoid erroneous modification of the the released tests files the author could change the rights of the test files. If the author has no permission to do that  as a the last resort he could change the permission in its own SVN copy.
    305 
    306 
     492-----------------------------------------------------------------------------------------------
     493== Preserve the functional test from the preceding versions [developer] == #released_tests
     494While doing modifications to the library the developer can find some regressions on some tests of the preceding versions. It seems natural to change them to make the test succeed. This is not a good idea. The failing test is a symptom that the new modifications could break user code.
     495
     496If the modification don't pretended to be an interface break, the developer should modify the library until the preceding test cases pass.
     497
     498If the break is intentional move the tests to the failing tests compile_fail or run_fail on the Jamfile. The developer can copy the test and adapt it to the new interface. It could be a good idea to state explicitly on the test file name on which version they were included.
     499
     500In order to avoid erroneous modification of the the released tests files the developer could change the rights of the test files. If the developer has no permission to do that on the SVN repository as a last resort he could change the permission in its own SVN copy.
     501
     502-----------------------------------------------------------------------------------------------
    307503= Inspections  =
    308 == Announce new library features [author] == #announce
    309 It would be great if the author announce to the Boost mailing lists the new features just before committing in the release branch. This will let the time to the Boost community to inspect the modifications introduced.
    310 
    311 == Inspect the code [author, user, RM] == #review
    312 Inspect the code to check that the new modifications do not include user code breaks. Tools comparing the contents of the current release and the preceding one could be help.
    313 
    314 == Check that every modification has been documented [author, user, RM] == #coherent_doc
    315 Inspect that every modification has been reported on the documentation. Tools comparing the contents of the current release and the preceding one could be help.
    316 
    317 == Check that every modification has been tested [author, user, RM] == #test_coverage
    318 Inspect that every modification has been tested. Tools comparing the contents of the current release and the preceding one could be help.
    319 
    320 
    321 = Author guidelines =
    322 ||Kind||Guideline||
     504-----------------------------------------------------------------------------------------------
     505== Announce new library features [developer] == #announce
     506It would be great if the developer announce to the Boost mailing lists the new features just before committing in the release branch. This will let the time to the Boost community to inspect the modifications introduced.
     507
     508-----------------------------------------------------------------------------------------------
     509== Inspect the code [developer, user, RM] == #review
     510Inspect the code to check that the new modifications don't include user code breaks. Tools comparing the contents of the current release and the preceding one could help.
     511
     512-----------------------------------------------------------------------------------------------
     513== Check that every modification has been documented [developer, user, RM] == #coherent_doc
     514Inspect that every modification has been reported on the documentation. Tools comparing the contents of the current release and the preceding one could help.
     515
     516-----------------------------------------------------------------------------------------------
     517== Check that every modification has been tested [developer, user, RM] == #test_coverage
     518Inspect that every modification has been tested. Tools comparing the contents of the current release and the preceding one could help.
     519
     520
     521-----------------------------------------------------------------------------------------------
     522= Developer guidelines =
     523||'''Kind'''||'''Guideline'''||
    323524||Documentation||[wiki:Guidelines/MaintenanceGuidelines#versionTag Boost library with specific library version ]||
    324525||Documentation||[wiki:Guidelines/MaintenanceGuidelines#feature_request Feature Request for each deprecated/suppressed/modified/new feature]||
    325 ||Documentation||[wiki:Guidelines/MaintenanceGuidelines#release_note Release note and track system traceability]||
     526||Documentation||[wiki:Guidelines/MaintenanceGuidelines#release_note Release note and trac system traceability]||
    326527||Documentation||[wiki:Guidelines/MaintenanceGuidelines#ticket_test_case_map Trac ticket and test cases association]||
    327 ||Code||[wiki:Guidelines/MaintenanceGuidelines#dont_using Do not use using sentences in test programs]||
    328 ||Code||[wiki:Guidelines/MaintenanceGuidelines#dont_delete_files Do not delete files prematurely ]||
    329 ||Code||[wiki:Guidelines/MaintenanceGuidelines#dont_delete_cpp_symbols Do not delete classes/functions/variables prematurely]||
     528||Code||[wiki:Guidelines/MaintenanceGuidelines#dont_using Don't use using sentences in test programs]||
     529||Code||[wiki:Guidelines/MaintenanceGuidelines#dont_delete_files Don't delete files prematurely ]||
     530||Code||[wiki:Guidelines/MaintenanceGuidelines#dont_delete_cpp_symbols Don't delete classes/functions/variables prematurely]||
    330531||Code||[wiki:Guidelines/MaintenanceGuidelines#deprecated_removal Remove the deprecated features on a given release]||
    331 ||Code||[wiki:Guidelines/MaintenanceGuidelines#dont_modify_prototypes Do not modify functions prototypes prematurely]||
    332 ||Test||[wiki:Guidelines/MaintenanceGuidelines#ticket_test_case Regression Test and track system traceability]||
     532||Code||[wiki:Guidelines/MaintenanceGuidelines#dont_modify_prototypes Don't modify functions prototypes prematurely]||
     533||Test||[wiki:Guidelines/MaintenanceGuidelines#ticket_test_case Regression Test and trac system traceability]||
    333534||Test||[wiki:Guidelines/MaintenanceGuidelines#released_tests Preserve the test from the preceding versions]||
    334535||Inspections||[wiki:Guidelines/MaintenanceGuidelines#announce Announce new library features]||
     
    337538||Inspections||[wiki:Guidelines/MaintenanceGuidelines#test_coverage Check that every modification has been tested]||
    338539
     540-----------------------------------------------------------------------------------------------
    339541= User guidelines =
     542||'''Kind'''||'''Guideline'''||
    340543||Documentation||[wiki:Guidelines/MaintenanceGuidelines#feature_request Feature Request for each deprecated/suppressed/modified/new feature]||
    341 ||Code||[wiki:Guidelines/MaintenanceGuidelines#dont_using Do not use using sentences]||
    342 ||Test||[wiki:Guidelines/MaintenanceGuidelines#ticket_test_case Regression Test and track system traceability]||
     544||Code||[wiki:Guidelines/MaintenanceGuidelines#dont_using Don't use using sentences]||
     545||Test||[wiki:Guidelines/MaintenanceGuidelines#ticket_test_case Regression Test and trac system traceability]||
     546
    343547||Inspections||[wiki:Guidelines/MaintenanceGuidelines#review Inspect the code].||
    344548||Inspections||[wiki:Guidelines/MaintenanceGuidelines#coherent_doc Check that every modification has been documented]||
    345549||Inspections||[wiki:Guidelines/MaintenanceGuidelines#test_coverage Check that every modification has been tested]||
    346550
     551-----------------------------------------------------------------------------------------------
    347552= Release manager guidelines =
     553||'''Kind'''||'''Guideline'''||
    348554||Inspections||[wiki:Guidelines/MaintenanceGuidelines#review Inspect the code]||
    349555||Inspections||[wiki:Guidelines/MaintenanceGuidelines#coherent_doc Check that every modification has been documented]||