Software engineering principles (marcello thiry)

90
[email protected] Software Engineering Principles

Transcript of Software engineering principles (marcello thiry)

[email protected] Engineering Principles

[email protected] http://ideas.scup.com/pt/files/2013/06/conte%C3%BAdo.jpg

1. Principles, Methods, Techniques, Methodologies and Tools

2. Rigor and Formality

3. Separation of concerns

4. Modularity

5. Abstraction

6. Anticipation of change

7. Generality

8. Incrementality

Contents.

Principle?

[email protected]

http://www.ppp.uiuc.edu/newppp_2001/reso

urses/plant/graphics/slidejpgs/tap_root.jpg

A basic truth, law

or assumption

basis for prediction

and action behavior

(Ghezzi, Jazayeri & Mandrioli, 2003)

[email protected]

Principles form the basis of

methods and techniques

A systematic way of doing

something

https://upload.wikimedia.org/wikipedia/c

ommons/thumb/8/8f/PSM_V10_D029_A

ncient_fire_making_methods.jpg/800px-

PSM_V10_D029_Ancient_fire_making_

methods.jpg

(Ghezzi, Jazayeri & Mandrioli, 2003)

[email protected]

methods and techniques*

*For the purpose of this course

these terms will be used

interchangeably

How to plan...

How to test...

How to design...

How to code...

How to elicit requirements

How to estimate...

...

Observation, interviews, workshops, surveys...

[email protected]

A body of practices, procedures, and rules

System of methods and principles used

in a particular discipline

(Ghezzi, Jazayeri & Mandrioli, 2003)

[email protected]

Support the application of methods,

techniques, and methodologies

(Ghezzi, Jazayeri & Mandrioli, 2003)

[email protected]

CASE Tools

Computer-Aided Software Engineering

Used in different phases of software development

[email protected]

List of Unified Modeling Language toolshttps://en.wikipedia.org/wiki/List_of_Unified_Modeling_Language_tools

List of diagramming toolshttp://www.diagramming.org/

Data Modeling Toolshttp://toolsfordatabases.com/data-modeling-tools.html

Comparison of data modeling toolshttps://en.wikipedia.org/wiki/Comparison_of_data_modeling_tools

Test management toolshttps://en.wikipedia.org/wiki/Test_management_tools

List of GUI testing toolshttps://en.wikipedia.org/wiki/List_of_GUI_testing_tools

List of web testing toolshttps://en.wikipedia.org/wiki/List_of_web_testing_tools

Comparison of project management softwarehttps://en.wikipedia.org/wiki/Comparison_of_project_management_software

List of build automation software Configuration, Build, Integration, ...https://en.wikipedia.org/wiki/List_of_build_automation_software

Application lifecycle management (ALM)https://en.wikipedia.org/wiki/Application_lifecycle_management

Try on...

Returning to the

Principles

[email protected]

Rigor and formality

Separation of concerns

Modularity

Abstraction

Anticipation of change

Generality

Incrementality

Key Principles

(Ghezzi, Jazayeri & Mandrioli, 2003)

Rigor and

Formality

[email protected]

Software development

is a creative design

activity, don't you

agree?

But…

[email protected]

You know the

guy who painted

this, right?

http://totallyhistory.com/wp-content/uploads/2012/03/Mona_Lisa_by_Leonardo_da_Vinci.jpg

[email protected]

Leonardo da Vinci (1452-1519)

“…Leonardo da Vinci employed a

variety of techniques ...”

“One of his most well-known paintings,

the Mona Lisa, displays some of the techniques used by da Vinci in its grandeur.”

http://www.davincilife.com

[email protected]

Software engineering must be practiced

systematically

Rigor is a necessary complement to

creativity which increases confidence

in the results of the development

Precision, exactness

[email protected]

Rigor

enables repeatability and allows teams

to avoid problems experienced in past

projects

What level of discipline set of rules we

need to…

… produce products with higher reliability, greater

quality while controlling costs and meeting

expectations?

[email protected]

So, rigor varies in degree!

We need to use the appropriate amount

http://mcx.sourceforge.net/upload/matlab_mmclab.pnghttp://www.mathworks.com/products/matlab/

http://4.bp.blogspot.com/-

IyHsfT1sB1A/UhTQdRV8opI/AAAAAAAABiI/H2R3X1OmAUg/s1600/V

NLIVES.NE-Simple-calculator-01.png

[email protected]

Formality is rigor at the highest

