Click here for 49 slides in PowerPoint

advertisement
Generating
Reference
Documentation
for APIs and
SDKs
Generating
Reference
Documentation
for APIs and
SDKs
Generating Reference
Documentation for APIs
and SDKs
The Ultimate in Single Sourcing
Manuel Gordon
+1 514 934-3274
manuel@gordonandgordon.com
www.gordonandgordon.com
Generating
Reference
Documentation
for APIs and
SDKs
Manuel Gordon








Worked in computers for 25+ years
Programmer: statistics, MIS, graphics
Professor of Computer Science at Vanier
College
High-tech and business journalism
High-tech corporate communications
Teaching and training: McGill,
Concordia, U of T, corporate clients
Past president of STC Montreal chapter
Technical writing consultant since 1990
Generating
Reference
Documentation
for APIs and
SDKs
Co-Author Is Absent Today
Greg Rakauskas,
Veritas Software
Generating
Reference
Documentation
for APIs and
SDKs
What’s Ahead


What are APIs and SDKs, anyway?
Documentation Generation
Programs (DGPs)
—JavaDoc
—DOC++
—doxygen



A DGP success story
A Taste of doxygen
One Commercial Package
—Document! X

Questions,
answers?
, and comments!
Generating
Reference
Documentation
for APIs and
SDKs
What is an API?


Application Programming Interface
Greg’s definition:
—A set of functions (or methods) that
a program exposes to enable other
programs to communicate with it.

Manny’s definition
—An interface used by programmers to build
applications on top of your system
—Consists of function declarations
—Not a GUI!
Generating
Reference
Documentation
for APIs and
SDKs
Where APIs Fit in
THEIR
APPLICATION
THEIR
APPLICATION
OUR API
OUR
SOFTWARE
OUR
SOFTWARE
Generating
Reference
Documentation
for APIs and
SDKs
What is an SDK?

Software Development Kit
—One or more documented APIs,
packaged as a product

SDK includes:
—Libraries +
—APIs
(may be embodied by header files)
+
—Sample programs +
—Documentation

“No documentation, no SDK!”
Generating
Reference
Documentation
for APIs and
SDKs
SDK Documentation

Developer’s Guide
—Overview & description
—Installation procedure
• SDK requirements (OS, patches)
• Environment set up (compilers, libraries)
—How to write applications using the API
• Usually based on code samples

Reference Manual
—For each function:
•
•
•
•
•
Description
Parameters
Return codes or values
Notes
etc.
Generating
Reference
Documentation
for APIs and
SDKs
Examples of SDKs

HTML Help 3.1 APIs
— http://msdn.microsoft.com/library/
default.asp?url=/library/en-us/htmlhelp/
html/vsconHH1Start.asp

Java Development Kit (JDK)
— http://java.sun.com/j2se/1.3/docs/api/index.html

Windows SDK and
.NET Enterprise Server SDKs
— http://msdn.microsoft.com/library/en-us/
sdkintro/contents_49d7.asp?frame=true
Generating
Reference
Documentation
for APIs and
SDKs
SDK Documentation:
Greg’s Example
Generating
Reference
Documentation
for APIs and
SDKs
SDK Documentation: Audience



Software developers
Know a lot about their application
Know little about your API
—And often care less!

Want sample programs
Generating
Reference
Documentation
for APIs and
SDKs
What Are DGPs?





Documentation Generation
Programs (Greg’s neologism)
Programs that parse source code
for embedded tags and comments
Output comments into various
formats such as HTML, LaTeX, RTF
You can add one to the build script
for your product, to automatically
generate Reference Manual.
Usually not very good for
Developer’s Guide.
Generating
Reference
Documentation
for APIs and
SDKs
DGP Output Examples—
JavaDoc
Generating
Reference
Documentation
for APIs and
SDKs
Doc++
Generating
Reference
Documentation
for APIs and
SDKs
The Good News about DGPs






Ideal for documenting public APIs for
groups that must use each other’s code
Ideal for high-volume, low-polish
documentation
Documentation source physically
located next to code, as comments
Easy to change documentation when
code changes
Many global changes to source code
automatically update the doc
Both developers and writers can modify
the reference documentation
Generating
Reference
Documentation
for APIs and
SDKs
The Bad News





Ownership can be unclear
Tweaking output format often
required
Your developers may not write
well in English
Perception of extra work for
developers
Incorrect information: quality
control can be a problem
Generating
Reference
Documentation
for APIs and
SDKs
In Balance,
a “Win/Win” Situation


Greater incentive for developers to
comment code
Accurate reference information:
—Smaller communication gap
—Automatic update

