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.)
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 25%
• 31% in another study, 16% are successful
development time and cost go well beyond the estimative
• in 53% of the analyzed projects
75% of the analyzed systems do not work as planned
Difficult reuse and maintenance
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 = { 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
!! !
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
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
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
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
System • RGMS
• Redu
• other existing systems written in Grails or Rails
Course structure Study and analysis of 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-desoftware-e-sistemas-2014-2/
!
http://is.gd/Zuhc0Y
Introduce yourself... • Name
• What do you expect from this course?
Software and systems engineering Paulo Borba
Informatics Center
Federal University of Pernambuco
[email protected] ◈ twitter.com/pauloborba