Software documentation
Software Documentation or Source Code Documentation
is written text that accompanies computer software.
It either explains how it operates or how to use it.
In fact, the term software documentation means different
things to different people. This article describes the
term as used by the largest groups of users.
Types of Documentation
Documentation is an important part of software engineering
that is often overlooked. Types of documentation include:
Architecture/Design
- Overview of software. Includes relations to an environment
and construction principles to be used in design of
software components.
Technical
- Documentation of code, algorithms, interfaces, and
APIs.
End User
- Manuals for the end-user, system administrators and
support staff.
Marketing
- Product briefs and promotional collateral
Architecture/Design Documentation
Design documents tend to take a broad view. Rather than
describe how things are used, this type of documentation
focuses more on the why. For example, in a design document,
a programmer would explain the rationale behind organizing
a data structure in a particular way, or would list
the member functions of a particular object and how
to add new ones to the code. It explains the reasons
why a given class is constructed in a particular way,
points out patterns, and even goes so far as to outline
ideas for ways it could be done better, or plans for
how to improve it later on. None of this is appropriate
for code documents or user documents, but it is important
for design.
Architecture documentation is a special breed of design
documents. In a way, architecture documents are third
derivative from the code (design documents being second
derivative, and code documents being first). Very little
in the architecture documents is specific to the code
itself. These documents do not describe how to program
a particular routine, or even why that particular routine
exists in the form that it does, but instead merely
lays out the general requirements that would motivate
the existence of such a routine. A good architecture
document is short on details but thick on explanation.
It may suggest approaches for lower level design, but
leave the actual exploration trade studies to other
documents.
Another breed of design docs is the comparison document,
or trade study. This would often take the form of a
whitepaper. It focuses on one specific aspect of the
system and suggests alternate approaches. It could be
at the user interface, code, design, or even architectural
level. It will outline what the IS situation is, describe
one or more alternatives, and enumerate the pros and
cons of each. A good trade study document is heavy on
research, expresses its idea clearly (without relying
heavily on obtuse jargon to dazzle the reader), and
most importantly is impartial. It should honestly and
clearly explain the costs of whatever solution it offers
as best. The objective of a trade study is to divine
the best solution, rather than to push a particular
point of view. It is perfectly acceptable to make no
conclusion, or to conclude that none of the alternatives
are sufficiently better than the baseline to warrant
a change. It should be approached as a scientific endeavor,
not as a marketing technique.
Technical Documentation
This is what most programmers mean when using the term
software documentation. When creating software, code
alone is insufficient. There must be some text along
with it to describe various aspects of its intended
operation. This documentation is usually embedded within
the source code itself so it is readily accessible to
anyone who may be traversing it.
This writing can be highly technical and is mainly used
to define and explain the APIs, data structures and
algorithms. For example, one might use this documentation
to explain that the variable m_name refers to the first
and last name of a person. It is important for the code
documents to be thorough, but not so verbose that it
becomes difficult to maintain them.
Often, tools such as Doxygen, javadoc, ROBODoc, POD
or TwinText can be used to auto-generate the code documents—that
is, they extract the comments from the source code and
create reference manuals in such forms as text or HTML
files. Code documents are often organized into a reference
guide style, allowing a programmer to quickly look up
an arbitrary function or class.
Many programmers really like the idea of auto-generating
documentation for various reasons. For example, because
it is extracted from the source code itself (for example,
through comments), the programmer can write it while
referring to his code, and can use the same tools he
used to create the source code, to make the documentation.
This makes it much easier to keep the documentation
up-to-date.
Of course, a downside is that only programmers can edit
this kind of documentation, and it depends on them to
refresh the output (for example, by running a cron job
to update the documents nightly). Some would characterize
this as a pro rather than a con.
Donald Knuth has insisted on the fact that Software
documentation can be a very difficult afterthought process
and has been advocating Literate programming where documentation
is written in the same time as the source code and extracted
by automatic means
User Documentation
Unlike code documents, user documents are usually far
divorced from the source code of the program, and instead
simply describe how it is used.
In the case of a software library, the code documents
and user documents could be effectively equivalent and
are worth conjoining, but for a general application
this is not often true. On the other hand, the Lisp
machine grew out of a tradition in which every piece
of code had an attached documentation string. In combination
with strong search capabilities (based on a Unix-like
apropos command), and online sources, Lispm users could
look up documentation and paste the associated function
directly into their own code. This level of ease of
use is unheard of in putatively more modern systems.
Typically, the user documentation describes each feature
of the program, and the various steps required to invoke
it. A good user document can also go so far as to provide
thorough troubleshooting assistance. It is very important
for user documents to not be confusing, and for them
to be up to date. User documents need not be organized
in any particular way, but it is very important for
them to have a thorough index. Consistency and simplicity
are also very valuable. User documentation is considered
to constitute a contract specifying what the software
will do and should be free from undocumented features.
There are three broad ways in which user documentation
can be organized. A tutorial approach is considered
the most useful for a new user, in which they are guided
through each step of accomplishing particular tasks.
A thematic approach, where chapters or sections concentrate
on one particular area of interest, is of more general
use to an intermediate user. The final type of organizing
principle is one in which commands or tasks are simply
listed alphabetically, often via cross-referenced indices.
This latter approach is of the greatest use to advanced
users who know exactly what sort of information they
are looking for. A common complaint among users regarding
software documentation is that only one of these three
approaches was taken to the near-exclusion of the other
two
It is common to limit provided software documentation
for personal computers to online help that give only
reference information on commands or menu items. The
job of tutoring new users or helping more experienced
users get the most out of a program is left to private
publishers, who are often given significant assistance
by the software developer.
Marketing Documentation
For many applications it is necessary to have some promotional
materials to encourage casual observers to spend more
time learning about the product.
To excite the potential user about the product and instill
in them a desire for becoming more involved with it.
To inform them about what exactly the product does,
so that their expectations are in line with what they
will be receiving.
To explain the position of this product with respect
to other alternatives.
One good marketing technique is to provide clear and
memorable catch phrases that exemplify the point we
wish to convey, and also emphasizes the 'ihio hgogure
of the uses and capacities of the program than anything
else provided by the manufacturer.
From
Wikipedia