Software systems engineering PRINCIPLES

67
Ivano Malavolta Software systems engineering PRINCIPLES

description

This presentation is about a lecture I gave within the "Software systems and services" immigration course at the Gran Sasso Science Institute, L'Aquila (Italy): http://cs.gssi.infn.it/. http://www.ivanomalavolta.com

Transcript of Software systems engineering PRINCIPLES

Page 1: Software systems engineering PRINCIPLES

Ivano Malavolta

Software systems engineering

PRINCIPLES

Page 2: Software systems engineering PRINCIPLES
Page 3: Software systems engineering PRINCIPLES

Hello

Page 4: Software systems engineering PRINCIPLES

Hello

Page 5: Software systems engineering PRINCIPLES

Hello

Page 6: Software systems engineering PRINCIPLES

Course website

http://lore.com/Software-systems-and-services.1

UY737U

Page 7: Software systems engineering PRINCIPLES

Roadmap

Introduction

Software qualities

Principles

Page 8: Software systems engineering PRINCIPLES

Software today

Where is software today?

Page 9: Software systems engineering PRINCIPLES

Software today

How “big” is software today? http://www.informationisbeautiful.net/visualizations/million-lines-of-code/

http://hbr.org/2010/06/why-dinosaurs-will-keep-ruling-the-auto-industry/ar/1

Page 10: Software systems engineering PRINCIPLES

Needs

To DESIGN software –  software development has to be a systematic activity

QUALITY assurance

–  we have to verify and validate our SW in order to make it something people can rely on

–  we have to do it as soon as possible

ABSTRACTION

–  the principal instrument for managing complexity

Page 11: Software systems engineering PRINCIPLES

The application of engineering to software Field of computer science dealing with software systems that are:

–  large and complex –  built by teams –  exist in many versions –  last many years –  undergo changes

“Physicist example”

Software engineering

Page 12: Software systems engineering PRINCIPLES

Definitions

Application of a systematic, disciplined, quantifiable approach to the development, operation, and maintenance of software (IEEE 1990)

Multi-person construction of multi-version software (Parnas 1978)

Page 13: Software systems engineering PRINCIPLES

Role of software engineer

Programming skill not enough Software engineering involves “programming-in-the –large”

–  understand requirements and write specifications •  derive models and reason about them

–  master software –  operate at various abstraction levels –  member of a team

•  communication skills •  management skills

Page 14: Software systems engineering PRINCIPLES

What is part of software engineering?

http://wonderfulengineering.com/what-is-software-engineering/

Page 15: Software systems engineering PRINCIPLES

Software engineering vs computer science Computer Science

–  Computability, algorithms and complexity, programming languages, data structures, databases, artificial intelligence, etc.

Software Engineering

–  The APPLICATION of computer science, mathematics, project management to build high quality software

Page 16: Software systems engineering PRINCIPLES

Roadmap

Introduction

Software qualities

Principles

Page 17: Software systems engineering PRINCIPLES

Classification of SW qualities "ilities"

Internal vs. external –  Externalà visible to users –  Internalà concern developers

Product vs. process

–  Our goal is to develop software products –  The process is how we do it

Internal qualities affect external qualities Process quality affects product quality

Page 18: Software systems engineering PRINCIPLES

Representative SW qualities

Correctness

Reliability

Robustness

Performance

Usability

Maintainability

Reusability

Portability

Understandability

Interoperability

Repairability

Evolvability

Page 19: Software systems engineering PRINCIPLES

Correctness Software is correct if it satisfies the functional requirements specifications

–  assuming that specification exists!

If specifications are formal, since programs are formal objects, correctness can be defined formally

–  It can be proven as a theorem or disproved by counterexamples (testing)

Improved by: •  Appropriate tools •  Standard algorithms and libraries •  An established development process

Page 20: Software systems engineering PRINCIPLES

The limits of correctness

It is an absolute (yes/no) quality –  there is no concept of “degree of correctness” –  there is no concept of severity of deviation

What if specifications are wrong?

–  (e.g., they derive from incorrect requirements or errors in domain knowledge)

Page 21: Software systems engineering PRINCIPLES

Reliability