degree

Allows automation tools

A formal practice is where software systems

can be verified by mathematical laws

Formal methods petri nets, z, …

The source code is written in a formal

language

Separation

of Concerns

[email protected]

“Divide and conquer"

(divide et impera)

Identifying different

aspects of a problem we

can concentrate on each

one individually

[email protected]

https://en.wikipedia.org/wiki/Edsger_W._Dijkstra

“The term separation of concerns was probably coined by Dijkstra in his 1974 paper On the role of scientific thought”

Edsger Wybe Dijkstra(1930-2002)

A pioneer in the fields of computerscience and computational physics.Among many contributions, he coinedthe phrase "structured programming"and discovered the algorithm for theshortest path in a graph, which nowbears his name.

http://www.cs.utexas.edu/users/EWD/transcriptions/EWD04xx/EWD447.html

Paper "On the role of scientific thought" transcribed by Richard Walker:

https://en.wikipedia.org/wiki/Separation_of_concerns

[email protected]

The only way to master the complexity of

a project is to separate the different

concerns

Time

Qualities

Views

Parts

Skills

http://www.crochetville.com/community/uploads/monthly_06_2013/post-48806-0-42116700-1370920781.jpg

[email protected]

Time

Qualities

Views

Parts

Phases, iterations, activities…,

Structural x Behavioral, Layer separation ex: MVC

Functional, Efficiency, Usability, reliability, …

modularity

Responsibilities and Skills

Project manager, Systems Analyst, Software Designer, …

Modularity

A complex system can be partitioned in

smaller and simpler units or parts

MODULES

http://www.brickshop.co.uk/bricks-16-c.asp http://www.lego.com/ http://constructionweekonline.com//pictures/LEGO_Sungnyemun.jpg

[email protected]

HIGHER

Level of abstraction

LOWER

System Sub-system Modules

[email protected]

Modular system

Deal with a module at a time,

ignoring details from the others

Modularity

Application of separation of concerns

Composed by modules

[email protected]

But be careful…

(Pressman, 2015)

[email protected]

Decomposability

System level

Topmost functional

abstraction

[email protected]

Decomposability

System level

Subsystem

level

Topmost functional

abstraction

[email protected]

Decomposability

Top-down

hierarchy

+ abstract

- abstract

System level

Subsystem

level

Module

level

Topmost functional

abstraction

[email protected]

https://en.wikipedia.org/wiki/Niklaus_Wirth

In 1971, Niklaus Wirth, wrote the influential paper Program Development by Stepwise Refinement. Today, we refer to this approach as top-down design (or top-down decomposition).

Niklaus Emil Wirth(1934-)

A Swiss computer scientist, best known fordesigning several programming languages (AlgolW, Pascal, Modula, Modula-2, Oberon, Oberon-2, Oberon-7) and for pioneering several classictopics in software engineering. In 1984 he wonthe Turing Award for developing a sequence ofinnovative computer languages. He designedthe simple programming language PL/0 toillustrate compiler design. It has formed thebasis for many university compiler designclasses.

http://oberoncore.ru/_media/library/wirth_program_development_by_stepwise_refinement2.pdf

“Program Development by Stepwise Refinement” (1971)

[email protected]

TOP-DOWN Considerations

+ -Logical, well-organized

thought discipline

Allows to split large teams

into groups and assign them

to different subsystems

Works very well for small

projects

Focus on functional

requirements

Thinking of a system as

just one function top

Premature decisions, less

prepared for changes

Reuse is more difficult

Defers coding and testing

Increases chance of having

unwanted dependencies

[email protected]

Composability

lower functional

abstraction

Module

level

[email protected]

Composability

lower functional

abstraction

Subsystem

level

Module

level

[email protected]

Composability

Bottom-up

hierarchy

+ abstract

- abstract

System level

Subsystem

level

Module

level

[email protected]

BOTTOM-UP Considerations

+ -Allows earlier coding and

testing

Potentializes reuse, simpler

to incorporate and test pre-

existing modules

Better prepared for changes

Without some forethought,

modules can be difficult to

link together

Focus is not on specific

requirements results may

not fulfill a given need

Hard to do a entire system

from bottom-up

Better suited to small

groups

[email protected]

TOP-DOWN

or

BOTTOM-UP?

http://ruccs.rutgers.edu/faculty/pylyshyn/cogscitalk/fish2.gif

[email protected]

In practice, large systems design is never truly top-down

