So#ware Architecture Bertrand Meyer, Michela Pedroni ETH Zurich, - - PowerPoint PPT Presentation

so ware architecture
SMART_READER_LITE
LIVE PREVIEW

So#ware Architecture Bertrand Meyer, Michela Pedroni ETH Zurich, - - PowerPoint PPT Presentation

Chair of Software Engineering So#ware Architecture Bertrand Meyer, Michela Pedroni ETH Zurich, FebruaryMay 2010 Lecture 1: Introduction Goal of the course (From the course description in the ETH page) Software Architecture covers two


slide-1
SLIDE 1

Chair of Software Engineering

So#ware Architecture

Bertrand Meyer, Michela Pedroni ETH Zurich, February‐May 2010 Lecture 1: Introduction

slide-2
SLIDE 2

2

Goal of the course

(From the course description in the ETH page) Software Architecture covers two closely related aspects of software technology:

  • Techniques of software design: devising proper

modular structures for software systems. This is "architecture" in the strict sense.

  • An introduction to the non-programming, non-design

aspects of software engineering.

slide-3
SLIDE 3

3

Some topics

Software architecture:

  • Modularity and reusability
  • Abstract Data Types
  • Design by Contract and other O-O principles
  • Design Patterns
  • Component-Based Development
  • Designing for concurrency

Software engineering:

  • Process models
  • Requirements analysis
  • CMMI and agile methods
  • Software metrics
  • Software testing
  • Configuration management
  • Project management

Plus: an introduction to UML

slide-4
SLIDE 4

4

Practical information

slide-5
SLIDE 5

5

Lecturers

Bertrand Meyer, Bertrand.Meyer@inf.ethz.ch Office: RZ J22 Michela Pedroni, Michela.Pedroni@inf.ethz.ch Office: RZ J8

slide-6
SLIDE 6

6

Assistants

  • Dr. Martin Nordio

Stefan van Staden Julian Tschannen (Jason) Yi Wei

slide-7
SLIDE 7

7

Course material

Course page: http://se.inf.ethz.ch/teaching/2010-S/0050/  Check it regularly Lecture material:

  • Lecture slides
  • Recommended textbooks:
  • B. Meyer: Object-Oriented Software Construction,

2nd edition -- Prentice Hall, 1997

  • E. Gamma et al.: Design Patterns

Addison-Wesley, 1995 Exercise material:

  • Exercise sheets
  • Master solutions
slide-8
SLIDE 8

8

Supplementary recommended books

A good software engineering textbook (see precise references on course page):

  • Ghezzi / Jazayeri / Mandrioli

(broadest scope)

  • Pfleeger / Atlee

(the most recent)

  • Pressman

(emphasis on practitioners’ needs) On patterns: Karine Arnout’s ETH PhD thesis (available electronically)

slide-9
SLIDE 9

9

Electronic forums

Discussion forums: Inforum: http://forum.vis.ethz.ch Mailing list for each group Usual advice and rules:

  • Use the forums and mailing lists! Take advantage of every help you

can get.

  • Don’t be shy. There are no stupid questions.
  • Criticism welcome, but always be polite to every participant and
  • bserve the etiquette.
  • To email the whole teaching team (professor and assistants):

se-soft-arch-assi@lists.inf.ethz.ch

slide-10
SLIDE 10

10

Grading

50% project, 50% end-of-semester exam About the exam:

  • When: Tuesday, 1 June 2010, 14-16 (normal class

time) , 90 minutes

  • What: all topics of semester
  • How: no material allowed
slide-11
SLIDE 11

11

About the project

The project is an integral part of the course Goal:

  • Apply software architecture techniques
  • Practice group work in software engineering
  • Go through main phases of a realistic software

project: requirements, design of both program and test plan, implementation, testing The project may be done in groups: 1 to 4 students You must form the groups soon (by Friday of this week) If you are looking for partners and need help please use

  • ur “dating service”
slide-12
SLIDE 12

12

Project topic

Choice between two topics:

  • A data structure visualization library (for use e.g. in a

debugger)

  • An HTML generation library
slide-13
SLIDE 13

13

