xref: /minix3/external/bsd/dhcp/dist/doc/devel/qa.dox (revision 83ee113ee0d94f3844d44065af2311604e9a30ad)
1*83ee113eSDavid van Moolenbroek/**
2*83ee113eSDavid van Moolenbroek @page qa Quality Assurance
3*83ee113eSDavid van Moolenbroek
4*83ee113eSDavid van MoolenbroekThere is a wide scale effort in progress to improve the quality of the ISC
5*83ee113eSDavid van MoolenbroekDHCP implementation. The following section describes the major aspects of
6*83ee113eSDavid van Moolenbroekquality assurance that are being implemented. As this is a work in progress,
7*83ee113eSDavid van Moolenbroekexpect radical changes in this area.
8*83ee113eSDavid van Moolenbroek
9*83ee113eSDavid van Moolenbroek @section qaTests ATF Unit-tests
10*83ee113eSDavid van Moolenbroek
11*83ee113eSDavid van Moolenbroek See @ref tests Section for details description of ATF-based unit-tests.
12*83ee113eSDavid van Moolenbroek
13*83ee113eSDavid van Moolenbroek @section cppcheck cppcheck tool
14*83ee113eSDavid van Moolenbroek
15*83ee113eSDavid van Moolenbroek<a href="http://cppcheck.sourceforge.net/">cppcheck</a> is a static analysis tool
16*83ee113eSDavid van Moolenbroekfor C/C++ code. Unlike C/C++ compilers and many other analysis tools it does not
17*83ee113eSDavid van Moolenbroekdetect syntax errors in the code. Cppcheck primarily detects the types of bugs
18*83ee113eSDavid van Moolenbroekthat the compilers normally do not detect. To generate cppcheck report, you
19*83ee113eSDavid van Moolenbroekmust have cppcheck installed in your system. Generation is simple:
20*83ee113eSDavid van Moolenbroek
21*83ee113eSDavid van Moolenbroek@verbatim
22*83ee113eSDavid van Moolenbroekcd doc/
23*83ee113eSDavid van Moolenbroekmake cppcheck
24*83ee113eSDavid van Moolenbroek@endverbatim
25*83ee113eSDavid van Moolenbroek
26*83ee113eSDavid van MoolenbroekThe log files will be stored in doc/html/cppcheck.log and
27*83ee113eSDavid van Moolenbroekdoc/html/cppcheck-error.log. While the former is useful for verifying that all
28*83ee113eSDavid van Moolenbroeksources were checked, the latter is much more useful. It contains a list of
29*83ee113eSDavid van Moolenbroekproblems that were detected by cppcheck. The goal is to correct all problems
30*83ee113eSDavid van Moolenbroekand make this an empty file.
31*83ee113eSDavid van Moolenbroek
32*83ee113eSDavid van MoolenbroekIn the unlikely event of cppcheck finding false positives it is possible to add
33*83ee113eSDavid van Moolenbroekspecial comments formatted to instruct cppcheck to not report what it thinks is
34*83ee113eSDavid van Moolenbroekan issue. make cppcheck target is configured to make cppcheck print out a
35*83ee113eSDavid van Moolenbroekspecific issue type reported. For example to disable the following error report:
36*83ee113eSDavid van Moolenbroek
37*83ee113eSDavid van Moolenbroek@verbatim
38*83ee113eSDavid van Moolenbroekbind/bind-9.8.1/bin/dnssec/dnssec-keygen.c:522: check_fail: Memory leak: algname (error,memleak)
39*83ee113eSDavid van Moolenbroek@endverbatim
40*83ee113eSDavid van Moolenbroek
41*83ee113eSDavid van Moolenbroekthe following line could be added before line 522 in dnssec-keygen.c:
42*83ee113eSDavid van Moolenbroek@verbatim
43*83ee113eSDavid van Moolenbroek// cppcheck-suppress memleak
44*83ee113eSDavid van Moolenbroek@endverbatim
45*83ee113eSDavid van Moolenbroek
46*83ee113eSDavid van MoolenbroekPlease consult cppcheck manual for details. It is section 6.2 "Inline
47*83ee113eSDavid van Moolenbroeksuppressions" in cppcheck 1.54 manual. Section number may change in later
48*83ee113eSDavid van Moolenbroekversions.
49*83ee113eSDavid van Moolenbroek
50*83ee113eSDavid van Moolenbroek @section doxygen Doxygen checks
51*83ee113eSDavid van Moolenbroek
52*83ee113eSDavid van MoolenbroekISC DHCP Developer's Guide (the documentation you are reading now) is
53*83ee113eSDavid van Moolenbroekgenerated with doxygen. Doxygen is an open source tool for generating
54*83ee113eSDavid van Moolenbroeksource code documentation. It is available from
55*83ee113eSDavid van Moolenbroek<a href="http://www.doxygen.org">www.doxygen.org</a> website. Once Doxygen
56*83ee113eSDavid van Moolenbroekis installed, ISC DHCP documentation can be generated with:
57*83ee113eSDavid van Moolenbroek
58*83ee113eSDavid van Moolenbroek@verbatim
59*83ee113eSDavid van Moolenbroekcd doc
60*83ee113eSDavid van Moolenbroekmake devel
61*83ee113eSDavid van Moolenbroek@endverbatim
62*83ee113eSDavid van Moolenbroek
63*83ee113eSDavid van MoolenbroekNote that cppcheck (see @ref cppcheck Section) reports are linked from
64*83ee113eSDavid van MoolenbroekDeveloper's Guide. It is useful to generate both.
65*83ee113eSDavid van Moolenbroek
66*83ee113eSDavid van Moolenbroek @section systemTests System level tests
67*83ee113eSDavid van Moolenbroek
68*83ee113eSDavid van MoolenbroekISC is developing a comprehensive set of system level tests.
69*83ee113eSDavid van MoolenbroekThey are described by a separate document called DHCP Test Plan.
70*83ee113eSDavid van Moolenbroek
71*83ee113eSDavid van Moolenbroek @section perfdhcp Performance tests using perfdhcp
72*83ee113eSDavid van Moolenbroek
73*83ee113eSDavid van MoolenbroekISC is also developing a performance measurement tool, called
74*83ee113eSDavid van Moolenbroekperfdhcp. Its main purpose is to measure performance of DHCPv4 and
75*83ee113eSDavid van MoolenbroekDHCPv6 servers. It is being developed as part of the BIND10 project.
76*83ee113eSDavid van MoolenbroekSee tests/tools/perfdhcp directory in BIND10 source code.
77*83ee113eSDavid van Moolenbroek
78*83ee113eSDavid van Moolenbroek @section tahiTests Conformance tests using TAHI
79*83ee113eSDavid van Moolenbroek
80*83ee113eSDavid van Moolenbroek<a href="http://tahi.org">TAHI project</a> developed an extensive suite of <a
81*83ee113eSDavid van Moolenbroekhref="http://tahi.org/logo/dhcpv6/">DHCPv6 conformance tests</a>. ISC plans to
82*83ee113eSDavid van Moolenbroekdeploy and run them periodically in the near future.
83*83ee113eSDavid van Moolenbroek
84*83ee113eSDavid van Moolenbroek @section valgrind Memory correctness using valgrind
85*83ee113eSDavid van Moolenbroek
86*83ee113eSDavid van Moolenbroek<a href="http://valgrind.org/">Valgrind</a> is a powerful tool for dynamic code
87*83ee113eSDavid van Moolenbroekanalysis. It allows running existing code (often even without recompiling) in a
88*83ee113eSDavid van Moolenbroekspecial environment that tracks memory operations. In particular, it is able to
89*83ee113eSDavid van Moolenbroekdetect: memory leaks, buffer overflows, usage of uninitialized memory, double
90*83ee113eSDavid van Moolenbroekfrees and similar errors. We currently do not use valgrind in ISC DHCP testing,
91*83ee113eSDavid van Moolenbroekbut there are plans for starting to use it.
92*83ee113eSDavid van Moolenbroek
93*83ee113eSDavid van Moolenbroek*/
94