TOP-DOWN X BOTTOM-UP

Some branches are designed before others

Designers reuse experience and modules

Both allow us to understand the relations

between high and low-level views of a system

(Sommerville, 1995)

Hybrid design

Combine both to potentialize understanding, information hiding

and reuse

[email protected]

Module ACME

Data

+

Structures

+

Procedures

+

Functions

Operation_1 …

Operation_2 …

Operation_3 …

Operation_4 …

Operation_5 …

Operation_N …

[email protected]

https://en.wikipedia.org/wiki/David_Parnas

The concept of information hiding was first described by Parnas in his paper On the Criteria to be Used in Decomposing Software into Modules (1972)

David Lorge Parnas(1941-)

Canadian early pioneer of software engineering,who was one of the first to recognize theimportance of software structure. He developedthe concept of information hiding in modularprogramming, which is an important elementof object-oriented programming today. He isalso noted for his advocacy of precisedocumentation.

https://www.cs.umd.edu/class/spring2003/cmsc838p/Design/criteria.pdf“On the Criteria to be Used in Decomposing Software into Modules” (1972)

[email protected]

Account

getNumber : int

deposit float

withdraw float

getBalance : float

Encapsulation + Information hiding

IMPLEMENTATIONINTERFACE

http://thumbs.dreamstime.com/t/manikin-keep-distance-

orange-cartoon-character-red-text-30647683.jpg

Client modules depend only on the interface

Continuity: small changes have localized effects

Increases reusability and substitutability

Protection: fault isolation

(Meyer, 1988-1997)

[email protected]

Account

getNumber : int

deposit float

withdraw float

getBalance : float

All the elements of a module

must belong together

Cohesion: internal measure

GOAL: HIGH COHESION

All the elements share the same

purpose

Understandability of a module

in isolation

The single responsibility principle

Martin*, 1995

*Robert Martin is commonly known as Uncle Bob

http://wordlesstech.com/wp-content/uploads/2010/12/swiss-army-knife-giant-elite1.jpg

https://lostechies.com/gabrielschenker/2009/01/21/real-

swiss-don-t-need-srp-do-they/

By Gabriel Schenker

Reason to change

SINGLE PART of all functionality

Encapsulation cohesion

Anticipate how the class could evolve

A class should have only one

reason to change

RESPONSIBILITY

[email protected]

Responsibility 1

Human Resources

Responsibility 2

Payroll Department

Responsibility 3

DBA team

[email protected]

But be careful...

[email protected]

Every module communicates with as few

other modules as possible

Coupling: external measure

modules interdependency

GOAL: LOW COUPLING

Reducing coupling

+ Understanding

Meyer, 1988-1997

+ Testability

+ Modifiability

+ Reusability

[email protected]

The open-closed principle

Meyer, 1988-1997

OPEN = available for extension

CLOSED = available for use by

other modules

Modules should be both open and

closed

[email protected]

Add new behaviors to satisfy the

changes

Open for extension

But without changing the source code

of the existing modules

Closed for modification

[email protected]

The cool part…

Modules that depend on the

extended modules are not

affected by the extension

[email protected]

But how?

Abstractions

Inheritance

Interfaces

Overriding

Polymorphism

[email protected]

https://sklivvz.com/posts/i-dont-love-the-single-responsibility-principle

https://sklivvz.com/posts/say-no-to-the-openclosed-pattern

http://blogs.msmvps.com/jonskeet/2013/03/15/the-open-closed-principle-in-review/

http://blog.8thlight.com/uncle-bob/2013/03/08/AnOpenAndClosedCase.html

http://codecourse.sourceforge.net/materials/The-Importance-of-Being-Closed.pdf

Interesting reading…

[email protected]

HIGH COUPLING

Non-hierarchical

organization

Hierarchical

organization

LOW COUPLING

dependency

uses, call

[email protected]

HIGH COUPLING

Non-hierarchical

organization

Hierarchical

organization

LOW COUPLING

dependency

uses, call And about cohesion?

[email protected]

HIGH COUPLING

Non-hierarchical

organization

Hierarchical

organization

LOW COUPLING

dependency

uses, call Got it?

[email protected]

dependency

uses, call

So…

[email protected]

Dependency inversion principle

Depend upon abstractions rather

than upon concretions

Martin*, 1995

[email protected]

Module as a package...

Provides unique namespace

Encapsulates classes, interfaces and

resources

Access rules: package visibility

[email protected]

Module as a library...

