chapter 1 principles of programming and software engineering

39
Chapter 1 Principles of Programming and Software Engineering

Post on 22-Dec-2015

228 views

Category:

Documents


3 download

TRANSCRIPT

Page 1: Chapter 1 Principles of Programming and Software Engineering

Chapter 1

Principles of Programming and Software Engineering

Page 2: Chapter 1 Principles of Programming and Software Engineering

© 2005 Pearson Addison-Wesley. All rights reserved 1-2

Problem Solving and Software Engineering

• Coding without a solution design increases debugging time

• A team of programmers for a large software development project involves– An overall plan– Organization– Communication

• Software engineering– Provides techniques to facilitate the development of

computer programs

Page 3: Chapter 1 Principles of Programming and Software Engineering

© 2005 Pearson Addison-Wesley. All rights reserved 1-3

What is Problem Solving?

• Problem solving– The process of taking the statement of a

problem and developing a computer program that solves that problem

• A solution consists of:– Algorithms

• Algorithm: a step-by-step specification of a function to solve a problem within a finite amount of time

– Ways to store data

Page 4: Chapter 1 Principles of Programming and Software Engineering

© 2005 Pearson Addison-Wesley. All rights reserved 1-4

The Life Cycle of Software

Figure 1.1

The life cycle of software as a waterwheel that can rotate from one phase to any other phase

Page 5: Chapter 1 Principles of Programming and Software Engineering

© 2005 Pearson Addison-Wesley. All rights reserved 1-5

The Life Cycle of Software

• Phase 1: Specification– Aspects of the problem which must be specified:

• What is the input data?• What data is valid and what data is invalid?• Who will use the software, and what user interface should be

used?• What error detection and error messages are desirable?• What assumptions are possible?• Are there special cases?• What is the form of the output?• What documentation is necessary?• What enhancements to the program are likely in the future?

Page 6: Chapter 1 Principles of Programming and Software Engineering

© 2005 Pearson Addison-Wesley. All rights reserved 1-6

The Life Cycle of Software

• Phase 1: Specification (Continued)– Prototype program

• A program that simulates the behavior of portions of the desired software product

• Phase 2: Design– Includes:

• Dividing the program into modules• Specifying the purpose of each module• Specifying the data flow among modules

Page 7: Chapter 1 Principles of Programming and Software Engineering

© 2005 Pearson Addison-Wesley. All rights reserved 1-7

The Life Cycle of Software

• Phase 2: Design (Continued)– Modules

• Self-contained units of code

• Should be designed to be:– Loosely coupled

– Highly cohesive

– Interfaces• Communication mechanisms among modules

Page 8: Chapter 1 Principles of Programming and Software Engineering

© 2005 Pearson Addison-Wesley. All rights reserved 1-8

The Life Cycle of Software

• Phase 2: Design (Continued)– Specifications of a function

• A contract between the function and the module that calls it• Should not commit the function to a particular way of

performing its task• Include the function’s preconditions and postconditions

• Phase 3: Risk Analysis– Building software entails risks– Techniques exist to identify, assess, and manage the

risks of creating a software product

Page 9: Chapter 1 Principles of Programming and Software Engineering

© 2005 Pearson Addison-Wesley. All rights reserved 1-9

The Life Cycle of Software

• Phase 4: Verification– Formal methods can be used to prove that an

algorithm is correct– Assertion

• A statement about a particular condition at a certain point in an algorithm

– Invariant• A condition that is always true at a particular point

in an algorithm

Page 10: Chapter 1 Principles of Programming and Software Engineering

© 2005 Pearson Addison-Wesley. All rights reserved 1-10

The Life Cycle of Software

• Phase 4: Verification (Continued)– Loop invariant

• A condition that is true before and after each execution of an algorithm’s loop

• Can be used to detect errors before coding is started

– The invariant for a correct loop is true:• Initially, after any initialization steps, but before the loop

begins execution• Before every iteration of the loop• After every iteration of the loop• After the loop terminates

Page 11: Chapter 1 Principles of Programming and Software Engineering

© 2005 Pearson Addison-Wesley. All rights reserved 1-11

The Life Cycle of Software

• Phase 5: Coding (Continued)– Involves:

• Translating the design into a particular programming language

• Removing syntax errors

• Phase 6: Testing– Involves:

• Removing the logical errors

Page 12: Chapter 1 Principles of Programming and Software Engineering

© 2005 Pearson Addison-Wesley. All rights reserved 1-12

The Life Cycle of Software

