@KevlinHenney 1968 1968 @KevlinHenney Software engineering was - - PowerPoint PPT Presentation

kevlinhenney 1968 1968
SMART_READER_LITE
LIVE PREVIEW

@KevlinHenney 1968 1968 @KevlinHenney Software engineering was - - PowerPoint PPT Presentation

@KevlinHenney 1968 1968 @KevlinHenney Software engineering was invented to tackle the problems of really large NATO systems projects. Software engineering was invented to tackle the problems of really large NATO systems projects. I began


slide-1
SLIDE 1

@KevlinHenney

slide-2
SLIDE 2

1968 1968

@KevlinHenney

slide-3
SLIDE 3
slide-4
SLIDE 4
slide-5
SLIDE 5
slide-6
SLIDE 6
slide-7
SLIDE 7
slide-8
SLIDE 8
slide-9
SLIDE 9
slide-10
SLIDE 10
slide-11
SLIDE 11
slide-12
SLIDE 12
slide-13
SLIDE 13
slide-14
SLIDE 14
slide-15
SLIDE 15
slide-16
SLIDE 16

Software engineering was invented to tackle the problems of really large NATO systems projects.

slide-17
SLIDE 17

Software engineering was invented to tackle the problems of really large NATO systems projects.

slide-18
SLIDE 18
slide-19
SLIDE 19

I began to use the term “software engineering” to distinguish it from hardware and other kinds of engineering; yet, treat each type of engineering as part of the overall systems engineering process.

Margaret Hamilton

slide-20
SLIDE 20

We must recognize ourselves – not necessarily all of us and not necessarily any

  • ne of us all the time – as members of an

engineering profession, be it hardware engineering or software engineering.

Anthony A Oettinger

slide-21
SLIDE 21
slide-22
SLIDE 22
slide-23
SLIDE 23
slide-24
SLIDE 24
slide-25
SLIDE 25

I’ve only been seven months with a manufacturer and I’m still bemused by the way they attempt to build software.

J W Smith

slide-26
SLIDE 26

They begin with planning specification, go through functional specifications, implementation specifications, etc., etc. This activity is represented by a PERT chart with many nodes.

J W Smith

slide-27
SLIDE 27

If you look down the PERT chart you discover that all the nodes on it up until the last one produce nothing but paper.

J W Smith

slide-28
SLIDE 28

It is unfortunately true that in my organisation people confuse the menu with the meal.

J W Smith

slide-29
SLIDE 29

The most deadly thing in software is the concept, which almost universally seems to be followed, that you are going to specify what you are going to do, and then do it. Douglas Ross

slide-30
SLIDE 30

And that is where most of

  • ur troubles come from.

Douglas Ross

slide-31
SLIDE 31

The design process is an iterative one.

Andy Kinslow

slide-32
SLIDE 32

unit test

modularity

declarative middleware Conway

Christopher Alexander

acceptance testing layers

iterative

slide-33
SLIDE 33

The There' e's neve never eno enoug ugh t h time e to do somet ethin hing g righ ght, , but ut the here' e's al alway ays en enoug ugh h time e to do do it over ver.

Melvin vin Conw nway ay How Do Committees Invent?
slide-34
SLIDE 34
slide-35
SLIDE 35
slide-36
SLIDE 36
slide-37
SLIDE 37

Patterns are an aggressive disregard of originality.

Brian Foote

slide-38
SLIDE 38

A capsule definition of engineering, independent of any discipline, as you’re likely to find: the set of practices and techniques that have been determined to work reliably through experience.

Glenn Vanderburg

slide-39
SLIDE 39

The replication of multiple copies of a software system is the phase of software manufacture which corresponds to the production phase in other areas of engineering.

Peter Naur and Brian Randell

slide-40
SLIDE 40

It is accomplished by simple copying

  • perations, and constitutes only a

minute fraction of the cost of software manufacture.

Peter Naur and Brian Randell

slide-41
SLIDE 41
slide-42
SLIDE 42

We may therefore picture the process of form-making as the action of a series of subsystems, all interlinked, yet sufficiently free of

  • ne another to adjust independently

in a feasible amount of time.

slide-43
SLIDE 43

It works, because the cycles of correction and recorrection, which

  • ccur during adaptation, are

restricted to one subsystem at a time.

slide-44
SLIDE 44
slide-45
SLIDE 45
slide-46
SLIDE 46

Th The e bas asic ic thesis hesis [.. ...] .] is that hat

  • rganiza

ganization tions s whi hich h design esign syst stems ems [.. ...] .] ar are e constr nstrain ained ed to

  • pr

