--- 03/assignment3.tex	2004/01/09 16:38:28	1.4
+++ 03/assignment3.tex	2004/01/16 17:28:11	1.5
@@ -20,29 +20,356 @@
   \tableofcontents
   \newpage
   \pagenumbering{arabic}
+  \section{Introduction}
+    It is far to common that companies working with software
+    development are drawing over the proposed budget (ether in
+    time and or resources). It is also to common that software
+    projects are being terminated since there is no result coming
+    from them.
+
+    The Company has decided that it should do something to make
+    itself not do those things, and also to be able to show
+    potential clients that they will be able to succeed. This is
+    why the Company has decided that it should meet level 2 of the
+    CMM (Capability Maturity Model) the so called repeatable
+    level. The aim of that is to be able to repeat successes from
+    before by reusing successful methods etc.
+
+    Also some customers can require that the companies they hire
+    have CMM gradings so that they can know that they will get
+    what they ordered, on time and target (the cost that would
+    be).
+  \section{The company so far (a.k.a. assumptions)}
+    \begin{itemize}
+      \item The company has been using CVS for the source-code for
+      some time now, mainly to be able to A) have a safe copy (the
+      CVS server is using raid system to make certain that even a
+      disk malfunction wont destroy the code that has been made so
+      far and B) to be able to go back to older code if there is a
+      need for that.
+      \item The company is currently developing in C/C++.
+      \item The company has had its requirements centered around
+      use cases so far.
+      \item The company has agreed to send all its project
+      managers to a course in software metrics so that they all
+      will speak the same language.
+    \end{itemize}
   \section{Goals of the metric program}
     \label{goals}
-    The goals of this metric program are: (Expand these)
+    The goals of this metric program are: %(Expand these)
     \begin{itemize}
-      \item Track project progress (project planning, project tracking)
-      \item Make project development less chaotic and more structured
-      \item Not to make the same mistakes twice
-      \item Do measurements so that they are reusable for estimations in the next project
+      \item To be able to make better estimates (more accurate)
+       for the customer and the management.
+      \item Track project progress (project planning, project
+      tracking).
+      \item Make project development less chaotic and more
+      structured.
+      \item Not to make the same mistakes twice and to be able to understand why certain projects are
+      successful, and be able to repeat the successes on other
+      projects.
+      \item Do measurements so that they are reusable for estimations in the next
+      project.
+      \item To be able to make high quality software.
+      \item To introduce Software Configuration Management in the
+      software development process.
     \end{itemize}
   \section{Achieving the goals}
-    To achieve the goals presented in Section \ref{goals} we have come up with the following plans:
+    To achieve the goals presented in Section \ref{goals} we have
+     come up with the following plans:
+    \subsection{To be able to make better (more accurate)
+    estimations for the customer and the management}
+      In order to get the confidence from the customer and the
+      management there it is important to make good and accurate
+      estimates on the project both before and during the phases
+      of the project. If we can get confidence in our estimates
+      from the customers they will choose us before a company that
+      often (or always) makes bad estimations.
+
+      The way to get the best numbers is to know the
+      exact time it took. Since the development of
+      time machines still have far to go we cannot know the time
+      for this project before it is finished, but we can look at
+      similar projects (or parts of) and se how long they took. If
+      we know how long time a similar project took, then we can
+      make an estimation that this will take about the same time
+      (or less of the time of the old project included training
+      and or innovations, given that the same persons work on
+      this, or have documented their solution). How to do this is
+      discussed in section \ref{reusable metrics}
     \subsection{Tracking project progress}