• Phase 6: Testing (Continued)– Test data should include:

• Valid data that leads to a known result• Invalid data• Random data• Actual data

• Phase 7: Refining the Solution– More sophisticated input and output routines– Additional features– More error checks

Page 13: Chapter 1 Principles of Programming and Software Engineering

© 2005 Pearson Addison-Wesley. All rights reserved 1-13

The Life Cycle of Software

• Phase 8: Production– Involves:

• Distribution to the intended users• Use by the users

• Phase 9: Maintenance– Involves

• Correcting user-detected errors• Adding more features• Modifying existing portions to suit the users better

Page 14: Chapter 1 Principles of Programming and Software Engineering

© 2005 Pearson Addison-Wesley. All rights reserved 1-14

What is a Good Solution?

• A solution is good if:– The total cost it incurs over all phases of its life

cycle is minimal

Page 15: Chapter 1 Principles of Programming and Software Engineering

© 2005 Pearson Addison-Wesley. All rights reserved 1-15

What is a Good Solution?

• The cost of a solution includes:– Computer resources that the program consumes– Difficulties encountered by users– Consequences of a program that does not

behave correctly

• Programs must be well structured and documented

• Efficiency is one aspect of a solution’s cost

Page 16: Chapter 1 Principles of Programming and Software Engineering

© 2005 Pearson Addison-Wesley. All rights reserved 1-16

Achieving a Modular Design: Abstraction

• Abstraction– Separates the purpose of a module from its

implementation– Specifications for each module are written

before implementation– Functional abstraction

• Separates the purpose of a function from its implementation

Page 17: Chapter 1 Principles of Programming and Software Engineering

© 2005 Pearson Addison-Wesley. All rights reserved 1-17

Achieving a Modular Design

– Data abstraction• Focuses of the operations of data, not on the

implementation of the operations

– Abstract data type (ADT)• A collection of data and operations on the data

• An ADT’s operations can be used without knowing how the operations are implemented, if the operations’ specifications are known

Page 18: Chapter 1 Principles of Programming and Software Engineering

© 2005 Pearson Addison-Wesley. All rights reserved 1-18

Achieving a Modular Design

– Data structure• A construct that can be defined within a

programming language to store a collection of data

Page 19: Chapter 1 Principles of Programming and Software Engineering

© 2005 Pearson Addison-Wesley. All rights reserved 1-19

Achieving a Modular Design

• Information hiding– Hide details within a module– Ensure that no other module can tamper with

these hidden details– Public view of a module

• Described by its specifications

– Private view of a module• Consists of details which should not be described by

the specifications

Page 20: Chapter 1 Principles of Programming and Software Engineering

© 2005 Pearson Addison-Wesley. All rights reserved 1-20

Object-Oriented Design

• Principles of object-oriented programming (OOP)– Encapsulation

• Objects combine data and operations

– Inheritance• Classes can inherit properties from other classes

– Polymorphism• Objects can determine appropriate operations at

execution time

Page 21: Chapter 1 Principles of Programming and Software Engineering

© 2005 Pearson Addison-Wesley. All rights reserved 1-21

Object-Oriented Design

• Advantages of an object-oriented approach– Existing classes can be reused– Program maintenance and verification are

easier

Page 22: Chapter 1 Principles of Programming and Software Engineering

© 2005 Pearson Addison-Wesley. All rights reserved 1-22

Top-Down Design

• Object-oriented design (OOD)– Produces modular solutions for problems that

primarily involve data– Identifies objects by focusing on the nouns in

the problem statement

Page 23: Chapter 1 Principles of Programming and Software Engineering

© 2005 Pearson Addison-Wesley. All rights reserved 1-23

Top-Down Design

• Top-down design (TDD)– Produces modular solutions for problems in

which the emphasis is on the algorithms– Identifies actions by focusing on the verbs in

the problem statement– A task is addressed at successively lower levels

of detail

Page 24: Chapter 1 Principles of Programming and Software Engineering

© 2005 Pearson Addison-Wesley. All rights reserved 1-24

Top-Down Design

Figure 1.4

A structure chart showing the hierarchy of modules

Page 25: Chapter 1 Principles of Programming and Software Engineering

© 2005 Pearson Addison-Wesley. All rights reserved 1-25

General Design Guidelines

• Use OOD and TDD together

• Use OOD for problems that primarily involve data

• Use TDD to design algorithms for an object’s operations

Page 26: Chapter 1 Principles of Programming and Software Engineering