Project deadlines*

  • 1. Requirements specification:
  • Handed out: 1 March
  • Due: 21 March, Presentation: 22 March
  • 2. API design:
  • Due: 11 April, Presentation: 12 April
  • 3. Test plan (for another team’s project):
  • Due: 25 April, Presentation: 26 April
  • 4. Implementation (in Eiffel)
  • Due: 16 May, Presentation: 17 May
  • 5. Test report (on other team’s implementation):
  • Due: 23 May
  • 6. Final release
  • Due: 4 June

*Subject to slight adaptation

slide-14
SLIDE 14

14

Notes on the project

Grading criteria for each step, and the weight for each step, are given on the Web page In step 3 (previous slide) will be asked to devise a test plan for another group’s project, based only on its requirements specification (prior to implementation). Then you will have to run the test.

slide-15
SLIDE 15

15

Standards

For each step (except implementation), you will be given a template and will have to follow it While the project involves programming, it is not primarily a programming project, but a software engineering project. You will discover some of the challenges and techniques of developing software as part of actual projects. Forming the groups:

  • You do not need to reach the maximum team size (4).

Think of the tradeoffs involved: more manpower or more communication problems?

  • Select partners with complementary skills, e.g.

requirements, documentation, design, programming

slide-16
SLIDE 16

16

A request

We do not want you to drop the course, but if you are going to do so drop out early (March 25 at the latest) out

  • f courtesy to other students
slide-17
SLIDE 17

17

What is software architecture?

slide-18
SLIDE 18

18

Software architecture

We define software architecture as The decomposition of software systems into modules* Primary criteria: extendibility and reusability Examples of software architecture techniques & principles:

  • Abstract data types (as the underlying theory)
  • Object-oriented techniques: the notion of class,

inheritance, dynamic binding

  • Uniform access, single-choice, open-closed principle…
  • Design patterns
  • Classification of software architecture styles, e.g.

pipes and filters

* From the title of an article by Parnas, 1972

slide-19
SLIDE 19

19

Characterizing software architecture

“The inner and outer syntax of a programming language” (Wilkes, 1968) “Programming-in-the-large” vs “Programming-in-the-small” (DeRemer & Kron, 1975)

slide-20
SLIDE 20

20

What is software engineering?

slide-21
SLIDE 21

21

A definition of software engineering

Wikipedia (from SWEBOK, the Software Engineering Body

  • f Knowledge)

Software engineering is the application of a systematic, disciplined, quantifiable approach to the development,

  • peration, and maintenance of software, and the study of

these approaches; that is, the application of engineering to software. (Largely useless definition.)

slide-22
SLIDE 22

22

A simpler definition

“The application of engineering to software” Engineering (Wikipedia): “the discipline, art and profession

  • f acquiring and applying technical, scientific, and

mathematical knowledge to design and implement materials, structures, machines, devices, systems, and processes that safely realize a desired objective or invention” A simpler definition: the application of scientific principles to the construction of artifacts

slide-23
SLIDE 23

23

Parnas’s view

(Cited in Ghezzi et al.) “The multi-person construction of multiversion software”

slide-24
SLIDE 24

24

For this course

The application of engineering principles and techniques, based on mathematics, to the development and operation

  • f possibly large software systems satisfying defined

standards of quality

slide-25
SLIDE 25

25

Process and product

Software engineering affects both:

  • Software products
  • The processes used to obtain and operate these

products Products are not limited to code. Other examples include requirements, designs, documentation Processes exists whether they are formalized or not

slide-26
SLIDE 26

26

Software quality factors

Process

Product

Correctness Robustness Security Ease of use Ease of learning Efficiency Extendibility Reusability Portability

Immediate Long-term

Timeliness Cost-effectiveness Security Hostility Robustness Errors Correctness Specification

slide-27
SLIDE 27

27

Software engineering today

Three cultures:

  • Process
  • Agile
  • Object

The first two are usually seen as exclusive, but all have major contributions to make.

slide-28
SLIDE 28

Software Engineering, lecture 1: Personal Software Process for Engineers: Introduction to PSP

28

28

Process

Emphasize:

  • Plans
  • Schedules
  • Documents
  • Requirements
  • Specifications
  • Order of tasks
  • Commitments

Examples: Rational Unified Process, CMMI, Waterfall…

slide-29
SLIDE 29

29

Agile