Informal definition: software is reliable if the user can depend on it

can be defined mathematically as “probability of absence of failures for a certain time period”

Improved by: •  Fault avoidance (e.g., careful design) •  Fault tolerance (e.g., redundancy) •  Fault detection (e.g., testing)

Page 22: Software systems engineering PRINCIPLES

Idealized situation

Requirements are correct

Reliability Correctness

Page 23: Software systems engineering PRINCIPLES

Software behaves “reasonably” even in unforeseen circumstances (e.g., incorrect input, hardware failure)

Robustness

Robustness vs correctness vs reliability?

Improved by: •  Software monitoring •  Defensive programming

Page 24: Software systems engineering PRINCIPLES

Example: the MAPE-K loop

http://www.cs.kent.ac.uk/people/rpg/cb492/saaf/concept.html

Page 25: Software systems engineering PRINCIPLES

Performance

Efficient use of resources –  memory, processing time, communication

Can be evaluated:

–  algorithms complexity –  measurement of the implemented system –  analysis of a model (e.g., using queuing theory) –  simulation

Performance can affect scalability

–  e.g., a solution that works on a small local network may not work on a large intranet

Improved by: •  Considering it during design •  Small-scale code optimization

Page 26: Software systems engineering PRINCIPLES

Usability

Expected users find the system easy to use –  other term: user-friendliness

Rather subjective, difficult to evaluate Affected mostly by user interface

•  e.g., visual vs. textual

Can the user interface impact reliability?

(Performance and correctness) vs usability?

Improved by: •  User-centred design process •  Adaptable user interfaces

Page 27: Software systems engineering PRINCIPLES

Maintainability

Maintainability: ease of maintenance àMaintenance: changes after release Maintenance costs exceed 60% of total cost of software Three main categories of maintenance

–  corrective: removing residual errors (20%) –  adaptive: adjusting to environment changes (20%) –  perfective: quality improvements (>50%)

See it as software evolution

Improved by: •  Modular design •  Well-defined interfaces •  Good documentation

Page 28: Software systems engineering PRINCIPLES

Maintainability

Can be decomposed as –  Repairability

•  ability to correct defects in reasonable time

–  Evolvability •  ability to adapt SW to environment changes and to improve it

in reasonable time

Repairability vs modularity?

Ever heared about software product lines?

Page 29: Software systems engineering PRINCIPLES

Reusability

Existing product (or components) used (with minor modifications) to build another product

–  e.g., software libraries, jQuery plugins

Also applies to process Reuse of standard parts measure of maturity of the field

Improved by: •  Modular design •  Well-defined interfaces •  Parameterization •  Good documentation

Page 30: Software systems engineering PRINCIPLES

Portability

Software can run on different HW platforms or SW environments Remains relevant as new platforms and environments are introduced (e.g. digital assistants) Relevant when downloading software in a heterogeneous network environment

Improved by: •  Isolation of dependencies

on environment •  Layered architectures •  Virtual machines

Page 31: Software systems engineering PRINCIPLES

Understandability

Ease of understanding software

Maintainability vs understandability?

Is it internal or external?

Improved by: •  Modular design •  Well-defined models •  Good documentation

Page 32: Software systems engineering PRINCIPLES

Understandability

Richard Wettel, Michele Lanza: CodeCity: 3D visualization of large-scale software. ICSE Companion 2008: 921-922

Page 33: Software systems engineering PRINCIPLES

Interoperability

Ability of a system to coexist and cooperate with other systems

–  e.g., OSX + iOS –  OSGI

Can be achieved via standardization of interfaces

Examples?

•  Browser plug-ins •  The whole open data movement!

Improved by: •  Well-documented interfaces •  Standard interface formats

e.g., XML, JSON objects

Page 34: Software systems engineering PRINCIPLES

Typical process qualities

Productivity –  denotes its efficiency and performance –  classical example of metric: lines of code

Timeliness

–  ability to deliver a product on time –  e.g., incremental delivery technique

Visibility

–  all of its steps and current status are documented clearly –  also visibility of the product is needed

Page 35: Software systems engineering PRINCIPLES

Quality measurement

