admin/isac-rules.tex
author Walther Neuper <wneuper@ist.tugraz.at>
Mon, 17 Dec 2018 13:02:16 +0100
changeset 5234 22aabc469ebb
parent 4469 9164b7d4fc1d
permissions -rw-r--r--
tuned
wneuper@2494
     1
% ln -s ../doc/bib bib
wneuper@2494
     2
wneuper@1959
     3
\documentclass[12pt,a4]{article}
wneuper@1959
     4
\usepackage{a4wide}
wneuper@1959
     5
\usepackage{latexsym}
wneuper@1959
     6
\bibliographystyle{alpha}
wneuper@1959
     7
wneuper@1959
     8
\def\sisac{{\footnotesize${\cal I}\mkern-2mu{\cal S}\mkern-5mu{\cal AC}$}}
wneuper@1959
     9
\def\isac{${\cal I}\mkern-2mu{\cal S}\mkern-5mu{\cal AC}$}
wneuper@1959
    10
\def\isa{${\cal I}\mkern-2mu{\cal S}\mkern-5mu{\cal A}$}
wneuper@1959
    11
\def\see{$\rightarrow$}
wneuper@1959
    12
wneuper@1959
    13
\title{The Rules of the \isac{} - Developers}
wneuper@1959
    14
\author{The \sisac-Team\\
wneuper@1959
    15
  {\tt isac@ist.tugraz.at}\\
wneuper@1959
    16
    Institute for Softwaretechnology\\
wneuper@1959
    17
    University of Technology,
wneuper@1959
    18
    Graz, Austria}
wneuper@1959
    19
%    Institut f\"ur Softwaretechnologie\\
wneuper@1959
    20
%    Technische Universit\"at Graz}
wneuper@1959
    21
\date{%June 25, 2003
wneuper@1959
    22
  \today}
wneuper@1959
    23
wneuper@1959
    24
\begin{document}
wneuper@1959
    25
\maketitle
wneuper@2336
    26
\vspace{1.0cm}
wneuper@1959
    27
wneuper@1959
    28
\begin{center}\begin{minipage}{13.0cm}\footnotesize
wneuper@1959
    29
\tableofcontents
wneuper@1959
    30
\end{minipage}\end{center}
wneuper@1959
    31
wneuper@2336
    32
\vspace{1.5cm}
wneuper@1959
    33
This document contains {\em all} rules agreed upon by the members of the \sisac-team. The wide range of these rules will supposedly lead to a split into several documents in the future.
wneuper@1959
    34
\newpage
wneuper@1959
    35
wneuper@1959
    36
wneuper@2336
    37
\section{The \isac{} charta}\label{charta}
wneuper@1961
    38
\sisac{} is dedicated to learning as an essence of human beeing. On the one hand learning is concerned with {\em individual growth}, with reflection about the part of human thinking which can be mechanized my mathematics, with gaining insight into foundations of our technology oriented society --- issues \sisac{} wants to contribute with a novel kind of math tutoring software. On the other hand, learning is a {\em social activity} in various ways: it concerns cooperation between the learner and some kind of teacher, between teachers and media producers, between educational administrators and course designers --- issues \sisac{} wants to contribute with a novel kind of math authoring software. And last not least the \sisac-project is a learning community itself, embedded into the {\em development in science} as a collective kind of learning.
wneuper@1961
    39
wneuper@1961
    40
In the future, an advisory board shall be engaged to balance these issues. Presently the \sisac-project is primarily engaged into software development, and for this part the rules are set up first below.
wneuper@1959
    41
wneuper@1959
    42
\begin{enumerate}
wneuper@2336
    43
\item {\bf \sisac{}} is an academic open-source project on learning mathematics.
wneuper@2336
    44
\item {\bf The charta determines}\label{determines} the administrative rules (pt.\ref{changes}.), the rights and obligations of the members of the (pt.\ref{team}.) \sisac-team with respect to the development process and the (pt.\ref{products}.) products resulting from this process within the \sisac-project.
wneuper@1959
    45
wneuper@1959
    46
\item {\bf Changes of the rules}\label{changes}  of the charta are set up to acceptance of two thirds of the (pt.\ref{active}.) active members of the \sisac-team in a (pt.\ref{meeting}.) \sisac-meeting. Proposals for changes have to be made public one week ahead of a decision in {\tt isac@ist.tugraz.at}. In case of parity of votes the (pt.\ref{admin}.) \sisac-admin decides.
wneuper@1959
    47
wneuper@2336
    48
\item {\bf The \sisac-products are common property}\label{products} of the members of the (pt.\ref{team}.) \sisac-team, where each person holds the copyright on the code he or she is author of. The \sisac-products comprise the \sisac{} mathematics kernel, the \sisac{} tutoring system, the \sisac{} authoring system the \sisac{} web-reader and \sisac{} content.
wneuper@1959
    49
wneuper@1959
    50
Detailed rules for cases of re-engineering will be established in time these cases will come up.
wneuper@1959
    51
wneuper@1959
    52
\item {\bf \sisac{} is an open source project}\label{open} under GNU public license; the \sisac-project follows the idea, that educational software should be free for everyone involved in learning and teaching. 
wneuper@1959
    53
wneuper@1961
    54
However, if \sisac-content, probably developed outside the \sisac-project, is commercially used, \sisac{} will ensure fair sharing of profit with the \sisac-team. A procedere for such cases will be established in time these cases will come up.
wneuper@1959
    55
wneuper@3022
    56
\item {\bf A certain sub-task}\label{subtask} of the \sisac-project is defined between an aspirant and the \sisac-admin (usually by agreement on certain JUnit tests) following the checklist \ref{check-assign}. Ninety percent of this task are covered by this initial agreement; ten percent may be required for tasks from the todo-list (pt.\ref{todolist}.) urgently needed for accomplishing general goals of the \sisac-project.
wneuper@1969
    57
wneuper@1969
    58
By the agreement on the sub-task the aspirant becomes an active member (pt.\ref{active}.) of the \sisac-team (pt.\ref{team}.).
wneuper@1969
    59
wneuper@1969
    60
\item {\bf The responsibility for parts of code}\label{responsibility} is given at the agreement on the sub-task (pt.\ref{subtask}). The responsibility is fixed for a list of directories, where the member is allowed to create new files (and subdirectories in agreement with the (pt.\ref{admin}.) \sisac-admin) and/or a list for already existing files.
wneuper@1959
    61
wneuper@1959
    62
If the request for changes in the code concerns files of {\em one} other active member, then the change is due to the agreement between the two members. If the change concerns more than one collegue, the agreement is up to involve the \sisac-admin, usually at a (pt.\ref{day}.) team-day. The \sisac-admin is responsible for all code not in responsibility of an active member of the \sisac-team.
wneuper@1959
    63
wneuper@1969
    64
\item {\bf The cvs repository} contains code with all tests running (in SML as well as JUnit-tests in Java). In order to sustain this state, these steps must be followed:
wneuper@1969
    65
  \begin{enumerate}
wneuper@1969
    66
  \item Merge new code with the repository by {\tt update}. 
wneuper@1969
    67
  \item If there are conflicts, clarify them with the owner of the respective file (see pt.\ref{responsibility}). 
wneuper@1969
    68
  \item Run {\em all} tests (either in SML or in Java; in case of changes in the Java-SML interface both). 
wneuper@1969
    69
  \item If some tests do not run, contact the owner of the respective testcase (see pt.\ref{responsibility}).
wneuper@1969
    70
  \item If there are no more conflicts and all tests are running, {\tt commit} the new code.
wneuper@1969
    71
  \item The {\tt commit} has to be accompanied with a comment of one or two lines. If the new code is related to discussions in an \sisac-meeting, the comment has to reference the respective protocol (pt.\ref{protocol}).
wneuper@3022
    72
  \item Renamed files and directories must be commitet with a comment containing 'oldname->newname' in order to make the history tracable.
wneuper@1969
    73
  \end{enumerate}
wneuper@3022
    74
When formulating the comments in commits remember: {\em what} has been changed is implied by the changes (and these are recorded by cvs automatically), usually it is more informative {\em why} something had be updated, or at which occasion some new code has bee added.
wneuper@1959
    75
wneuper@1969
    76