produce

  • duce designs

esigns whi hich h ar are e copie pies s

  • f the

he communicati munication

  • n stru

ructu ctures res

  • f the

hese se organiza ganization tions. s.

Melvin vin Conw nway ay How Do Committees Invent?
slide-47
SLIDE 47

We e ha have e found

  • und a c

a criteri iterion

  • n for
  • r

the he structur tructuring ing of desig esign n

  • rganiz

ganizatio ations: ns: a d a design esign ef effor fort should hould be o e organ ganized ized ac according

  • rding to

the he nee need for

  • r communica

municatio tion. n.

Melvin vin Conw nway ay How Do Committees Invent?
slide-48
SLIDE 48 https://commons.wikimedia.org/wiki/File:Stone_Plan.jpg
slide-49
SLIDE 49
slide-50
SLIDE 50

µονόλιθος

slide-51
SLIDE 51
slide-52
SLIDE 52

This is the Unix philosophy: Write programs that do one thing and do it well. Write programs to work together.

Doug McIlroy

slide-53
SLIDE 53

µservices

slide-54
SLIDE 54

Define a subset of the system which is small enough to bring to an operational state [...] then build on that subsystem.

E E David

slide-55
SLIDE 55

This strategy requires that the system be designed in modules which can be realized, tested, and modified independently, apart from conventions for intermodule communication.

E E David

slide-56
SLIDE 56

µservices

slide-57
SLIDE 57
slide-58
SLIDE 58

In the long run every program becomes rococo — then rubble.

Alan Perlis

slide-59
SLIDE 59

A software system can best be designed if the testing is interlaced with the designing instead of being used after the design.

Alan Perlis

slide-60
SLIDE 60

/ WordFriday

slide-61
SLIDE 61

bi-quinary coded decimal, noun

▪ A system of representing numbers based on counting in fives, with an additional indicator to show whether the count is in the first or second half of the decimal range, i.e., whether the number represented is in the range 0–4 or 5–9 (or in the range 1–5 or 6–10). ▪ This system is found in many abacus systems, with paired columns of counters (normally aligned) representing each bi- quinary range. ▪ The Roman numeral system is also a form of bi-quinary coded decimal.
slide-62
SLIDE 62

MCMLXVIII

slide-63
SLIDE 63

proc roman numerals = (int year) string: skip;

slide-64
SLIDE 64
slide-65
SLIDE 65
slide-66
SLIDE 66

assert (roman numerals (1) = “I”)

slide-67
SLIDE 67

proc roman numerals = (int year) string: “I”;

slide-68
SLIDE 68

assert (roman numerals (1) = “I”); assert (roman numerals (5) = “V”)

slide-69
SLIDE 69

proc roman numerals = (int year) string: if year = 5 then “V” else “I” fi;

slide-70
SLIDE 70

assert (roman numerals (1) = “I”); assert (roman numerals (5) = “V”); assert (roman numerals (10) = “X”)

slide-71
SLIDE 71

proc roman numerals = (int year) string: if year = 10 then “X” elif year = 5 then “V” else “I” fi;

slide-72
SLIDE 72

assert (roman numerals (1) = “I”); assert (roman numerals (5) = “V”); assert (roman numerals (10) = “X”); assert (roman numerals (50) = “L”); assert (roman numerals (100) = “C”); assert (roman numerals (500) = “D”); assert (roman numerals (1000) = “M”)

slide-73
SLIDE 73

proc roman numerals = (int year) string: if year = 1000 then “M” elif year = 500 then “D” elif year = 100 then “C” elif year = 50 then “L” elif year = 10 then “X” elif year = 5 then “V” else “I” fi;

slide-74
SLIDE 74

[] struct (int value, string letters) mapping = ( (1000, “M”), (500, “D”), (100, “C”), (50, “L”), (10, “X”), (5, “V”), (1, “I”) );

slide-75
SLIDE 75

proc roman numerals = (int year) string: begin string result := ""; for entry from lwb mapping to upb mapping do if value of mapping[entry] = year then result := letters of mapping[entry] fi

  • d;

result end;

slide-76
SLIDE 76

proc roman numerals = (int year) string: ( string result := ""; for entry from lwb mapping to upb mapping do if value of mapping[entry] = year then result := letters of mapping[entry] fi

  • d;

result );

slide-77
SLIDE 77

assert (roman numerals (1) = “I”); assert (roman numerals (5) = “V”); assert (roman numerals (10) = “X”); assert (roman numerals (50) = “L”); assert (roman numerals (100) = “C”); assert (roman numerals (500) = “D”); assert (roman numerals (1000) = “M”)

