# HG changeset patch # User meillo@marmaro.de # Date 1270738031 -7200 # Node ID c87143793d82f0dc2bd71e8c9872ea80d2869112 # Parent 3628e964904654c7f53962d126d4066c63bacdca a lot of rework in ch02 diff -r 3628e9649046 -r c87143793d82 unix-phil.ms --- a/unix-phil.ms Sat Apr 03 12:56:38 2010 +0200 +++ b/unix-phil.ms Thu Apr 08 16:47:11 2010 +0200 @@ -28,9 +28,10 @@ markus schnalke .AB .ti \n(.iu -This paper discusses the importance of the Unix Philosophy in software design. +This paper explains the importance of the Unix Philosophy for software design. Today, few software designers are aware of these concepts, -and thus most modern software is limited and does not make use of software leverage. +and thus a lot of modern software is more limited than necessary +and makes less use of software leverage than possible. Knowing and following the guidelines of the Unix Philosophy makes software more valuable. .AE @@ -38,11 +39,11 @@ .FS .ps -1 -This paper was prepared for the seminar ``Software Analysis'' at University Ulm. -Mentor was professor Schweiggert. 2010-02-05 +This paper was prepared for the ``Software Analysis'' seminar at University Ulm. +Mentor was professor Schweiggert. 2010-04-05 .br -You may get this document from my website -.CW \s-1http://marmaro.de/docs +You may retrieve this document from +.CW \s-1http://marmaro.de/docs \ . .FE .NH 1 @@ -120,55 +121,71 @@ .NH 1 Importance of software design in general .LP -Why should we design software at all? +The design of a software describes its internal and external shape, +meaning structure and interfaces. +It has nothing to do with visual appearance. +If we take a program as a car, then its color is of no matter. +Its design would be the car's size, its shape, the locations of doors, +the passenger/space ratio, the luggage capacity, and so forth. +.PP +Why should software get designed at all? It is general knowledge, that even a bad plan is better than no plan. -Ignoring software design is programming without a plan. -This will lead pretty sure to horrible results. +Not designing software means programming without plan. +This will pretty sure lead to horrible results. +Horrible to use and horrible to maintain. +These two aspects are the visible ones. +Often invisible are the wasted possible gains. +Good software design can make these gains available. .PP -The design of a software is its internal and external shape. -The design talked about here has nothing to do with visual appearance. -If we see a program as a car, then its color is of no matter. -Its design would be the car's size, its shape, the number and position of doors, -the ratio of passenger and cargo transport, and so forth. +A software's design deals with quality properties. +Good design leads to good quality, and quality is important. +Any car may be able to drive from A to B, +but it depends on the car's properties whether it is a good choice +for passenger transport or not. +It depends on its properties if it is a good choice +for a rough mountain area. +And it depends on its properties if the ride will be fun. + .PP -A software's design is about quality properties. -Each of the cars may be able to drive from A to B, -but it depends on its properties whether it is a good car for passenger transport or not. -It also depends on its properties if it is a good choice for a rough mountain area. +Requirements for a software are twofold: +functional and non-functional. +.IP \(bu +Functional requirements define directly the software's functions. +They are the reason why software gets written. +Someone has a problem and needs a tool to solve it. +Being able to solve the problem is the main functional goal. +It is the driving force behind all programming effort. +Functional requirements are easier to define and to verify. +.IP \(bu +Non-functional requirements are also called \fIquality\fP requirements. +The quality of a software are the properties that are not directly related to +the software's basic functions. +Tools of bad quality often solve the problems they were written for, +but introduce problems and difficulties for usage and development, later on. +Quality aspects are often overlooked at first sight, +and they are often difficult to define clearly and to verify. .PP -Requirements to a software are twofold: functional and non-functional. -Functional requirements are easier to define and to verify. -They are directly the software's functions. -Functional requirements are the reason why software gets written. -Someone has a problem and needs a tool to solve it. -Being able to solve the problem is the main functional requirement. -It is the driving force behind all programming effort. -.PP -On the other hand, there are also non-functional requirements. -They are called \fIquality\fP requirements, too. -The quality of a software is about properties that are not directly related to -the software's basic functions. -Quality aspects are about the properties that are overlooked at first sight. -.PP -Quality is of few matter when the software gets initially built, -but it will be of matter in usage and maintenance of the software. +Quality is of few matter when the software gets built initially, +but it is of matter for usage and maintenance of the software. A short-sighted might see in developing a software mainly building something up. -Reality shows, that building the software the first time is only a small amount -of the overall work. -Bug fixing, extending, rebuilding of parts \(en short: maintenance work \(en +But experience shows, that building the software the first time is +only a small amount of the overall work. +Bug fixing, extending, rebuilding of parts +\(en maintenance work, for short \(en does soon take over the major part of the time spent on a software. Not to forget the usage of the software. These processes are highly influenced by the software's quality. -Thus, quality should never be neglected. -The problem is that you hardly ``stumble over'' bad quality during the first build, +Thus, quality must not be neglected. +The problem with quality is that you hardly ``stumble over'' +bad quality during the first build, but this is the time when you should care about good quality most. .PP -Software design is not about the basic function of a software; -this requirement will get satisfied anyway, as it is the main driving force behind the development. -Software design is about quality aspects of the software. -Good design will lead to good quality, bad design to bad quality. +Software design is less the basic function of a software \(en +this requirement will get satisfied anyway. +Software design is more about quality aspects of the software. +Good design leads to good quality, bad design to bad quality. The primary functions of the software will be affected modestly by bad quality, -but good quality can provide a lot of additional gain from the software, +but good quality can provide a lot of additional gain, even at places where one never expected it. .PP The ISO/IEC 9126-1 standard, part 1, @@ -198,19 +215,20 @@ .I Portability (adaptability, installability, co-existence, replaceability) .LP -These goals are parts of a software's design. -Good design can give these properties to a software, -bad designed software will miss them. +Good design can improve these properties of a software, +bad designed software probably suffers from not having them. .PP One further goal of software design is consistency. Consistency eases understanding, working on, and using things. -Consistent internals and consistent interfaces to the outside can be provided by good design. +Consistent internal structure and consistent interfaces to the outside +can be provided by good design. .PP -We should design software because good design avoids many problems during a software's lifetime. -And we should design software because good design can offer much gain, -that can be unrelated to the software main intend. -Indeed, we should spend much effort into good design to make the software more valuable. -The Unix Philosophy shows how to design software well. +Software should be well designed because good design avoids many +problems during the software's lifetime. +And software should be well designed because good design can offer +much additional gain. +Indeed, much effort should be spent into good design to make software more valuable. +The Unix Philosophy shows a way of how to design software well. It offers guidelines to achieve good quality and high gain for the effort spent.