Many qualities are subjective No standard metrics defined for most qualities Much research work is currently about defining objective metrics for SW

Page 36: Software systems engineering PRINCIPLES

Exercise

Show graphically the interdependence of the SW qualities

Correctness

Reliability

Robustness

Performance

Usability

Maintainability

Reusability

Portability

Understandability

Interoperability

Repairability

Evolvability

Page 37: Software systems engineering PRINCIPLES

Question-time

Is this “software engineering”?

Page 38: Software systems engineering PRINCIPLES

Roadmap

Introduction

Software qualities

Principles

Page 39: Software systems engineering PRINCIPLES

Principles

Principles form the basis of methods, techniques, methodologies and tools In this lecture we will discuss the 7 important principles that may be used in all phases of software development

Modularity is the cornerstone principle supporting software design

Page 40: Software systems engineering PRINCIPLES

Application of principles

Principles apply to process and product Principles become practice through methods and techniques

–  often methods and techniques are packaged in a methodology –  methodologies can be enforced by tools

Principles

Methodologies

Principles

Methods and techniques

Methodologies

Tools

Page 41: Software systems engineering PRINCIPLES

Application of principles

Principles

Methodologies

Principles

Methods and techniques

Methodologies

Tools

Principles: General and abstract descriptions of desirable properties of products and processes

Methods: General guidelines that govern activities

Techniques: More technical and mechanic than methods

Methodologies: Sets of methods and techniques

Tools: Software for applying methodologies

Page 42: Software systems engineering PRINCIPLES

Key principles

•  Rigor and formality

•  SEPARATION OF CONCERNS • MODULARITY • ABSTRACTION •  Anticipation of change •  Generality •  Incrementality

Page 43: Software systems engineering PRINCIPLES

Rigor and formality

Software engineering is a creative design activity, BUT it must be practiced systematically Rigor is necessary to:

–  repeatedly produce reliable products –  control their costs

Formality is rigor at the highest degree

–  software process driven and evaluated by mathematical laws –  opens to automation

Page 44: Software systems engineering PRINCIPLES

Examples

•  Mathematical (formal) analysis of program correctness

•  Systematic (rigorous) test data derivation

•  Rigorous documentation of development steps helps project management and assessment of timeliness

Page 45: Software systems engineering PRINCIPLES

More on formality

No need to be always formal during design

The engineer must know how and when to be formal

Requirements

Analysis

System design

Detailed Design

Implementation

Validation

Requirements

Analysis

System design

Detailed Design

Implementation

Validation

GSSI website GSSI automatic doors

Page 46: Software systems engineering PRINCIPLES

Separation of concerns

Edsger Dijkstra; On the role of scientific thought; EWD447; 30th August 1974

Page 47: Software systems engineering PRINCIPLES

Why separation of concerns?

Helps you focus

–  easier to pay attention to one thing at a time –  put some complexities aside –  separate out critical functions

Encourages decoupling

–  disentangle aspects that seemed intertwined

Supports parallelization of efforts and separation of responsibilities

Page 48: Software systems engineering PRINCIPLES

Dimensions of separation of concerns

Complexity

Time (waterfall model)

Size (modularization)

Qualities (Correctness, and performance later)

Views (data flow,

control flow)

Page 49: Software systems engineering PRINCIPLES

Example: concerns in a mobile app

