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

Similar documents
Code Complete 2: Realities of Modern Software Construction

Testing in the Lifecycle

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

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

Object-Oriented Design

Requirements Gathering using Object- Oriented Models

About Software Engineering.

IS 525 Chapter 2. Methodology Dr. Nesrine Zemirli

R&D PROJECT MANAGEMENT IS IT AGILE?

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

PROGRAM UNDERSTANDING TASK IN THE CONTEXT OF PSP

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

Baker s Dozen of Inconvenient Truths about Software Engineering Tom Feliz

Object-oriented Analysis and Design

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

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

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

Software Maintenance Cycles with the RUP

Agile Acquisition of Agile C2

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

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

Carnegie Mellon University Notice

TELEMETRY SOFTWARE DEVELOPMENT LIFE CYCLE

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

Separation of Concerns in Software Engineering Education

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

Lecture 9: Estimation and Prioritization" Project Planning"

Software Life Cycle Models

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

Integrated Product Development: Linking Business and Engineering Disciplines in the Classroom

SWEN 256 Software Process & Project Management

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

LESSONS LEARNED IN AGILE TRANSFORMATION

STUDY ON FIREWALL APPROACH FOR THE REGRESSION TESTING OF OBJECT-ORIENTED SOFTWARE

Project Management for Research and Development: Using Tailored Processes to Assure Quality Outcomes

Lesson 17: Science and Technology in the Acquisition Process

Modeling support systems for multi-modal design of physical environments

UNIT-III LIFE-CYCLE PHASES

Software Engineering Design & Construction

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

Software-Intensive Systems Producibility

A Study of Software Functional Programming and Measurement

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

Emerging Trends in Software Engineering

Lean Enablers for Managing Engineering Programs

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

Innovation in Quality

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

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

ENSURING READINESS WITH ANALYTIC INSIGHT

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

1 History of software engineering

Introduction to Software Engineering

PROJECT MANAGEMENT. CSC404 Tutorial Slides

Empirical Research on Systems Thinking and Practice in the Engineering Enterprise

Introduction to adoption of lean canvas in software test architecture design

UNIT VIII SYSTEM METHODOLOGY 2014

CSSE220 BomberMan programming assignment Team Project

Software Evolution & Technical Debt

Traditional Methodology Applied to a Non-Traditional Development.

By the end of this chapter, you should: Understand what is meant by engineering design. Understand the phases of the engineering design process.

Development Process Visualization and Project Management

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

Software Engineering

FM p.i-xxii 4/2/04 11:39 AM Page v. Preface

Where does architecture end and technology begin? Rami Razouk The Aerospace Corporation

THR%%A%P COM 1?4w XFROX. Agenda

The Evolution Tree: A Maintenance-Oriented Software Development Model

Practical Application of MBSE to Early Phase Space System Development

Arcade Game Maker Product Line Production Plan

Blog Post Ideas To Scare Away The Tormenting Blinking Cursor

Best Practices in Social Media Summary of Findings from the Second Comprehensive Study of Social Media Use by Schools, Colleges and Universities

For those who were Agile before Agile was cool

CDER s Office of Pharmaceutical Quality (OPQ): Delivering on the 21 st Century Quality Goals

Socio-cognitive Engineering

with permission from World Scientific Publishing Co. Pte. Ltd.

1 Introduction and Roadmap: History and Challenges of Software Evolution

Distributed Systems Programming (F21DS1) Formal Methods for Distributed Systems

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

TOWARDS CUSTOMIZED SMART GOVERNMENT QUALITY MODEL

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

Digital Engineering (DE) and Computational Research and Engineering Acquisition Tools and Environments (CREATE)

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

Developers, designers, consumers to play equal roles in the progression of smart clothing market

Frameworks for Assessing IT Systems Engineering Acquisition Issues and Proposed Approaches in Support of Public Law 111

Scientific Certification

Julie L. Marble, Ph.D. Douglas A. Few David J. Bruemmer. August 24-26, 2005

Introduction to Software Requirements and Design

Marketing experts tell ya to publish content that grows your blog and business. But how can you actually know what works?

Three habits to bridge research code and sustainable software

CC532 Collaborative System Design

BA (Hons) Photography Length of Course

FAA Research and Development Efforts in SHM

Infrastructure for Systematic Innovation Enterprise