\item {\bf The \sisac-team comprises}\label{team} all persons who ever have obtained a task (pt.\ref{subtask}.) from the (pt.\ref{admin}.) \sisac-admin {\em and} who have received admission from two thirds of the (pt.\ref{active}.) active members in an (pt.\ref{meeting}.) \sisac-meeting.
wneuper@1959
    77
wneuper@2336
    78
\item {\bf The active members}\label{active} of \sisac-team are those who have not yet left the active development process, usually on completion of their thesis or written report. The membership can be abandoned like any other rule (pt.\ref{changes}). An active member is discharged from this sub-task (pt.\ref{subtask}) due to a procedure described in sect.\ref{final-handover}.
wneuper@1959
    79
wneuper@1969
    80
\item {\bf The \sisac-admin}\label{admin} is the member of the \sisac-team supervising the whole development process and the adherence to the rules. %The \sisac-admin is elected by the \sisac-team for 1 semester in an (pt.\ref{meeting}.) \sisac-meeting according on how rules are changed (see above).
wneuper@1969
    81
wneuper@2336
    82
He prosecutes breach of the rules by assigning a task, adequate to the annoyance caused in the team, from the todo-list (pt.\ref{todolist}) to the malefactor.
wneuper@1969
    83
wneuper@1969
    84
In case of absence the \sisac-admin has to determine a representative. In case of permanent unavailability the \sisac-meeting has to determine a new \sisac-admin.
wneuper@1959
    85
wneuper@1959
    86
\item {\bf An \sisac-meeting}\label{meeting} requires the presence of two thirds of the members of the \sisac-team, the \sisac-admin and the announcement like a rule (see above). The task of the \sisac-meeting is to change rules of this charta including the active membership.
wneuper@1959
    87
wneuper@1959
    88
\item {\bf A team-day}\label{day} obliges each active member of the \sisac-team to be present one certain day a week. This day is fixed at the beginning of a semester once for a semester.
wneuper@1959
    89
wneuper@1961
    90
%AK041016 "eventual" bzw. "eventually" heißt "in endeffekt, letztendlich, schließlich", keinesfalls heißt es "eventuell" ... WN schon ausgebessert, danke !
wneuper@1969
    91
The team-day serves discussing interfaces and other topics of common interest, personal concerns of the members of the \sisac-team, pair programming and \sisac-meetings if required. A topic of common interest should be published in {\tt isac@ist.tugraz.at} at least 3 days ahead.
wneuper@1959
    92
wneuper@1969
    93
\item {\bf A protocol}\label{protocol} is written for each \sisac-meeting and for points of common interest at a team-day. It serves the information of active members, who could not take part in the \sisac-meeting and for later lookup. Thus the protocol briefly describes the points of discussion and certainly contains all decisions.
wneuper@1969
    94
wneuper@1969
    95
The protocol is written by the active members of the \sisac-team all around in alphabetical order. It is stored in the cvs {\tt isac/admin}, thus allowing for comments.
wneuper@1969
    96
wneuper@2336
    97
\item {\bf A todo-list}\label{todolist} contains tasks outside the sub-tasks defined according to pt.\ref{subtask}. Entries in the list are accepted by the \sisac-admin or by affirmation of two thirds in an \sisac-meeting.
wneuper@1969
    98
wneuper@1969
    99
Tasks on this list are assigned to members of the \sisac-team by the \sisac-admin for urgent reasons w.r.t. general \sisac{} goals or for prosecution of breach of rules.
wneuper@1959
   100
wneuper@1959
   101
\end{enumerate}
wneuper@1959
   102
wneuper@1959
   103
wneuper@1963
   104
\section{Testdriven development}\label{testdriven}
wneuper@1963
   105
\sisac{} is a research and development projekt; as such it has to deal with open research questions and changing requirements. Together with the middle size of the \sisac-team this gives the major prerequisites for a development process following the ideas of `extreme programming' \cite{extreme-1}.
wneuper@1959
   106
akremp@1960
   107
%AK041016 ich glaube, dass isac phasenweise ein RESEARCH project ist. das funktioniert ganz gut, an ideen und experimenten hat es nie gemangelt. phasenweise ist isac aber ein PRODUCTION project, zB wenn eines tages ein prototyp fertig sein soll, am ende gar zu einem bestimmten termin mit bestimmter funktionalität. das haut überhaupt nicht hin. in dieser phase sehe ich die wesentlichsten defizite. wenn man produzieren will, muss man sagen können, was man haben will und bis wann man das haben will. ausserdem müssen die notwendigen mittel dafür zur verfügung stehen und ressourcen und arbeit koordiniert werden, sonst keine production und kein product. bisher habe ich im text wenig hinweise darauf gefunden, wo ziele und deadlines herkommen, wie die ressourcen verteilt werden, wie die verteilung sichergestellt und überprüft wird und wie konflikte (zB um ressourcen oder prioritäten) gelöst werden.
akremp@1960
   108
wneuper@1959
   109
In particular, all sub-tasks of development are defined by means of functional tests together with the \sisac-admin.
wneuper@1959
   110
wneuper@1959
   111
\subsection{Testdriven development in Java}\label{javatests}
wneuper@1959
   112
Here are the rules for the part of development involving Java.
wneuper@1959
   113
wneuper@1959
   114
\begin{enumerate}
wneuper@1976
   115
\item The subdirectories of {\tt src/java-tests} are kept an exact sub-tree of {\tt src/java}. Sub-tree means, that these subdirectories in {\tt src/java-tests/*} are omitted (w.r.t. {\tt src/java/*}) which are not needed for holding testcases and/or testsuites.  
wneuper@1959
   116
wneuper@1976
   117
There are two exception to this rule:\label{dir-test-sub-dir-obj}
wneuper@1976
   118
  \begin{enumerate}
wneuper@1976
   119
  \item {\tt src/java-tests/isac/functest} see (\ref{functest}.) below 
wneuper@1976
   120
  \item {\tt src/java-tests/isac/sml} contains checks of the XML-output of the SML-kernel.
wneuper@1976
   121
  \end{enumerate}
wneuper@1976
   122
  
wneuper@1963
   123
\item Each testcase resides in {\em that} subdirectory of {\tt src/java-tests}, where the tested class resides in the respective subdirectory of {\tt src/java}. (Thus, below we do not distinguish between `subdirectories of {\tt src/java-tests/*}' and `subdirectories of {\tt src/java/*}'). Thus we can name both {\tt src/java/isac/*} and {\tt src/java-tests/isac/*} for short {\tt ISAC/*}. \label{dir-test--dir-obj}
wneuper@1959
   124
wneuper@3022
   125
\item A testsuite for class {\tt Yyy.java} is named {\tt TestYyy.java}, and the testcases for a method {\tt Yyy.xxx} in {\tt TestYyy.java} are named {\tt testXxx*}. \label{test-naming} Mock-objects are named {\tt MockXxx} where {\tt Xxx} is the name of an existing class.
wneuper@1959
   126
wneuper@1963
   127
\item If a testcase refers to methods of several objects, then it resides on the common rootdirectory of the objects' directories. This root is {\tt src/java-tests/isac} ultimately. TODO what if there will be too many testcases~? \label{dir-test--dir-objects}
wneuper@1959
   128
wneuper@1963
   129
\item {\em All} testcases and testsuites in a directory {\tt ISAC/*/aaa/} are called by a specific testsuite {\tt /ISAC/*/aaa/Testall.java}, and if there are subdirectories {\tt ISAC/*/aaa/?}, this specific testsuite calls the testsuites {\tt ISAC/*/aaa/?/Testall.java} (and does {\em not} go {\em several} levels deeper in the file hierarchy). Thus {\tt ISAC/*/aaa/Testall.java} contains {\em exactly} one additional call to {\tt ISAC/*/aaa/?/Testall.java} per immediate subdirectory {\tt ISAC/*/aaa/?/}. \label{dir-test leveldn 1}
wneuper@1959
   130
wneuper@1959
   131