Emphasize:

  • Short iterations
  • Testing (over specifications); “Test-Driven Development"
  • Constant customer involvement
  • Refusal to commit to both functionality and deadlines
  • Specific practices, e.g. Pair Programming

Examples: Extreme Programming (XP), lean programming

slide-30
SLIDE 30

30

Object-oriented culture

Emphasizes:

  • Seamless development
  • Reversibility
  • Single Product Principle
  • Design by Contract
slide-31
SLIDE 31

31

Five task groups of software engineering

Describe Implement Assess Manage Operate Requirements, design specification, documentation … Design, programming V&V*, esp. testing *Validation & Verification Plans, schedules, communication, reviews… Deployment, installation,

slide-32
SLIDE 32

32

A software architecture example

slide-33
SLIDE 33

33

Our first pattern example

Multi-panel interactive systems Plan of the rest of this lecture:

  • Description of the problem: an example
  • An unstructured solution
  • A top-down, functional solution
  • An object-oriented solution yielding a useful design

pattern

  • Analysis of the solution and its benefits
slide-34
SLIDE 34

34

A reservation panel

Flight sought from: To: Depart no earlier than: No later than:

18 Feb 2009 Choose next action: 0 – Exit 1 – Help 2 – Further enquiry 3 – Reserve a seat 18 Feb 2009 Santa Barbara Zurich ERROR: Choose a date in the future

slide-35
SLIDE 35

35

A reservation panel

Choose next action: 0 – Exit 1 – Help 2 – Further enquiry 3 – Reserve a seat AVAILABLE FLIGHTS: 2 Flt# LH 425 Dep 8:25 Arr 7:45 Thru: Shanghai Flt# CP 082 Dep 7:40 Arr 9:15 Thru: Hong Kong

Flight sought from: To: Depart no earlier than: No later than:

18 Mar 2010 18 Mar 2010 Santa Barbara Zurich

slide-36
SLIDE 36

36

The transition diagram

Help Help Initial Flight_query Seat_query Confirmation Reservation Help Help 1 1 1 1 2 3 3 2 2 2 2 3 3 3 1 1 1 1 1 1

slide-37
SLIDE 37

37

A first attempt

A program block for each state, for example:

PFlight_query: display ‘‘enquiry on flights’’ screen repeat Read user’s answers and his exit choice C if Error_in_answer then output_message end until not Error_in_answer end process answer inspect C when 0 then goto PExit when 1 then goto PHelp ... when n then goto PReservation end

slide-38
SLIDE 38

38

What’s wrong with the previous scheme?

  • Intricate branching structure (‘‘spaghetti bowl’’).
  • Extendibility problems: dialogue structure “wired” into

program structure.

slide-39
SLIDE 39

39

A functional, top-down solution

Represent the structure of the diagram by a function transition (i, k) giving the state to go to from state i for choice k. This describes the transitions of any particular application. Function transition may be implemented as a data structure, for example a two-dimensional array.

slide-40
SLIDE 40

40

The transition function

0 (Initial) 1 (Help) 2 (Confirmation) 3 (Reservation) 4 (Seats) 5 (Flights) 1 2 3 Exit Exit Exit Exit Exit Return 2 3 4 5 2 3 4

slide-41
SLIDE 41

41

The transition diagram

Help Help Initial Flight_query Seat_query Confirmation Reservation Help Help

1 1 1 1 2 3 3 2 2 2 2 3 3 3 1 1 1 1 1 5 2 4 3

slide-42
SLIDE 42

42

New system architecture

execute_session initial transition execute_state is_final display read correct message process Level 3 Level 2 Level 1

slide-43
SLIDE 43

43

New system architecture

Procedure execute_session only defines graph traversal. It knows nothing about particular screens of a given application; it should be the same for all applications. execute_session

  • - Execute full session.

local current_state, choice : INTEGER do current_state := initial repeat choice := execute_state (current_state) current_state := transition (current_state, choice) until is_final (current_state) end end

slide-44
SLIDE 44

44

To describe an application

  • Provide transition function
  • Define initial state
  • Define is_final function
slide-45
SLIDE 45

45

Actions in a state

execute_state (current_state : INTEGER ): INTEGER

  • - Execute actions for current_state ; return user’s exit choice.