Six steps to measurable design. Matt Bernius Lead Experience Planner. Kristin Youngling Sr. Director, Data Strategy

A Template for Creating Student Personas

Strategic Design. Michael Corsetto

The Overview. Our Idea

Technology Risk and Innovation GCOR 2017

OpenUP. IRCDL 2018 Udine, Gennaio

Transcription:

Code Complete 2: A Decade of Advances in Software Construction www.construx.com 2004 Construx Software Builders, Inc. All Rights Reserved. Construx Delivering Software Project Success Introduction

History of Code Complete Published in 1993 Comprehensive survey of construction practices in 1993 Revised in 2003-04 Comprehensive survey of construction practices in 2004 What have we learned in 10 years? 3 Underlying Distinction Technology knowledge (accidental) Short lived Readily acquired Principles knowledge (essential) Longer lived Not-so-readily acquired 4

Where Does Code Complete 2 (CC2) Fit into this? Attempt in 1993 was to capture lasting knowledge of software construction (principles knowledge) I ve asserted for many years that 95% of the content of CC1 is still relevant Is this true? 5 Overview Worst Ideas of 1993 and 2004 A Decade of Advances in Construction Construction Realities as of 2004 6

Worst Ideas of 1993 and 2004 Some of the Worst Ideas of 1993 Hacking Optimize as you go programming All design up front programming Design ahead programming Flow charts Automatic programming Formal methods as a cure all Calling everything object oriented 8

Some of the Worst Ideas of 2004 Hacking Optimize as you go programming No design up front Planning ahead to refactor later Automatic programming Extreme Programming as a cure all Calling everything agile 9 Worst Ideas, 1993 vs. 2004 1993 Hacking Optimize as you go programming All design up front programming Design ahead programming Flow charts Automatic programming Formal methods as a cure all Calling everything object oriented 2004 Hacking Optimize as you go programming No design up front - Planning ahead to refactor later Automatic programming Extreme Programming as a cure all Calling everything agile 10

A Decade of Advances in Software Construction How Far Have We Come In 10 Years???? 12

1. Daily Build and Smoke Test Institutionalizes incremental integration 13 2. Code Libraries Good programmers have always done this Now supported by languages (C++, Java, VB) 14

3. Visual Basic Visual programming innovation The first language to make widespread use of COTS components Only language to learn syntax lessons from Ada (case statements, control statements, etc.) 15 4. The Web, for Research FAQs Discussion groups Searchability in general 16

5. Open Source Software Great aid to programmers Beware of legal issues 17 6. The Web, for Code Libraries (including Open Source) Combination of searchability + Open Source + vast resources = genuine innovation 18

7. Test-First Development Shortens time to defect detection Increases personal discipline Nice complement to daily build & smoke test 19 8. Refactoring as a Discipline for Modifications Provides a discipline for making changes 20

9. Widespread Use of Incremental Development Practices Concepts were well known in 1993 Practice is well known in 2004 21 10. Faster Computers Compare CC1 performance benchmarks to CC2 benchmarks Implications for optimization 22

Construction Realities as of 2004 Overview of 2004 s Construction Realities Construction as a Topic Individual variation Personal discipline Simplicity Defect cost increase Importance of design Technology waves Incremental development Toolbox metaphor 24

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 26

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 27 Distinction Between Activities and Phases Activity!= Phase (<> for VB programmers) Talking about Construction as an activity does not imply a distinct phase Differentiating between kinds of activities is extremely helpful 28

Individual Variation Is Significant Where do Variations Exist? Researchers have found 10:1 variations in: Coding speed Debugging speed Defect-finding speed Percentage of defects found Bad-fix injection rate Design quality Amount of code generated from a design Teamwork Etc. 30

Significance of Individual Variability According to Cocomo II calibrations, worst personnel will require 1,380% as much effort to produce software as best personnel Personnel/Team Capability 3.53x Staff s Applications Experience Staff s Language and Tools Experience Staff s Platform Experience Team Cohesion 1.51x 1.43x 1.40x 1.29x Source: Software Cost Estimation with Cocomo II, Barry W. Boehm, et al, Prentice Hall, 2000 31 Key Skills of an Expert Programmer Designing Flushing out errors and ambiguities in requirements Coding (naming, formatting, commenting, compiling) Integration Debugging Unit testing Using tools for all of the above 32