\item The testsuite {\tt ISAC/Testall.java} is the root of the calling hierarchy and calls all existent {\tt ISAC/*/Testall.java} cascading down all tests, according to (\ref{dir-test leveldn 1}.), one {\tt Testall.java} per level.
wneuper@1959
   132
wneuper@1959
   133
\item Thus the implementor of a testcase for class {\tt ISAC.*.aaa.Yyy} is responsible that
wneuper@1959
   134
  \begin{enumerate}
wneuper@1963
   135
  \item the testcase is {\tt ISAC.*.aaa.TestYyy.java} according to (\ref{dir-test--dir-obj}.) and (\ref{test-naming}.).
wneuper@1959
   136
wneuper@1959
   137
  \item This amounts to either 
wneuper@1959
   138
    \begin{enumerate}
wneuper@1959
   139
    \item the directory {\tt src/java-tests/isac/*/aaa/} does already exist. Then the implementor has to
wneuper@1959
   140
      \begin{enumerate}
wneuper@1963
   141
      \item insert a call of his {\tt TestYyy.java} into {\tt src.java-tests.isac.*.aaa.Testall.java} (i.e.\ short {\tt ISAC.*.aaa.Testall.java})
wneuper@1959
   142
      \end{enumerate}
wneuper@1959
   143
    \item or directory {\tt src/java-tests/isac/*/aaa/Testall.java} does {\em not} exist. Then the implementor has to
wneuper@1959
   144
      \begin{enumerate}
wneuper@1959
   145
      \item create directory {\tt src/java-tests/isac/*/aaa/}
wneuper@1959
   146
      \item create a testsuite {\tt ISAC.*.aaa.Testall.java} calling {\tt ISAC.*.aaa.TestYyy.java}
wneuper@1963
   147
      \item add a call of {\tt ISAC.*.aaa.Testall.java} to {\tt ISAC.*.Testall.java}, which has been brought to existence applying (\ref{dir-test leveldn 1}.) recursively.
wneuper@1959
   148
      %\item 
wneuper@1959
   149
      \end{enumerate}
wneuper@1959
   150
    \end{enumerate}
wneuper@1959
   151
  %\item 
wneuper@1959
   152
      %\begin{enumerate}
wneuper@1959
   153
      %\item 
wneuper@1959
   154
      %\item 
wneuper@1959
   155
      %\item 
wneuper@1959
   156
      %\end{enumerate}
wneuper@1959
   157
  \end{enumerate}
wneuper@1959
   158
wneuper@2336
   159
\item Functional tests are kept in {\tt ISAC/functest}. \label{functest} They relate to the use-cases in the isac-docu.tex. In order to allow cross-referencing, the whole \LaTeX-label must be used in the code, e.g. {\tt $\backslash$label\{SPECIFY:check\}} (the numbering is useless due to ongoing changes to isac-docu.tex).
wneuper@1959
   160
wneuper@1964
   161
\item Each functional test is a separate JUnit-test. Thus it can be referenced within javadoc by {\tt @see}, as can be referenced JUnit-tests themselves.
wneuper@1964
   162
wneuper@1964
   163
\item Interlinking of unit-tests (with the javadoc {\tt @see}) is desirable. 
wneuper@1964
   164
  \begin{enumerate}
wneuper@1964
   165
  \item One obvious and thus {\em mandatory} way originates from the proceeding in testdriven development:\\
wneuper@1964
   166
