\documentclass[12pt,draft,a4paper,titlepage]{article}
% \usepackage{ccfonts}
\usepackage{moreverb}
\title{\textsf{newuserfs}\\Software Project Management Plan}
\author{Martin Pool 9405765 \hspace{1cm}\texttt{mbp@samba.org}}

\begin{document}
\pagenumbering{roman}
\maketitle

\newpage
\section*{Change history}
\addcontentsline{toc}{section}{Change history}
\begin{table}[h]
\begin{tabular}[t]{llp{9cm}}
\textbf{v1.1} & 2/10/2001 & Start structuring project plan from
notes. \\
\textbf{v1.2} & 3/10/2001 & (not released) \\
\textbf{v1.3} & 7/10/2001 & 
Restructured to comply with IEEE Std 1058--1998. \\
\textbf{v1.4} & 7/10/2001 & More content added. \\
\textbf{v1.5} & 7/10/2001 & More content added. \\
\textbf{v1.6} & 8/10/2001 & First publicly released version, 
submitted for ANU ENGN3221 project management assignment. \\
\end{tabular}
\end{table}


\newpage
\addcontentsline{toc}{section}{Table of Contents}
\tableofcontents

%\newpage
%\addcontentsline{toc}{section}{List of Tables}
%\listoftables


% \pagestyle{headings}
\newpage
\pagenumbering{arabic}



\section*{Executive Summary}
\addcontentsline{toc}{section}{Executive Summary}

% one page for this section

% what is the project.  highlights of plan.  who is involved?  when
% started/when finished?


% I should be able to read this summary and have a vision of your
% plan, the details of which are in the body of the report.

This plan relates to the implementation of a system software project
called \textsf{newuserfs}.  The software provides a new framework for
writing filesystem modules for Linux that will enhance functionality
and ease development of new features.

This is a single-person project of considerable technical difficulty
but relatively constrained scope.  Estimated total effort is 40--120
hours.  Implementation and planning started in parallel in early
August of 2001.  An initial working version 0.5 will be demonstrated
in mid October, 2001.

The challenge in this project is that there are substantial technical
risks, hard deadlines, and only a single available developer.

The purpose of this plan is to address these risks by predicting an
appropriate set of functionality that can be delivered at high quality
by the relevant deadlines.

There are three important motivations which drive the requirements,
structure, and resourcing of this project:

\begin{enumerate}

\item To learn about preparation of an IEEE Std 1058--1998 software
project management plan and about the Linux filesystem implementation.

\item To contribute a useful tool to the Linux community, both in
working code and in a conference paper.

\item To gain credit towards COMP3300 and ENGN3221 subjects.

\end{enumerate}

Leaving subject requirements aside, the requirements are at the
discretion of the developer.

This documented is intended to comply with IEEE Std 1058--1998,
\textit{IEEE Standard for Software Project Management
Plans}\cite{1058}.  A number of sections such as 
\textsl{\ref{staffing_plan} Staffing plan}
are present because they are required by IEEE 1058, although for this
project there is not much to say about them.  The plan is somewhat
compressed to fit in the ENGN3221 page limit.


\newpage
% six pages for the remainder of the plan
\section{Overview}
\subsection{Project summary}
\subsubsection{Purpose, scope and objectives}

%[Explain requirements at a level of detail high enough that a person
%not experienced in software would understand them.]

\textsf{newuserfs} enhances the flexibility of the Linux\texttrademark{}
kernel software, allowing new features to be developed and deployed
much more effectively.

A computer operating system is divided into a software
\textit{kernel}, closely coupled to the machine, and other software,
called \textit{userspace} software on Linux.  The kernel underlies and
supports all other software used on the computer.

Amongst other functions, the kernel provides a filesystem abstraction.
Implementing new filesystems is an attractive way to extend operating
system functionality into such areas as version control or transparent
network access.  However because the kernel works at a low level of
abstraction development is more difficult and slow than in userspace.

\textsf{newuserfs} exports the kernel filesystem programming
interface to a \textit{server} program running in userspace.  


\subsubsection{Assumptions and constraints}

