SOFTENG250FC: Introduction to Software Engineering Lecture 10 50 years of Software Engineering Part III streams & tides 10/03/2001 1
Table 1: Fifty Years of Progress in Software Engineering (Approximate) Naive Tide Function Tide Structured Programming Tide Module Tide Object Tide Patterned Programming Tide 1945 1955 1956 1966 1967 1977 1978 1988 1989 1999? 2000? 2010? Hardware Economics Research Mainframes Commercial Mainframes Commercial Mini-Computers Personal Computers Internet Organization Statements Functions Modules Objects Optimizers Statement Loop, Basic Block Function Inter-Function Programming Environments Editors and Compilers General- Purpose Tools Domain-Specific Tools Concepts Algorithms Abstract Data Types Patterns Program Ideals Useful Documented Correct Usable Models Waterfall Model Spiral Model Chaos Model Life Cycles Waterfall Life Cycle Sashimi Life Cycle Chaos Life Cycle Process Structures Unified Process Macro- and Micro-Process Complexity Gap Strategies Stepwise Refinement Strategy Module Decomposition Object-Oriented Design Strategy Chaos Strategy User Participation None Once Periodic Ongoing Reproduced by permission of L B S Raccoon, Fifty Years in Software Engineering, ACM SIGSOFT Software Engineering Notes Volume 22 No 1 January 1997 Page 88-104. 10/03/2001 2
Process Structures (a stream) Unified Process 1967-1977 implies the ability to schedule the writing of individual lines of code Macro and Micro Processes 1989-1999? project management and coding need different skills Complexity Gap 2000?-2010? L B S Raccoon matching goals and solutions is very difficult developers spend a lot of time in the gap 10/03/2001 3
Reproduced by permission of L B S Raccoon, Fifty Years in Software Engineering, ACM SIGSOFT Software Engineering Notes Volume 22 No 1 January 1997 Page 88-104. 10/03/2001 4
Strategies (a stream) Beginners randomly choose any legal move Stepwise Refinement Strategy 1967-1977 Ignores concept of state Assumed independence of sub-problems Doesn t allow for corrections: forces major rewrites 10/03/2001 5
Reproduced by permission of L B S Raccoon, Fifty Years in Software Engineering, ACM SIGSOFT Software Engineering Notes Volume 22 No 1 January 1997 Page 88-104. 10/03/2001 6
Strategies (a stream) Object-Oriented Design Strategy 1989-1999? Objects are a bottom-up concept But can design the classes first Chaos Strategy 2000?-2010? resolve the most important issue first combines top-down, bottom-up, and middle-out goals 10/03/2001 7
User Participation (a stream) No Interaction 1945-1969 One Interaction 1970-1984 requirements phase Periodic Interaction (1985-1996) accepted that applications are hard to define Ongoing Interaction (1997-?) software is developed on behalf of users 10/03/2001 8
Reproduced by permission of L B S Raccoon, Fifty Years in Software Engineering, ACM SIGSOFT Software Engineering Notes Volume 22 No 1 January 1997 Page 88-104. 10/03/2001 9
Table 2: Linking Models with Three Other Streams Models Reuse Estimation Maintenance Waterfall Each project was independent. We didn t think about reuse, except in the context of portability. We estimated projects independently, one at a time, using ad hoc methods. Maintenance is a total loss. So emphasize proper specification, design, and implementation to avoid maintenance. Spiral Reuse became popular with the Spiral model. Of the 178 references in Confessions of a Used Program Salesman by Tracz, only 38 came before 1985, and only 13 before 1980. During the late 1980s and early 1990s, reuse was a very Spiral concept. We reused a unit of code on one level. We treated it like a product and reused the whole chunk or didn t reuse anything. Boehm estimates the effect of each project based on past projects. The Spiral model led to the Capability Maturity Model using a sequence of projects as the basis for the next bid. Maintenance feeds into the next project. As long as code is reused, maintenance can be paid for by the next project, so maintenance is good. We emphasized maintaining code, but not any other artifacts. Chaos In the late 1990s, we will reuse code on many levels. Different people will reuse parts from all scales of a project, including all sizes of code, designs, and specifications. Learning curves emphasize the economics of ongoing processes. (Mandelbrot shows that log-log space is chaotic.) The Chaos life cycle shows that maintenance equals development throughout the process. We maintain code in all phases (including specifications, design, testing) on all levels. Reproduced by permission of L B S Raccoon, Fifty Years in Software Engineering, ACM SIGSOFT Software Engineering Notes Volume 22 No 1 January 1997 Page 88-104. 10/03/2001 10
Naïve Tide 1945-1955 No tools, methodologies, or experience Anything goes. Whatever works. Programs happen. Functions Tide 1956-1966 Understood that software development differs from hardware 10/03/2001 11
Structured Programming Tide 1967-1977 GOTO wars analysis of algorithm performance Algol is a better tool than assembly language but is Algol better than Fortran? 1st Software Engineering conference in 1968 10/03/2001 12
Modules Tide 1978-1988...a step on the way from functions to objects modules are groups of functions and programs are groups of modules Objects Tide 1989-1999? C++, Eiffel, now Java Objects help organise large programs well 10/03/2001 13
Patterned Programming Tide 2000?-2010? Car designers don t go back to the laws of physics each time Frameworks and patterns Set me up an Internet business, paying by credit card, and I sell my 2 page report on what is likely to be in the SOFTENG250FC midsemester test. 10/03/2001 14