Software and systems engineering Paulo Borba Informatics Center Federal University of Pernambuco
[email protected] ◈ 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.)
Our society depends on software systems
Every year, 33 billions lines of code (LOC) are created or modified Grady Booch, 2008.
Software and systems engineering is concerned with…
Quality and Productivity
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 • ABS
Practical impact ■
Companies competitiveness
■
Better products, smaller costs (long term)
■
Attraction of new companies to local ecosystems • investments, more taxes
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
Cancellations 10240 5120 2560 1280 640 320 Points 160 80 40 20 10 0
0
10
20
30
40
50 %
Delays
Points
10240 5120 2560 1280 640 320 160 80 40 20 10 0
Estimation Real
0
10
20
30
40
50
60 Months
http://cacm.acm.org/magazines/2015/7/188735-an-updatedsoftware-almanac/fulltext
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_ARENA _SHOW_RANKING,GameMenu.MENU_OPTION_ID_HELP }; //#else //#public final int[] mainMenuCommands = {GameMenu.MENU_OPTION_ID_PLAY,GameMenu.MENU _OPTION_ID_CONFIG_SOUND,GameMenu.MENU_OPTI ON_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 = {
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
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_SELECT_TR ACK, //# GameMenu.MENU_OPTION_ID_BACK_MAIN_MENU //# }; */ 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
/** 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
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 value ■
Correctness
■
Robustness
■
Extensibility
■
Reusability
■
Compatibility
■
Portability
More factors, internal and external ■
Performance
■
Scalability
■
Integrity, privacy and security
■
Usability
■
Flexibility
■
Fault tolerance
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
Course overview
Starting a new job… Tasks • Defining, maintaining and managing requirements • Implementing, maintaining and executing tests • Implementing and maintaining features • Creating or adapting features • Finding and fixing bugs • Refactoring • Finding and fixing reuse and modularity issues • Managing software project • Managing tasks, configurations and changes
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, refactoring
• Modularity and reuse tools • code clone detection, quality metrics analysis
Systems
(up to 10 people per system)
• ResS (https://frozen-earth-8120.herokuapp.com/) • TA (https://ancient-refuge-7019.herokuapp.com/) • RGMS (https://stormy-brushlands-1894.herokuapp.com/) • other (existing) systems written in Grails (or any other platform with support for cucumber, code cloning and metrics tools)
Course structure Study and analysis of book and site material
Requirements
Class discussion and evaluation
Testing Implementation Refactoring Management
Project activities, discussion and evaluation
Project results presentation and evaluation
https://sites.google.com/a/ cin.ufpe.br/engenharia-de-softwaree-sistemas-2015-segundosemestre http://is.gd/EayYep
Principles and goals teoria e prática
pesquisa e cooperação
qualidade com relevância ética
competência mundial
técnica e aprendizado inovação
diferencial diferença
espírito crítico
agente transformador
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 minimum
dedication of 12 hours a week (including classes)
Evaluation items
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 •…
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…
Introduce yourself... • Name • What do you expect from this course? • What questions do you have about the course?
Choose your system and join you team now!
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)
You should primarily study by reading the textbook! Studying by reading the slides and wikipedia is a very bad idea!
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 a collaboration 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 the norms? 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
[email protected] ◈ twitter.com/pauloborba