Code Complete 2: Realities of Modern Software Construction

Similar documents
Code Complete 2: A Decade of Advances in Software Construction Construx Software Builders, Inc. All Rights Reserved.

Testing in the Lifecycle

Baker s Dozen of Inconvenient Truths about Software Engineering Tom Feliz

Requirements Gathering using Object- Oriented Models

IS 525 Chapter 2. Methodology Dr. Nesrine Zemirli

UNIT IV SOFTWARE PROCESSES & TESTING SOFTWARE PROCESS - DEFINITION AND IMPLEMENTATION

Object-oriented Analysis and Design

An introduction to software development. Dr. C. Constantinides, P.Eng. Computer Science and Software Engineering Concordia University

SWEN 256 Software Process & Project Management

Computer Science: Disciplines. What is Software Engineering and why does it matter? Software Disasters

PROGRAM UNDERSTANDING TASK IN THE CONTEXT OF PSP

Introduction to Software Engineering

LESSONS LEARNED IN AGILE TRANSFORMATION

Introduction to Software Requirements and Design

R&D PROJECT MANAGEMENT IS IT AGILE?

About Software Engineering.

Computer Science: Who Cares? Computer Science: It Matters. Computer Science: Disciplines

SPICE: IS A CAPABILITY MATURITY MODEL APPLICABLE IN THE CONSTRUCTION INDUSTRY? Spice: A mature model

Introduction. How are games similar/different from other software engineering projects? Common software engineering models & game development

Software Engineering Design & Construction

For those who were Agile before Agile was cool

Object-Oriented Design

Course Introduction and Overview of Software Engineering. Richard N. Taylor Informatics 211 Fall 2007

For those who were Agile before Agile was cool: A tutorial. James O. Bjørnvig Coplien Nordija A/S

PROJECT MANAGEMENT. CSC404 Tutorial Slides

Lecture 9: Estimation and Prioritization" Project Planning"

WHY DOES IT TAKE SO LONG TO DEPLOY NEW GROUND SEGMENT DATA

Carnegie Mellon University Notice

A FRAMEWORK FOR PERFORMING V&V WITHIN REUSE-BASED SOFTWARE ENGINEERING

Benchmarking: The Way Forward for Software Evolution. Susan Elliott Sim University of California, Irvine

UML and Patterns.book Page 52 Thursday, September 16, :48 PM

Information Systemss and Software Engineering. Computer Science & Information Technology (CS)

CSE - Annual Research Review. From Informal WinWin Agreements to Formalized Requirements

Innovation Management and Technology Adoption. Dr. Mircea Mihaescu, P.Eng. March 7, 2012

UNIT VIII SYSTEM METHODOLOGY 2014

UNIT-III LIFE-CYCLE PHASES

We saw some of this before. Session 15: Life-Cycle frameworks and more

A Study of Software Functional Programming and Measurement

Contents. The software development problem The XP solution The JUnit testing framework. 2002, W. Pree 2

Agile Acquisition of Agile C2

Innovation in Quality

Unit 5: Unified Software Development Process. 3C05: Unified Software Development Process USDP. USDP for your project. Iteration Workflows.

Modeling support systems for multi-modal design of physical environments

Software Life Cycle Models

Empirical Research on Systems Thinking and Practice in the Engineering Enterprise

Creating Agile Programs:

WINNING HEARTS & MINDS: TIPS FOR EMBEDDING USER EXPERIENCE IN YOUR ORGANIZATION. Michele Ide-Smith Red Gate Software

VALLIAMMAI ENGNIEERING COLLEGE SRM Nagar, Kattankulathur DEPARTMENT OF COMPUTER SCIENCE AND ENGINEERING

Service-Oriented Software Engineering - SOSE (Academic Year 2015/2016)

Towards an MDA-based development methodology 1

SERC Technical Overview: First-Year Results and Future Directions. Barry Boehm, USC Rich Turner, Stevens. 15 October 2009

Human Systems Integration (HSI) and DevOps

Chapter 8: Verification & Validation

