comparison 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
comparison
equal deleted inserted replaced
38:3628e9649046 39:c87143793d82
26 Why the Unix Philosophy still matters 26 Why the Unix Philosophy still matters
27 .AU 27 .AU
28 markus schnalke <meillo@marmaro.de> 28 markus schnalke <meillo@marmaro.de>
29 .AB 29 .AB
30 .ti \n(.iu 30 .ti \n(.iu
31 This paper discusses the importance of the Unix Philosophy in software design. 31 This paper explains the importance of the Unix Philosophy for software design.
32 Today, few software designers are aware of these concepts, 32 Today, few software designers are aware of these concepts,
33 and thus most modern software is limited and does not make use of software leverage. 33 and thus a lot of modern software is more limited than necessary
34 and makes less use of software leverage than possible.
34 Knowing and following the guidelines of the Unix Philosophy makes software more valuable. 35 Knowing and following the guidelines of the Unix Philosophy makes software more valuable.
35 .AE 36 .AE
36 37
37 .\".if t .2C 38 .\".if t .2C
38 39
39 .FS 40 .FS
40 .ps -1 41 .ps -1
41 This paper was prepared for the seminar ``Software Analysis'' at University Ulm. 42 This paper was prepared for the ``Software Analysis'' seminar at University Ulm.
42 Mentor was professor Schweiggert. 2010-02-05 43 Mentor was professor Schweiggert. 2010-04-05
43 .br 44 .br
44 You may get this document from my website 45 You may retrieve this document from
45 .CW \s-1http://marmaro.de/docs 46 .CW \s-1http://marmaro.de/docs \ .
46 .FE 47 .FE
47 48
48 .NH 1 49 .NH 1
49 Introduction 50 Introduction
50 .LP 51 .LP
118 119
119 120
120 .NH 1 121 .NH 1
121 Importance of software design in general 122 Importance of software design in general
122 .LP 123 .LP
123 Why should we design software at all? 124 The design of a software describes its internal and external shape,
125 meaning structure and interfaces.
126 It has nothing to do with visual appearance.
127 If we take a program as a car, then its color is of no matter.
128 Its design would be the car's size, its shape, the locations of doors,
129 the passenger/space ratio, the luggage capacity, and so forth.
130 .PP
131 Why should software get designed at all?
124 It is general knowledge, that even a bad plan is better than no plan. 132 It is general knowledge, that even a bad plan is better than no plan.
125 Ignoring software design is programming without a plan. 133 Not designing software means programming without plan.
126 This will lead pretty sure to horrible results. 134 This will pretty sure lead to horrible results.
127 .PP 135 Horrible to use and horrible to maintain.
128 The design of a software is its internal and external shape. 136 These two aspects are the visible ones.
129 The design talked about here has nothing to do with visual appearance. 137 Often invisible are the wasted possible gains.
130 If we see a program as a car, then its color is of no matter. 138 Good software design can make these gains available.
131 Its design would be the car's size, its shape, the number and position of doors, 139 .PP
132 the ratio of passenger and cargo transport, and so forth. 140 A software's design deals with quality properties.
133 .PP 141 Good design leads to good quality, and quality is important.
134 A software's design is about quality properties. 142 Any car may be able to drive from A to B,
135 Each of the cars may be able to drive from A to B, 143 but it depends on the car's properties whether it is a good choice
136 but it depends on its properties whether it is a good car for passenger transport or not. 144 for passenger transport or not.
137 It also depends on its properties if it is a good choice for a rough mountain area. 145 It depends on its properties if it is a good choice
138 .PP 146 for a rough mountain area.
139 Requirements to a software are twofold: functional and non-functional. 147 And it depends on its properties if the ride will be fun.
148
149 .PP
150 Requirements for a software are twofold:
151 functional and non-functional.
152 .IP \(bu
153 Functional requirements define directly the software's functions.
154 They are the reason why software gets written.
155 Someone has a problem and needs a tool to solve it.
156 Being able to solve the problem is the main functional goal.
157 It is the driving force behind all programming effort.
140 Functional requirements are easier to define and to verify. 158 Functional requirements are easier to define and to verify.
141 They are directly the software's functions. 159 .IP \(bu
142 Functional requirements are the reason why software gets written. 160 Non-functional requirements are also called \fIquality\fP requirements.
143 Someone has a problem and needs a tool to solve it. 161 The quality of a software are the properties that are not directly related to
144 Being able to solve the problem is the main functional requirement.
145 It is the driving force behind all programming effort.
146 .PP
147 On the other hand, there are also non-functional requirements.
148 They are called \fIquality\fP requirements, too.
149 The quality of a software is about properties that are not directly related to
150 the software's basic functions. 162 the software's basic functions.
151 Quality aspects are about the properties that are overlooked at first sight. 163 Tools of bad quality often solve the problems they were written for,
152 .PP 164 but introduce problems and difficulties for usage and development, later on.
153 Quality is of few matter when the software gets initially built, 165 Quality aspects are often overlooked at first sight,
154 but it will be of matter in usage and maintenance of the software. 166 and they are often difficult to define clearly and to verify.
167 .PP
168 Quality is of few matter when the software gets built initially,
169 but it is of matter for usage and maintenance of the software.
155 A short-sighted might see in developing a software mainly building something up. 170 A short-sighted might see in developing a software mainly building something up.
156 Reality shows, that building the software the first time is only a small amount 171 But experience shows, that building the software the first time is
157 of the overall work. 172 only a small amount of the overall work.
158 Bug fixing, extending, rebuilding of parts \(en short: maintenance work \(en 173 Bug fixing, extending, rebuilding of parts
174 \(en maintenance work, for short \(en
159 does soon take over the major part of the time spent on a software. 175 does soon take over the major part of the time spent on a software.
160 Not to forget the usage of the software. 176 Not to forget the usage of the software.
161 These processes are highly influenced by the software's quality. 177 These processes are highly influenced by the software's quality.
162 Thus, quality should never be neglected. 178 Thus, quality must not be neglected.
163 The problem is that you hardly ``stumble over'' bad quality during the first build, 179 The problem with quality is that you hardly ``stumble over''
180 bad quality during the first build,
164 but this is the time when you should care about good quality most. 181 but this is the time when you should care about good quality most.
165 .PP 182 .PP
166 Software design is not about the basic function of a software; 183 Software design is less the basic function of a software \(en
167 this requirement will get satisfied anyway, as it is the main driving force behind the development. 184 this requirement will get satisfied anyway.
168 Software design is about quality aspects of the software. 185 Software design is more about quality aspects of the software.
169 Good design will lead to good quality, bad design to bad quality. 186 Good design leads to good quality, bad design to bad quality.
170 The primary functions of the software will be affected modestly by bad quality, 187 The primary functions of the software will be affected modestly by bad quality,
171 but good quality can provide a lot of additional gain from the software, 188 but good quality can provide a lot of additional gain,
172 even at places where one never expected it. 189 even at places where one never expected it.
173 .PP 190 .PP
174 The ISO/IEC 9126-1 standard, part 1, 191 The ISO/IEC 9126-1 standard, part 1,
175 .[ 192 .[
176 %I International Organization for Standardization 193 %I International Organization for Standardization
196 (analyzability, changeability, stability, testability) 213 (analyzability, changeability, stability, testability)
197 .IP \(bu 214 .IP \(bu
198 .I Portability 215 .I Portability
199 (adaptability, installability, co-existence, replaceability) 216 (adaptability, installability, co-existence, replaceability)
200 .LP 217 .LP
201 These goals are parts of a software's design. 218 Good design can improve these properties of a software,
202 Good design can give these properties to a software, 219 bad designed software probably suffers from not having them.
203 bad designed software will miss them.
204 .PP 220 .PP
205 One further goal of software design is consistency. 221 One further goal of software design is consistency.
206 Consistency eases understanding, working on, and using things. 222 Consistency eases understanding, working on, and using things.
207 Consistent internals and consistent interfaces to the outside can be provided by good design. 223 Consistent internal structure and consistent interfaces to the outside
208 .PP 224 can be provided by good design.
209 We should design software because good design avoids many problems during a software's lifetime. 225 .PP
210 And we should design software because good design can offer much gain, 226 Software should be well designed because good design avoids many
211 that can be unrelated to the software main intend. 227 problems during the software's lifetime.
212 Indeed, we should spend much effort into good design to make the software more valuable. 228 And software should be well designed because good design can offer
213 The Unix Philosophy shows how to design software well. 229 much additional gain.
230 Indeed, much effort should be spent into good design to make software more valuable.
231 The Unix Philosophy shows a way of how to design software well.
214 It offers guidelines to achieve good quality and high gain for the effort spent. 232 It offers guidelines to achieve good quality and high gain for the effort spent.
215 233
216 234
217 .NH 1 235 .NH 1
218 The Unix Philosophy 236 The Unix Philosophy