Survey
* Your assessment is very important for improving the workof artificial intelligence, which forms the content of this project
* Your assessment is very important for improving the workof artificial intelligence, which forms the content of this project
Software Engineering Introduction (The Product) James Gain ([email protected]) http://people.cs.uct.ac.za/~jgain Objectives Of the course: To cover the process, methods and tools of Software Engineering Emphasise the unfortunate necessity of SE practices Prepare you for the CS2 project Of this lecture: Explain the nature of the beast Face the “software crisis” Consider the three tug-of-war aspects of software development Debunk some widely held myths about software The Nature of Software Software is a set of items that form a “configuration”, including: Programs Documents Data Software products may be developed for a particular customer (bespoke) or for a general market (generic) Most software is still custom-made rather than being assembled from existing components “The programmer, like the poet, works only slightly removed from pure thought-stuff” - Fred Brooks in The Mythical Man-Month Complexity Software is inherently complex because: Number of execution paths grow exponentially with size Interdependence of scattered parts Can be reduced but not eliminated Simplifying techniques of Maths and Physics (where complexity = noise) don’t always apply Consequences: One person cannot understand a project in its entirety Makes management difficult Complicates maintenance Explosion of Execution Paths Two nested loops containing four if..then..else statements. Each loop can execute up to 20 times There are 10^14 possible paths in this 15 line program! Conformity Cases of Conformity: Must often conform to existing systems Even when building from scratch software is regarded as a second class citizen (most conformable component) Inherent: Cannot be removed by redesign because it depends on the interface to humans and hardware Consequences: Interfaces will invariably add complexity to an otherwise simple design Changeability There will always be pressure to change software: Software models reality, as reality changes, so must software If software is useful, users will want it extended Software is easier to change than hardware Successful software survives beyond the lifetime of the hardware for which it was originally written Consequences: Constant change degrades quality Becomes progressively more expensive with lateness in the lifecycle Invisibility Software (unlike architecture, circuits, molecules) cannot be effectively visualized Yes there are graphing techniques (UML), but: Generally non-planar (crossing edges) Generally not hierarchical Cannot embody every aspect in a single visual Cannot easily identify oversights Consequences: Software designs are difficult to understand and communicate Exercise: Beyond the Ivory Tower University is not the Real World CS pracs are not like real software projects Give 5 or more important ways in which they differ: The Real World TM 1. People can be bankrupted and even die (with safety critical systems) if your software fails 2. You must almost always work within a team (Johnny must play well with others) 3. Poor performance means losing your job (not just a poor mark) 4. Your program will have to live longer 5. The cost, complexity and time span of software projects are much larger Exercise: Beyond Bridge Building A NATO study group coined the term Software Engineering in 1967 They believed that software would benefit from the philosophies and techniques of traditional engineering But building software is not like building bridges Give 4 (or more) important ways in which they differ: 1. When bridges break they are redesigned and rebuilt from scratch (imagine doing that every time your Operating System crashed) 2. Bridges are analog, software is digital 3. Software does not “wear out” 4. Most of the cost of software is in design not manufacture Lifetime of Software The Software Crisis Often software is delivered late, over budget and with residual faults. Less a crisis, more a chronic affliction Worse, this isn’t really changing software productivity has improved 6% per year (on average over 30 years) Unlike Hardware Moore’s law: processor speed/memory capacity doubles every two years Hardware “Productivity” Software Time (10 years) No Silver Bullet Software development is like a Werewolf (mostly calm but just wait for the full moon) We need a silver bullet to provide a one shot solution Fred Brooks in his essay “No Silver Bullet” postulates that: Despite the promise of high-level languages, object orientation, integrated development environments and Artificial Intelligence There will never be a single order of magnitude breakthrough in productivity improvement Because of the intrinsic nature of software Question for the day: Is reusability (and open source) the new silver bullet? The Three-legged Stool There are three axes of software development: Schedule (how long will it take to develop) Cost (how expensive is it to develop) Quality (indefinable excellence of the final product) Software Management is largely devoted to predicting, controlling and measuring these axes Interrelated A change in one axis affects the others E.g. Software that overruns on time usually overruns on budget (you had to pay more salaries) You can have it fast, cheap or good. Pick any two Timeliness Because of software complexity, it is very difficult to schedule Also programmers are notorious for underestimating coding time Generally fail to consider the time needed for testing and debugging Rule of thumb: double programmer’s time estimates (without telling them) Software engineering is concerned with developing software in a timely manner. Cost Software costs often dominate system costs For instance, software for a PC usually costs more than the hardware Software costs more to maintain than it does to develop Especially for systems with a long life, where maintenance may be many times more expensive than development Software engineering is concerned with costeffective software development Quality Need to deliver the functionality required by the user But also be: Maintainable (can evolve to meet changing needs) Dependable (error free and reliable) Efficient (don’t waste system resources) Usable (must be easily mastered by the target users) Software engineering is concerned with producing quality software The Man-Month Myth Managers are under pressure, tend to grasp at myths Man-Month Myth: Mongolian Horde approach works If a project is running late, add people to finish on time Implies that people and time are interchangeable Reality: Mongolian horde assumes that tasks can be perfectly partitioned with no sequential constraints, intercommunication or training Cost depends on the number of people and number of months. Progress does not Brooke’s Law: Adding people to a late software project makes it later (from “The Mythical Man-Month”) The Chameleon Myth Myths held by customers often lead to false expectations and, ultimately, dissatisfaction Chameleon Myth: Changing requirements can be easily accommodated at any time because software is flexible Reality: Impact depends on the lateness of the change Changes are far easier during analysis (1x cost) than maintenance (60-100x cost) The Maintenance Myth Early attitudes to programming have become entrenched Maintenance Myth: Once the program is written and it works our job is done Reality: You can’t walk away without careful documentation Because 60-80% of effort occurs after software is first delivered Relative Cost of Software Phases