Software and systems engineering Paulo Borba Informatics Center Federal University of Pernambuco

[email protected] ◈ twitter.com/pauloborba

Reuse opportunities

Different devices, 15 to 60 different applications…

Different clients, different products

http://www.androidauthority.com

Little reuse and agility, high costs Even with Android!

Problem might also appear in the context of a single product...

How to detect it?

Code cloning tool, file

Code cloning tool, packages

But what is a clone?

Clones? Strings? Tokens? if (first == null && second != null) { return -1; } if (first == null && second != null) { return -1; } if (f == null && s != null) { return -1; } if (f == null && s != null) { return 0; }

Clones? Reuse opportunities? int getDay() { return day; } int getMonth() { return month; } int getDay() { return day+1; }

int sum(int x,int y){return x+y;} int sumInt(int a,int b){return a+b;}

Changing clone notion, small

Changing clone notion, large

Minimum clone length (tokens) if (o.toString().equals("/")) { div = new DivExp(null, null)); } if (o.toString().equals("*")) { mult = new MultExp(null, null)); } notified by the first setting but not by the second

P-match... maps different variables and function names to different tokens if (x>0) {y=1; x=2; x=w;} else {y=1; x=2; x=z;}

Minimum TKS (kinds of tokens) int x = 0; int y = 0; int z = 0; int a = 0; int b = 0; int c = 0;

Shaper level, hard and soft

Shaper level, easy and none

Different tools, different approaches

Strategy • Start with stronger constraints • Analyze clones • Reduce constraints • Cycle until no more significant clones (or

few significant and too many non significant ones, but be careful!)

Significant clones... • can be avoided • it is worth avoiding them • in terms of abstraction • in terms of conciseness • in terms of consistency • in terms of legibility

Code reviews should complement all that!

Code anomalies beyond cloning, not necessarily affecting reuse...

or code size, but other quality factors

Again, code reviews should complement all that!

Modularity opportunities

Little modularity and agility, more deffects, 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

But what is modularity? Little Good

Bad Much

A modular system is... • split into separate units, language elements, modules

• developed by separate work assignments, design elements, modules

with the aim of achieving modularity benefits... • Independent development • Independent maintenance • Independent understanding

Bad modularity? ... void cadastrar(Conta conta) { if (conta != null && conta.valida() && !this.existe(conta.getNumero())) { if (proxima <= maximo-1) { contas[proxima] = conta; proxima = proxima + 1; } else {...Espaço insuficiente...} } else {...Conta inválida...} } ...

Good modularity? Graphical User Interface (GUI) Communication Business Data

Depends on what you intend to independently develop, maintain, and understand!

Depends on what more likely changes or varies!

How to detect modularity problems?

Few or big modules

Complex modules

Visualizations of specific metrics

Big, deep, shallow modules

Unwanted module dependencies

Metrics behind all that • Depth of inheritance tree • SLOC • Coupling, code level • method and constructor call • extends and implements declarations • field access

Coupling and dependencies

Design structure matrixes

Cycles, aferent and eferent dependencies

Relative modularity analysis!

OK with GUI, Business and Data concerns

OK with Update complaint and other use case concerns GUI

GUI

Business

UC aspect

Business

Data

Data

crosscuts

but tangling and scattering when we also consider Update complaint...

but tangling and scattering when we also consider GUI, Data...

Strategy • First at the architecture level, then at the code level:

• Start with more selective filters and metrics

• Analyze smells • Reduce filter and metrics constraints • Cycle until no more interesting smells

Code and design reviews complement all that

Software and systems engineering Paulo Borba Informatics Center Federal University of Pernambuco

[email protected] ◈ twitter.com/pauloborba

Paulo Borba Informatics Center Federal University of ...

Code cloning tool, file. Page 8. Code cloning tool, packages. Page 9 ... P-match... maps different variables and function names to different tokens if (x>0). {y=1; x=2; x=w;} else. {y=1; x=2; x=z;}. Page 17. Minimum TKS (kinds of tokens) int x = 0; int y = 0; int z = 0; int a = 0; int b = 0; int c = 0;. Page 18. Shaper level, hard and soft ...

3MB Sizes 1 Downloads 115 Views

Recommend Documents

Paulo Borba Informatics Center Federal University of ...
Software as a Service. (SaaS). • Delivers software and data as a service over the Internet. • No need to install applications. • No need to backup or share data. • Easier to improve the service ...

Paulo Borba Informatics Center Federal University of ...
Little reuse and agility, high costs. Even with. Android! ... 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.ga

Paulo Borba Informatics Center Federal University of ...
Code cloning tool, packages. 8. Wednesday, August 18, 2010 ... Minimum TKS (kinds of tokens) int x = 0; int y = 0; int z = 0; int a = 0; int b = 0; int c = 0;. 18. Wednesday, August 18, 2010 ... POP (population): Count of code fragments of the code c

Paulo Borba Informatics Center Federal University of ...
Check previous activities. • Log into google with your CIn account. • Access and answer today's questions (…) • Discuss class material. • what haven't you understood? what don't you agree? what haven't you liked? what are you missing to per

Paulo Borba Informatics Center Federal University of ...
PDC, bridge variation... class AccountRecord { private AccountRepository accounts;... public void register(Account a) { if (a != null) {. String n = a.getNumero(); if (!accounts.exists(n)) { ... Account search(String number); boolean exists(String nu

Paulo Borba Informatics Center Federal University of ...
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 syste

Denver Federal Center (2).pdf
There was a problem previewing this document. Retrying... Download. Connect more apps... Try one of the apps below to open or edit this item. Denver Federal ...

Federal University of Amazonas, Manaus, BRAZIL ...
RESULTS. Two evaluation metrics were used: • RMSE: adequate to evaluate the floating point results ... host city of all teams). • The problem of prediction of goal difference was interpreted as a temporal regression task. • We searched for a se

[PDF BOOK] Fundamentals of Federal Income Taxation (University ...
We would like to show you a description here but the site won’t allow us. Online PDF Fundamentals of Federal Income Taxation (University Casebook ...

Federal University of Technology, Owerri, Imo State ... ...
on Computational Sciences, Information Assurance, Big Data, and STEM. Education .... Room rates 2012/2014. ROOM. RATES. DEPOSIT. SUPERIOR DOUBLE.

The City University of New York - The Graduate Center, CUNY
Jul 6, 2011 - Act as a First Responder to alarms and calls for service. Observe campus activities, reporting suspicious behavior and other incidents to Central ...

National Survey - Public Policy Center - University of Iowa
Additionally, the project team brought in Knowledge Networks, a nationally .... Upon receiving the responses, the UI compiled all the expert responses into a single ..... 'social media (Facebook, twitter)' (4.7%) and 'brochures, pamphlets' (5.2%).

National Survey - Public Policy Center - University of Iowa
component of the National Driver Safety Education Campaign. ... Additionally, the project team brought in Knowledge Networks, a nationally ..... Respondents were asked to report (to the best of their knowledge) which vehicle safety ... Table 10: Tech

University of Texas Health Science Center at San Antonio.pdf
University of Texas Health Science Center at San Antonio.pdf. University of Texas Health Science Center at San Antonio.pdf. Open. Extract. Open with. Sign In.

The University of Arizona Center for Environmental Physics and ...
collaborative soil science research focused on the application of geospatial, ... for an individual that can assist in project management, including data analysis.

The University of Arizona Center for Environmental Physics and ...
The University of Arizona Center for Environmental Physics and Mineralogy and Environmental. Pedology ... immediate need for an individual that can assist in project management, including data analysis ... Please feel free to contact Craig.