Because several aspects of this project are to be submitted for
academic credit there are hard external deadlines, summarized in
Appendix~\ref{deadlines} on page~\pageref{deadlines}.

The most important constraint on implementation of \textsf{newuserfs}
is that it is to be implemented by a single programmer who is not
working on it full time.

Schedule and functionality are somewhat flexible to allow for limited
labour.  The only hard constraint with respect to schedule is that
documentation must be submitted by the due dates.



\subsubsection{Project deliverables}

Mandatory deliverables for this project are course requirements
for ENGN\-3221 and COMP3300, as detailed on pages~\pageref{deadlines} and
\pageref{deliverables}.  These include a technical proposal and
semi-technical project management plan, a poster and presentation.

Other deliverables are desirable but not required, and will evolve
depending on technical progress and comments from peer reviewers.
If \textsf{newuserfs} is received well, a conference paper and user's
manual may become objectives.


\subsubsection{Schedule and budget summary}

Since this project is developed for academic credit rather than
commercially, there is no explicit budget.  Incidental expenses are
estimated in Appendix~\ref{budget} at under \$100.

% [list top-level activities, and link to the WBS.]


\subsection{Evolution of the plan}

The SPMP will be updated at intervals to track progress.  The current
version	is always available from the project home page, and older
versions are under configuration management in CVS.


\section{References}

Broad requirements for this project are set by COMP3300 and
ENGN3221 material\cite{comp3300-a2}.