The Future of Software Engineering as seen with SEMAT Glasses

Practical Application of MBSE to Early Phase Space System Development

TDD Making sure everything works. Agile Transformation Summit May, 2015

Introduction to adoption of lean canvas in software test architecture design

Agile Non-Agile. Previously on Software Engineering

Avoiding the Problems

USING THE INDUSTRIAL INTERNET OF THINGS TO TRANSFORM HUMAN SAFETY AND ENERGY CONSUMPTION IN THE MINING INDUSTRY

Systems Architecting and Software Architecting - On Separate or Convergent Paths?

Manufacturing Readiness Assessment Overview

Systems Engineering Overview. Axel Claudio Alex Gonzalez

Software Maintenance Cycles with the RUP

UX CAPSTONE USER EXPERIENCE + DEVELOPMENT PROCESS

Volume 4, Number 2 Government and Defense September 2011

Emerging Trends in Software Engineering

Vision. Jimmy Janlén, 2015, Crisp Jimmy Janlén, 2015, Crisp Jimmy Janlén, 2015, Crisp. Alignment

Serious Game Secrets. What, Why, Where, How, Who Cares? Andrew Hughes, Designing Digitally

Lean Enablers for Managing Engineering Programs

HUMAN COMPUTER INTERFACE

Dr. Cynthia Dion-Schwartz Acting Associate Director, SW and Embedded Systems, Defense Research and Engineering (DDR&E)

Software-Intensive Systems Producibility

Use Cases for Digital Innovation Hubs

BEYOND SHALL STATEMENTS: MODERNIZING REQUIREMENTS ENGINEERING

The Semantics of Innovation Exploring the deep nature of innovation IC3K, Rome, October 2014

Map of Human Computer Interaction. Overview: Map of Human Computer Interaction

TRIL Technology Research for Independent Living. Seamus Small TRIL Centre Manager 11 th May 2011

IKE Story. ike4.ikegps.com

Strategic Design. Michael Corsetto

Radically better software development with Extreme Programming. Carl Erickson Atomic Object LLC October 2002

This is a preview - click here to buy the full publication

Dr. Kenneth E. Nidiffer Director of Strategic Plans for Government Programs

Development Process Visualization and Project Management

Enterprise ISEA of the Future a Technology Vision for Fleet Support

CHAPTER 1 INTRODUCTION TO THE GUIDE

Test and Evaluation of Autonomous Systems & The Role of the T&E Community in the Requirements Process

Software Evolution & Technical Debt

IECI Chapter Japan Series Vol. 5 No. 2, 2003 ISSN

Distributed Systems Programming (F21DS1) Formal Methods for Distributed Systems

DEVELOPING YOUR DIGITAL ROADMAP

Best practices in product development: Design Studies & Trade-Off Analyses

Driving Efficiencies into the Software Life Cycle for Army Systems

Agile Software Development-- Why it is Hot.

Digital Engineering. Phoenix Integration Conference Ms. Philomena Zimmerman. Deputy Director, Engineering Tools and Environments.

Geometry. Teacher s Guide

Reconsidering the Role of Systems Engineering in DoD Software Problems

1 History of software engineering

Physics-Based Modeling In Design & Development for U.S. Defense Virtual Prototyping & Product Development. Jennifer Batson Ab Hashemi

University of Massachusetts Amherst Libraries. Digital Preservation Policy, Version 1.3

Transcription:

Code Complete 2: Realities of Modern Software Construction www.construx.com 2004-2005 2005 Construx Software Builders, Inc. All Rights Reserved. Construx Delivering Software Project Success

R

Really,Really

DA VINCI CODE COMPLETE Steve McConnell

This Time It s Personal

Code Complete Mission Attempt in 1993 was to capture lasting knowledge of software construction I ve asserted for many years that 95% of the content of CC1 is still relevant Was this true? 8

