docs/unix-phil

diff unix-phil.ms @ 39:c87143793d82

a lot of rework in ch02
author meillo@marmaro.de
date Thu, 08 Apr 2010 16:47:11 +0200
parents 3628e9649046
children 422679bdf384
line diff
     1.1 --- a/unix-phil.ms	Sat Apr 03 12:56:38 2010 +0200
     1.2 +++ b/unix-phil.ms	Thu Apr 08 16:47:11 2010 +0200
     1.3 @@ -28,9 +28,10 @@
     1.4  markus schnalke <meillo@marmaro.de>
     1.5  .AB
     1.6  .ti \n(.iu
     1.7 -This paper discusses the importance of the Unix Philosophy in software design.
     1.8 +This paper explains the importance of the Unix Philosophy for software design.
     1.9  Today, few software designers are aware of these concepts,
    1.10 -and thus most modern software is limited and does not make use of software leverage.
    1.11 +and thus a lot of modern software is more limited than necessary
    1.12 +and makes less use of software leverage than possible.
    1.13  Knowing and following the guidelines of the Unix Philosophy makes software more valuable.
    1.14  .AE
    1.15  
    1.16 @@ -38,11 +39,11 @@
    1.17  
    1.18  .FS
    1.19  .ps -1
    1.20 -This paper was prepared for the seminar ``Software Analysis'' at University Ulm.
    1.21 -Mentor was professor Schweiggert. 2010-02-05
    1.22 +This paper was prepared for the ``Software Analysis'' seminar at University Ulm.
    1.23 +Mentor was professor Schweiggert. 2010-04-05
    1.24  .br
    1.25 -You may get this document from my website
    1.26 -.CW \s-1http://marmaro.de/docs
    1.27 +You may retrieve this document from
    1.28 +.CW \s-1http://marmaro.de/docs \ .
    1.29  .FE
    1.30  
    1.31  .NH 1
    1.32 @@ -120,55 +121,71 @@
    1.33  .NH 1
    1.34  Importance of software design in general
    1.35  .LP
    1.36 -Why should we design software at all?
    1.37 +The design of a software describes its internal and external shape,
    1.38 +meaning structure and interfaces.
    1.39 +It has nothing to do with visual appearance.
    1.40 +If we take a program as a car, then its color is of no matter.
    1.41 +Its design would be the car's size, its shape, the locations of doors,
    1.42 +the passenger/space ratio, the luggage capacity, and so forth.
    1.43 +.PP
    1.44 +Why should software get designed at all?
    1.45  It is general knowledge, that even a bad plan is better than no plan.
    1.46 -Ignoring software design is programming without a plan.
    1.47 -This will lead pretty sure to horrible results.
    1.48 +Not designing software means programming without plan.
    1.49 +This will pretty sure lead to horrible results.
    1.50 +Horrible to use and horrible to maintain.
    1.51 +These two aspects are the visible ones.
    1.52 +Often invisible are the wasted possible gains.
    1.53 +Good software design can make these gains available.
    1.54  .PP
    1.55 -The design of a software is its internal and external shape.
    1.56 -The design talked about here has nothing to do with visual appearance.
    1.57 -If we see a program as a car, then its color is of no matter.
    1.58 -Its design would be the car's size, its shape, the number and position of doors,
    1.59 -the ratio of passenger and cargo transport, and so forth.
    1.60 +A software's design deals with quality properties.
    1.61 +Good design leads to good quality, and quality is important.
    1.62 +Any car may be able to drive from A to B,
    1.63 +but it depends on the car's properties whether it is a good choice
    1.64 +for passenger transport or not.
    1.65 +It depends on its  properties if it is a good choice
    1.66 +for a rough mountain area.
    1.67 +And it depends on its properties if the ride will be fun.
    1.68 +
    1.69  .PP
    1.70 -A software's design is about quality properties.
    1.71 -Each of the cars may be able to drive from A to B,
    1.72 -but it depends on its properties whether it is a good car for passenger transport or not.
    1.73 -It also depends on its properties if it is a good choice for a rough mountain area.
    1.74 +Requirements for a software are twofold:
    1.75 +functional and non-functional.
    1.76 +.IP \(bu
    1.77 +Functional requirements define directly the software's functions.
    1.78 +They are the reason why software gets written.
    1.79 +Someone has a problem and needs a tool to solve it.
    1.80 +Being able to solve the problem is the main functional goal.
    1.81 +It is the driving force behind all programming effort.
    1.82 +Functional requirements are easier to define and to verify.
    1.83 +.IP \(bu
    1.84 +Non-functional requirements are also called \fIquality\fP requirements.
    1.85 +The quality of a software are the properties that are not directly related to
    1.86 +the software's basic functions.
    1.87 +Tools of bad quality often solve the problems they were written for,
    1.88 +but introduce problems and difficulties for usage and development, later on.
    1.89 +Quality aspects are often overlooked at first sight,
    1.90 +and they are often difficult to define clearly and to verify.
    1.91  .PP
    1.92 -Requirements to a software are twofold: functional and non-functional.
    1.93 -Functional requirements are easier to define and to verify.
    1.94 -They are directly the software's functions.
    1.95 -Functional requirements are the reason why software gets written.
    1.96 -Someone has a problem and needs a tool to solve it.
    1.97 -Being able to solve the problem is the main functional requirement.
    1.98 -It is the driving force behind all programming effort.
    1.99 -.PP
   1.100 -On the other hand, there are also non-functional requirements.
   1.101 -They are called \fIquality\fP requirements, too.
   1.102 -The quality of a software is about properties that are not directly related to
   1.103 -the software's basic functions.
   1.104 -Quality aspects are about the properties that are overlooked at first sight.
   1.105 -.PP
   1.106 -Quality is of few matter when the software gets initially built,
   1.107 -but it will be of matter in usage and maintenance of the software.
   1.108 +Quality is of few matter when the software gets built initially,
   1.109 +but it is of matter for usage and maintenance of the software.
   1.110  A short-sighted might see in developing a software mainly building something up.
   1.111 -Reality shows, that building the software the first time is only a small amount
   1.112 -of the overall work.
   1.113 -Bug fixing, extending, rebuilding of parts \(en short: maintenance work \(en
   1.114 +But experience shows, that building the software the first time is
   1.115 +only a small amount of the overall work.
   1.116 +Bug fixing, extending, rebuilding of parts
   1.117 +\(en maintenance work, for short \(en
   1.118  does soon take over the major part of the time spent on a software.
   1.119  Not to forget the usage of the software.
   1.120  These processes are highly influenced by the software's quality.
   1.121 -Thus, quality should never be neglected.
   1.122 -The problem is that you hardly ``stumble over'' bad quality during the first build,
   1.123 +Thus, quality must not be neglected.
   1.124 +The problem with quality is that you hardly ``stumble over''
   1.125 +bad quality during the first build,
   1.126  but this is the time when you should care about good quality most.
   1.127  .PP
   1.128 -Software design is not about the basic function of a software;
   1.129 -this requirement will get satisfied anyway, as it is the main driving force behind the development.
   1.130 -Software design is about quality aspects of the software.
   1.131 -Good design will lead to good quality, bad design to bad quality.
   1.132 +Software design is less the basic function of a software \(en
   1.133 +this requirement will get satisfied anyway.
   1.134 +Software design is more about quality aspects of the software.
   1.135 +Good design leads to good quality, bad design to bad quality.
   1.136  The primary functions of the software will be affected modestly by bad quality,
   1.137 -but good quality can provide a lot of additional gain from the software,
   1.138 +but good quality can provide a lot of additional gain,
   1.139  even at places where one never expected it.
   1.140  .PP
   1.141  The ISO/IEC 9126-1 standard, part 1,
   1.142 @@ -198,19 +215,20 @@
   1.143  .I Portability
   1.144  (adaptability, installability, co-existence, replaceability)
   1.145  .LP
   1.146 -These goals are parts of a software's design.
   1.147 -Good design can give these properties to a software,
   1.148 -bad designed software will miss them.
   1.149 +Good design can improve these properties of a software,
   1.150 +bad designed software probably suffers from not having them.
   1.151  .PP
   1.152  One further goal of software design is consistency.
   1.153  Consistency eases understanding, working on, and using things.
   1.154 -Consistent internals and consistent interfaces to the outside can be provided by good design.
   1.155 +Consistent internal structure and consistent interfaces to the outside
   1.156 +can be provided by good design.
   1.157  .PP
   1.158 -We should design software because good design avoids many problems during a software's lifetime.
   1.159 -And we should design software because good design can offer much gain,
   1.160 -that can be unrelated to the software main intend.
   1.161 -Indeed, we should spend much effort into good design to make the software more valuable.
   1.162 -The Unix Philosophy shows how to design software well.
   1.163 +Software should be well designed because good design avoids many
   1.164 +problems during the software's lifetime.
   1.165 +And software should be well designed because good design can offer
   1.166 +much additional gain.
   1.167 +Indeed, much effort should be spent into good design to make software more valuable.
   1.168 +The Unix Philosophy shows a way of how to design software well.
   1.169  It offers guidelines to achieve good quality and high gain for the effort spent.
   1.170  
   1.171