copyright 2003-2009, dennis j. frailey software engineering best practices dennis j. frailey...

48
Copyright 2003-2009, Dennis J. Frailey Software Engineering Best Practices Dennis J. Frailey [email protected] Things that make a big difference for real software development projects

Upload: elvin-porter

Post on 12-Jan-2016

212 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Copyright 2003-2009, Dennis J. Frailey Software Engineering Best Practices Dennis J. Frailey Frailey@ACM.ORG Things that make a big difference for real

Copyright 2003-2009, Dennis J. Frailey

Software Engineering Best Practices

Dennis J. [email protected]

Things that make a big difference for real software development

projects

Page 2: Copyright 2003-2009, Dennis J. Frailey Software Engineering Best Practices Dennis J. Frailey Frailey@ACM.ORG Things that make a big difference for real

2 Copyright 2003-2009, Dennis J. Frailey 2

Objective

To present some basic techniques used in professional software development projects– Some of these are not widely covered in

undergraduate programs

Page 3: Copyright 2003-2009, Dennis J. Frailey Software Engineering Best Practices Dennis J. Frailey Frailey@ACM.ORG Things that make a big difference for real

3 Copyright 2003-2009, Dennis J. Frailey 3

Would You Buy This Car?

The price is 50% more than what you agreed to pay

Delivered to the dealer 3 months late Not the right color Some of the options you selected aren’t

there (“we’ll install them later”) The speakers and the CD player are

incompatible, so you can only use the CD player through headphones

Although “new”, it has 5,000 miles on it from the extensive testing that was done

Despite that testing, it still won’t start if it’s below freezing and it has a number of other problems

Page 4: Copyright 2003-2009, Dennis J. Frailey Software Engineering Best Practices Dennis J. Frailey Frailey@ACM.ORG Things that make a big difference for real

4 Copyright 2003-2009, Dennis J. Frailey 4

Frequent Problems on Real Software Projects

Nobody knows what work must be done– Do we need to provide an installation guide?– Is there a warranty on this software and what

do we do about it if there is?– In what format should we deliver the code?

Vague understanding of the big picture– How does the software fit into the overall

customer environment? Are the networks and computers suitable for the software?

– Will the customer understand how to use it?– Do the software developers know how it will

be used?

Page 5: Copyright 2003-2009, Dennis J. Frailey Software Engineering Best Practices Dennis J. Frailey Frailey@ACM.ORG Things that make a big difference for real

5 Copyright 2003-2009, Dennis J. Frailey 5

Frequent Problems on Real Software Projects (continued)

Unclear understanding of how much has been accomplished and how much is left to do– “How much longer will it take?”– “How much more money is required?”

Ignorance about risks– Do we have any idea what the real risks are?– Is there something we can do to mitigate

them? (Make them less likely or lower their potential impact)

– Do we know what to do if they happen?

Page 6: Copyright 2003-2009, Dennis J. Frailey Software Engineering Best Practices Dennis J. Frailey Frailey@ACM.ORG Things that make a big difference for real

6 Copyright 2003-2009, Dennis J. Frailey 6

Frequent Problems on Real Software Projects (continued)

Confusion about different versions of software– Which version of the data base goes with the

latest version of the user interface?– How come it does one thing in the customer’s

site but something else in our testing lab?– Does the design match the code? If not, which

one is right?

Haphazard approaches to quality– “We didn’t have time to test it thoroughly”– “We tested it for weeks but it still had lots of

bugs”

Page 7: Copyright 2003-2009, Dennis J. Frailey Software Engineering Best Practices Dennis J. Frailey Frailey@ACM.ORG Things that make a big difference for real

7 Copyright 2003-2009, Dennis J. Frailey 7

Best Practices for Managing These Problems

The Work Breakdown Structure– Documenting and organizing the work to be

done Estimating and Tracking

– So you know where you are Systems Engineering

– Designing the big system before designing the software

Risk Management Configuration Management Quality Assurance

Page 8: Copyright 2003-2009, Dennis J. Frailey Software Engineering Best Practices Dennis J. Frailey Frailey@ACM.ORG Things that make a big difference for real

8 Copyright 2003-2009, Dennis J. Frailey 8