Informa(on  Architect  

UI  Designer  

App    Developer  

Back-­‐end    Developer  

Experience   Security   Performance  

Upgradability  

Schedule  

Cost  Content  Management  

Product  Strategy  

Page 50: Software systems engineering PRINCIPLES

Example: compiler

Correctness is primary concern Other concerns:

–  Efficiency of compiler and of generated code –  User friendliness (helpful warnings, etc.)

Example for interdependencies:

runtime diagnostics vs. efficient code

–  Diagnostics simplify testing, but create overhead –  Typical solution: option to disable checks

Page 51: Software systems engineering PRINCIPLES

Modularity

A complex system may be divided into simpler pieces called modules A system that is composed of modules is called modular Supports application of separation of concerns

–  when dealing with a module we can ignore details of other modules

Modularity is the basis for understandability à software evolution Modularity VS reusability?

Page 52: Software systems engineering PRINCIPLES

Cohesion and coupling

Each module should be highly cohesive –  module understandable as a meaningful unit –  components of a module are closely related to one another

Modules should exhibit low coupling

–  modules have low interactions with others –  understandable separately

imag

e by Peter M

üller

Page 53: Software systems engineering PRINCIPLES

Example: web reputation dashboard

Architettura*software*!Gli$strumenti$esistenti$a$supporto$di$analisi$di$Web$reputation$possono$essere$divisi$in$due$categorie:$semantici$ e$non$ semantici.$ I$ primi$basano$ le$ loro$ valutazioni$dei$ contenuti$Web$ sull’interpretazione$semantica$ del$ linguaggio$ naturale.$ I$ secondi$ basano$ la$ loro$ competitività$ sull’enorme$ quantità$ di$informazioni$che$analizzano$(alto$numero$di$fonti$Web),$fornendo$però$un’interpretazione$grossolana$della$reputation,$ottenuta$senza$comprendere$la$semantica$del$contenuto.$I$ testi$ che$ derivano$ da$ fonti$ di$ informazione$ ufficiali,$ quali$ giornali$ online,$ possono$ essere$ assunti$come$affidabili,$ generalmente$ben$ scritti$ e$ semplici$da$ interpretare.$Ma$ se$derivano$da$ siti$Web$2.0,$quali$ siti$ di$ microblogging,$ devono$ essere$ necessariamente$ trattati$ da$ strumenti$ specifici$ prima$ di$poter$essere$interpretati.$$Inoltre,$una$delle$ sfide$maggiori$per$ il$ futuro$dell’ICT$è$ la$gestione$dell’overload$ informativo$dovuto$all’aumento$della$disponibilità$di$acquisizione$e$scambio$di$dati.$Come$conseguenza,$diviene$cruciale$la$definizione$di$un$metodo$capace$di$valutare$ la$qualità$dell’informazione$nonché$di$valutare$ la$sua$rilevanza$per$compiti$specifici.$$$A$ tale$ scopo$ la$ nostra$ piattaforma$ comprenderà$ componenti$ software$ necessarie$ ad$ abilitare$l’interpretazione$ semantica$ del$ linguaggio$ naturale$ ottenuto$ dall’interazione$ con$ le$ fonti$ web$ di$interesse,$ovvero$i$social$network$Facebook$e$Twitter,$e$lo$strumento$Telpress$per$l’interazione$con$le$agenzie$di$stampa.$$Infine,$ sulla$ base$ dell’architettura$ definita$ e$ sull’analisi$ degli$ strumenti$ esistenti,$ sono$ stati$ definiti$degli$indicatori$in$grado$di$stimare$polarità$e$pertinenza$con$i$topics$di$interesse.$Tali$indicatori$sono$quindi$inclusi$in$una$dashboard.!!!In$ Figura$ che$ segue$ è$ riportata$ l’architettura$ software$ dello$ strumento$ proposto,$ dove,$ con$ linee$spesse,$ è$ indicato$ il$ flusso$ dei$ dati$ mentre,$ con$ linee$ sottili,$ sono$ mostrate$ le$ interazioni$ tra$componenti$ software$ o$ tra$ componenti$ e$ sorgenti$ dati.$ $ Ad$ interrompere$ il$ flusso$ di$ elaborazione$ è$riportato$ un$ database,$ che$ è$ popolato$ con$ informazioni$ relative$ ai$ contenuti$ testuali$ di$ interesse$ e$arricchito$con$i$valori$relativi$alle$stime$di$polarità$e$topics.$$$!!!$$$$$$$$$$$$$$$$$$$$$

$

$DB$

FB$connector$

Data$Aggregator$

TP$connector$

1

Sentiment$analyzer$

Topic$extractor$$

Dashboard$

ID$

ID$ ID$ ID$ ID$ ID$$$$$id$ $$$$testo$$$$$$$$$prov$ $$timestamp$$$$$polarity$$$$$$$$$$topics$$$$$$$$$tw/fb$ $$$$$$$$$$T1/+1$$$$$$$$$T1/+1$

TW$connector$connector$

Facebook$$

Twitter$$

Telpress$$

Page 54: Software systems engineering PRINCIPLES

Abstraction

Given a difficult problem/system, extract a simpler view of it, avoiding unneeded details Abstraction in software engineering:

–  Models of the real world (omit irrelevant details) –  Subtyping and inheritance (factor out commonalities) –  Interfaces and information hiding (hide implementation

details) –  Parameterization (templates) –  Structured programming (loops, methods) –  Layered systems (hide deeper layers in the stack)

Page 55: Software systems engineering PRINCIPLES

Abstraction

Engineers abstract away from a number of details that

can be ignored SAFELY

Example: –  equations describing complex circuit (e.g., amplifier

allows designer to reason about signal amplification) –  Equations may approximate description, ignoring details

that yield negligible effects (e.g., connectors assumed to be ideal)

Page 56: Software systems engineering PRINCIPLES

Example: mobile app navigation

Page 57: Software systems engineering PRINCIPLES

Anticipation of change

It is very rare in reality that requirements are fully understood and freezed since the beginning of the project Ability to support software evolution à anticipating potential future changes It is the basis for software EVOLVABILITY and REUSABILITY

How does it relate to modularity?

Page 58: Software systems engineering PRINCIPLES

Example: sorting algorithm

http://en.wikibooks.org/wiki/Algorithm_Implementation/Sorting/Quicksort#JavaScript

Page 59: Software systems engineering PRINCIPLES

Generality

While solving a problem, try to discover if it is an instance of a MORE GENERAL PROBLEM

–  Sometimes a general problem is easier to solve than a special case

–  A solution to a more general problem may be already provided by off-the-shelf packages

–  A solution to a more general problem can be reused in other cases

Carefully balance generality against performance and cost

Page 60: Software systems engineering PRINCIPLES

Incrementality

Process proceeds in a stepwise fashion (increments)

Examples (process) –  deliver subsets of a system early to get early feedback from

expected users, then add new features incrementally

–  deal first with functionality, then turn to performance •  this is risky

–  deliver a first prototype and then incrementally add effort to turn prototype into product

Ever heared about user-centered design?

Page 61: Software systems engineering PRINCIPLES

Case study

Mirco Franzago, Henry Muccini, Ivano Malavolta: Towards a collaborative framework for the design and development of data-intensive mobile applications. MOBILESoft 2014

Page 62: Software systems engineering PRINCIPLES

Case study

Mirco Franzago, Henry Muccini, Ivano Malavolta: Towards a collaborative framework for the design and development of data-intensive mobile applications. MOBILESoft 2014

Page 63: Software systems engineering PRINCIPLES

Case study

Mirco Franzago, Henry Muccini, Ivano Malavolta: Towards a collaborative framework for the design and development of data-intensive mobile applications. MOBILESoft 2014

Page 64: Software systems engineering PRINCIPLES

What this lecture means to you?

Given a problem to solve

–  Analyze it

–  Synthesize a solution

Understand that requirements may change

Must view quality from several different perspectives

Use fundamental software engineering principles

(e.g., abstractions and separation of concerns)

Keep system boundary in mind

Page 65: Software systems engineering PRINCIPLES

Suggested readings

1.  M. E. Joorabchi, A. Mesbah, and P. Kruchten. Real challenges in mobile app development. In Empirical Software Engineering and Measurement, 2013, pages 15–24, 2013.

2.  Mirco Franzago, Henry Muccini, and Ivano Malavolta. Towards a collaborative framework for the design and development of data-intensive mobile applications. In Proceedings of the 1st International Conference on Mobile Software Engineering and Systems, pages 58–61. ACM, 2014.

3.  SWEBOK V.3.0 – Guide to the software engineering body of

knowledge. Pierre Bourke, Richard E. Fairley. IEEE Computer Society, 2014.

Page 66: Software systems engineering PRINCIPLES

References

Chapters 1, 2, 3

Page 67: Software systems engineering PRINCIPLES

Contact Ivano Malavolta |

Post-doc researcher Gran Sasso Science Institute

iivanoo

[email protected]

www.ivanomalavolta.com