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
3. Hello
Software Architecture & Model-Driven Engineering
applied to
Autonomous drones
Mobile applications
Web technologies
If you think good architecture is expensive,
try bad architecture.
... Brian Foote and JosephYoder
5. Course overview
Module name #hours Instructor
Introduction to the course 2 Inverardi
Software engineering principles and research 4 Malavolta
Software development process 2 Malavolta
Eclipse IDE 2 Iovino
Collaborative software development 1 Malavolta
Model-based design and development 8 Iovino
Software architecture 6 Malavolta
LAB 2 Iovino, Malavolta
Modern development paradigms 2 Malavolta
Principles of software testing and dependability 2 Bertolino
Homework 1
Christmas break
Homework 2
6. Homework 1
Tasks
• create an AADL specification describing the architecture of a chosen system
• write an Acceleo program or an ATL transformation that takes as input the
AADL model and produces some report or other artifact
• write a report describing the performed activities
Goals
• to understand what are the advantages of SE principles like abstraction and
separation of concerns
• to concretely understand what architectural modeling means
• to be exposed to concerns and issues related to dependability
• to understand how to use MDE techniques like model transformations and
code generators
Tentative deadline
20/12/2015
7. Homework 2
Tasks
• pick a set of articles related to a chosen research theme
• carefully read them and explore the state of the art about the research
theme
• write a report about your findings
• make a brief presentation to the classroom
Goals
• to have the chance to study a specific area of software engineering that
may be of interest to each student
• to be exposed to a specific problem in software engineering
• to start being trained in reading and writing scientific papers
Tentative deadline
15/01/2016
Research themes will
be available soon
10. 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
11. 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
12. 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
Programming skills are not enough
“Physicist example”
Software engineering
Programmer:
complete program
Software engineer:
software component
13. What is part of software
engineering?
http://wonderfulengineering.com/what-is-software-engineering/
14. Software engineering vs computer
science
Computer Science
– Computability, algorithms and complexity, programming
languages, data structures, databases, artificialintelligence,
etc.
Software Engineering
– The APPLICATION of computer science, mathematics,
project management to build high quality software
17. 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
18. 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)
19. 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)
22. 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
23. Example: the MAPE-K loop
http://www.cs.kent.ac.uk/people/rpg/cb492/saaf/concept.html
24. 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
25. Usability
Expected users find the system easy to use
– otherterm: 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
26. 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
27. 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?
28. 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
29. 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
30. Understandability
Ease of understanding software
Maintainability vs understandability?
Is it internal or external?
Improved by:
• Modular design
• Well-defined models
• Good documentation
32. 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
33. Exercise
Show graphically the interdependence of the SW qualities
Correctness
Reliability
Robustness
Performance
Usability
Maintainability
Reusability
Portability
Understandability
Interoperability
Repairability
Evolvability
36. 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
37. 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:
Preselected
methods
and techniques
Tools:
Software for applying
methodologies
38. Key principles
• Rigor and formality
• SEPARATION OF CONCERNS
• MODULARITY
• ABSTRACTION
• Anticipation of change
• Generality
• Incrementality
39. Rigor and formality
Software engineering is a creative design activity, BUT
it must be practiced systematically
Rigor is necessary to:
– repeatedlyproduce reliable products
– control their costs
Formality is rigor at the highest degree
– software process driven and evaluated by mathematical laws
– opens to automation
40. Examples
• Mathematical (formal) analysis of program
correctness
• Systematic (rigorous) test data derivation
• Rigorous documentation of development steps helps
project management and assessment of timeliness
41. 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
43. 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
44. Dimensions of separation of concerns
Complexity
Time
(waterfall model)
Size
(modularization)
Qualities
(correctness, and
performance later)
Views
(data flow,
control flow)
45. Example: concerns in a mobile app
Information
Architect
UI
Designer
App
Developer
Back-end
Developer
Experience Security Performance
Upgradability
Schedule
Cost
Content
Management
Product
Strategy
46. Example: compiler
Correctness is primary concern
Other concerns:
– Efficiency of compiler and of generated code
– User friendliness (helpfulwarnings, etc.)
Example of interdependencies:
runtime diagnostics vs. efficient code
– Diagnostics simplifytesting, but create overhead
– Typical solution: option to disable checks
47. 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?
48. 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
imagebyPeterMüller
50. Abstraction
Given a difficult problem/system, extract a simpler view
of it, avoiding unneeded details
Abstraction in software engineering:
– Models of the realworld (omit irrelevant details)
– Subtyping and inheritance (factor out commonalities)
– Interfaces and information hiding (hide implementation
details)
– Structured programming (loops, methods)
– Layered systems (hide deeper layers in the stack)
51. 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)
53. 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?
55. Generality
While solving a problem, try to discover if it is an instance of
a MORE GENERAL PROBLEM
– Sometimes a generalproblem is easier to solve than a
special case
– A solution to a more generalproblem may be already
provided by off-the-shelf packages
– A solution to a more generalproblem can be reused in
other cases
Carefully balance generality against performance and cost
56. 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 newfeatures incrementally
– deal first with functionality, then turn to performance
• this may be risky
– deliver a first prototype and then incrementally add effort to
turn prototype into product
Ever eared about user-centered design?
58. Case study
Mirco Franzago, Henry Muccini,Ivano Malavolta:Towards a collaborative framework for the design and development of data-
intensive mobile applications.MOBILESoft 2014
Key principles
• Rigor and formality
• SEPARATION OF CONCERNS
• MODULARITY
• ABSTRACTION
• Anticipation of change
• Generality
• Incrementality
59. Case study
Key principles
• Rigor and formality
• SEPARATION OF CONCERNS
• MODULARITY
• ABSTRACTION
• Anticipation of change
• Generality
• Incrementality
Mirco Franzago, Henry Muccini,Ivano Malavolta:Towards a collaborative framework for the design and development of data-
intensive mobile applications.MOBILESoft 2014
60. Case study
Key principles
• Rigor and formality
• SEPARATION OF CONCERNS
• MODULARITY
• ABSTRACTION
• Anticipation of change
• Generality
• Incrementality
Mirco Franzago, Henry Muccini,Ivano Malavolta:Towards a collaborative framework for the design and development of data-
intensive mobile applications.MOBILESoft 2014
61. 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.
1. SWEBOK V.3.0 – Guide to the software engineering body of
knowledge. Pierre Bourke, Richard E. Fairley. IEEE Computer Society,
2014.