1 5.1 Software Engineering Practice Provide value to the user KIS—keep it simple! Maintain the...

11
1 5.1 Software Engineering 5.1 Software Engineering Practice Practice 1. 1. Provide value to the user Provide value to the user 2. 2. KIS—keep it simple! KIS—keep it simple! 3. 3. Maintain the product and project Maintain the product and project “vision” “vision” 4. 4. What you produce, others will consume What you produce, others will consume 5. 5. Be open to the future Be open to the future 6. 6. Plan ahead for reuse Plan ahead for reuse 7. 7. Think! Think! What is the difference between simple and What is the difference between simple and oversimplified in the software engineering oversimplified in the software engineering context? context? Do these principles apply to both agile and Do these principles apply to both agile and traditional/prescriptive methods? traditional/prescriptive methods?

Transcript of 1 5.1 Software Engineering Practice Provide value to the user KIS—keep it simple! Maintain the...

Page 1: 1 5.1 Software Engineering Practice  Provide value to the user  KIS—keep it simple!  Maintain the product and project “vision”  What you produce,

1

5.1 Software Engineering 5.1 Software Engineering PracticePractice

1.1. Provide value to the userProvide value to the user

2.2. KIS—keep it simple!KIS—keep it simple!

3.3. Maintain the product and project “vision”Maintain the product and project “vision”

4.4. What you produce, others will consumeWhat you produce, others will consume

5.5. Be open to the futureBe open to the future

6.6. Plan ahead for reusePlan ahead for reuse

7.7. Think!Think!

What is the difference between simple and oversimplified What is the difference between simple and oversimplified in the software engineering context? in the software engineering context?

Do these principles apply to both agile and Do these principles apply to both agile and traditional/prescriptive methods? traditional/prescriptive methods?

Page 2: 1 5.1 Software Engineering Practice  Provide value to the user  KIS—keep it simple!  Maintain the product and project “vision”  What you produce,

2

5.2 Communication 5.2 Communication PracticesPractices

Principles (Chapter 7)Principles (Chapter 7)1.1. ListenListen

2.2. Prepare before you communicatePrepare before you communicate

3.3. Facilitate the communicationFacilitate the communication

4.4. Face-to-face is bestFace-to-face is best

5.5. Take notes and document decisionsTake notes and document decisions

6.6. Collaborate with the customerCollaborate with the customer

7.7. Stay focusedStay focused

8.8. Draw pictures when things are unclearDraw pictures when things are unclear

9.9. Move on …Move on …

10.10. Negotiation works best when both parties win.Negotiation works best when both parties win.

How does agile communication differ from traditional sw engineering How does agile communication differ from traditional sw engineering communication? communication?

Page 3: 1 5.1 Software Engineering Practice  Provide value to the user  KIS—keep it simple!  Maintain the product and project “vision”  What you produce,

3

5.3 Planning 5.3 Planning PracticesPractices

Principles (Chapters 21-24)Principles (Chapters 21-24)1.1. Understand the project scopeUnderstand the project scope2.2. Involve the customer (and other stakeholders)Involve the customer (and other stakeholders)3.3. Recognize that planning is iterativeRecognize that planning is iterative4.4. Estimate based on what you knowEstimate based on what you know5.5. Consider riskConsider risk6.6. Be realisticBe realistic7.7. Adjust granularity as you planAdjust granularity as you plan8.8. Define how quality will be achievedDefine how quality will be achieved9.9. Define how you’ll accommodate changesDefine how you’ll accommodate changes10.10. Track what you’ve plannedTrack what you’ve planned

Page 4: 1 5.1 Software Engineering Practice  Provide value to the user  KIS—keep it simple!  Maintain the product and project “vision”  What you produce,

4

5.3 Planning 5.3 Planning PracticesPractices

Boehm’s WBoehm’s W55HH PrincipleHH Principle Why is the system being developed?Why is the system being developed? What will be done?What will be done? When will it be accomplished?When will it be accomplished? Who is responsible?Who is responsible? Where are they located (organizationally)?Where are they located (organizationally)? How will the job be done technically and How will the job be done technically and

managerially?managerially? How much of each resource is needed?How much of each resource is needed?

Page 5: 1 5.1 Software Engineering Practice  Provide value to the user  KIS—keep it simple!  Maintain the product and project “vision”  What you produce,

5

5.4 Modeling 5.4 Modeling PracticesPractices

We create models to gain a better understanding We create models to gain a better understanding of the actual entity to be builtof the actual entity to be built

Analysis modelsAnalysis models represent the customer represent the customer requirements by depicting the software in three requirements by depicting the software in three different domains: the information domain, the different domains: the information domain, the functional domain, and the behavioral domain. functional domain, and the behavioral domain.

Design modelsDesign models represent characteristics of the represent characteristics of the software that help practitioners to construct it software that help practitioners to construct it effectively: the architecture, the user interface, effectively: the architecture, the user interface, and component-level detail.and component-level detail.

