Software and systems engineering
Paulo Borba
Informatics Center
Federal University of Pernambuco
phmb@cin.ufpe.br ◈ twitter.com/pauloborba
Introduction to
software and systems
engineering
Engineering is…
the application of science
to the design, building and use of machines, construction, etc.
The Concise Oxford Dictionary
System =
Software +
People + Data + Hardware
(computers, sensors, phones, watches,
drones, etc.)
Quality and
Productivity
Software and systems
engineering is concerned with…
Serious software and systems development
http://www.home-dzine.co.za/diy/diy-doghouse.htm
http://silviarangel.wix.com/fotografa
It’s not about small versus large
http://transmissionsmedia.com/the-inexplicable-precision-in-the-construction-of-the-great-pyramid-at-giza/
Most software today is very much like an Egyptian pyramid with millions of bricks piled on
top of each other, with no
structural integrity, but just done by brute force and thousands of
slaves.
Alan Kay
http://en.wikipedia.org/wiki/Alan_Kay
So our main goal is…
• Software and systems quality
• Software and systems
development and operation productivity
• costs and deadlines
Relevance of software quality
■
Availability of important services
•
home banking
•
communication
■
People’s safety
•
health monitoring
•
air traffic control
•
car software
Practical impact
■
Companies competitiveness
■
Better products, smaller costs (long term)
■
Attraction of new companies to local ecosystems
•
investments, more taxes
Not always achieved,
almost never easy!
Software development issues, (crisis?)
■
Project cancellation rate of 18-40%
•
16-29% are successful
■
development time and cost go well beyond the estimative
•
in 33-53% of the analyzed projects
■
75% of the analyzed systems do not work as planned
■
Difficult reuse and maintenance
not sound evidence!Laws?
http://cacm.acm.org/magazines/2015/7/188735-an-updated- software-almanac/fulltext
Cancellations
0 10 20 30 40 50 0
10 20 40 80 160 320 640 1280 2560 102405120
% Points
Delays
0 10 20 30 40 50 60 10240
5120 2560 1280 640 320 160 80 40 20 10 0
Months Points
Estimation Real
Even worse in common scenarios…
Different clients, different products
http://www.androidauthority.com
Little reuse and agility, high costs
Even with Android!
Little modularity and agility, more defects, high costs
{GameMenu.MENU_OPTION_ID_PLAY,GameMenu.ME NU_OPTION_ID_C
ONFIG_SOUND,GameMenu.MENU_OPTION_ID_A RENA_SHOW_RANKING,GameMenu.MENU_OPTI ON_ID_HELP};
//#else
//#public final int[] mainMenuCommands = {GameMenu.MENU_OPTION_ID_PLAY,GameMenu.
MENU_OPTION_ID_CONFIG_SOUND,GameMenu.
MENU_OPTION_ID_HELP};
//#endif
/** Main pause menu options. Shown in the menu when game is paused */
private final int[] mainPauseMenuCommands = { GameMenu.MENU_OPTION_ID_RESUME,GameMenu.ME NU_OPTION_ID_TRACK_11,GameMenu.MENU_OPTIO N_ID_TRACK_12
}private final int[] helpCommands = {
GameMenu.MENU_OPTION_ID_HELP_GOAL, GameMenu.MENU_OPTION_ID_HELP_STRAIGHTS, GameMenu.MENU_OPTION_ID_HELP_CURVES, GameMenu.MENU_OPTION_ID_HELP_ABOUT };
/** Pause exit menu options */
private final int[] pauseMenuRestartCommands = {
GameMenu.MENU_OPTION_ID_PAUSE_RESTART_YES ,
GameMenu.MENU_OPTION_ID_PAUSE_RESTART_NO }; private final int[] endRaceMenuCommands = {
GameMenu.MENU_OPTION_ID_ARENA_POST_SCOR E,
GameMenu.MENU_OPTION_ID_END_RACE_RETRY,
GameMenu.MENU_OPTION_ID_END_RACE_SELECT_
TRACK,
GameMenu.MENU_OPTION_ID_BACK_MAIN_MENU };\
//# private final int[] endRaceMenuCommands = { //#
GameMenu.MENU_OPTION_ID_END_RACE_RETRY ,
//#
GameMenu.MENU_OPTION_ID_END_RACE_SELEC T_TRACK,
//#
GameMenu.MENU_OPTION_ID_BACK_MAIN_MEN U
//# }; */
private int PREVIOUS_KEY_CODE = MainCanvas.UP_PRESSED;
private int NEXT_KEY_CODE = MainCanvas.DOWN_PRESSED;
/** Title of the menu*/
private String menuTitle;
private Image rewardUserImageMainMenu;public static final int TRACK_SELECTION_MENU = 5;
//#if feature_arena_enabled /** * Post ranking menu
*/ public static final int POST_SCORE_MENU = 10;
//#endif
package com.meantime.j2me.gui;
import java.util.Vector;
import com.meantime.j2me.util.Screen;
import com.meantime.j2me.util.bvg.BVGAnimator;
//#if device_graphics_transform_midp2 //# import javax.microedition.lcdui.game.Sprite;
//#else
import com.meantime.j2me.util.game.Sprite;
private static final int
PRESENTATION_BACKGROUND_COLOR = 0x000000;
//#if device_screen_128x128
/** Initial car animation position x */
private static final int CAR_LEFT_INITIAL_POS_X = -78;
/** Initial car animation position y */
private static final int CAR_LEFT_POS_Y = 31;
/** Initial tire animation position y */
//#
//#endif
/** Used to left tire animatiom position x */
private int currentTireleftPosX; private BVGAnimator presentation_second_bvg;
private BVGAnimator arena_bvg;
gff //#
Dffdsffffffffffffffffffffffffffffff Ghrwds {
/** Constants to paint the scroll bar */
private static final int ARENA_SCROLL_HEIGHT = 92;
private static final int ARENA_SCROLL_POS_Y = 17;
//#elif device_screen_128x117 //#
//# /** Constants to paint the scroll bar */
//# private static final int ARENA_SCROLL_HEIGHT = 81;
//# private static final int ARENA_SCROLL_POS_Y = 16;
//#if sku_id_se1 //#
//#g = originalG;
//#g.drawImage(bufferImg, 0, 0, 0);
//#
//#endif} catch(Exception e){
e.printStackTrace();
} }
public void changeScreen (innewScreenIndex;
this.nextScreenMode = newScreenMode;
this.nextScreenParam = param; /**
* Shows the last screen shown.
* If there's not a last screen (i.e., the screen index in * the stack is public void goBack() { int[] screenData = this.popSc
// avoid mainCanvas to go back to a waiting server screen
if (screenData[STACK_SCREEN_MODE_INDEX] ==
Resources.MAIN_SCREEN_MODE_ARENA_WAITING_
SERVER) { this.goBack();
return;this.changeScreen(screenData[STACK_SCREEN _INDEX],
screenData[STACK_SCREEN_MODE_INDEX], screenData[STACK_PARAM_INDEX]);
} this.goBack = true;
}//#public void commandAction(Command c, Displayable d) { //#if (c == this.leftCommand) {
//#this.keyPressed(LEFT_SOFT_KEY);
//#} else if (c == this.rightCommand) { //#this.keyPressed(RIGHT_SOFT_KEY);
//#}
//#}
//#
//#endif
Teams that don’t
achieve share common
deficiencies
Essential causes of software issues
• Increasing systems
complexity
• Formalization
difficulties and
costs
Accidental causes of software issues
•
Lack of proper education
•
Poor quality of languages, tools, techniques, and processes
•
Organizational issues
•
poor management
•
conflicts
•
ethics and business values
Software quality factors, focus on ethics and business values
■ Correctness
■ Robustness
■ Extensibility
■ Reusability
■ Compatibility
■ Portability
More factors, internal and external
■ Performance
■ Scalability
■ Integrity, privacy and security
■ Usability
■ Flexibility
■ Fault tolerance
For example, why
would those factors be important for a store
automation system?
Not only quality, but productivity too
■
Reduced development cost
•
Consuming company wishes to invest little in software
•
Producing company should offer
“inexpensive software"
■
Reduced development time
•
Quick support and attention to market
needs
“Inexpensive software”
Not only a result of lower
development costs, but also of the cost distribution among a number of
clients
Reuse, extensibility and flexibility are important factors for achieving such distribution
Trade-offs between
quality and productivity
• Investing too much in quality can reduce productivity in the short term
• Neglecting quality can impact
productivity even in the short term
• Professional ethics should not be part of
the trade-off
To obtain software
quality and productivity, teams have to deal with
those issues in a
professional way!
Course overview
Starting a new job…
Tasks
1.Defining, maintaining and managing requirements 2. Managing configurations and changes
3.Managing software project
4.Implementing, maintaining and executing tests
5.Designing, implementing and maintaining features
•Creating or adapting features
•Finding and fixing bugs 6.Refactoring
•Finding and fixing reuse and modularity issues
Starting a new job…
Background
•
Process and collaboration technologies•
git, github, modular development•
Software architecture concepts•
web architecture, patterns•
Programming and testing technologies for SaaS (software as a service)•
groovy, grails, HTML, Javascript, cucumber•
Modularity and reuse tools•
code clone detection, quality metrics analysisYou will not become a software engineer with this course, but you will
find out the way to
become one
Systems
(up to 6 people per system)
•
ResS (https://github.com/pauloborba/ResS)•
TA (https://github.com/pauloborba/TA/)•
RPA (https://github.com/pauloborba/RPA/)•
Redu (https://github.com/OpenRedu)•
other (existing) systems written in Grails/Rails (or any other platform with support for cucumber, code cloning and metrics tools)
Course structure
Class discussion and evaluation
Study and analysis of book and site
material
Project activities, discussion and evaluation
Project results presentation and evaluation Requirements
Configuration Management Project Management
Testing Implementation Refactoring
Classes are for
discussing the material read before the class
Do not expect to learn
only through classes!
Dedication of 12 hs per week. Read a lot!
Make sure you make the most of this
opportunity!
https://sites.google.com/a/
cin.ufpe.br/engenharia-de- software-e-sistemas-2017-1/
Carefully read the site!
https://is.gd/ess_cc20171
Principles and goals
qualidade com
relevância diferença
teoria e prática
técnica e aprendizado inovação
pesquisa e cooperação
ética
diferencial
espírito
crítico agente
transformador competência
mundial
Expectations
•
Ethical behavior•
Basic knowledge and skills of all topics•
basic conformance with all evaluation itens•
Attendance to all classes and evaluation sessions•
Punctuality•
Good time management and minimumdedication of 12 hours a week (including classes)
•
Behave as CS eliteEvaluation items
(learning goals)
Overall evaluation formula
• No MANAs and 90% MA is 10
• No MANAs and 70% MA is 9
• No MANAs and 50% MA is 8
• No MANAs is 7
• 90% MA or MPA is 6 …
• 0.5 bonus from behavioural goals and
number of MAs
Avaliações das metas
• Questionários
• Mini-provas
• Prova
• Final (e segunda chamada da prova)
Concept average evaluation
function computeAverage(mas,mpas,manas,lastConcept) { var average = ""
if (lastConcept == "MA" && (manas+mpas <= 1) &&
(manas==0 || mas>=1)) { average = "MA"
} else if ((lastConcept == "MA" && (manas <= 2)) ||
(lastConcept == "MPA" && (manas <= 1)) ||
(lastConcept == "MANA" && (mas+mpas >= 2))) { average = "MPA"
} else {
average = "MANA"
}
return average }
Problemas para alunos do CIn
Outro problema que alguns parecem ignorar é que o CIn exige total dedicação do aluno ao curso. Enquanto é verdade que o aluno precisa se esforçar e, afinal, o
CIn é da UFPE, não de uma instituição qualquer, com o perdão da palavra, fica difícil de manter o estudo, a
própria dedicação e a motivação em alta com a
montanha de exercícios, listas e miniprovas dados ao aluno. Os professores, em geral, tendem a pensar que apenas a disciplina deles existe e os alunos se vêem frequentemente inundados de coisas para fazer…
Problemas para alunos do CIn
Acho que uma das grandes dificuldades dos cursos do CIn é a questão que quando você comete um deslize a grande tendência é esse deslize se agravar. Reprova
uma cadeira, perde acesso a benefícios, fica triste por achar que não é bom o suficiente, reprova mais uma, acha que agora lascou tudo de vez e sente agonia só de ir pra faculdade. Acho que uma solução é mostrar que mesmo falhando, há solução e há espaço pros
alunos e indicaria um acompanhamento para alunos que estejam com problemas…
Textbook
Engineering Software as a Service: An Agile Approach Using Cloud Computing
by David Patterson and Armando Fox http://www.saasbook.info
(Portuguese version is available, but English skills are very important for a software engineer)
You should primarily study by reading the
textbook!
Studying by reading the slides and wikipedia is a very bad idea!
Extra classes with teaching assistants
• Mandatory for those having problems with
the discussed material
Introduce yourself...
• Name
• What do you expect from this course?
• What questions do you have about the
course?
Choose your system and join your team
now!
Team work
•
Choose a time-keeper – and for each discussion point, write down what you talk about and agree on:•
Team members: who are you? Name, background, study profile, etc.•
Contact information: exchange phone, e-mail, skype, etc.•
Meeting time: Next meeting and weekly meeting times?•
Roles: who has which competences?•
Time plan: what is the initial time plan for the project?More team work
•
Collaboration management: How do you plan to manage the collaboration within your team and with stakeholders? (e.g. write acollaboration plan)
•
Conflict resolution: write a list of work-norms and a list of social norms. How do you plan to sanction team members not following thenorms? How do you plan to deal with conflicts?
•
The project: what are your initial thoughts and ideas?Software and systems engineering
Paulo Borba
Informatics Center
Federal University of Pernambuco
phmb@cin.ufpe.br ◈ twitter.com/pauloborba