© 2005 Pearson Addison-Wesley. All rights reserved 1-26

General Design Guidelines

• Consider TDD to design solutions to problems that emphasize algorithms over data

• Focus on what, not how, when designing both ADTs and algorithms

• Consider incorporating previously written software components into your design

Page 27: Chapter 1 Principles of Programming and Software Engineering

© 2005 Pearson Addison-Wesley. All rights reserved 1-27

Modeling Object-Oriented Design Using UML

• The Unified Modeling Language (UML) is a modeling language used to express object-oriented designs– Class diagrams specify the name of the class,

the data members of the class, and the operations

Page 28: Chapter 1 Principles of Programming and Software Engineering

© 2005 Pearson Addison-Wesley. All rights reserved 1-28

Modeling Object-Oriented Design Using UML

• UML (Continued)– Relationships between classes can be shown by

connecting classes with lines• Inheritance is shown with a line and an open

triangle to the parent class• Containment is shown with an arrow to the

containing class

– UML provides notation to specify visibility, type, parameter, and default value information

Page 29: Chapter 1 Principles of Programming and Software Engineering

© 2005 Pearson Addison-Wesley. All rights reserved 1-29

UML Diagrams

Figure 1.6

UML diagram for

a banking system

Page 30: Chapter 1 Principles of Programming and Software Engineering

© 2005 Pearson Addison-Wesley. All rights reserved 1-30

A Summary of Key Issues in Programming

• Modularity has a favorable impact on– Constructing programs– Debugging programs– Reading programs– Modifying programs– Eliminating redundant code

Page 31: Chapter 1 Principles of Programming and Software Engineering

© 2005 Pearson Addison-Wesley. All rights reserved 1-31

A Summary of Key Issues in Programming

• Modifiability is possible through the use of– Function– Named constants– The typedef statement

Page 32: Chapter 1 Principles of Programming and Software Engineering

© 2005 Pearson Addison-Wesley. All rights reserved 1-32

A Summary of Key Issues in Programming

• Ease of use – In an interactive environment, the program

should prompt the user for input in a clear manner

– A program should always echo its input– The output should be well labeled and easy to

read

Page 33: Chapter 1 Principles of Programming and Software Engineering

© 2005 Pearson Addison-Wesley. All rights reserved 1-33

A Summary of Key Issues in Programming

• Fail-Safe Programming– Fail-safe programs will perform reasonably no

matter how anyone uses it– Test for invalid input data and program logic

errors– Handle errors through exception handling

Page 34: Chapter 1 Principles of Programming and Software Engineering

© 2005 Pearson Addison-Wesley. All rights reserved 1-34

A Summary of Key Issues in Programming

• Eight issues of personal style in programming– Extensive use of functions– Use of private data fields– Avoidance of global variables in functions– Proper use of reference arguments

Page 35: Chapter 1 Principles of Programming and Software Engineering

© 2005 Pearson Addison-Wesley. All rights reserved 1-35

A Summary of Key Issues in Programming

• Eight issues of personal style in programming (Continued)– Proper use of functions– Error handling– Readability– Documentation

Page 36: Chapter 1 Principles of Programming and Software Engineering

© 2005 Pearson Addison-Wesley. All rights reserved 1-36

A Summary of Key Issues in Programming

• Debugging– Programmer must systematically check a

program’s logic to determine where an error occurs

– Tools to use while debugging:• Watches• Breakpoints•cout statements• Dump functions

Page 37: Chapter 1 Principles of Programming and Software Engineering

© 2005 Pearson Addison-Wesley. All rights reserved 1-37

Summary

• Software engineering: techniques to facilitate development of programs

• Software life cycle consists of nine phases

• Loop invariant: property that is true before and after each iteration of a loop

• Evaluating the quality of a solution must consideration a variety of factors

Page 38: Chapter 1 Principles of Programming and Software Engineering

© 2005 Pearson Addison-Wesley. All rights reserved 1-38

Summary

• A combination of object-oriented and top-down design techniques leads to a modular solution

• The final solution should be as easy to modify as possible

• A function should be as independent as possible and perform one well-defined task

Page 39: Chapter 1 Principles of Programming and Software Engineering

© 2005 Pearson Addison-Wesley. All rights reserved 1-39

Summary

• Functions should include a comment: purpose, precondition, and postcondition

• A program should be as fail-safe as possible

• Effective use of available diagnostic aids is one of the keys to debugging

• Use “dump functions” to help to examine and debug the contents of data structures