Development starts with functional tests, usually followed by JUnit-tests covering parts of the function: these JUnit-tests must be interlinked bidirectionally with the respective functional test. (i.e.\ a JUnit-test should point at least at one functional test.
wneuper@1964
   167
  \item If a JUnit-test (`parent`) covers several other JUnit-tests (`children`), then this relation should be documented by bidirectional links between parent and children.
wneuper@1964
   168
  %\item 
wneuper@1964
   169
  \end{enumerate}
wneuper@1964
   170
wneuper@1959
   171
\item TODO get experience, if the tests are fast enought be run parallel to module-development; then consider how to separate them appropriately.
wneuper@1959
   172
wneuper@1959
   173
%\item 
wneuper@1959
   174
\end{enumerate}
wneuper@1959
   175
wneuper@3881
   176
wneuper@3881
   177
\subsection{Log4j and Chainsaw}
wneuper@3881
   178
wneuper@3881
   179
Debuggers (in particular the one implemented in Eclipse) have troubles with \sisac's modules running in different (virtual) machines --- stepping through the code gets stuck in javaRMI.
wneuper@3881
   180
wneuper@3881
   181
Thus we use Log4j and Chainsaw for debugging across modules. \sisac{} uses Chainsaw's priority levels as proposed at {\tt www.vipan.com/htdocs/log4jhelp.html}: Log4j by default can log messages with five priority levels.
wneuper@3881
   182
\begin{enumerate}
wneuper@3881
   183
\item Use debug to write debugging messages which should not be printed when the application is in production.
wneuper@3881
   184
\item Info: \sisac{} uses this mode for presenting a survey on the communication between the modules.
wneuper@3881
   185
\item Use warn for warning messages which are logged to some log but the application is able to carry on without a problem.
wneuper@3881
   186
\item Use error for application error messages which are also logged to some log but, still, the application can hobble along. Such as when some administrator-supplied configuration parameter is incorrect and you fall back to using some hard-coded default value.
wneuper@3881
   187
\item Use fatal for critical messages, after logging of which the application quits abnormally. 
wneuper@3881
   188
\end{enumerate}
wneuper@3881
   189
All levels highter than {\tt debug} are in the responsibility of the \sisac-admin. Thus casual overriding the usage above must be repaired by the \sisac-member on completion of his sub-task.
wneuper@3881
   190
wneuper@3881
   191
\noindent The logger must be declared as
wneuper@3881
   192
\begin{verbatim}
wneuper@3881
   193
   private static final Logger logger = Logger.getLogger(....class.getName());
wneuper@3881
   194
\end{verbatim}
wneuper@3881
   195
wneuper@3881
   196
\noindent Each call must be guarded by the {\tt if} as in
wneuper@3881
   197
\begin{verbatim}
wneuper@3881
   198
   if (logger.isDebugEnabled())
wneuper@3881
   199
         logger.debug(.....);
wneuper@3881
   200
\end{verbatim}
wneuper@3881
   201
wneuper@3881
   202
At level {\tt info} the following abbrevations are used:
wneuper@3881
   203
wneuper@3881
   204
{\def\arraystretch{1.1}
wneuper@3881
   205
\begin{table}[h]
wneuper@3881
   206
\tabcolsep=2.3mm
wneuper@3881
   207
\begin{center}
wneuper@3881
   208
\begin{tabular}{ r | l | l}
wneuper@3881
   209
abbrevation & module/class & comment \\ \hline
wneuper@3881
   210
wneuper@3881
   211
WA & WindowApplication & \\
wneuper@3881
   212
BF & BrowserFrame      & \\
wneuper@3881
   213
WS & Worksheet         & \\   \hline
wneuper@3881
   214
   &                   & modules between gui and mathengine \\
wneuper@3881
   215
SM & SessionManager    & ? unify with SE ?\\
wneuper@3881
   216
SE & Session           & ? unify with SM ?\\
wneuper@3881
   217
UM & UserManager       & ? remove ?\\
wneuper@3881
   218
DG & DialogGuide       & superordinate concept of BD, WD -- remove ?\\
wneuper@3881
   219
BD & BrowserDialog     & \\
wneuper@3881
   220
WD & WorksheetDialog   & \\  \hline
wneuper@3881
   221
                       
wneuper@3881
   222
BR & Bridge            & \\
wneuper@3881
   223
wneuper@3881
   224
\end{tabular}
wneuper@3881
   225
\caption{Abbrevations for survey on modules in the logger}
wneuper@3881
   226
\end{center}
wneuper@3881
   227
\end{table}
wneuper@3881
   228
}
wneuper@3881
   229
The messages concerning SM\dots DG are indented 2 spaces, the BR is indented 4 spaces, WA\dots is not indented.
wneuper@3881
   230
wneuper@3881
   231
wneuper@1959
   232
\subsection{Testdriven development in SML}
wneuper@1959
   233
TODO
wneuper@1959
   234
wneuper@1959
   235
\section{The coding standards}
wneuper@1959
   236
wneuper@2257
   237
\subsection{Task tags}
wneuper@2257
   238
The following task tags are used for both, for Java and for SML.
wneuper@2257
   239
\\
wneuper@2257
   240
wneuper@2257
   241
\noindent
wneuper@2257
   242
{\tt FIX*ME} tags locations in the code where some {\em existing functionality} is established by a short-cut or a hack.
wneuper@2257
   243
\begin{itemize}
wneuper@2257
   244
\item {\tt FIXME} has low priority, i.e. the fix need not made during the sub-task (see pt.\ref{subtask} of the \sisac-charta).
wneuper@2257
   245
\item {\tt FIXXME} has normal priority, i.e. the fix should be made during the sub-task.
wneuper@2257
   246
\item {\tt FIXXXME} has high priority, i.e. the fix should be made as soon as possible.
wneuper@2257
   247
\end{itemize}
wneuper@3022
   248
{\tt FIXME}s need to be discussed at the final hand-over (see the checklist \ref{final-handover}).
wneuper@2257
   249
wneuper@2257
   250
\noindent
wneuper@2257
   251
{\tt TO*DO} tags locations in the code where some {\em functionality is missing}.
wneuper@2257
   252
\begin{itemize}
wneuper@3022
   253
\item {\tt TODO} has low priority, e.g. it is used by eclipse's code generator; the latter should be removed as soon as possible.
wneuper@2257
   254
\item {\tt TOODO} has normal priority, i.e. the fix should be made during the sub-task.
wneuper@2257
   255
\item {\tt TOOODO} has high priority, i.e. the fix should be made as soon as possible.
wneuper@2257
   256
\end{itemize}
wneuper@3022
   257
{\tt TODO}s need to be discussed at the final hand-over (see the checklist \ref{final-handover}).
wneuper@3022
   258
wneuper@2336
   259
If an author of a {\tt FIX*ME} or a {\tt TO*DO} sets the tag outside his part of responsibility to code (see pt.\ref{responsibility} of the \sisac-charta), he has to follow the coding standards pt.\ref{short-sign} on p.\pageref{short-sign}.
wneuper@2257
   260
wneuper@2336
   261
\subsection{Name tags}\label{nametags}
wneuper@3022
   262
Name tags serve {\em short} comments, see the coding standards, eg. pt.\ref{short-sign} on p.\pageref{short-sign} or \ref{bad-hack} on p.\pageref{bad-hack}.
wneuper@2336
   263
The name tags of the members of the \sisac-team are so far \dots
wneuper@2336
   264
\begin{center}
wneuper@3022
   265
\begin{tabular}{ l | l | l }
wneuper@3022
   266
name tag & username & name              \\ \hline
wneuper@3022
   267
AG       & agriesma & Andreas Griesmayer     \\ 
wneuper@3022
   268
AK       & akremp   & Alan Krempler     \\ 
wneuper@3881
   269
CR       & croppos? & Christian Ropposch \\
wneuper@3881
   270
GK       & gkompach & Georg Kompacher \\
wneuper@3881
   271
GS       & gschroet?& G\"unther Schr\"ottner \\
wneuper@3219
   272
LK       & akirchst & Alois Kirchsteiger         \\
wneuper@3022
   273
JL       & jloinig  & Johannes Loinig           \\
wneuper@3022
   274
MG       & mgold    & Matthias Goldgruber          \\
wneuper@3022
   275
MH       & mhochrei & Mario Hochreiter           \\
wneuper@3022
   276
MK       & mkoschuc & Manuel Koschuch         \\
wneuper@3022
   277
ML       & mlang    & Martin Lang          \\
wneuper@3219
   278
NC       & nsimic   & Nebojsa Simic       \\
wneuper@3022
   279
RG       & rgradisc & Richard Gradischnegg           \\
wneuper@3881
   280
RK       & rkoenig  & Robert K\"onighofer \\
wneuper@3022
   281
RL       & rlang    & Richard Lang         \\
wneuper@3022
   282
SK       &          & Stefan Karnel           \\
wneuper@3022
   283
TF       & tfink    & Thomas Fink         \\
wneuper@3022
   284
TO       & tober    & Thomas Oberhuber           \\
wneuper@3881
   285
WK       & wkandl   & Wolfgang Kandlbauer \\
wneuper@3022
   286
WN       & wneuper  & Walther Neuper         \\
wneuper@3022
   287
%       &   &           \\
wneuper@2336
   288
\end{tabular}
wneuper@2336
   289
\end{center}
wneuper@3022
   290
The username is used by the cvs versioning system.
wneuper@2257
   291
wneuper@2336
   292
\subsection{Coding standards for Java}\label{standard-java}
wneuper@1963
   293
The following closely resembles the `Dinopolis Java Coding Convention'.
wneuper@1959
   294
wneuper@1959
   295
\begin{enumerate}
wneuper@1959
   296
\item The language for code is English. This applies for all names and identifers in the code as well as for all comments.
wneuper@1959
   297
%\item The principles of simplicity, intuitivity and uniformity as described in section 1 should be followed. 
wneuper@3022
   298
\item Avoid the use of block comments (/* ... */) in the source code and use the line comments (//...) instead. This makes the source code less fragile to erroreneous deletions of code-lines and robust against the use of eclipses code-formatter. Eclipses code-formatter also badly handles //-comments if they are at the end of a long line; such comments should be {\em above} the respective line.
wneuper@1959
   299
\item If it is absolutely necessary to put comments in the code to describe algorithmic details %(see also section 1.2) 
wneuper@1959
   300
preceed the according code fragment with a comment block rather than spreading the comments across the code fragment.
wneuper@1959
   301
\item If it is absolutely necessary to clarify non-obvious code write short comments at the end of the appropriate code line. Nevertheless whenever such a comment seems necessary think twice if there is a better obvious solution that doesn't need a comment!
wneuper@3022
   302
\item\label{short-sign} In exceptional cases (e.g.\ if the author is not an active member of the \sisac-team anymore) a comment may be added to a piece of code by someone who is {\em not} the author. In this case the comment has to be marked with {\tt NNyymmdd}, where {\tt NN} follows the table in sect.\ref{nametags}.
wneuper@1963
   303
\item When describing a design pattern the name of the book which deals with this pattern should be cited (e.g.\ [Gamma et al. 1998]).
wneuper@1959
   304
\item When describing algorithms the names of the book which deals with these algorithms and datastructures should be cited (e.g.[Sedgewick 1992].
wneuper@1959
   305
\item The source code for every class (even for non-public classes) should reside in a  file of its own. The only exception to this rule are inner classes and anonymous classes as it is per definition impossible to put them in files of their own.
wneuper@1992
   306
\begin{verbatim}
wneuper@1992
   307
/*
wneuper@1992
   308
 * @author <author>, member of the ISAC-team, 
wneuper@1992
   309
 * Copyright (c) ${year} by <author>
wneuper@1992
   310
 * created ${date} ${time}
wneuper@1992
   311
 * Institute for Softwaretechnology, Graz University of Technology, Austria.
wneuper@1992
   312
 * 
wneuper@1992
   313
 * Use is subject to PGPL license terms.
wneuper@1992
   314
 */
wneuper@1992
   315
\end{verbatim}
wneuper@1992
   316
wneuper@1959
   317
\item When writing stand-alone programs the class with the {\tt main} method in it should not have anything to do with the functional part of the code. The same applies for applets: The {\tt Applet} class should not have anything to do with the functional part of the code.
wneuper@1959
   318
\item Every class should be a member of a package. Classes belonging to the default package are undesired, even for testing.
wneuper@1959
   319
\item Java import statements should be written in the following order: 
wneuper@1959
   320
  \begin{enumerate}
wneuper@1959
   321
  \item Java Core API classes.
wneuper@1959
   322
  \item Java Extension API classes.
wneuper@1959
   323
  \item Classes from third party APIs.
wneuper@1959
   324
  \item \sisac{} classes. 
wneuper@1959
   325
  \end{enumerate}
wneuper@1959
   326
To increase the readability of the import part, all imports should be sorted by package names, that means imported classes belonging to the same package can be found in consecutive lines. Between the three categories mentioned above a single blank line is recommended. Using wildcards in import statements makes updating of classes hard and should therefore be avoided.
wneuper@1963
   327
\item Classes should be preceded by a Javadoc header of the following form \footnote{Adapt eclipse: $<$Window$><$Preferences$><$Java$><$Code Style$><$Code Templates$>$ accordingly~!}:
wneuper@1959
   328
\begin{verbatim}
wneuper@1959
   329
/** 
wneuper@1959
   330
  * Description of the class in HTML format, if a useful link can
wneuper@1959
   331
  * be given in the running text do this with
wneuper@1959
   332
  * @link fully.qualified.Class#method(fully.qualified.Param)}
wneuper@1959
   333
  * @author <authorname>
wneuper@1959
   334
  * @version <version number>
wneuper@1959
   335
  * @see <fully.qualified.Classname#methodName(param-classes)>
wneuper@1959
   336
  * @deprecated <if applicable write reason here, otherwise omit
wneuper@1959
   337
  * this line>
wneuper@1959
   338
  */ 
wneuper@1959
   339
  class ExampleClass { 
wneuper@1959
   340
    ... 
wneuper@1959
   341
  }
wneuper@1959
   342
\end{verbatim}
wneuper@1959
   343
wneuper@2336
   344
\item Prefix methods by a Javadoc header of the following form, if the method is {\em not} given by an interface:
wneuper@1959
   345
\begin{verbatim}
wneuper@1959
   346
/**
wneuper@1959
   347
  * Description of the method in HTML format, if a link can
wneuper@1959
   348
  * be given in the running text do this with {@link
wneuper@1959
   349
  * fully.qualified.Classname#methodName(fully.qualified.Paramclass)}
wneuper@1959
   350
  * @param <paramname> <paramdescription>
wneuper@1959
   351
  * @return <return value>
wneuper@1959
   352
  * @exception <exception> <description when it is thrown>
wneuper@1959
   353
  * @see <fully.qualified.Classname#methodName(param-classes)>
wneuper@1959
   354
  * @deprecated <reason if applicable, otherwise omit this line>
wneuper@1959
   355
  */ 
wneuper@1959
   356
public Object myFunction(Object test_param) throws MySpecialException { 
wneuper@1959
   357
  ... 
wneuper@1959
   358
}
wneuper@1959
   359
\end{verbatim}
wneuper@2336
   360
If the method is given by an interface, the description shall {\em not} repeat the related description in the interface; use {\tt @see} and refine the related description if necessary.
wneuper@1959
   361
wneuper@1959
   362
wneuper@3022
   363
\item \label{bad-hack} If bad hacks are absolutely unavoidable for whatever reason (e.g.\ absolutely have to meet a deadline, etc..) they should be tagged by a hack-start and hack-end comment of the following form, {\tt NNyymmdd} according to coding standard no.\ref{short-sign}:
wneuper@1959
   364
\begin{verbatim}
wneuper@3022
   365
// FIXXME.NNyymmdd hack: <description of the hack>
wneuper@1959
   366
wneuper@1959
   367
 [..... the hack .....]
wneuper@1959
   368
wneuper@3022
   369
// END hack.NNyymmdd
wneuper@1959
   370
\end{verbatim}
wneuper@1959
   371
For {\tt($<$author, date$>$)} the signature described in \ref{short-sign} has to be used.
wneuper@1959
   372
wneuper@3022
   373
To facilitate a grep, the keyword FIXXME should be written in upper-case and with at least two `X's. More than two are allowed and should be used for really bad hacks - as a rule of thumb: the more `X's the word FIXXME contains the worse the hack is, up to a maximum of five `X's \footnote{Adapt eclipse: $<$Project$>$Properties$<$Java Task Tags$>$  accordingly !}. All hacks that have found their way into the code should be removed as soon as possible!
wneuper@1959
   374
wneuper@1963
   375
\item Name identifiers according to the following naming conventions \footnote{Adapt eclipse: $<$Window$><$Preferences$><$Java$><$Code Style$><$Code Templates$>$ accordingly~!}:
wneuper@1959
   376
\begin{tabbing}
wneuper@1959
   377
xxxxx\=\kill
wneuper@1959
   378
{\bf Packages}: \\
wneuper@1959
   379
\> lowercase  \\
wneuper@3022
   380
{\bf Interfaces}: \\
wneuper@3022
   381
\> {\em I} FollowedByName  \\
wneuper@1959
   382
{\bf Classes}:  \\
wneuper@1959
   383
\> AllWordsCapitalizedWithoutUnderscores \\
wneuper@1959
   384
{\bf Methods}:  \\
wneuper@1959
   385
\> firstWordLowerCaseRestCapitalizedWithoutUnderscores  \\
wneuper@1964
   386
{\bf Constants} (= finals):  \\
wneuper@1959
   387
\> ALL\_UPPER\_CASE\_WITH\_UNDERSCORES  \\
wneuper@1964
   388
{\bf Class and instance member variables}:  \\
wneuper@1961
   389
%AK041016 if you write "with trailing underscores" don't forget the trailing underscore_ ... WN danke !
wneuper@1964
   390
\> all\_lower\_case\_with\_underscores\_and\_with\_trailing\_underscore\_ \\
wneuper@1964
   391
{\bf Auto variables} (=variables used locally in methods):  \\
wneuper@1959
   392
\> all\_lower\_case\_with\_underscores  \\
wneuper@1959
   393
{\bf Exceptions}:  \\
wneuper@1959
   394
\> ClassNameEndsWithException 
wneuper@1959
   395
\end{tabbing}
wneuper@1959
   396
wneuper@1959
   397
Besides these general naming rules some special naming conventions apply:  All methods which change properties of classes should be named {\tt setXXX}. The methods returning the value of certain properties of classes can be divided into two categories: {\tt getXXX} for non-boolean properties and {\tt isXXX} for boolean values respectively. Example: 
wneuper@1959
   398
\begin{verbatim}
wneuper@1959
   399
public void setCounter(int value) {
wneuper@1959
   400
  ... 
wneuper@1959
   401
} 
wneuper@1959
   402
public int getCounter() {
wneuper@1959
   403
  ... 
wneuper@1959
   404
} 
wneuper@1959
   405
public void setReadOnly(boolean value) { 
wneuper@1959
   406
  ... 
wneuper@1959
   407
} 
wneuper@1959
   408
public boolean isReadOnly() {
wneuper@1959
   409
  ... 
wneuper@1959
   410
}
wneuper@1959
   411
\end{verbatim}
wneuper@1959
   412
wneuper@1963
   413
\item The following code structuring conventions apply \footnote{Adapt eclipse: $<$Window$><$Preferences$><$Java$><$Code Style$><$Code Formatter$>$ accordingly~!}:   
wneuper@1959
   414
  \begin{itemize}
wneuper@1959
   415
  \item Write opening curly braces at the end of the preceding code.
wneuper@1959
   416
  \item Write closing curly braces around code-blocks in lines of their own. 
wneuper@1959
   417
  \item Indent code-blocks by two spaces. Don't use tabs for indentations but use spaces instead. Only indent the code block, not the curly braces!
wneuper@1959
   418
  \item When invoking methods the opening brace always should follow the method name without any whitespaces.
wneuper@2336
   419
  \item Use the eclipse formatter each time you commit a source file.
wneuper@1959
   420
  \end{itemize}
wneuper@1959
   421
wneuper@3022
   422
\item \label{java-doc-2} java-doc is generated separately for the production-code in {\tt java} and for the test-cases in {\tt java-tests}. Thus {\em do NOT reference from java to java-tests} --- this kind of reference is implicitly documented by the naming convention which mirrors directories, files, classnames, methodnames etc., see sect.\ref{javatests}.
wneuper@1959
   423
\end{enumerate}
wneuper@1959
   424
wneuper@1959
   425
wneuper@2336
   426
\subsection{Coding standards for SML}\label{standard-sml}
wneuper@1964
   427
The following closely resembles the standards given in \cite{Paulson:91}.\\
wneuper@1964
   428
TODO
wneuper@1959
   429
wneuper@2336
   430
\section{\isac{} documents}
wneuper@2336
   431
\sisac{} as an academic project relies on the motivation, the expertise and the dedication of the members of the \sisac-team. Thus the documents are kept to an absolute minimum.
wneuper@2336
   432
\subsection{Survey on the documents}\label{survey-docs}
wneuper@2336
   433
\paragraph{All the documents} maintained in the \sisac-project are presently:
wneuper@2336
   434
\subparagraph{The \sisac{} documentation} of the system has the purpose to ease entering a new sub-task. Each member of the \sisac-team is challenged to contribute to the documentation within his or her sub-task to furtherly ease the entering of follow-up sub-tasks.
wneuper@2336
   435
\subparagraph{The \sisac-charta} contains {\em all} rules agreed upon by the members of the \sisac-team; see sect.\ref{charta} in this document.
wneuper@2336
   436
\subparagraph{The \sisac-diary} gives an account on the activities going on across the different groups (development of the front-end, of the mathematics engine, of math content, etc.) in the project .
wneuper@2336
   437
\subparagraph{The todo-list} contains tasks outside the sub-tasks defined; see the \sisac-charta pt.\ref{todolist}. Each project sometimes needs awful things to be done ;-( in order to succeed.
wneuper@2336
   438
\subparagraph{The protocols} are written for each \sisac-meeting and for points of common interest at a team-day (finally phase 2 convinced the team of the necessity of this document ;-); see the \sisac-charta pt.\ref{protocol}.
wneuper@2336
   439
\subparagraph{Add-ons to the protocols} may contain more voluminous comments on discussions, details of design considerations etc. than acceptable in the protocol. This add-on must have the same date in the filename as the protocol it is added on.
wneuper@2342
   440
\subparagraph{The work-plans} are set up separately for each sub-task. There was no need for a formalized work-plan or a project plan over several sub-tasks so far.
wneuper@2336
   441
\subparagraph{The final reports} conclude each sub-task, beeing it a seminar/project or practical part of some kind of thesis; see sect.\ref{final-reps}. They are source of major updates of the \sisac{} documentation (preferably by copy and past), and thus follow the same standards, see sect.\ref{standard-docs}
wneuper@2336
   442
\subparagraph{The work-reports} contain information important for continuing work related to a specific sub-task, if such information cannot  becovered by {\tt TO*DO}s and {\tt FIX*ME}s in the code.
wneuper@2336
   443
wneuper@2336
   444
wneuper@2336
   445
\paragraph{Administrative details on the documents:} Most of the documents require versioning, thus they are located in the cvs-repository at {\tt /isac/admin} and sub-directories included in the field 'name' of the table below.
wneuper@2336
   446
{\footnotesize
wneuper@2336
   447
\begin{center}
wneuper@2336
   448
\begin{tabular}{ l | l | l | l | l | l | l}
wneuper@2336
   449
document & occasion & author & dispatch & audience & standard & name \\\hline
wneuper@2336
   450
documen-   & sub-task finished & act.mem & \sisac-admin
wneuper@2336
   451
                & public         & documents  & {\tt ../doc/}\\
wneuper@2336
   452
\hspace{0.2cm}-tation &  &  &  &  &       &\hspace{0.2cm}{\tt isac-docu.tex}\\
wneuper@2336
   453
              &  &  &  &  &               &{\tt ../doc/}\\
wneuper@2336
   454
              &  &  &  &  &               &\hspace{0.2cm}{\tt math-eng.tex}\\
wneuper@2336
   455
\sisac-charta & start phase 3  & \sisac-admin & \sisac-admin
wneuper@2336
   456
                & public         & documents    & {\tt isac-rules.tex}\\
wneuper@2336
   457
\sisac-diary  & completion of  & act.mem.   & act.mem.  
wneuper@2336
   458
                & act.mem.s    & template     & {\tt diary/}\\
wneuper@2336
   459
              & UCs, phases etc.&  &  &  &  &\hspace{0.2cm}{\tt yymm-mm.txt}\\
wneuper@2336
   460
              & meetings,      &  &  &  &  & {\tt }\\
wneuper@2336
   461
              & changes in team,&  &  &  &  & {\tt }\\
wneuper@2336
   462
              & presentations  &  &  &  &  & {\tt }\\
wneuper@2336
   463
todo-list       & start phase 3  & \sisac-admin & \sisac-admin
wneuper@2336
   464
                & act.mem.s    & template     & {\tt TODO-list.txt} \\
wneuper@2336
   465
protocol        & meeting,       & act.mem.   & \sisac-admin
wneuper@2336
   466
                & act.mem.s    & template     & {\tt protocols/}\\
wneuper@2336
   467
              &  &  &  &  &             &\hspace{0.2cm}{\tt yymmdd.txt} \\
wneuper@2336
   468
add-on          & meeting,       & act.mem.   & act.mem.
wneuper@2336
   469
                & act.mem.s    & none         & {\tt protocols/} \\
wneuper@2336
   470
              & team-day       &  & & & &\hspace{0.2cm}{\tt yymmdd-addon.txt}\\
wneuper@2342
   471
work-plan    & start sub-task & new mem.   & \sisac-admin
wneuper@2336
   472
                & act.mem.s      & template   & {\tt projplans/NN.txt}\\
wneuper@2336
   473
final report    & sub-task       & mem.       & \sisac-admin
wneuper@3022
   474
                & act.mem.s      & documents  & {\tt ../doc/NN/}\\
wneuper@3022
   475
              &  & & supervisor &  &  & {\tt da-username.tex}\\
wneuper@2336
   476
work-report     & sub-task finished & mem     & mem.
wneuper@2336
   477
                & act.mem.s      & template   & {\tt workreports/NN.*}\\
wneuper@3022
   478
responsibility &  &  &  &  &  & {\tt code-}\\
wneuper@3022
   479
for code       &  & \sisac-admin & \sisac-admin 
wneuper@3022
   480
              & act.mem.s &  & {\tt -responsibility.txt}\\
wneuper@2336
   481
% &  &  &  &  &  & {\tt }\\
wneuper@2336
   482
\end{tabular}
wneuper@2336
   483
\end{center}
wneuper@2336
   484
}%\small
wneuper@2336
   485
A 'member' of the \sisac-team is abbreviated by 'mem' above. Templates are held in the respective directoy with the name {\tt template.*} or given by the initial entry in the respective document.
wneuper@2336
   486
wneuper@2336
   487
wneuper@2336
   488
\subsection{Standards for the documentation}\label{standard-docs}
wneuper@3022
   489
These standards hold for the \sisac{} design documents, i.e. the user requirements and the software requirements document, the architectural design and software design document, the use cases and test cases, and the final reports, see see sect.\ref{final-reps} below.
wneuper@2336
   490
wneuper@3022
   491
These documents are written in \LaTeX, which is unfamiliar with many authors; thus the standard is kept to a minimum of sophistication. The aim is to provide for easy merging (parts of) the final reports into the \sisac-docu \cite{isac:all}.
wneuper@2336
   492
wneuper@2336
   493
\subparagraph{The structure} into parts, chapters, sections is given by the \sisac-documentation. The structure of the final reports should take the same levels.
wneuper@2336
   494
wneuper@3022
   495
\subparagraph{Definitions} are already given in the file {\tt isac-docu.tex} (the definitions will be extracted into a separated file {\tt preample.tex} as soon as some details with separate compilation are solved,see '\LaTeX ing' on p.\pageref{latexing} below). In order to avoid conflicts, they {\em must all} be copied into the separate reports at the very beginning of writing~!
wneuper@2336
   496
wneuper@3022
   497
\subparagraph{Logos} i.e. \sisac{} and \isac{} are fairly primitive \LaTeX-constructs. Both require a \{\} for separating the subsequent word; \sisac{} (fixed size~!) is for use within paragraphs, \isac{} for headlines.
wneuper@3022
   498
wneuper@3022
   499
\subparagraph{User-requirements, software-requirements and use-cases} have all their respective defintions by {\tt $\backslash$newcommand} and {\tt $\backslash$newtheorem} in {\tt preamble.tex}; they {\em must} be used. How to use, just look into the isac-docu.tex files~! See also 'labels' below.
wneuper@2336
   500
\footnote{\cite{AK04:thesis} proposed more elegant definitions for them, which shall be introduced in the future.}
wneuper@2336
   501
wneuper@2336
   502
wneuper@2336
   503
\subparagraph{Labels and files-names} must be headed by the name tag of the author, see sect.\ref{nametags} on p.\pageref{nametags} --- this is by no means an elegant way of avoiding conflicts when integrating the final reports into the isac-docu.tex files, but who knows a better one~?
wneuper@2336
   504
wneuper@3022
   505
Moreover, labels of user-requirements start with {\tt UR}, software-requirements start with {\tt UR} and use-cases start with {\tt UC}. Thus a typical label is {\tt $\backslash$label\{UR.WN-short-description\}} and the respective reference {\tt UR$.\backslash$ref\{UR.WN-short-description\}} --- note the preceding {\tt UR}.
wneuper@2336
   506
wneuper@3022
   507
Files-names {\em must not} contain underscores (\_) for the (rare) cases they have to be cited within \LaTeX{} (otherwise we would have to use math-mode).
wneuper@2336
   508
wneuper@3022
   509
\subparagraph{Figures} should be generated using %the tools found at {\tt http://www.gnome.org/projects/dia} or (MH only !!!)
wneuper@3022
   510
{\tt xfig}. The source files should have the same name as the {\tt*.eps}-files generated for \LaTeX, and they both must be located in a sub-directory {\tt fig} of the root-directory of the respective report (as is with {\tt isac-docu.tex}); And these file names must start with a name tag and must not contain underscores according to 'labels and files-names' above.
wneuper@3022
   511
wneuper@3022
   512
\subparagraph{Diagrams} should be created with the tools from {\tt http://uml.sourceforge.net/index.php}. Umbrello is open-source and seems to become {\em the} up-coming tool for UML-modeling.
wneuper@2336
   513
wneuper@2336
   514
\subparagraph{Reader's marks} are used in the (rare) cases, where a member of the \sisac-team is authorized by the \sisac-admin to edit parts of the \sisac-documents directly. Then the \sisac-admin will use the following, well proven, reader's marks:
wneuper@2336
   515
\begin{verbatim}
wneuper@2336
   516
     % legend to the reader's marks:
wneuper@2336
   517
     % 
wneuper@2336
   518
     % [] the brackets enclose comments additional to, 
wneuper@2336
   519
     %    and not belonging to the text
wneuper@2336
   520
     % 
wneuper@2336
   521
     % {} the braces enclose exact proposals for new text,
wneuper@2336
   522
     %    which are embedded into comments.
wneuper@2336
   523
     % 
wneuper@2336
   524
     % /  marks a character to be deleted in the line _above_
wneuper@2336
   525
     % 
wneuper@2336
   526
     % ^  points to a certain position in the line above,
wneuper@2336
   527
     %    usually concerning a comment or an insertion
wneuper@2336
   528
\end{verbatim}
wneuper@2336
   529
The same marks are used for comments of the \sisac-admin within the final reports, if desired.
wneuper@2336
   530
wneuper@2336
   531
\subparagraph{\LaTeX ing} of the \sisac-documentation is done with {\tt 'latex isac-docu'} and {\tt 'latex math-eng'}. And each of the documents {\em must} be compiled with the \LaTeX-system actually installed at IST --- this is an indispensible prerequisite for maintainance of the documentation.
wneuper@2336
   532
wneuper@2336
   533
\label{latexing}Each part of the \sisac-documentation can be \LaTeX ed separately, the User Requirements Document by {\tt 'latex urd'} etc. This is due to a mechanism based on the file {\tt common.tex} copied from \cite{diller:latex}.
wneuper@2336
   534
wneuper@3022
   535
\subparagraph{Bib-texing} of the \sisac-documentation is done with {\tt 'bibtex isac-docu'} and {\tt 'bibtex math-eng'}. The related bib-files are the files {\tt isac/doc/bib/isac.bib} and \\{\tt isac/doc/bib/from-theses} maintained by the \sisac-admin.
wneuper@3022
   536
wneuper@3022
   537
All \sisac-related publications are in {\tt isac/doc/bib/isac.bib} (otherwise urge the \sisac-admin~!), and {\tt $\backslash$cite\{xxx\}} must use the labels {\tt xxx} already given.
wneuper@2336
   538
wneuper@2336
   539
Bib-tex files must be located in a sub-directory {\tt bib} of the root-directory of the respective report (as is with {\tt isac-docu.tex}).
wneuper@2336
   540
wneuper@2336
   541
wneuper@2336
   542
wneuper@2336
   543
wneuper@2336
   544
\subsection{Final reports}\label{final-reps}
wneuper@3022
   545
Most of the members of the \sisac-team work on sub-projects in \sisac{} within their regular studies, comprising a `Diplomarbeit' (diploma thesis), a `Software-Projekt und Bakk.-Arbeit B', a `Seminar/Projekt', or a `Praxis-Semester'. The latter usually is continued into a diploma thesis, too. Thus most of the sub-tasks end up with a final written report.
wneuper@1959
   546
wneuper@1959
   547
In the sequel there are supporting aids and rules for these reports and theses.
wneuper@1959
   548
wneuper@2336
   549
wneuper@2336
   550
\paragraph{Support for writing} the final reports is given in several ways, most of them contained in the versioning system, the CVS as checked out into {\tt isac/}. There are
wneuper@1959
   551
\begin{itemize}
wneuper@2336
   552
\item a lot of documents and papers is avaiable on \sisac s webspace {\tt www.ist.tugraz.at/projects/isac/www/content/publications.html} via download. Members of the \sisac-team obtain these papers, including \LaTeX-sources, figures etc. from the CVS at {\tt isac/doc} or directly from the \sisac-admin
wneuper@2336
   553
wneuper@2336
   554
\item in particular, surveys on \sisac{}, introductions to \sisac{}, proposals on how to locate sub-projects within \sisac{} etc. directly from the \sisac-admin
wneuper@2336
   555
wneuper@2336
   556
\item stylesheets for the reports, including the definitions of \sisac, \isac etc. in the CVS at {\tt isac/doc}.
wneuper@2336
   557
wneuper@2336
   558
\item a bib-file in the CVS at {\tt isac/doc/bib} for easy generation of bibliographies. This file is maintained by the \sisac-admin. Further bib-files can be supplied by the \sisac-admin.
wneuper@1959
   559
\end{itemize}
wneuper@1959
   560
wneuper@2336
   561
wneuper@2336
   562
wneuper@1963
   563
\paragraph{Coordination with the \sisac-documentation} is both, helpful for writing a report or thesis, and mandatory in order to keep the documentation up to date. The following rules guide the coordination.
wneuper@2336
   564
wneuper@1963
   565
\begin{enumerate}
wneuper@2336
   566
\item {\em Terms used in the \sisac-project,} as contained in an appendix of the \sisac-documentation, provide for efficiency in internal communication and for uniformity and tracability in presentation to the outside world. Thus, in particular, these terms {\em must} be used in reports and in theses.
wneuper@2336
   567
wneuper@1963
   568
\item Writing access to the \sisac-documentation in the cvs at {\tt isac/doc} is exclusively with the \sisac-admin (who may delegate certain tasks).
wneuper@2336
   569
wneuper@2336
   570
\item The {\em Requirements Document}, both the user requirements and the software requirements in the \sisac-documentation, must provide justification for all design decisions in a report. If gaps in the requirements document become apparent, they have to be filled in coordination with the \sisac-admin.
wneuper@2336
   571
wneuper@1963
   572
\item The {\em Architectural Design Document} may overlap with design considerations in a report or thesis. Respective parts of the document may be copied into the report (and cited). And if there are changes or refinements in the design, the respective parts of the report will be copied into the document in cooperation with the \sisac-admin.
wneuper@2336
   573
wneuper@1963
   574
\item The {\em Software Design Document} usually will be refined, updated and completed by parts of a report; again, these parts of the report will be copied into the document in cooperation with the \sisac-admin.
wneuper@1961
   575
wneuper@2336
   576
\item The {\em Usecases} are shifted into the code as soon as they are implemented: the practical parts of the project/seminar or the thesis are defined by functional tests according to sect.\ref{testdriven}. Nevertheless, a usecase must be referenced by the full \LaTeX-label, e.g. {\tt $\backslash$label\{SPECIFY:check\}}.
wneuper@2336
   577
wneuper@2336
   578
TODO.WN050527 after decision for/against doxygen: %In the Usecases Document the related usecases are removed, only a reference to the respective functional test is kept in a survey on usecases.
wneuper@2336
   579
%The same holds for the system views, which will be transferred into the test partitions in the code as soon as {\tt javadoc} will be replaced by {\tt doxygen}.
wneuper@2336
   580
\item If a major part is copied from a final report to the \sisac-documentation, then such a part is marked within both, in the source (the report) and in the destination (the documentation), e.g.
wneuper@2336
   581
\begin{verbatim}
wneuper@2336
   582
%WN050518---AK04:thesis.p.67-76->isac-SDD------BEGIN don't remove line
wneuper@2336
   583
%WN050518---AK04:thesis.p.67-76->isac-SDD------END don't remove line
wneuper@2336
   584
\end{verbatim}
wneuper@1959
   585
\end{enumerate}
wneuper@1959
   586
wneuper@1959
   587
wneuper@2336
   588
\section{Checklists}
wneuper@2336
   589
The first two checklists concern the begin and the end of a sub-task.
wneuper@2336
   590
wneuper@3022
   591
\subsection{Checklist for assigning a sub-task}\label{check-assign}
wneuper@2336
   592
This checklist concerns the adoption of a sub-task as defined in pt.\ref{subtask} on p.\pageref{subtask}.
wneuper@2336
   593
\begin{enumerate}
wneuper@3022
   594
\item the \sisac-admin presents the essence and the most important rules of the \sisac-charta \\{\tt www.ist.tugraz.at/projects/isac/publ/isac-rules.pdf}
wneuper@3881
   595
\item
wneuper@3881
   596
 agree on an individual access to the practice of the rules in the \sisac-charta
wneuper@3881
   597
\item receive an account at the Institute for Softwaretechnology, IST (the \sisac/admin arranges an appointment with the IST-admin).
wneuper@3881
   598
\item describe the sub-task: this usually is an interactive procedure within the team lasting for some time. Anyway, it shall be finalised within 3 weeks. The description depends on the specific sub-task and partially on the working style of the current \sisac-team. Usually the description comprises some of the following tasks:
wneuper@2336
   599
\item relate the sub-task to existing use-cases
wneuper@2336
   600
\item relate the sub-task to existing parts of the isac-docsu.tex, i.e. the actual version of \\{\tt www.ist.tugraz.at/projects/isac/publ/isac-docu.ps.gz}
wneuper@2336
   601
wneuper@2336
   602
\item assign the source-directories and files the new member is responsible for
wneuper@3022
   603
\item fix an appointment for a work-plan describing appropriate milestones for the sub-task (should be within 4 weeks in general)
wneuper@3881
   604
\item fix the type of documentation; this may be a thesis (see sect.\ref{final-reps}) or a work-report only (see sect.\ref{survey-docs}). The former is expected to be discussed with the \sisac-admin in order to ensure compatibility with the \sisac-documents; see sect.\ref{standard-docs} for standards.
wneuper@3881
   605
\item mail a personal web-page for 
wneuper@3881
   606
\\{\tt www.ist.tugraz.at/projects/isac/www/content/team.html} (should be within 4 weeks in general); the \sisac-admin copies it into the webspace.
wneuper@2336
   607
wneuper@3881
   608
\item the \sisac-admin assigns a name tag to the new member (see the table in sect.\ref{nametags})
wneuper@2342
   609
\item check if the administrative duties with the university are accomplished (enrolment for semin/project, for Bakk or Diploma thesis etc.
wneuper@2336
   610
\item introduce the new member of the \sisac-team on a \sisac-meeting (pt.\ref{meeting} on p.\pageref{meeting})
wneuper@2336
   611
\item introduce the new member to other members of the \sisac-team responsible for related sub-tasks.
wneuper@2336
   612
wneuper@2342
   613
\item hand-over the work-plan to the \sisac-admin (who approves and publishes it -- see sect.\ref{survey-docs})
wneuper@2342
   614
\item (\sisac-admin: update the web-pages, publish work-plan, announce in the isac-diary.tex)
wneuper@2336
   615
wneuper@2336
   616
\end{enumerate}
wneuper@2336
   617
wneuper@2336
   618
\subsection{Checklist for the final hand-over of a sub-task}\label{final-handover}
wneuper@2336
   619
This checklist concerns the final hand-over of a sub-task usually releasing an active member (pt.\ref{active} on p.\pageref{active}).
wneuper@2336
   620
\begin{enumerate}
wneuper@3022
   621
\item check your code, i.e. the code you are responsible for (pt.\ref{responsibility} of the \sisac-charta)
wneuper@3022
   622
  \begin{enumerate}
wneuper@3022
   623
  \item general checks
wneuper@3022
   624
    \begin{enumerate}
wneuper@3022
   625
    \item the coding standards are met
wneuper@3022
   626
    \item no warnings / errors
wneuper@3022
   627
    \item remove all obsolete {\tt FIX*ME}s and {\tt TO*DO} (and oly these~!) and comment the others
wneuper@3022
   628
    \item all outcommented code must have an extra comment indicating the reason.
wneuper@3022
   629
    \end{enumerate}
wneuper@3022
   630
  \item java-specific checks
wneuper@3022
   631
    \begin{enumerate}
wneuper@3022
   632
    \item the coding standards are met, in particular, all important classes and methods have a java-doc comment
wneuper@3022
   633
    \item java-doc compiles both, the {\tt java}-directory and the {\tt java-tests}-directory (separated following pt.\ref{java-doc-2} on p.\pageref{java-doc-2})
wneuper@3022
   634
    \item check your code via javadoc: each class and each method with a brief and relevant comment
wneuper@3022
   635
    \item remove all calls of the logger, except those with status 'fatal' which have (exclusively~!) been managed by the \sisac-admin.
wneuper@3100
   636
    \item reduce the number of {\tt System.out.println}'s to a reasonable amount of output, which might help (and not overwhelm) your successors in development.
wneuper@3022
   637
    %\item 
wneuper@3022
   638
    \end{enumerate}
wneuper@3022
   639
  \item sml-specific checks 
wneuper@3022
   640
    \begin{enumerate}
wneuper@3022
   641
    \item TODO
wneuper@3022
   642
    \end{enumerate}
wneuper@3022
   643
  \end{enumerate}
wneuper@3022
   644
\item check the usecases done or not done (and comment the latter in the (JUnit-) testcase~!)
wneuper@3097
   645
\item finialize the documentation, i.e. the final report and/or the assigned parts of the isac-docu:
wneuper@3097
   646
    \begin{enumerate}
wneuper@3097
   647
    \item check w.r.t. the standards in sect.\ref{standard-docs}
wneuper@3097
   648
    \item actually latex the report on the IST-system (indispensible for reuse of the text and the figures~!) and generate a {\tt ps}-file by {\tt dvips da-NN.dvi -o}, as an option a {\tt pdf}-file additionally (which causes additional effort with the figures, in general).
wneuper@3097
   649
    \item hand over the sources to the \sisac-admin for publication and/or for integration into the \sisac-docu.
wneuper@3097
   650
    \end{enumerate}
wneuper@3022
   651
\item finish your work-plan to your sub-task, see sect.\ref{survey-docs}.
wneuper@3022
   652
\item make an appointment with the \sisac-admin and discuss ...
wneuper@3022
   653
  \begin{enumerate}
wneuper@3022
   654
  \item the work-plan
wneuper@3022
   655
  \item specific points in your code
wneuper@3022
   656
  \item each {\tt FIX*ME} within your code
wneuper@3022
   657
  \item each {\tt TO*DO} in this code
wneuper@3022
   658
  \item the test-cases
wneuper@3022
   659
  \item the final-report
wneuper@3022
   660
  \end{enumerate}
wneuper@3022
   661
  This meeting may take more than one appointment.
wneuper@2345
   662
\item discuss the most important points from above at a team-day (pt.\ref{day} on p.\pageref{day}) or at an isac-meeting (pt.\ref{meeting} on p.\pageref{meeting}).
wneuper@3022
   663
\item optionally deposit a final work-report (see sect.\ref{survey-docs}) on the sub-task, on experiences with the \sisac-team etc.
wneuper@2345
   664
\item if you are also a member of TU Graz, ask the \sisac-admin to arrange an appointment for giving a presentation at an IST-meeting.
wneuper@2336
   665
wneuper@2345
   666
\item return the keys, books, cables etc. you have from the IST.
wneuper@3022
   667
\item say goodbye at a team-day or at an \sisac-meeting.
wneuper@2336
   668
\end{enumerate}
wneuper@2336
   669
wneuper@2336
   670
wneuper@3843
   671
\bibliography{bib/isac,bib/from-theses,bib/math-eng}
wneuper@1959
   672
\end{document}