The Work Breakdown Structure

Definition: A work breakdown structure is a hierarchical list of the work activities required to complete a project.

This includes tasks for: - Software development - Management of software development - Support of software development - Any other activities required to meet

customer requirements, such as creation of documents, training programs, tool development or acquisition, travel, etc.

ParserCode

GeneratorFile

SystemRun TimeSystem

UserInterface

ManageSoftware

Development

Build “C”Compiler

Build TestSuite

WriteDocumentation

WriteInstallationSoftware

Software for“C” Compiler

Page 9: Copyright 2003-2009, Dennis J. Frailey Software Engineering Best Practices Dennis J. Frailey Frailey@ACM.ORG Things that make a big difference for real

9 Copyright 2003-2009, Dennis J. Frailey 9

Sample Work Breakdown Structure for Taking a Course

1. Take a Course on Programming in Java1.1 Do Assignment 1 – Simple Program1.2 Do Assignment 2 – Program with Arrays1.3 Take Midterm Exam1.4 Do Assignment 3 – Program with Pointers1.5 Do Assignment 4 – Program with I/O1.6 Take Final Exam

These are the tasks you must complete in order to finish the course

Page 10: Copyright 2003-2009, Dennis J. Frailey Software Engineering Best Practices Dennis J. Frailey Frailey@ACM.ORG Things that make a big difference for real

10 Copyright 2003-2009, Dennis J. Frailey 10

Sample Work Breakdown Structure Hierarchy Allows Additional Detail

1. Take a Course on Programming in Java1.1 Do Assignment 1 – Simple Program 1.1.1 Study Chapters 1 and 2 of textbook 1.1.2 Write a Simple Java Program 1.2 Do Assignment 2 – Program with Arrays 1.2.1 Study Chapters 3 and 4 1.2.2 Review Graded Assignment 1 1.2.3 Write Java Program with Arrays1.3 Take Midterm Exam 1.3.1 Study Chapters 1-5 1.3.2 Meet with study group to review 1.3.3 Go to exam room at designated time

Page 11: Copyright 2003-2009, Dennis J. Frailey Software Engineering Best Practices Dennis J. Frailey Frailey@ACM.ORG Things that make a big difference for real

11 Copyright 2003-2009, Dennis J. Frailey 11

Sample WBS for a Software Project (top levels only)

1.0 Software for Payroll system 1.1 Build the Payroll software 1.1.1 Build a User Interface 1.1.2 Build a File System 1.1.3 Build a Data Base 1.1.4 Build a Table of Rules 1.1.5 Build a Check Printing System 1.2 Build the Test Suite for the Software 1.2.1 (detailed steps for building test suite) 1.3 Write Documentation 1.4 Write Installation Software 1.5 Manage the Above

Page 12: Copyright 2003-2009, Dennis J. Frailey Software Engineering Best Practices Dennis J. Frailey Frailey@ACM.ORG Things that make a big difference for real

12 Copyright 2003-2009, Dennis J. Frailey 12

The WBS Is ...

A “table of contents” for the project.

Page 13: Copyright 2003-2009, Dennis J. Frailey Software Engineering Best Practices Dennis J. Frailey Frailey@ACM.ORG Things that make a big difference for real

13 Copyright 2003-2009, Dennis J. Frailey 13

Top Level Role of WBS

SourceDocuments

(Statement of Work,

Requirements,contract,

test criteria, etc,)

HistoricalRecords(at end

of project)

WBS

CostEstimate

(proposal &/project start)

CostTracking(during

execution)

Page 14: Copyright 2003-2009, Dennis J. Frailey Software Engineering Best Practices Dennis J. Frailey Frailey@ACM.ORG Things that make a big difference for real

14 Copyright 2003-2009, Dennis J. Frailey 14

Best Practices for Managing These Problems

The Work Breakdown Structure– Documenting and organizing the work to be

done Estimating and Tracking

– So you know where you are Systems Engineering

– Designing the big system before designing the software

Risk Management Configuration Management Quality Assurance

Page 15: Copyright 2003-2009, Dennis J. Frailey Software Engineering Best Practices Dennis J. Frailey Frailey@ACM.ORG Things that make a big difference for real

15 Copyright 2003-2009, Dennis J. Frailey 15