The \textsf{newuserfs} home page at 
\texttt{http://etc.samba.org/newuserfs/} provides source code, documentation
and links to other resources.


\section{Definitions}

%[define or provide references to documents containing the definition
%of all terms and acronyms required.]

For more detailed explanation of technical terms used in this document
consult the \textsf{newuserfs} home page\cite{homepage}.


\section{Project organization}

\subsection{External interfaces}

The course coordinators for COMP3300 and ENGN3221 are customers for
project documentation deliverables, although unusually they will not
use the delivered source code.

The Linux community as a whole is the potential end-customer for the
software.  


\subsection{Internal structure}

There is only a single developer for this project.  The Samba Software
Foundation sponsors development of the project by providing hosting of
development servers.


\subsection{Roles and responsibilities}

There is only a single developer and manager for this project, Martin
Pool.  Responsibilities include project definition and planning,
design and development, and documentation and promotion.


\section{Managerial process plans}
\subsection{Start-up plan}
\subsubsection{Estimation plan}

Effort estimates are shown in the work breakdown in
Appendix~\ref{wbs}.  The breakdown is based on the initial
architecture, on external constraints, and on research into similar
projects.  Estimates are based on the number of lines in similar
projects, and personal experience on similar projects and on the
prototypes of this project.  Milestones and tasks have been chosen to
be of approximately equal size.

\subsubsection{Staffing plan}
\label{staffing_plan}

A single engineer, Martin Pool, is working on this project.

\subsubsection{Resource acquisition plan}

Approval to use Samba Software Foundation resources for this project
has already been obtained.  This includes hosting for the project web
site and CVS repository.


\subsubsection{Project staff training plan}

This project comprises a training exercise in both kernel development
and software project management.

Technical education will draw upon published documentation about the
kernel filesystem interface.  In addition a number of experienced
kernel developers will act as volunteer mentors, providing early
feedback on design approaches, including Daniel Phillips and Paul
Russell. \label{mentors}


\subsection{Work plan}
\subsubsection{Work activities}

Appendix~\ref{wbs} on page~\pageref{wbs} presents a task-oriented work
breakdown.  The milestone schedule in Appendix~\ref{milestones} groups
together different functional tasks into chronological order.


\subsubsection{Schedule allocation}

Leaving aside delivery deadlines, work from different activities can
proceed in parallel.  After an initial planning, design, and
feasibility check process, it is planned to progress development,
testing and documentation on different areas of functionality in turn,
directed by milestones.

\subsubsection{Resource allocation} % 5.2.3

There are no significant resource allocations for this project apart
from staff time.


\subsubsection{Budget allocation}

Predictions for the minor financial costs of this project are stated
in Appendix~\ref{budget} on page~\pageref{budget}.  


\subsection{Control plan}

\subsubsection{Requirements control plan}

There is no formal requirements control plan.  Development is directed
towards the requirements specified in the proposal
document\cite{progress}, but can be varied as the problem is better
understood.

\subsubsection{Schedule control plan}

Since the project deadlines are very firm, milestone scope will be
adjusted towards a self-consistent and stable software build before
each delivery.  

\subsubsection{Budget control plan}

Not relevant to this project.

\subsubsection{Quality control plan}

See section~\ref{qa_plan}.


\subsubsection{Reporting plan}

No formal reporting is required for this project.  The web page will
contain regular progress information.

\subsubsection{Metrics collection plan}

Formal metrics will not be used on this project. (However see
\ref{process_improvement} for plans for staff development.)


\subsection{Risk management plan}

Known risks to successful and on-time completion of this project are
listed in Appendix~\ref{risks}.


\subsection{Closeout plan}  % 5.5

Continuation after completion of the immediate deliverables will
depend on responses from peer reviews and the development community at
large.  There are no concrete plans for closeout at this point.



\section{Technical process plans}

\subsection{Process model}

Development will follow an incremental, milestone-driven method.  Each
milestone should be reached with a consistent and useful set of
functionality, test cases for implemented functions, and reasonable
confidence in code coverage.



\subsection{Methods, tools, and techniques}

\textsf{newuserfs} will be implemented primarily in C.  Libraries to
write servers in scripting languages such as Perl, Python or Java will
be considered.

%The \textit{User-Mode Linux} virtual machine system\cite{uml} will be
%investigated as a development platform.  It may provide faster
%turnaround time during debugging, since it allows a debugger to be
%directly attached to a running kernel.


\subsection{Product acceptance plan}

Beyond internal quality checks there are no acceptance criteria at
this point.


\section{Supporting process plans}

\subsection{Configuration management plan}
All source code and documentation is controlled by the CVS
configuration management system at
\texttt{cvs.samba.org}\cite{cvsbook,homepage}.


\subsection{Verification and validation plan}

Explicit V\&V is not planned for this project because of the organic
nature of the requirements.


\subsection{Documentation plan}

Documentation includes the deliverables specified on
page~\pageref{deliverables}, plus informal design documentation on the
web site.

\subsection{Quality assurance plan}
\label{qa_plan}
The primary QA method for this project is a test suite to be developed
in parallel with product functionality.  The architecture makes it
relatively straightforward to ensure all code is covered by a test case.



\subsection{Reviews and audits}

Peer review will be provided by the mentors mentioned on
page~\pageref{mentors}.

\subsection{Problem resolution plan}
A problem resolution system will be determined closer to project
release.  If the project is publicly adopted then problem reporting
and resolution will be managed through the SourceForge.net or Samba
systems.

\subsection{Subcontractor management plan}
No subcontractors are used on this project.

\subsection{Process improvement plan}
\label{process_improvement}

Project management documentation and a development journal will be
maintained through the project, and examined to identify excessive
rework or opportunities for better process.


\section{Additional plans}

No other plans are specified for this project.


\newpage
\begin{thebibliography}{99}
\begin{raggedright}

\bibitem{cvsbook}  Moshe Bar, Karl Franz Fogel.
\textit{Open Source Development with CVS.}
The Coriolis Group.  1999.

\bibitem{1058}  IEEE Std 1058--1998: \textit{IEEE Standard for
Software Project Management Plans}.  The Institute of Electrical and
Electronics Engineers, Inc.  1998.

\bibitem{CodeComplete} Steve McConnell.  \textit{Code Complete: A
Practical Handbook of Software Construction.}  Microsoft Press.  1993.

\bibitem{Dynamics} Jim McCarthy.  
\textit{Dynamics of Software Development}.  
Microsoft Press.
1995.

\bibitem{psych}
  Gerald M. Weinberg. 
  \textit{The Psychology of Computer Programming.}
  Van Nostrand Reinhold.  1971.

\bibitem{dse}
  Watts S. Humphrey.
  \textit{A Discipline for Software Engineering.}
  Addison-Wesley.  1995.

\bibitem{Farthing} Dave W. Farthing.  \textit{Notes on Software
Project Management.}  University of Glamorgan.  1999.  
\textsf{http://www.comp.glam.ac.uk/Teaching/projectmanagement/}

\bibitem{homepage} Martin Pool.
\textit{\textsf{newuserfs} home page.}
\textsf{http://etc.samba.org/newuserfs/}

\bibitem{progress} Martin Pool.
\textit{\textsf{newuserfs} Proposal and Progress Paper.}
\textsf{http://etc.samba.org/newuserfs/doc/progress/progress.pdf}

\bibitem{comp3300-a2} Eric McCreath.
\textit{ANU COMP3300 Assignment 2 Specification.} 4~September 2001.
\textsf{http://cs.anu.edu.au/Student/comp3300/ass2.html} 

\bibitem{uml} \textit{The User-Mode Linux Home Page.}
\textsf{http://user-mode-linux.sourceforge.net/}

\end{raggedright}
\end{thebibliography}




\newpage
\appendix

\section{Work breakdown structure}
\label{wbs}

The WBS should be read in conjunction with Appendix~\ref{milestones},
which shows the ordering of technical tasks into milestone units.

\begin{table}[h]
\begin{center}
\begin{tabular}{lcl}
\hline ID & Expected days & Description \\
\hline
T0 & & \textbf{Planning} \\
T0.0 & 1.0 & Set scope, assess feasibility \\
& 1.0 & \textbf{Total}\\
\hline
T1 & & \textbf{Design and development} \\
T1.0 & 2.5 & Review previous work \\
T1.1 & 1.0 & Architectural design \\
T1.2 & 2.5 & Peer review design \\
T1.3 & 1.0 & IPC protocol \\
T1.4 & 1.0 & Server framework \\
T1.5 & 1.0 & Filesystem framework \\
T1.6 & 1.0 & i-node management \\
T1.7 & 1.0 & M2 file operations \\
T1.8 & 1.0 & M3 file operations \\
& 12.0 & \textbf{Total}\\
\hline
T2 & & \textbf{Testing} \\
T2.0 & 1.0 & Test framework \\
T2.1 & 1.0 & M2 file tests \\
T2.2 & 1.0 & M3 file tests \\
& 3.0 & \textbf{Total}\\
\hline
T3 & & \textbf{Documentation} \\
T3.0 & 2.0 & Progress/proposal document \\
T3.1 & 3.0 & Plan document \\
T3.2 & 2.0 & Prepare poster and presentation \\
& 7.0 & \textbf{Total} \\
\hline
& 23.0 & \textbf{\underline{Grand Total}} \\
\hline
\end{tabular}
\end{center}
\end{table}



\newpage
\section{External schedule constraints}
\label{deadlines}
\begin{table}[h]
\begin{raggedright}
\begin{tabular}[t]{rp{8.5cm}}

\textbf{2/10/2001} & COMP3300 progress and proposal paper. \\

\textbf{8/10/2001} & ENGN3221 project plan assignment: deliver
\textsf{newuserfs} Software Project Management Plan. \\

\textbf{16/10/2001} & COMP3300 poster and demonstration: deliver code
version 0.5 and test suites, and poster. \\

\end{tabular}
\end{raggedright}
\end{table}



\newpage
\section{Deliverables}
\label{deliverables}

\subsection{Mandatory deliverables}

\begin{itemize}

  \item Single-page proposal/progress paper for COMP3300 outlining
intended functionality and architecture.

  \item Software Project Management Plan for ENGN3221.  Should comply
  with IEEE Std 1058--1998 if possible, limited to one summary page
  and six body pages.

  \item Working code implementing at least the functionality of
  milestone M2 (page~\pageref{milestones}), including both the general
  framework and specific sample implementations.

  \item A poster and  live demonstration for COMP3300.   The
  presentation should last about five minutes, and demonstrate the most
  interesting and attractive implementation features and functions of newuserfs.

\end{itemize}

\subsection{Desirable deliverables}

\begin{itemize}
  \item  A web site describing the project and linking to source code,
documentation and other resources.

  \item A conference paper describing the project targeted at a forum
  such as \texttt{linux.conf.au} or the Ottawa Linux Symposium.

\end{itemize}




\newpage
\section{Milestones}
\label{milestones}

Development milestones\cite{CodeComplete,Dynamics} relate only to
program functionality, and indicate a rough order of dependency and
priority.  Milestones primarily indicate code completion, but also
depend upon requirements analysis, research, design, and
documentation.  

The work for each milestone includes construction of appropriate tests
to verify operation, and peer review of the design.  Milestone
completion implies test completion and confidence in test coverage.

\begin{description}

\item[M0] \textit{Framework and zero function}: A kernel module
\texttt{userfs.o} can be compiled and installed into the kernel.

\item[M1] \textit{Filesystem mounts}: The filesystem can be installed
into the kernel and mounted, and the userspace server is started and
serves requests.  The mounted filesystem has a root directory, though
perhaps no other content.

\item[M2] \textit{Basic directory operations}: Using a userspace
ramdisk server, can create, list, and remove directories.

\texttt{mkdir} is the first file-creating operation to be implemented
because it takes only a filename as a parameter and no other
information.  Therefore it is the simplest directory-modifying
operation and will serve to verify operation of the framework.

\item[M3] \textit{Basic file operations}: Regular files can be
created, read and written.  Sample userspace servers store the data
either in redirection to another directory, or to in-memory data
structures.

\item[M4] \textit{Solid error handling}: Sample userspace servers are
enhanced to return error codes at various points during operation, to
test that the kernel handles these errors correctly.  The kernel
should cope if the userspace server terminates unexpectedly.

\item[M5] \textit{Complete file operations}: Implement remaining basic
file operations, including \texttt{rename}, \texttt{stat},
\texttt{symlink}.

\item[M6] \textit{Locking operations}: Support locking of whole files,
or record ranges within a file.  Cause processes to block properly
when waiting for locks.  Possibly arrange a way for the server to call
back into the kernel to indicate that a resource has become available.

\end{description}


\newpage
\section{Known risks}
\label{risks}
\begin{description}
\item[R0] Technical risks:

\begin{description}
  \item[R0.0] Concurrency bugs causing deadlock or liveness problems, caused
  by the kernel blocking on a userspace process.  This may cause the
  system to be unreliable.  It is hard to analyze the risk without
  completing a substantial fraction of the research.
  
  \item[R0.1] Unclassified bugs, possibly causing an unsuccessful
  demonstration.  The most likely cause is suspected to be
  misunderstand of the kernel filesystem programming interface.  This
  risk will be addressed by peer review and system testing, and
  secondarily by adhering closely to a well-tested script during the
  demonstration.

\end{description}


\item[R1] Resource risks:
\begin{description}

  \item[R1.0] Insufficient time to work on \textsf{newuserfs} because of
  competing commitments.

  \item[R1.1] Unavailability of technical resources, for example because of
  network or hardware failure on the CVS server or web server.
  Possibly inconvenient, but not likely to substantially impact the
  project because backup copies are kept and other machines are available.
  
\end{description}

\item[R2] Customer risks:
\begin{description}

  \item[R2.0] Project management documentation not satisfactory.  This
  pro\-ject is different from some of the others specified for this
  assignment, and so the management plan may not address the
  requirements sufficiently.  Addressed by communicating with course
  coordinators.

  \item[R2.1] Project is obsolete before release because of competing
  work: there are other projects in this area that are documented on
  the \textsf{new\-user\-fs} web page.  None are currently as
  promising as \textsf{newuserfs}, however others may emerge before
  this project is complete.  This would not directly interfere with
  completion of the project, but its impact would be reduced if it
  duplicated existing work.

\end{description}

\end{description}



\newpage
\section{Budget}
\label{budget}
\begin{table}[h]
\begin{center}
\begin{tabular}{lr}
  Printing costs & \$5 \\
  Poster stationery & \$20 \\
  Phone calls, etc & \$10 \\
  Miscellaneous (20\%) & \$7 \\
  \textbf{Total} & $\overline{\underline{\$42}}$
\end{tabular}
\end{center}
%\caption{Estimated budget}
\end{table}


\end{document}