Scope of Work for CC2 Formally inspected entire first edition ~500 programming examples updated to Java, VB, C++ New chapters on Design, Classes, Defensive Programming, Collaborative Construction, Refactoring OO & web integrated throughout Further Reading updated throughout Numerous complementary resources on companion website cc2e.com 9

Overview of Talk The Worst Construction Ideas of the 1990s and 2000s A Decade of Advances in Software Construction Ten Realities of Modern Software Construction 10

The Worst Construction Ideas of the 1990s and 2000s

Some of the Worst Construction Ideas of 1990s Code & fix All design up front programming Design for speculative requirements Components will solve all our construction problems Automatic programming Uninformed use of the waterfall model Calling everything object oriented 12

Some of the Worst Construction Ideas of 2000s Code & fix No design up front programming Planning to refactor later Offshore outsourcing will solve all our construction problems Automatic programming Uninformed use of Extreme Programming Calling everything agile 13

Worst Ideas, 1990s vs. 2000s 1990s Code & fix All design up front programming Design for speculative requirements Components will solve all our construction problems Automatic programming Uninformed use of the waterfall model Calling everything object oriented 2000s Code & fix No design up front programming Planning to refactor later Offshore outsourcing will solve all our problems Automatic programming Uninformed use of Extreme Programming Calling everything agile 14

A Decade of Advances in Software Construction

0. With the Theatrical Release of Lord of the Rings ALL companies can have servers named Gandalf and Frodo 16

1. Design has Been Raised a Level Programming has advanced through ability to create larger code aggregations Statements Routines Classes Packages Real legacy of OO might well be larger aggregations 17

2. Daily Build and Smoke Test Institutionalizes incremental integration Minimizes serious integration problems that used to be common Lots of other benefits, too 18

3. Standard Libraries Good programmers have always used libraries Now provided with languages (Java, C++,.NET) 19

4. Visual Basic Visual programming innovation The first development environment to make widespread use of COTS components Only language to learn Ada s syntax lessons (case statements, control statements, etc.) Highly integrated environment 20

5. Open Source Software Great aid to programmers during development Reduced barriers to making code available Opportunity to learn from available code Improved ability to read code Nice community of programmers 21

6. The Web for Research FAQs Discussion groups Searchability in general 22

7. Widespread Use of Incremental Development Concepts were well known in 1990s Practice is well established in 2000s From CC1: The word incremental has never achieved the designer status of structured or object-oriented, oriented, so no one has ever written a book on incremental software engineering. That s s too bad because the collection of techniques in such a book would be exceptionally potent. 23

8. Test-First Development Shortens time to defect detection Increases personal discipline Complements daily build & smoke test 24

9. Refactoring as a Discipline Provides a discipline for making changes Not so good as a total design strategy Good example of incrementalism 25

10. Faster Computers Compare CC1 performance benchmarks to CC2 benchmarks Implications for optimization Implications for programming languages Implications for development 26

Ten Realities of Modern Software Construction

-1- Construction is a Legitimate Topic

Software Construction Used to Look Like This Software Concept Requirements Analysis Architectural Design Detailed Design Coding and Debugging System Testing 29

Software Construction Now Looks Like This Requirements Development Problem Definition Detailed Design Corrective Maintenance Construction Planning Coding and Debugging Integration Software Architecture Unit Testing System Testing Integration Testing 30

Distinction Between Activities and Phases Activity!= Phase Talking about Construction as an activity does not imply a distinct phase Differentiating between kinds of activities is extremely helpful 31

-2- Individual Variation Is Significant

Where do Variations Exist? Researchers have found variations ranging from 10x to 28x in: Coding speed Debugging speed Defect-finding finding speed Percentage of defects found Bad-fix injection rate Design quality Amount of code generated from a design Etc. 33

Key Skills of an Expert Programmer Designing Flushing out errors and ambiguities in requirements Coding (naming, formatting, commenting) Reading & reviewing code Integration Debugging Unit testing Teamwork Using tools for all of the above 34

-3- Personal Discipline Matters