Writers can put more focus on
code samples, Developer’s Guide
Generating
Reference
Documentation
for APIs and
SDKs
Sample Doc++ Output
Generating
Reference
Documentation
for APIs and
SDKs
Sample Doc++ Input (in
Source Code)
/**Call this method to set all trap PDU information except
* variable bindings.
* @param bstrEnterprise [in] Type of object generating the trap.
...
* @return
* <dl>
*
<dt>SIG_S_OK</dt>
*
<dd>The operation succeeded.</dd>
*
<dt>SIG_E_OUTOFMEMORY</dt>
*
<dd>Ran out of memory.</dd>
* </dl>*/
sig_result CTrapPdu::SetV1TrapInfo( const char* pEnterprise,
TrapType genericTrap, sig_uint32 specificTrap, sig_uint32
timeStamp, const char* pAgentAddr )
Generating
Reference
Documentation
for APIs and
SDKs
The DGP Routine
Add Tags and
Comments
Edit and
Test
Build
Docs
Generating
Reference
Documentation
for APIs and
SDKs
JavaDoc

Part of Java Development Kit
—Now Java 2 Platform, Standard
Edition (J2SETM)


Output looks like Sun’s own SDK
documentation
Available at:
http://java.sun.com/j2se/
Generating
Reference
Documentation
for APIs and
SDKs
A DGP Success Story

An SDK now called Vortex and
Karma
—Rigid-body dynamics
—Collision detection

Developed at a company now
called Critical Mass Labs...
—http://www.cm-labs.com/

And at MathEngine plc
—http://www.mathengine.com/
Generating
Reference
Documentation
for APIs and
SDKs
Vortex Helps Simulate
Realistic Physical Behavior

You can download great demos...
Generating
Reference
Documentation
for APIs and
SDKs

Beta Documentation
Folders of HTML
Reference
documentation
generated from
doxygen

pdf files of How-To
documentation
generated from
FrameMaker files

Many sample
programs

Presented in HTML
frameset
Generating
Reference
Documentation
for APIs and
SDKs
Alpha 0.0.1 Documentation


Developed from zero in five weeks
Looks surprisingly like the Beta
—Beta shipped nine months later
—Many, many, many changes, major
and minor, in the SDK
—Several Alpha versions of SDK,
usually including revised
documentation
Generating
Reference
Documentation
for APIs and
SDKs
Summary of a Success Story


We produced hundreds of pages of
documentation—really fast.
Tech writers did not write or
copy-edit one line of reference doc
—We had to muddle through with
programmers with graduate degrees
from Oxford University...
Generating
Reference
Documentation
for APIs and
SDKs
Thunderous Applause

In a review, our Alpha
documentation was rated higher
than our competitors Gold:
“MathEngine's documentation is the
best of the three packages. The
manual is very thorough with both a
user's guide and complete reference
to all the classes in the architecture.”
– Gamasutra.com
and
Game Developer Magazine
Generating
Reference
Documentation
for APIs and
SDKs
Necessity Was the Mother


There was no alternative to
generating documentation
Both MathEngine and Critical Mass
Labs are still going strong with the
product!
Generating
Reference
Documentation
for APIs and
SDKs
Why We Chose doxygen

We did a quick comparison
between doxygen and DOC++
—DOC++ looked tidier
—doxygen gave more useful info

doxygen actually a company
standard!
—Not that we knew that when we
started...
Generating
Reference
Documentation
for APIs and
SDKs
Let’s Look at doxygen



http://www.stack.nl/~dimitri/doxygen
Free documentation system
Open-source
—GNU General Public License
Generating
Reference
Documentation
for APIs and
SDKs
doxygen Features

Documents C, C++, Java, IDL
(Corba, COM/ActiveX, other)

Generates or supports
—HTML
—latex
—RTF (MS-Word)
—Postscript
—hyperlinked PDF
—compressed HTML
—man pages (Unix).
Generating
Reference
Documentation
for APIs and
SDKs
doxygen Can Document
Undocumented Source Files!

Can extract the code structure
from undocumented source files.

Shows relations between the
various elements (functions,
typedefs, structs, etc.) as
hyperlinks

Can generate inheritance
diagrams and other diagrams
Generating
Reference
Documentation
for APIs and
SDKs
Dimitri van Heesch’s Log

1985: Got my first computer:
a Commodore 64!

1989: Got my second computer:
an Amiga 500

09/1992: Started studying
Computer Science at the
Technical University in Eindhoven.

10/1997: Released version 0.1
of doxygen

11/1997: Accepted a job at Philips
Research in the field of software
architecture for embedded systems.
Generating
Reference
Documentation
for APIs and
SDKs
A Unix-Flavored Tool



Supports many flavors of Unix
Long descriptions of how to
compile on various Unix flavors
For Windows (until recently):
—“There is no fancy installation
procedure at the moment (If anyone
wants to add it please let me know).
—“To install doxygen, just copy the
binaries from the bin directory to a
location somewhere in the path[, or]
include the bin directory of the
distribution to the path.”
Generating
Reference
Documentation
for APIs and
SDKs
Coding doxygen Comments
/**
* The body's position vector is returned in
* @a p.
* The position is of the bodies
* center of mass, and is given in the
* world reference frame.
*/
void MEAPI MdtBodyGetPosition
(const MdtBodyID b, MeVector3 p)
{
MdtCHECKBODY(b,"MdtBodyGetPosition");
MeVector3Copy( p, b->bodyTM[3]);
}
Generating
Reference
Documentation
for APIs and
SDKs
Viewing Generated Doc
void MEAPI MdtBodyGetPosition
( MdtBodyID b,
MeVector3 p )
The body's position vector is
returned in p.
The position is of the bodies center
of mass, and is given in the world
reference frame.
Generating
Reference
Documentation
for APIs and
SDKs
Generating a doxyfile