local answer : ANSWER good : BOOLEAN choice : INTEGER do repeat display (current_state ) [answer, choice] := read (current_state ) good := correct (current_state, answer ) if not good then message (current_state, answer ) end until good end process (current_state, answer ) Result := choice end

slide-46
SLIDE 46

46

Specification of the remaining routines

  • display (s ) outputs the screen associated with state s.
  • [a, e] := read (s ) reads into a the user’s answer to the

display screen of state s, and into e the user’s exit choice.

  • correct (s, a ) returns true if and only if a is a correct

answer for the question asked in state s.

  • If so, process (s, a ) processes answer a.
  • If not, message (s, a ) outputs the relevant error

message.

slide-47
SLIDE 47

47

Going object-oriented: The law of inversion

How amenable is this solution to change and adaptation?

  • New transition?
  • New state?
  • New application?

Routine signatures: execute_state (state : INTEGER ): INTEGER display (state : INTEGER ) read (state : INTEGER ): [ANSWER, INTEGER ] correct (state : INTEGER ; a: ANSWER ): BOOLEAN message (state : INTEGER ; a: ANSWER ) process (state : INTEGER ; a: ANSWER ) is_final (state : INTEGER )

slide-48
SLIDE 48

48

Data transmission

All routines share the state as input argument. They must discriminate

  • n it, e.g. :

display (current_state : INTEGER )

do inspect current_state when state1 then ... when state2 then ... when staten then ... end end Consequences:

  • Long and complicated routines.
  • Must know about one possibly complex application.
  • To change one transition, or add a state, need to change all.
slide-49
SLIDE 49

49

The flow of control

Underlying reason why structure is so inflexible: Too much DATA TRANSMISSION. current_state is passed from execute_session (level 3) to all routines on level 2 and on to level 1 Worse: there’s another implicit argument to all routines –

  • application. Can’t define

execute_session, display, execute_state, ... as library components, since each must know about all interactive applications that may use it.

slide-50
SLIDE 50

50

The visible architecture

execute_session initial transition execute_state is_final display read correct message process Level 3 Level 2 Level 1

slide-51
SLIDE 51

51

The real story

execute_session initial transition execute_state is_final display read correct message process Level 3 Level 2 Level 1

state state

slide-52
SLIDE 52

52

The law of inversion

  • If your routines exchange too much data,

put your routines into your data. In this example: the state is everywhere!

slide-53
SLIDE 53

53

Going O-O

Use STATE as the basic abstract data type (and class). Among features of every state:

  • The routines of level 1 (deferred in class STATE )
  • execute_state, as above but without the argument

current_state

slide-54
SLIDE 54

54

Grouping by data abstractions

STATE

execute_session initial transition execute_state is_final display read correct message process Level 3 Level 2 Level 1

slide-55
SLIDE 55

55

Class STATE

deferred class STATE feature choice : INTEGER

  • - User’s selection for next step

input : ANSWER

  • - User’s answer for this step

display

  • - Show screen for this step.

deferred end read

  • - Get user’s answer and exit choice,
  • - recording them into input and choice.

deferred ensure input /= Void end

slide-56
SLIDE 56

56

Class STATE

correct : BOOLEAN

  • - Is input acceptable?

deferred end

message

  • - Display message for erroneous input.

require not correct deferred end

process

  • - Process correct input.

require correct deferred end

slide-57
SLIDE 57

57

Class STATE

execute_state local good : BOOLEAN do from until good loop display read good := correct if not good then message end end process choice := input.choice end end

slide-58
SLIDE 58

58

Class structure

STATE * INITIAL FLIGHT_QUERY RESERVATION

execute_state + display + read + correct + message + process + display + read + correct + message + process + display + read + correct + message + process + display * read * correct * message * process *

slide-59
SLIDE 59

59

To describe a state of an application

Write a descendant of STATE :

class FLIGHT_QUERY inherit

STATE feature display do ... end read do ... end correct : BOOLEAN do ... end message do ... end process do ... end end

slide-60
SLIDE 60

60

STATE

Rearranging the modules

execute_session initial transition execute_state

is_final

display read correct message process Level 3 Level 2 Level 1

APPLICATION

slide-61
SLIDE 61

61

Describing a complete application