Why Personal Discipline Matters Being realistic about predicting the future Areas where discipline matters Refactoring Prototyping Optimization Minimal-complexity designs specifically Managing complexity generally Endpoints Discipline and Courage Humphrey on PSP Beck on Extreme Programming 36

-4- A Focus on Simplicity Works Better than a Focus on Complexity

Simplicity vs. Complexity Why do projects fail? Focus on read-time convenience, not write-time time convenience YAGNI and design for speculative requirements 38

-5- Defect-Cost Increase is Alive and Well

Defect Cost Increase Activity in which a Defect Is Introduced Requirements Fix Here Don t Wait to Fix Here Average Cost to Correct Architecture Construction Requirements Architecture Construction System test Post-Release Activity in Which a Defect Is Detected 40

Decades of Research Support Defect-Cost Increase Fagan, Michael E. 1976. Design and Code Inspections to Reduce Errors in Program Development. IBM Systems Journal 15, no. 3: 182 211. 211. Humphrey, Watts S., Terry R. Snyder, and Ronald R. Willis. 1991. Software Process Improvement at Hughes Aircraft. IEEE Software 8, no. 4 (July): 11 23. Leffingwell, Dean, 1997. Calculating the Return on Investment from More Effective Requirements Management, American Programmer,, 10(4):13-16. 16. Willis, Ron R., et al, 1998. Hughes Aircraft s s Widespread Deployment of a Continuously Improving Software Process, Software Engineering Institute/Carnegie Mellon University, CMU/SEI-98 98-TR-006, May 1998. Grady, Robert B. 1999. An Economic Release Decision Model: Insights into Software Project Management. In Proceedings of the Applications of Software Measurement Conference,, 227-239. 239. Orange Park, FL: Software Quality Engineering. Shull, et al, 2002. What We Have Learned About Fighting Defects, Proceedings, Metrics 2002.. IEEE; pp. 249-258. 258. Boehm, Barry and Richard Turner, 2004. Balancing Agility and Discipline: A Guide for the Perplexed,, Boston, Mass.: Addison Wesley, 2004. 41

-6- Design Is Important

Design Advice What has Changed in 10 Years? In 1990s, design pundits wanted to dot every i and cross every t before writing any code In 2000s, design pundits say BDUF? YAGNI! There are lots of valid points on the no design all design continuum The only 2 points guaranteed to be wrong are the two that have been advocated! 43

General Point: Extremes are Usually Not Productive All design up front vs. no design up front Entirely planned vs. entirely improvised Pure iterative vs. straight sequential All structure vs. all creative Document everything vs. document nothing 44

-7- Technology Waves Affect Construction Practices

Effect of Technology Waves on Construction Definition of technology wave Early-wave characteristics Mature-wave characteristics Late-wave characteristics Construction is affected by technology more than I thought (doh( doh!) Technology can be addressed in terms of general principles 46

-8- Incremental Approaches Work Best

Perspective on Incrementalism The pure waterfall model is not at all incremental or iterative which is why it hasn t t worked very well Spiral development is highly incremental and iterative, which is part of why it does work well All projects will experience iteration at some point Think about where and when in your project you will get your incrementalism cheaply, cheaply, or expensively? 48

-9- The Toolbox Metaphor Continues to be Illuminating

Toolbox Metaphor What s s best? Agile? XP? Scrum? DSDM? CMM? Toolbox explains there s s no one right tool for every job Different industry segments will have different tools and even different toolboxes What s s in the Software Engineering Toolbox? Best practices Lifecycle models Templates, checklists, patterns, examples Software tools 50

-10- Software s s Essential Tensions Remain

Software s s Essential Tensions Software s s essential tensions have remained unchanged for years: Rigid plans vs. Improvisation Planning vs. Fortune Telling Creativity vs. Structure Discipline vs. Flexibility Quantitative vs. Qualitative Process vs. Product Optimizing vs. Satisficing Balance wavers, but basic tensions are constants 52

TALK COMPLETE Steve McConnell

Construx Delivering Software Project Success Training Software Projects Coaching & Consulting info@construx.com www.construx.com 54