doxygen has a command-line
interface
To generate a doxyfile (.ini file):
doxygen -g yourdoxyfile
Generating
Reference
Documentation
for APIs and
SDKs
Raw doxyfile with comments
# The PROJECT_NAME tag is a single word (or a
# sequence of words surrounded
# by quotes) that should identify the project.
PROJECT_NAME
#
#
#
#
#
#
#
=
The OUTPUT_DIRECTORY tag is used to specify
the (relative or absolute) base path where
the generated documentation will be put.
If a relative path is entered, it will be
relative to the location where doxygen was
started. If left blank the current directory
will be used.
OUTPUT_DIRECTORY
=
Generating
Reference
Documentation
for APIs and
SDKs
Some Keywords We Used
PROJECT_NAME
= "MathEngine Dynamics Toolkit”
OUTPUT_DIRECTORY
= ../release
INPUT
= ../../Mst/include \
../../Mst/src
FILE_PATTERNS
= *.h *.c *.hpp *.cpp
HTML_OUTPUT
= simulation_ref
HTML_HEADER
HTML_FOOTER
= MeReferenceHeader.htm
= MeReferenceFooter.htm
HTML_STYLESHEET
= MeDoxygen.css
Generating
Reference
Documentation
for APIs and
SDKs
Generating Reference Doc

To generate doxygen output:
doxygen yourdoxyfile

Output consists of HTML files in
the output directory specified in
doxyfiles
Generating
Reference
Documentation
for APIs and
SDKs
Generating a Documentation
Set

Use batch files, command files, or
(best of all) makefiles:
all:
doxygen Doxyfile1
doxygen Doxyfile2
cp -a here there
cp -a also_here there
rm -rf there/crap
rm -rf there/also_crap
clean:
rm -rf there
Generating
Reference
Documentation
for APIs and
SDKs
Related Technologies

doxygen is written in, and
available in, Perl:
—http://www.perl.com

GNU tools, such as make:
—http://www.gnu.org/
—For a Windows version, see
http://sources.redhat.com/cygwin/
Generating
Reference
Documentation
for APIs and
SDKs
UNIX Culture and Open Source
Culture Bring Benefits

“If you are using Microsoft's Developer Studio...
DoxBar [can] run doxygen from within Developer
Studio.”

“Pascal Binggeli is working on an integrated
development environment for Doxygen called
DoxygenStudio. It will be for Windows only.”

“If VIM is your favourite editor (it is mine!), then
Ralf Schandl has a some macros and syntax
highlighting files for you.”

“If you are using the Emacs editor, take a look at
Tom Emerson's page for a lisp script to simplify
writing doxygen comments.”

“VXL project produced some code to manage
documentation production for multiple doxygen
runs over 10s of libraries...”
— http://www.stack.nl/~dimitri/doxygen/download.html#helpers
Generating
Reference
Documentation
for APIs and
SDKs
Even Technical Writers Get
Into The Act

“Glenn Maxey has released has released The
TechPubs Tools (TPT) which wraps around any
number of mini-HTML systems and creates a
comprehensive HTML system complete with table of
contents and an auto-generated
index/concordance.”
— http://www.stack.nl/~dimitri/doxygen/download.html#helpers

“[D]ownload www.voyanttech.com/tp_tools.zip (1.8
MB). Unzip and launch tp_tools/_start_here.html...
“The docs are at ***ALPHA*** level. Since cranking
them out in a hurry over Christmas, I've discovered
many embarrassing mistakes for a tech writer.”
— Glenn Maxey, email, May 5 2002
Generating
Reference
Documentation
for APIs and
SDKs
What about Commercial
Packages?

“We chose [Document! X from
Innovasys] because it provides .NET
and MSHelp2 support AND because it
lets us work in very flexible ways with
the documentation generation.”

“Using Document! X, we can use
[developers’] information when
appropriate, and override their
information with our own writing where
we think it's best.”
—Lydia Wong,
nettechwriters@yahoogroups.com
posted May 3, 2002
Generating
Reference
Documentation
for APIs and
SDKs
I May Do Windows,
But I Don’t Do perl!

“[Many technical writers will] look at
a tool with lots of programmer-y
interfaces and say, ‘no way—I'm a
writer, not a programmer.’ I think
Document X fits us well in part
because of this.”
—Lydia Wong
email
May 5, 2002
Generating
Reference
Documentation
for APIs and
SDKs
Where Do I Get More
Information?

Here is an incomplete list of DGPs:
— http://www.stack.nl/~dimitri/doxygen/links.html

For a discussion group on APIs
and SDKs:
— http://groups.yahoo.com/group/nettechwriters/
— Low volume, high quality
— Lydia and Glenn are frequent contributors
Generating
Reference
Documentation
for APIs and
SDKs
Questions?
Discussion!
Manuel Gordon
+1 514 934-3274
manuel@gordonandgordon.com
www.gordonandgordon.com
Download