-      To track the projects progress we need to collect the metrics for ... and for ...
-  \section{Where and when?}
-    My place or yours?
+      While it is of little importance for the CMM level 2, this
+      has some importance. For the CMM it would be sufficient to
+      at the end of the project se what the real time of the
+      activities and the project (at the end of the project).
+
+      However if we do track the progress while working on the
+      project it is possible to se deviations as they appear and
+      to be able to act at soon as the deviation is found. Actions
+      could be to call in more/less people/resources, renegotiate
+      with the customer or other things. Also it is good to be
+      able to answer both the customer and the management
+      truthfully wether the project is on plan or not (if it looks
+      like it will be able to finish the project in time).
+    \subsection{Make project development less chaotic and more
+    structured}
+      Far to many companies in this industry have problems making
+      good (time) plans for their projects. If the plan gives to much
+      time to a team for a project that is not a big problem, but
+      if the situation is the opposite there is a problem. To be
+      able to deliver in time this project group must hire
+      additional resources (if possible), or work more and harder
+      to be ready on time - or they will not meat the deadline set
+      for the project. While this don't have a big impact on the
+      team if it happens only once - it will have a devastating
+      effect on the teams members if it is repeated. Far to many
+      people in this business has ``hit the wall'' due to massive
+      and repeated overwork.
+
+      The better the plans are, the less likely it is to fail.
+      Also with good followup on the plan errors in it can be
+      detected as soon as possible, (hopefully) giving more time
+      to correct the error.
+    \subsection{Not to make the same mistakes twice and to be
+    able to understand why certain projects are successful, and
+    be able to repeat the successes on other projects}
+      The CMM level 2 is also called the repeatable level, since
+      its primary goal is to be able to repeat successes. This
+      means that both the successful methods used (those that gave
+      a good result) needs to be documented so that these can be
+      used again - also one must document (and this might even be
+      more important) the methods that did not work and why so
+      that this mistake don't have to happen again. Also since
+      documents on successful and unsuccessful methods are
+      available it is important that these are studied before
+      choosing the method to use for a new project. This study
+      should be made before the project development planning is
+      even begun.
+
+      However to be able to use this data is must first be
+      collected. This should be done after the project is
+      completed (or the method is exchanged for a now one). Data
+      collected should include the name of the method (if it has
+      one), a description of it, if it was easy to learn and use,
+      if it was good or bad and a motivation why. Also the
+      document should include the project number, so that it is
+      possible to track down the document to a project. It is the
+      project manager that is responsible for that the data is
+      collected and stored in the correct repository (see the
+      document useful resources on the intranet), however the
+      project manager is encouraged to include as many as possible
+      from the project for this.
+    \subsection{Do measurements so that they are reusable for
+     estimations in the next project}
+     \label{reusable metrics}
+       As have been discussed earlier a real value is better than
+       an estimated - therefor it is important to after the
+       project is finished collect metrics (real values) for the
+       different parts of the project. All the metrics should
+       contain descriptions of what is measured, how and by whom.
+       Once that data has been collected it should be stored in the
+       correct repository (see the document useful resources on the
+       intranet) in order to be usable by others.
+
+       It is important that what is measured is relevant, and that
+       all the relevant data is collected. It is of no real
+       interest in how much caffeine was consumed while it is of
+       great interest to know how long it took to program and test
+       one use case. Also the project manager should take time to
+       think about what metrics he (or she) was missing at the
+       beginning of the project.
+
+       In section \ref{tools} there are a couple of tools that can
+       be used for this. The tool we suggest makes the measurements
+       on the code by it self.
+
+       Parts that had large deviations between estimated and real
+       values should be collected. Now it is important to show the
+       estimated value, the real, the task and the reason for the
+       deviation. This data is collected in order to understand
+       why estimations deviate from reality and to try and
+       understand how to minimize the deviations.
+     \subsection{To be able to make high quality software}
+        Software quality should not simply be seen as how well the
+        software conforms with the requirements, but also how
+        usable it is, how learnable it is and how well it has
+        found the requirements that were not in the requirements
+        specification (it is most unusual that the actual end-user
+        is making the requirements, it is more often someone
+        higher up in the hierarchy that makes the requirements).
+
+        This does imply it is hard to make high quality software,
+        something that could be true - thou there is help to be
+        found. The simplest way is to ask of the customer to be
+        allowed to talk to one or several of the real end-users
+        while in the phase of collecting requirements. If this is
+        not possible then the team gathering the requirements must
+        think of what is not in the requirements from the
+        customer. It might help to bring in someone that is close
+        to the real end-user in this phase (someone with similar
+        knowledge and work tasks as the end-user), and let he or
+        she think about the system and how it will be used.
+
+        Also in the testing phase it is important not only to make
+        certain that the requirements are fulfilled, but also that
+        the system is usable and that there is nothing that is
+        missing in the system. Also it is important to think about
+        human computer interaction questions when developing (and
+        testing) the system. A system that has all the
+        functionality is of no use if the end-user cannot use it.
+        Once again it is needed to bring in a end-user (or as
+        close as possible) to ensure that the system has all the
+        parts that is needed to operate it.
+     \subsection{To introduce Software Configuration Management in
+     the software development process}
+       Software Configuration Management (or SCM) is far more then simply
+       using a version control system for the source code, thou
+       that is a part of it. SCM can be divided into 4 main
+       elements. These are:
+       \begin{enumerate}
+         \item Version control
+         \item Build Management
+         \item Release Management
+         %\item Process Control
+       \end{enumerate}
+       \subsubsection {Version control}
+         The version control is to keep track of the changes in a
+         file over time. It should be able to see old versions of
+         files (and look at them), se who made the changes, when
+         and why. Fortunately CVS has all that is needed for this
+         element, so all that is needed is that it should be used
+         on the project.
+       \subsubsection {Build Management}
+         www.webopedia.com defines a build as \emph{``A version of
+         a software program. The term i usually used in reference
+         to a program that is still in development.''}
+
+         Builds can be made manually, or using tools (whatever
+         your team feels best with). A build is most often used to
+         test part of (or the whole) system. If the team is making
+         the builds by hand it is important to keep track of what
+         files are in the build (and the versions) and how the
+         build was created (compiler options etc). This can be
+         used later on to debug the build.
+       \subsubsection {Release Management}
+         A release is a build, only that the files in the release
+         has been tested before. A release is what is given to the
+         customer to evaluate (while development is still in
+         progress), or to be used (once the program is completed).
+       %\subsubsection {Process Control}
+  \section{Where and when in the software development process
+  should the measurements be conducted?}
+    The measurements should be conducted just after the project,
+    when there is no deadline left and yet all is still freshly in
+    the minds of all that were involved in the project. Also this
+    is a great time to have the team that has been making the
+    program ``talk off'' about it. To talk about what went well
+    and what went bad, why and how to avoid it in the future.
   \section{Who should measure and collect}