Personal Discipline Matters Programmers Have Not Gotten Better at Predicting the Future Optimizing As you go Design ahead Guessing end-user needs Etc. 34

Why Personal Discipline Matters Being realistic about predicting the future Areas where discipline matters Refactoring Prototyping Optimization Managing Complexity Endpoints Watts Humphrey s PSP Kent Beck s Extreme Programming 35 A Focus on Simplicity Works Better than a Focus on Complexity

Simplicity vs. Complexity Why do projects fail? Focus on write-time vs. read-time convenience YAGNI and design ahead 37 Defect-Cost Increase is Alive and Well

Defect Cost Increase Activity in Which a Defect Is Introduced Cost to Correct Requirements Architecture Construction Requirements Architecture Construction System test Post-Release Activity in Which a Defect Is Detected 39 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. 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. Willis, Ron R., et al, 1998. Hughes Aircraft s Widespread Deployment of a Continuously Improving Software Process, Software Engineering Institute/Carnegie Mellon University, CMU/SEI-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. Orange Park, FL: Software Quality Engineering. Shull, et al, 2002. What We Have Learned About Fighting Defects, Proceedings, Metrics 2002. IEEE; pp. 249-258. Boehm, Barry and Richard Turner, 2004. Balancing Agility and Discipline: A Guide for the Perplexed, Boston, Mass.: Addison Wesley, 2004. 40

Living With Defect-Cost Increase Activity in Which a Defect Is Introduced Requirements Fix Here Don t Wait to Fix Here Cost to Correct Architecture Construction Requirements Architecture Construction System test Post-Release Activity in Which a Defect Is Detected 41 Importance of Design

Design Advice What has Changed in 10 Years? In 1993, design pundits wanted to dot every i and cross every t before writing any code In 2004, 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 being advocated! 43 General Point: Extremes are Usually Not Productive All design up front vs. no design up front Entirely sequential vs. entirely improvised All discipline vs. all art Document everything vs. document nothing Formal methods vs. hacking 44

Your Location on the Technology Wave Affects Your Construction Practices Effect of Technology Waves on Construction Definition of technology wave Early wave characteristics Late wave characteristics Construction is affected by technology more than I thought (duh!) but still at the principles level 46

Incremental Approaches Work Best CC1 s View of Incrementalism Evolution during development is an issue that hasn t received much attention in its own right. With the rise of code-centered approaches such as prototyping and evolutionary delivery, it s likely to receive an increasing amount of attention. The word incremental has never achieved the designer status of structured or object-oriented, so no one has ever written a book on incremental software engineering. That s too bad because the collection of techniques in such a book would be exceptionally potent. 48

Examples of Iteration & Incrementalism Iterative Approaches UI Prototyping Evolutionary prototyping Proof-of-concept prototyping Requirements reviews Design reviews Project estimates Project Planning Incremental Approaches Staged delivery Design to schedule Incremental integration Daily builds Project planning 49 Iteration & Incrementalism The pure waterfall model is neither incremental nor iterative which is why it hasn t worked very well Evolutionary prototyping is both incremental and iterative Staged delivery is incremental but not iterative Some practices derive their power from iteration, some from incrementalism, and some from both 50

The Toolbox Metaphor Continues to be Illuminating Toolbox Metaphor Toolbox explains there s no one right tool for every job What s in the Software Engineering Toolbox? Best practices Lifecycle models Individuals skills Reusable materials (templates, checklists, standards, guides, patterns, samples, references) 52

Summary Software s Essential Tensions Software s essential tensions have remained unchanged for years: Rigid plans vs. Improvisation Planning vs. Fortune Telling Creativity vs. Structure Discipline vs. Flexibility Optimizing vs. Satisficing Quantitative vs. Qualitative Writeability vs. Readability Process vs. Product Theory vs. Practice Balance wavers, but basic tensions are constants In the end, these tensions are what keeps software development interesting! 54

Construx Delivering Software Project Success Software Projects Coaching & Consulting Training info@construx.com www.construx.com 55 Major Updates to CC2 All programming examples (~500) updated to modern languages (Java, VB, C++) New chapters on Design, Classes, Defensive Programming, Collaborative Construction, Refactoring OO integrated throughout Web integrated throughout Numerous complementary resources on companion website cc2e.com Further Reading updated throughout 56