Page 6: 1 5.1 Software Engineering Practice  Provide value to the user  KIS—keep it simple!  Maintain the product and project “vision”  What you produce,

6

Elements of the analysis model (Chapter 8)Elements of the analysis model (Chapter 8) Data modelData model Flow modelFlow model Class modelClass model Behavior modelBehavior model

Elements of the design model (Chapters 9-12)Elements of the design model (Chapters 9-12) Data designData design Architectural designArchitectural design Component designComponent design Interface designInterface design

How important is the architectural vision of a software system? How important is the architectural vision of a software system?

5.4 Modeling 5.4 Modeling PracticesPractices

Page 7: 1 5.1 Software Engineering Practice  Provide value to the user  KIS—keep it simple!  Maintain the product and project “vision”  What you produce,

7

5.5 Construction 5.5 Construction PracticesPractices

Preparation principles:Preparation principles: Before you write one line Before you write one line of code, be sure you:of code, be sure you:

1.1. Understand of the problem you’re trying to solve (see Understand of the problem you’re trying to solve (see communicationcommunication and and modelingmodeling))

2.2. Understand basic design principles and concepts.Understand basic design principles and concepts.

3.3. Pick a programming language that meets the needs of the Pick a programming language that meets the needs of the software to be built and the environment in which it will software to be built and the environment in which it will operate.operate.

4.4. Select a programming environment that provides tools Select a programming environment that provides tools that will make your work easier.that will make your work easier.

5.5. Create a set of unit tests that will be applied once the Create a set of unit tests that will be applied once the component you code is completedcomponent you code is completed.

Page 8: 1 5.1 Software Engineering Practice  Provide value to the user  KIS—keep it simple!  Maintain the product and project “vision”  What you produce,

8

5.5 Construction 5.5 Construction PracticesPractices

Coding principles: Coding principles: As you begin writing code, be sure you:As you begin writing code, be sure you:1.1. Constrain your algorithms by following structured Constrain your algorithms by following structured

programming [BOH00] practice.programming [BOH00] practice.

2.2. Select data structures that will meet the needs of the design.Select data structures that will meet the needs of the design.

3.3. Understand the software architecture and create interfaces Understand the software architecture and create interfaces that are consistent with it.that are consistent with it.

4.4. Keep conditional logic as simple as possible.Keep conditional logic as simple as possible.

5.5. Create nested loops in a way that makes them easily testable.Create nested loops in a way that makes them easily testable.

6.6. Select meaningful variable names and follow other local coding Select meaningful variable names and follow other local coding standards.standards.

7.7. Write code that is self-documenting.Write code that is self-documenting.

8.8. Create a visual layout (e.g., indentation and blank lines) that Create a visual layout (e.g., indentation and blank lines) that aids understanding.aids understanding.

Page 9: 1 5.1 Software Engineering Practice  Provide value to the user  KIS—keep it simple!  Maintain the product and project “vision”  What you produce,

9

5.5 Construction 5.5 Construction PracticesPractices

Validation Principles: Validation Principles: After you’ve completed After you’ve completed your first coding pass, be sure you:your first coding pass, be sure you:

1.1. Conduct a code walkthrough when appropriate.Conduct a code walkthrough when appropriate.

2.2. Perform unit tests and correct errors you’ve uncovered.Perform unit tests and correct errors you’ve uncovered.

3.3. Refactor the code. Refactor the code.

Page 10: 1 5.1 Software Engineering Practice  Provide value to the user  KIS—keep it simple!  Maintain the product and project “vision”  What you produce,

10

5.5 Construction 5.5 Construction PracticesPractices

Testing Principles (Chapters 13 and 14)Testing Principles (Chapters 13 and 14)1.1. All tests should be traceable to requirementsAll tests should be traceable to requirements

2.2. Tests should be plannedTests should be planned

3.3. The Pareto Principle applies to testingThe Pareto Principle applies to testing

4.4. Testing begins “in the small” and moves toward “in the Testing begins “in the small” and moves toward “in the large”large”

5.5. Exhaustive testing is not possibleExhaustive testing is not possible

What defines a successful software test? What defines a successful software test?

Page 11: 1 5.1 Software Engineering Practice  Provide value to the user  KIS—keep it simple!  Maintain the product and project “vision”  What you produce,

11

5.6 Deployment 5.6 Deployment PracticesPractices

PrinciplesPrinciples1.1. Manage customer expectations for each incrementManage customer expectations for each increment

2.2. A complete delivery package should be assembled and A complete delivery package should be assembled and testedtested

3.3. A support regime should be establishedA support regime should be established

4.4. Instructional materials must be provided to end-usersInstructional materials must be provided to end-users

5.5. Buggy software should be fixed first, delivered laterBuggy software should be fixed first, delivered later