Using the WBS to Estimate

WBS #

Task Estimated Hours

Estimated Completion

1.1 Do Assignment 1 15 9/22

1.1.1 Read Chapters 1, 2 3 9/15

1.1.2 Write Simple Java Pgm 12 9/22

1.2 Do Assignment 2 21 9/30

1.2.1 Read Chapters 3, 4 4 9/23

1.2.2 Review Graded Assign. 1 1 9/23

1.2.3 Write Java Pgm with Arrays 16 9/30

Page 16: Copyright 2003-2009, Dennis J. Frailey Software Engineering Best Practices Dennis J. Frailey Frailey@ACM.ORG Things that make a big difference for real

16 Copyright 2003-2009, Dennis J. Frailey 16

Using the WBS to Track

WBS #

Task Estimated Hours

Actual Hours

Estimated Completion

Actual

1.1 Do Assignment 1 15 12 9/22 9/25

1.1.1 Read Chapters 1, 2

3 2 9/15 9/22

1.1.2 Write Simple Java Pgm

12 10 9/22 9/25

1.2 Do Assignment 2 21 9/30

1.2.1 Read Chapters 3, 4

4 9/23

1.2.2 Review Graded Assign. 1

1 9/23

1.2.3 Write Java Pgm with Arrays

16 9/30

Page 17: Copyright 2003-2009, Dennis J. Frailey Software Engineering Best Practices Dennis J. Frailey Frailey@ACM.ORG Things that make a big difference for real

17 Copyright 2003-2009, Dennis J. Frailey 17

Graph to Show Progress

I M Exhausted, CSE 7315, Fall 2004BCWS/ACWP/BCWP Line Chart

0

20

40

60

80

100

120

140

160

180

Wk 1 Wk 2 Wk 3 Wk 4 Wk 5 Wk 6 Wk 7 Wk 8 Wk 9 Wk 10 Wk 11 Wk 12 Wk 13 Wk 14 Wk 15

Week Number

Hou

rs

BCWS

ACWP

BCWP

Page 18: Copyright 2003-2009, Dennis J. Frailey Software Engineering Best Practices Dennis J. Frailey Frailey@ACM.ORG Things that make a big difference for real

18 Copyright 2003-2009, Dennis J. Frailey 18

Using the WBS for Historical Records

Previous WBS

New WBS

Facts about New

Project

Previous WBS

Previous WBS

Previous WBS

Old Projects

Page 19: Copyright 2003-2009, Dennis J. Frailey Software Engineering Best Practices Dennis J. Frailey Frailey@ACM.ORG Things that make a big difference for real

19 Copyright 2003-2009, Dennis J. Frailey 19

Best Practices for Managing These Problems

The Work Breakdown Structure– Documenting and organizing the work to be

done Estimating and Tracking

– So you know where you are Systems Engineering

– Designing the big system before designing the software

Risk Management Configuration Management Quality Assurance

Page 20: Copyright 2003-2009, Dennis J. Frailey Software Engineering Best Practices Dennis J. Frailey Frailey@ACM.ORG Things that make a big difference for real

20 Copyright 2003-2009, Dennis J. Frailey 20

Systems EngineeringA Sample System

Display PrinterKeyboard

Processorand

Memory

SystemSoftware

PowerSupply

Computer

SystemUnit

Page 21: Copyright 2003-2009, Dennis J. Frailey Software Engineering Best Practices Dennis J. Frailey Frailey@ACM.ORG Things that make a big difference for real

21 Copyright 2003-2009, Dennis J. Frailey 21

Systems Engineering - Step 1 - Analyze the Requirements of the Overall System

Determine what the customer really wants– >> Analysis of the problem and the need

Produce testable specifications (may be in the form of simulations of expected behavior, use cases, specification documents, system requirements models, or other things)

Confirm the specifications are right by conferring with the customer

Page 22: Copyright 2003-2009, Dennis J. Frailey Software Engineering Best Practices Dennis J. Frailey Frailey@ACM.ORG Things that make a big difference for real

22 Copyright 2003-2009, Dennis J. Frailey 22

Systems Engineering - Step 2 - Design the System