No ‘‘main program’’ but class representing a system. Describe application by remaining features at levels 1 and 2:

  • Function transition.
  • State initial.
  • Boolean function is_final.
  • Procedure execute_session.
slide-62
SLIDE 62

62

Implementation decisions

  • Represent transition by an array transition : n rows

(number of states), m columns (number of choices), given at creation

  • States numbered from 1 to n; array states yields the

state associated with each index (Reverse not needed: why?)

  • No deferred boolean function is_final, but convention: a

transition to state 0 denotes termination.

  • No such convention for initial state (too constraining).

Attribute initial_number.

slide-63
SLIDE 63

63

Describing an application

class APPLICATION create make feature initial : INTEGER make (n, m : INTEGER )

  • - Allocate with n states and m possible choices.

do create transition.make (1, n, 1, m ) create states.make (1, n ) end feature {NONE } -- Representation of transition diagram transition : ARRAY2 [STATE ]

  • - State transitions

states : ARRAY [STATE ]

  • - State for each index
slide-64
SLIDE 64

64

The array of states

STATES

(ENQUIRY_

ON_FLIGHTS) (ENQUIRY_ ON_SEATS) (INITIAL) (CONFIRMATION) (RESERVATION) 1 2 3 4 5 A polymorphic data structure!

slide-65
SLIDE 65

65

Executing a session

execute_session

  • - Run one session of application

local current_state : STATE

  • - Polymorphic!

index : INTEGER do from index := initial until index = 0 loop current_state := states [index ] current_state.execute_state index :=transition [index, current_state.choice ] end end

slide-66
SLIDE 66

66

Class structure

STATE * INITIAL FLIGHT_QUERY RESERVATION

execute_state + display + read + correct + message + process + display + read + correct + message + process + display + read + correct + message + process + display * read * correct * message * process *

slide-67
SLIDE 67

67

Other features of APPLICATION

put_state ( s : STATE; number : INTEGER )

  • - Enter state s with index number

require 1 <= number number <= states.upper do states.put (number, s ) end choose_initial (number : INTEGER )

  • - Define state number number as the initial state.

require 1 <= number number <= states.upper do first_number := number end

slide-68
SLIDE 68

68

More features of APPLICATION

put_transition (source, target, label : INTEGER )

  • - Add transition labeled label from state
  • - number source to state number target.

require 1 <= source ; source <= states.upper 0 <= target ;target <= states.upper 1 <= label ; label <= transition.upper2 do transition.put (source, label, target ) end invariant 0 <= st_number st_number <= n transition.upper1 = states.upper end

source target label

slide-69
SLIDE 69

69

To build an application

Necessary states — instances of STATE — should be available. Initialize application: create a.make (state_count, choice_count ) Assign a number to every relevant state s : a.put_state (s, n ) Choose initial state n0 : a.choose_initial (n0 ) Enter transitions: a.put_transition (sou, tar, lab ) May now run: a.execute_session

slide-70
SLIDE 70

70

Open architecture

During system evolution you may at any time:

  • Add a new transition (put_transition ).
  • Add a new state (put_state ).
  • Delete a state (not shown, but easy to add).
  • Change the actions performed in a given state
  • ...
slide-71
SLIDE 71

71

Note on the architecture

Procedure execute_session is not ‘‘the function of the system” but just one routine of APPLICATION. Other uses of an application:

  • Build and modify: add or delete state, transition, etc.
  • Simulate, e.g. in batch (replaying a previous session’s

script), or on a line-oriented terminal.

  • Collect statistics, a log, a script of an execution.
  • Store into a file or data base, and retrieve.

Each such extension only requires incremental addition of

  • routines. Doesn’t affect structure of APPLICATION and

clients.

slide-72
SLIDE 72

72

The system is open

Key to openness: architecture based on types of the problem’s objects (state, transition graph, application). Basing it on “the” apparent purpose of the system would have closed it for evolution. Real systems have no top

slide-73
SLIDE 73

73

The design pattern

“State and Application”

slide-74
SLIDE 74

74

Software architecture: the basic issue

Finding the right data abstractions

slide-75
SLIDE 75

75

What we have seen

Basic definitions and concepts of software engineering Basic definitions and concepts of software architecture A design pattern: State and Application The role of data abstraction Techniques for finding good data abstractions