Contains one or more packages

Piece of code with no internal state and

a public API

In Java, the boundaries of a JAR are not

clear once deployed on the class path

[email protected]

Module as a class...

Can be instantiated multiple times

Can implement different interfaces

Classes and single responsibility

Granularity?

Abstraction

[email protected]

http://www.promo-wholesale.com/Upfiles/Prod_q/Solar-

Powered-Desk-Calculator_20090641609.jpg

identify the

essential aspects

of a particular context, ignoring

less important or accidental

characteristics

To abstract

is to…

[email protected]

But be careful…

You must ignore only

those details which

can be really ignored

What to

do here???

http://www.convio.com/common-ground/assets/crazy_sm.jpg

[email protected]

Abstraction

Special case of separation of concerns

Technique to master complexity

Important aspects x Less important details

What we abstract away and consider as a detail that

may be ignored depends on the observer and on the

problem been observed

Modeling, diagramming, prototyping, defining

equations, …

[email protected]

https://design2014level2.files.wordpress.com

/2014/04/ceiling-fan-70914.gif

Smart Home

System

Online Shopping

System

What is the

problem?

[email protected]

How to estimate?

Which aspects or factors should we consider?

Complexity

Quantity

Team experience

Technology used

Product type

...

Which of them

are essential?

Anticipation

of Change

Software

changes all

the time

New features Improvements

in existing

features

Correction

of defects

Performance

improvements

Adaptation due to changes

in law, regulations,

environment ex: DBMS, OS

[email protected]

Software

Maintenance

Software

Evolution

Corrective

ADAPTATIVE

PERFECTIVE

Preventive

[email protected]

How to anticipate

potential future changes?

CAREFUL! That is not about try to

implement what users will MAYBE need

in the future

That is about to be

prepared to change!

[email protected]

How to improve

Maintainability?

Degree of effectiveness and

efficiency with which the

software can be modified

(ISO/IEC 25010, 2011)

[email protected]

How to support maintainability?

Configuration Management tools

Version control

Change management

Integration

Repositories

Reusable components

Documentation

[email protected]

Integration

tools

http://buildbot.net

http://jenkins-ci.org/

http://git-scm.com/

Version control

tools

https://travis-ci.org/

http://subversion.tigris.org/

https://github.com/

Change

Management

tools

https://www.mantisbt.org/

http://www.accurev.com/

…… …

http://www.redmine.org/

Generality

[email protected]

If you think you have already

discovered a solution, think again!

But with a more

open mind!

While solving a problem...

[email protected]

Try to discover if it is an instance of a

MORE GENERAL PROBLEM

While solving a problem...

Sometimes a general problem is easier to solve

than a special case

Maybe, the solution can be reused in

other cases

You need to balance generality

against performance and cost

But...

Liskov substitution principle

Liskov, 1987

*Keynote address: data abstraction and hierarchy, OOPSLA '87

http://dl.acm.org/citation.cfm?id=62141

If an object X of type T has a method P

that behaves in a defined way

The object Y of type S, where S is a

subtype of T, should have the same method

P behaving the same way

Liskov substitution principle

Liskov, 1987

*Keynote address: data abstraction and hierarchy, OOPSLA '87

http://dl.acm.org/citation.cfm?id=62141

You should depend on the interfaces

rather than class types

It is all about semantics!

Incrementality

Grow, Don't Build

http://cdn.shopify.com/s/files/1/0070/7032/files/The_10_Strategy.jpg?754

[email protected]

Deliver subsets of a system early to get early feedback from expected

users, then add new features incrementally

Deliver a first prototype and then incrementally add effort to turn

prototype into product

Process proceeds in a stepwise fashion increments

user

FeedbackDelivery

user

Feedback

user

Delivery Delivery

Examples process

Development

user

Inc #1 Inc #2 Inc #N

Development Development

[email protected]

References.

(Ghezzi, Jazayeri & Mandrioli, 2003). Fundamentals of Software Engineering. 2nd ed. Pearson Education.

(ISO/IEC 25010, 2011). Systems and software engineering — Systems and software Quality Requirements

and Evaluation (SQuaRE) — System and software quality models.

(Martin, 1995). https://groups.google.com/forum/?hl=en#!topic/comp.object/WICPDcXAMG8.

(Meyer, 1997). Object-Oriented Software Construction. 2nd ed. Prentice Hall.

(Sommerville, 2015). Software Engineering. 10th ed. Pearson.