Select the architecture of the system – >> Synthesis, not analysis– Done by Systems engineer and/or chief

architect Determine the major parts (functional

decomposition into sub-systems) Determine the interfaces between the

subsystems Allocate the requirements to the various

parts

Page 23: Copyright 2003-2009, Dennis J. Frailey Software Engineering Best Practices Dennis J. Frailey Frailey@ACM.ORG Things that make a big difference for real

23 Copyright 2003-2009, Dennis J. Frailey 23

Example of Requirements Allocation

Requirements:

- Sense Status

- A/D conversion

- Display

Temperature Sensor

AnalogDevice

A/DConverter Software

Page 24: Copyright 2003-2009, Dennis J. Frailey Software Engineering Best Practices Dennis J. Frailey Frailey@ACM.ORG Things that make a big difference for real

24 Copyright 2003-2009, Dennis J. Frailey 24

Typical Requirements Flowdown

Transmission

System Analysis& Design

Allocated Requirements

Automobile

Drive Train ChassisEngine

100 pounds

torque ...

50 pounds 2000 pounds

500 pounds250 hp

...

Original Requirements

3000 pounds

0-60mph in 9 sec

Page 25: Copyright 2003-2009, Dennis J. Frailey Software Engineering Best Practices Dennis J. Frailey Frailey@ACM.ORG Things that make a big difference for real

25 Copyright 2003-2009, Dennis J. Frailey 25

Best Practices for Managing These Problems

The Work Breakdown Structure– Documenting and organizing the work to be

done Estimating and Tracking

– So you know where you are Systems Engineering

– Designing the big system before designing the software

Risk Management Configuration Management Quality Assurance

Page 26: Copyright 2003-2009, Dennis J. Frailey Software Engineering Best Practices Dennis J. Frailey Frailey@ACM.ORG Things that make a big difference for real

26 Copyright 2003-2009, Dennis J. Frailey 26

Risk Management

Risks are:– things that can go wrong

If it has already happened, or is certain to happen, it is an issue, not a risk!– You should be discussing your action plan

for managing the problem

Page 27: Copyright 2003-2009, Dennis J. Frailey Software Engineering Best Practices Dennis J. Frailey Frailey@ACM.ORG Things that make a big difference for real

Copyright 2003-2009, Dennis J. Frailey

Risk Management Phases

1) Risk Assessment – The things you do before you start the

project to identify– What can go wrong– How it can hurt you– Why it may happen– How you can mitigate (reduce) the risk

2) Risk Control– The things you do during the project

– Preventing the unexpected– Responding when you cannot prevent

Page 28: Copyright 2003-2009, Dennis J. Frailey Software Engineering Best Practices Dennis J. Frailey Frailey@ACM.ORG Things that make a big difference for real

28 Copyright 2003-2009, Dennis J. Frailey 28

Risk Assessment ChartRisk Evidence How

LikelyImpact Priority Mitigation

Late project due to employee turnover

Unplanned turnover rate has been running high

7 7 49 Employee bonuses if they stay to end of project

Bottleneck at testing due to changing require-ments

Past experience with this customer

8 6 48 Iterative development Customer workshops

Etc. Etc. Etc. Etc. Etc. Etc.

Page 29: Copyright 2003-2009, Dennis J. Frailey Software Engineering Best Practices Dennis J. Frailey Frailey@ACM.ORG Things that make a big difference for real

29 Copyright 2003-2009, Dennis J. Frailey 29

Risk Control

A) Risk Monitoring

- Watching to see if risks happen

– Metrics to warn you of problems

– Periodic reviews

B) Risk Abatement

- Counteracting risks

- Taking contingency actions as needed

Page 30: Copyright 2003-2009, Dennis J. Frailey Software Engineering Best Practices Dennis J. Frailey Frailey@ACM.ORG Things that make a big difference for real

30 Copyright 2003-2009, Dennis J. Frailey 30

Risk Control ChartRisk Monitoring Counteracting /

Contingency Ongoing

Mitigation

Late project due to employee turnover

Measure turnover rate and project schedule

Get management help in identifying alternate employees

Periodic employee mini-bonuses

Bottleneck at QA due to changing require-ments

Track requirements changes and QA backlog

Requirements freeze; Multiple releases