-    Mom?
+    The project manager is the person that is responsible for that
+    the metrics that should be collected is collected. However it
+    is not necessary that it is the project manager that actually
+    collects the data. It is however important that the job of
+    collecting metrics has knowledge of metrics, how to collect,
+    what is needed to be collected etc (if there is a need to
+    train one or more on the metrics, consult the training manual
+    on the intranet).
+
+    Once the data has been collected it should
+    be handed over to the metric responsible according to the
+    document useful resources for instructions on both how to
+    contribute with the new data and how to find old data from
+    other projects.
   \section{How to store the data}
-    In a plastic cup
+    All the data should be stored in electronic documents in the
+    document repository. The ordinary standard for documents
+    should be used. Once a template has been completed for the
+    metrics gathering document, this will be on the intranet.
+
+    (The repository is accessible by all in the company via the
+    intranet. The document repository resides on the same server
+    as the CVS does.)
   \section{Feasibility analysis}
-    Feasiwho?
+    This program has been mainly based on things the company knows
+    of already, however some training in metrics will be necessary
+    for at least the project managers. Also document templates will
+    be needed to be made.
+
+    The templates are important here, and needs to be done as soon
+    as possible and since they are to be used a lot - it is
+    recommended to hire one or several metrics experts to make
+    them in a wa that all important data is in there (both for
+    this program and for instance for the economical people or
+    anybody else that could have fun with metrics). It is also
+    recommended that this (these) people make the training for the
+    personal that needs it.
   \section{Common problems}
-    Headache
+    Common problems that could make an metrics implementation to
+    fail includes (and ways to overcome them):
+
+    Inexperience. If the people making the metrics implementation
+    have little or non experience in how metrics work (real work
+    experience now, not only theoretical knowledge) then they can
+    not focus on the parts that are important. Also theory and
+    practice differs in many ways. Without experience it is to
+    hard to focus on the meaningful metrics and not get stuck in
+    those not important for this company (group whatever).
+    Also it is a lot easier to tell
+    people out of own experience why things are important, not
+    simply since it says so in a book. This is being helped by
+    getting real experience before making an implementation.
+
+    If the company doesn't make people understand that the metrics
+    implementation is to help the teams and the company make
+    better products, then if the workers beliefs that the metrics
+    implementation is being done ether to cut down the staff, or
+    because they are making bad results and want to be able to
+    find the person(s) responsible. If this is happening, then the
+    workers might feed faulty data to the metrics, or try to
+    sabotage it - then the metrics implementation will fail. This
+    is avoided by making certain that everybody understands that
+    this is being done to help them in there work, nothing else.
+
+    To have the implementation badly documented or not to back it
+    up with the proper training that will be needed. Solutio: make
+    good documentation and offer them education in the areas that
+    they will need.
+
+    No support from the management. If the management of the
+    company is not supporting the implementation then it is very
+    hard to make a implementation. The management must have
+    understanding of the implementation. Also they must support
+    the implementation every way they can once it has begun. It is
+    also important that management shows a interest in the
+    implementation once it is on the way.
   \section{Useful tools and applications}
-    Hammer and crowbar
+    \label{tools}
+    Normal spread sheet applications (like excel) can be used to
+    gather and present the metrics that are needed for this
+    program.
+
+    CodeCheck is a tool that is programmable (ie it has to be
+    programmed, but on the other hand it can get any metrics as
+    long as it has the correct algorithm). It can also be set up
+    to interpret the values it gets out. CodeCheck is made by
+    Abraxas Software Inc. CodeCheck is called to be usable towards
+    C/C++ programs, and has most of the common metrics already
+    programmed to it.
+
+    The Object-Oriented Tool is developed by the University of
+    Magdeburg. The tool uses a predefined metrics set (defined
+    according to breu, F. B.; Carapuca, R.: Object-Oriented
+    Software Engineering: Controlling the Software Development
+    Process. Proceedings of the 4th International Conference on
+    Software Quality. 1993). Also this tool may be used to make
+    empirical evaluation of programs. Then it is possible to store
+    data from old projects and compare with the one being
+    measured.
+
+    While the Object-Oriented Tool is freeware, and excel a
+    program that is likely to already be in use at the Company,
+    our suggestion is the CodeCheck tool. Mainly since it is
+    flexible enough to support any metrics that we could want to
+    measure (both today and tomorrow). Also the tool is not bound
+    towards C/C++ as we understand it, but could be reprogrammed
+    to support any language.
 \end{document}
