mentioned as a form of living documentation, e.g. in
(Adzic, 2011; Smart, 2014).
The main idea is that the documentation is
coupled to the source code by connecting it to the
toolchain used to develop the code itself and that it
is as accessible as the code.
Going back to the UML class diagram example,
it will be considered a living diagram if it can be
automatically updated following a corresponding
change in code and vice versa.
1.3 Why Wiki?
Using wiki for documentation has several
advantages. First it is a proven and acceptable tool
for collaboration. Its simplicity and high
accessibility, usually through common browsers,
makes it an attractive target. It is also based on plain
text which makes it also easy to manipulate by
programs. It's free from helps and directs the
developers/engineers to work in higher level of
abstraction, away from the formality and constraints
of today's programming languages. Above all,
markdown is a simple way to mark and link
concepts, models and other various levels of
software artifacts. In this work we emphasize wiki as
a common base for most of the practices or methods
of software documentation.
1.4 Related Work
FitNesse (Adzic, 2008) is a wiki-based web tool for
non-developers to write formatted acceptance tests
through tabular example/test data.
BDD (Behavior Driven Development) (North,
2006), is an extension of TDD (Test Driven
Development/Design) aiming at writing
requirements by non-technical stakeholders.
Cucumber (Wynne and Hellesoy, 2012) and
SpecFlow (SpecFlow) are tools which accept stories
written in a somewhat constrained natural language,
directly supporting BDD. They are easily integrated
with unit testing and user/web automation tools.
Here (Yagel, 2011) we reviewed these practices and
tools.
DaSpec (DaSpec) is a new tool that uses wiki for
writing executable specifications in free form and
exercises the system under test for
approval/acceptance. BDDfy (BDDfy) is a tool that
creates documentation from unit tests written in
some disciplined manner, thus reserving the usual
order and generating documentation from lower
levels.
In the diagramming area, many tools are
generating source code from, e.g., UML diagrams.
Some of them use standard formats, e.g. XMI files
used by ArgoUML (ArgoUML). Some of the tools
also support reverse engineering for creating or
updating those diagrams, following changes in the
code – thus helping keep the documentation
updated.
Mapador (Mapador) is a service for
automatically extracting documentation from code,
which targets writing documentation as part of the
development process and not a posteriori.
ATDD (Acceptance Test Driven Development)
is an extension of TDD, also known as Agile
Acceptance Testing (Adzic, 2008). Further
extensions are Story Testing, Specification with
examples (Adzic, 2011) or Living/Executable
Documentation (Brown, 2011; Smart, 2014).
The mentioned coming book (Martraire, 2016)
emphasizes these relevant practices: Living
Diagram, Living Glossary, Declarative Automation,
Enforced Guidelines, Small-Scale Model and others.
For example, the book discusses how using
Javadoc's DocLet (documentation generator), one
can parse source files for annotations marking main
domain concept and then generating a glossary
document.
Concerning diagrams, there are libraries and
services which accept as input simple text format
and can then generate diagram documentation. See
for example: yuml.me, diagrammr.com, and
structurizr.com. More general legacy tools can be
used too, e.g. Graphviz (Graphviz) that uses .dot file
format for generating graphs.
Enterprise/ALM tools like IBM's Rational Team
Concert (IBM) put emphasis on traceability which is
important to link the various documentation and
software levels.
More generally, the emphasis on domain analysis
follows the Domain Driven Design (DDD) work
(Evans, 2003). Even at higher level of abstraction
we can make use of ontologies to guide the
documentation and development process, as
discussed at (Feathers, 2004; Osetinsky and Yagel,
2014).
Wiki Software. It is now common that project
management tools, version control systems and
services offer built-in wiki support. Github (Github)
(a well-known version control cloud service) for
example is adding a wiki by default to every new
code repository (see: https://help.github.com/
articles/about-github-wikis/). However, in contrast
to our proposal in this paper, this wiki is managed
separately from the code (e.g. in terms of security
policies and git versioning). It is also a common