Feature prioritization

Etc. Etc. Etc. Etc.

Page 31: Copyright 2003-2009, Dennis J. Frailey Software Engineering Best Practices Dennis J. Frailey Frailey@ACM.ORG Things that make a big difference for real

31 Copyright 2003-2009, Dennis J. Frailey 31

Risk Management is Ongoing

Risk Management (planning, analysis)

Product Development

Actions to identify and monitor risks

Actions to mitigate or abate risks

Page 32: Copyright 2003-2009, Dennis J. Frailey Software Engineering Best Practices Dennis J. Frailey Frailey@ACM.ORG Things that make a big difference for real

32 Copyright 2003-2009, Dennis J. Frailey 32

Requirements Stability Monitoring

Requirements Stability

0

20

40

60

80

100

120

140

160

Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec

TotalTBDChanges

CDRPDR

Page 33: Copyright 2003-2009, Dennis J. Frailey Software Engineering Best Practices Dennis J. Frailey Frailey@ACM.ORG Things that make a big difference for real

33 Copyright 2003-2009, Dennis J. Frailey 33

Risk Monitoring Thresholds Establish thresholds so you know when

to act– Beware of the “frog in the water” problem

– Historical experience is a good basis to judge when things are getting out of hand

Page 34: Copyright 2003-2009, Dennis J. Frailey Software Engineering Best Practices Dennis J. Frailey Frailey@ACM.ORG Things that make a big difference for real

34 Copyright 2003-2009, Dennis J. Frailey 34

Best Practices for Managing These Problems

The Work Breakdown Structure– Documenting and organizing the work to be

done Estimating and Tracking

– So you know where you are Systems Engineering

– Designing the big system before designing the software

Risk Management Configuration Management Quality Assurance

Page 35: Copyright 2003-2009, Dennis J. Frailey Software Engineering Best Practices Dennis J. Frailey Frailey@ACM.ORG Things that make a big difference for real

35 Copyright 2003-2009, Dennis J. Frailey 35

What Is Software Configuration Management?

Definition:

Software Configuration Management is the process

of identifying, organizing and managing modifications to

software

Software Configuration Management is the process

of identifying, organizing and managing modifications to

software

Page 36: Copyright 2003-2009, Dennis J. Frailey Software Engineering Best Practices Dennis J. Frailey Frailey@ACM.ORG Things that make a big difference for real

36 Copyright 2003-2009, Dennis J. Frailey 36

Purpose ofConfiguration Management

The purpose of configuration management is to maintain integrity of the product by controlling change to the

product

The purpose of configuration management is to maintain integrity of the product by controlling change to the

product

Page 37: Copyright 2003-2009, Dennis J. Frailey Software Engineering Best Practices Dennis J. Frailey Frailey@ACM.ORG Things that make a big difference for real

37 Copyright 2003-2009, Dennis J. Frailey 37

All components that make up or relate to a version of a product– The proper version of each:

What Is The Configuration?

� document� compiler used to develop� development tool� data set used for

simulating� special equipment� operating system

� test code� test data� library� procedur

e� hardware� etc.

� module� component� data file� macro� simulator� specification

If any of the above is wrong, the product lacks integrity and may not work

If any of the above is wrong, the product lacks integrity and may not work

Page 38: Copyright 2003-2009, Dennis J. Frailey Software Engineering Best Practices Dennis J. Frailey Frailey@ACM.ORG Things that make a big difference for real

38 Copyright 2003-2009, Dennis J. Frailey 38

What is Integrity?

Having the right parts that all fit together to form a correct product.

ListingUser’s Guide

Main, rel 2.3Sub1, rel 1.7Sub2, rel 3.1...

Object code

Page 39: Copyright 2003-2009, Dennis J. Frailey Software Engineering Best Practices Dennis J. Frailey Frailey@ACM.ORG Things that make a big difference for real

39 Copyright 2003-2009, Dennis J. Frailey 39

Why is SW Configuration Management Needed?

Because software is flexible, changeable, and intangible

It is too easy to lose integrity of software because of these factors

Unmanaged change is very possibly the largest single cause of failure to deliver

systems on time and within budget.NASA SCM Guidebook, August, 1995