slide-78
SLIDE 78

[] proposition roman numerals spec = ( ("Decimal positions correspond to numerals", void: ( assert (roman numerals (1) = "I"); assert (roman numerals (10) = "X"); assert (roman numerals (100) = "C"); assert (roman numerals (1000) = "M"))), ("Quinary intervals correspond to numerals", void: ( assert (roman numerals (5) = "V"); assert (roman numerals (50) = "L"); assert (roman numerals (500) = "D"))) );

slide-79
SLIDE 79

mode proposition = struct (string name, proc void test); proc test = ([] proposition spec) void: for entry from lwb spec to upb spec do print (name of spec [entry]); test of spec [entry]; print (new line)

  • d;
slide-80
SLIDE 80

[] proposition roman numerals spec = ( ("Decimal positions correspond to numerals", void: ( assert (roman numerals (1) = "I"); assert (roman numerals (10) = "X"); assert (roman numerals (100) = "C"); assert (roman numerals (1000) = "M"))), ("Quinary intervals correspond to numerals", void: ( assert (roman numerals (5) = "V"); assert (roman numerals (50) = "L"); assert (roman numerals (500) = "D"))) );

slide-81
SLIDE 81

[] proposition roman numerals spec = ( ("Decimal positions correspond to numerals", ((1, "I"), (10, "X"), (100, "C"), (1000, "M"))), ("Quinary intervals correspond to numerals", ((5, "V"), (50, "L"), (500, "D"))) );

slide-82
SLIDE 82
slide-83
SLIDE 83

[] proposition roman numerals spec = ( ("Decimal positions correspond to numerals", ((1, "I"), (10, "X"), (100, "C"), (1000, "M"))), ("Quinary intervals correspond to numerals", ((5, "V"), (50, "L"), (500, "D"))) ); test (roman numerals, roman numerals spec)

slide-84
SLIDE 84

mode test = struct (int input, string expected); mode proposition = struct (string name, flex [1:0] test tests);

slide-85
SLIDE 85 proc test = (proc (int) string function, [] proposition spec) void: for entry from lwb spec to upb spec do print (name of spec[entry]); string report := "", separator := " failed:"; [] test tests = tests of spec[entry]; for mapping from lwb tests to upb tests do test test = tests[mapping]; if string actual = function (input); actual /= expected then report +:= separator + " for " + whole (input of test, 0) + " expected " + expected of test + " but was " + actual separator := “,” fi
  • d;
print (if report = "" then (new line) else (new line, report, new line) fi)
  • d;
slide-86
SLIDE 86

[] proposition roman numerals spec = ( ("Decimal positions correspond to numerals", ((1, "I"), (10, "X"), (100, "C"), (1000, "M"))), ("Quinary intervals correspond to numerals", ((5, "V"), (50, "L"), (500, "D"))), ("Multiples of decimals are additive", ((2, "II"), (30, "XXX"), (200, "CC"), (4000, "MMMM"))) );

slide-87
SLIDE 87

proc roman numerals = (int year) string: ( string result := ""; int value := year; for entry from lwb mapping to upb mapping do if value mod value of mapping[entry] = 0 then while value > 0 do result +:= letters of mapping[entry]; value -:= value of mapping[entry]

  • d

fi

  • d;

result );

slide-88
SLIDE 88

[] proposition roman numerals spec = ( ("Decimal positions correspond to numerals", ((1, "I"), (10, "X"), (100, "C"), (1000, "M"))), ("Quinary intervals correspond to numerals", ((5, "V"), (50, "L"), (500, "D"))), ("Multiples of decimals are additive", ((2, "II"), (30, "XXX"), (200, "CC"), (4000, "MMMM"))), ("Non-multiples of decimals are additive", ((6, "VI"), (23, "XXIII"), (273, "CCLXXIII"), (1500, "MD"))) );

slide-89
SLIDE 89

proc roman numerals = (int year) string: ( string result := ""; int value := year; for entry from lwb mapping to upb mapping do while value >= value of mapping[entry] do result +:= letters of mapping[entry]; value -:= value of mapping[entry]

  • d
  • d;

result );

slide-90
SLIDE 90 [] proposition roman numerals spec = ( ("Decimal positions correspond to numerals", ((1, "I"), (10, "X"), (100, "C"), (1000, "M"))), ("Quinary intervals correspond to numerals", ((5, "V"), (50, "L"), (500, "D"))), ("Multiples of decimals are additive", ((2, "II"), (30, "XXX"), (200, "CC"), (4000, "MMMM"))), ("Non-multiples of decimals are additive", ((6, "VI"), (23, "XXIII"), (273, "CCLXXIII"), (1500, "MD"))), ("Numeral predecessors are subtractive", ((4, "IV"), (9, "IX"), (40, "XL"), (90, "XC"), (400, "CD"), (900, "CM"))) );
slide-91
SLIDE 91