Unmanaged change is very possibly the largest single cause of failure to deliver

systems on time and within budget.NASA SCM Guidebook, August, 1995

Page 40: Copyright 2003-2009, Dennis J. Frailey Software Engineering Best Practices Dennis J. Frailey Frailey@ACM.ORG Things that make a big difference for real

40 Copyright 2003-2009, Dennis J. Frailey 40

Examples of Loss of Integrity

Performance 2 years ago cannot be duplicated with the current release

Source code will not compile without errors

Compiled code will not execute with the same results as the released code

It worked in the factory but not in the field

All records of a particular feature are gone, and the programmer/designer left the company

Page 41: Copyright 2003-2009, Dennis J. Frailey Software Engineering Best Practices Dennis J. Frailey Frailey@ACM.ORG Things that make a big difference for real

41 Copyright 2003-2009, Dennis J. Frailey 41

More Examples of Loss of Integrity

Compiled code has different object code or code size from released code

A bug that we fixed once before has reappeared

Code does not match the design specification

A feature that we added and fully tested has suddenly stopped working

We cannot figure out which version of each module is needed to reproduce a problem we found in the field

Page 42: Copyright 2003-2009, Dennis J. Frailey Software Engineering Best Practices Dennis J. Frailey Frailey@ACM.ORG Things that make a big difference for real

42 Copyright 2003-2009, Dennis J. Frailey 42

Configuration Management Has Five Major Functions

1) Configuration Identification– Which parts are combined in what way to

make a given release/version2) Configuration Control

– The rules for making changes to software3) Change Management

– Deciding who is allowed to make changes and when?

4) Status accounting– Where is each component?

5) Configuration Authentication– Verifying that everything is right

Page 43: Copyright 2003-2009, Dennis J. Frailey Software Engineering Best Practices Dennis J. Frailey Frailey@ACM.ORG Things that make a big difference for real

43 Copyright 2003-2009, Dennis J. Frailey 43

Best Practices for Managing These Problems

The Work Breakdown Structure– Documenting and organizing the work to be

done Estimating and Tracking

– So you know where you are Systems Engineering

– Designing the big system before designing the software

Risk Management Configuration Management Quality Assurance

Page 44: Copyright 2003-2009, Dennis J. Frailey Software Engineering Best Practices Dennis J. Frailey Frailey@ACM.ORG Things that make a big difference for real

44 Copyright 2003-2009, Dennis J. Frailey 44

Software Quality Assurance

Purposes:

– To prevent defective products from being shipped to the customer

– To arbitrate disputes when there are debates about whether the product is “good enough”

– To provide management and developers with visibility into the process being followed and the products being built So they can manage the outcome

Page 45: Copyright 2003-2009, Dennis J. Frailey Software Engineering Best Practices Dennis J. Frailey Frailey@ACM.ORG Things that make a big difference for real

45 Copyright 2003-2009, Dennis J. Frailey 45

Quality Assurance Looks at the Entire Process

Requirements

Development QC InspectionPass

Fail

Standards ofQuality

Process and Design Standards

Page 46: Copyright 2003-2009, Dennis J. Frailey Software Engineering Best Practices Dennis J. Frailey Frailey@ACM.ORG Things that make a big difference for real

46 Copyright 2003-2009, Dennis J. Frailey 46

Software Quality Assurance

Typical Practices:

– Inspections

– Reviews

– Audits

– Communication

– Measurements

– Independent confirmation of compliance Standards, requirements, procedures

Page 47: Copyright 2003-2009, Dennis J. Frailey Software Engineering Best Practices Dennis J. Frailey Frailey@ACM.ORG Things that make a big difference for real

47 Copyright 2003-2009, Dennis J. Frailey 47

Professional Software Engineering Is ...

Building Software Systems that People can Rely On

“The application of a systematic, disciplined, quantifiable approach to the development, operation and maintenance of software; that is, the application of engineering to software.”

IEEE Standard Glossary of Software Engineering Terminology

Page 48: Copyright 2003-2009, Dennis J. Frailey Software Engineering Best Practices Dennis J. Frailey Frailey@ACM.ORG Things that make a big difference for real

48 Copyright 2003-2009, Dennis J. Frailey 48

Questions?