[] struct (int value, string letters) mapping = ( (1000, "M"), (900, "CM"), (500, "D"), (400, "CD"), (100, "C"), (90, "XC"), (50, "L"), (40, "XL"), (10, "X"), (9, "IX"), (5, "V"), (4, "IV"), (1, "I") );

slide-92
SLIDE 92 [] proposition roman numerals spec = ( ("Decimal positions correspond to numerals", ((1, "I"), (10, "X"), (100, "C"), (1000, "M"))), ("Quinary intervals correspond to numerals", ((5, "V"), (50, "L"), (500, "D"))), ("Multiples of decimals are additive", ((2, "II"), (30, "XXX"), (200, "CC"), (4000, "MMMM"))), ("Non-multiples of decimals are additive", ((6, "VI"), (23, "XXIII"), (273, "CCLXXIII"), (1500, "MD"))), ("Numeral predecessors are subtractive", ((4, "IV"), (9, "IX"), (40, "XL"), (90, "XC"), (400, "CD"), (900, "CM"))), ("Subtractive predecessors are additive", ((14, "XIV"), (42, "XLII"), (97, "XCVII"), (1968, "MCMLXVIII"))) );
slide-93
SLIDE 93

We instituted a rigorous regression test for all of the features of AWK. Any of the three of us who put in a new feature into the language [...], first had to write a test for the new feature.

Alfred Aho

http://www.computerworld.com.au/article/216844/a-z_programming_languages_awk/
slide-94
SLIDE 94

There is no such question as testing things after the fact with simulation models, but that in effect the testing and the replacement of simulations with modules that are deeper and more detailed goes on with the simulation model controlling, as it were, the place and order in which these things are done.

Alan Perlis

slide-95
SLIDE 95

As design work progresses this simulation will gradually evolve into the real system. The simulation is the design.

Tad B Pinkerton

slide-96
SLIDE 96
slide-97
SLIDE 97

One of the most powerful mechanisms for program structuring [...] is the block and procedure concept.

Ole-Johan Dahl and C A R Hoare "Hierarchical Program Structures"

slide-98
SLIDE 98

begin ref(Book) array books(1:capacity); integer count; procedure Push(top); ... procedure Pop; ... boolean procedure IsEmpty; ... boolean procedure IsFull; ... integer procedure Depth; ... ref(Book) procedure Top; ... count := 0 end;

slide-99
SLIDE 99

A procedure which is capable of giving rise to block instances which survive its call will be known as a class; and the instances will be known as objects of that class.

Ole-Johan Dahl and C A R Hoare “Hierarchical Program Structures”

slide-100
SLIDE 100

class Stack(capacity); integer capacity; begin ref(Book) array books(1:capacity); integer count; procedure Push(top); ... procedure Pop; ... boolean procedure IsEmpty; ... boolean procedure IsFull; ... integer procedure Depth; ... ref(Book) procedure Top; ... count := 0 end;

slide-101
SLIDE 101
slide-102
SLIDE 102

goto

slide-103
SLIDE 103
slide-104
SLIDE 104

/ WordFriday

slide-105
SLIDE 105

snowclone, noun

▪ clichéd wording used as a template, typically

  • riginating in a single quote

▪ e.g., “X considered harmful”, “These aren't the Xs you're looking for”, “X is the new Y”, “It’s X, but not as we know it”, “No X left behind”, “It’s Xs all the way down”, “All your X are belong to us”

slide-106
SLIDE 106
slide-107
SLIDE 107

Separation of tasks is a good thing, on the other hand we have to tie the loose ends together again!

Edsger W Dijkstra “Notes on Structured Programming”

slide-108
SLIDE 108
slide-109
SLIDE 109

We sh e should uld ha have e some me ways s of coupling upling pr programs grams like ke ga garden den ho hose--

  • -scre

screw w in ano n anoth ther er seg egment ent whe hen n it bec ecomes

  • mes ne

necess essary ry to massag sage e data in ano n anoth ther er way. Th This is the he way of IO also.

  • .
slide-110
SLIDE 110

Toutes choses sont dites déjà; mais comme personne n’écoute, il faut toujours recommencer.

André Gide

slide-111
SLIDE 111

Everything has been said before; but since nobody listens, we must always start again.

André Gide