Semana Informática 2013 - Seminario Cajón de Sastre

Post on 14-Jun-2015

126 views 2 download

description

Presentación del seminario "Cajón de Sastre" impartido durante la Semana Informática 2013 en Valencia.

Transcript of Semana Informática 2013 - Seminario Cajón de Sastre

El “cajón de sastre” del desarrollo de softwareSeminario

eXce

nti

a : E

l “ca

jón

de

sast

re”

del

des

arro

llo d

e so

ftw

are

24

/04

/20

13

Agenda

• Motivación

• Apertura del cajón

• Reflexión final

• Ronda de preguntas

eXce

nti

a : E

l “ca

jón

de

sast

re”

del

des

arro

llo d

e so

ftw

are

24

/04

/20

13

• Motivación• Apertura del cajón

• Reflexión final

• Ronda de preguntas

Agenda

eXce

nti

a : E

l “ca

jón

de

sast

re”

del

des

arro

llo d

e so

ftw

are

24

/04

/20

13

eXce

nti

a : E

l “ca

jón

de

sast

re”

del

des

arro

llo d

e so

ftw

are

24

/04

/20

13

eXce

nti

a : E

l “ca

jón

de

sast

re”

del

des

arro

llo d

e so

ftw

are

24

/04

/20

13

Hacer las cosas bien significa perder el tiempo y dinero

Tener control de calidad es disponer de pruebas funcionales

Falta de empatía con el usuario final

Equipos desmotivados

“Siempre se ha hecho así”

eXce

nti

a : E

l “ca

jón

de

sast

re”

del

des

arro

llo d

e so

ftw

are

24

/04

/20

13

• Motivación

• Apertura del cajón• Reflexión final

• Ronda de preguntas

Agenda

eXce

nti

a : E

l “ca

jón

de

sast

re”

del

des

arro

llo d

e so

ftw

are

24

/04

/20

13

eXce

nti

a : E

l “ca

jón

de

sast

re”

del

des

arro

llo d

e so

ftw

are

24

/04

/20

13

DEV

…PRO

DEV

DEV

eXce

nti

a : E

l “ca

jón

de

sast

re”

del

des

arro

llo d

e so

ftw

are

24

/04

/20

13

DEV

…PRO

DEV

DEV

PRE

eXce

nti

a : E

l “ca

jón

de

sast

re”

del

des

arro

llo d

e so

ftw

are

24

/04

/20

13

DEV

…PRO

DEV

DEV

PRE

eXce

nti

a : E

l “ca

jón

de

sast

re”

del

des

arro

llo d

e so

ftw

are

24

/04

/20

13

DEV

…PROPRE

DEV

DEV

CIVersionControlSystem

continuousdeployment

continuousdelivery

continuousintegration

eXce

nti

a : E

l “ca

jón

de

sast

re”

del

des

arro

llo d

e so

ftw

are

24

/04

/20

13

Kent Beck

Martin Fowler

Extremme Programming (XP)

eXce

nti

a : E

l “ca

jón

de

sast

re”

del

des

arro

llo d

e so

ftw

are

24

/04

/20

13

eXce

nti

a : E

l “ca

jón

de

sast

re”

del

des

arro

llo d

e so

ftw

are

24

/04

/20

13

eXce

nti

a : E

l “ca

jón

de

sast

re”

del

des

arro

llo d

e so

ftw

are

24

/04

/20

13

TDDRefactor

Red

Green

eXce

nti

a : E

l “ca

jón

de

sast

re”

del

des

arro

llo d

e so

ftw

are

24

/04

/20

13

Unit Testing ≠ Integration Testing

mock stub

¿Unit Testing?

objetos de simulación

eXce

nti

a : E

l “ca

jón

de

sast

re”

del

des

arro

llo d

e so

ftw

are

24

/04

/20

13

F.I.R.S.T Principle

Fast

Isolated

Repeateable

Self-validating

Timely

eXce

nti

a : E

l “ca

jón

de

sast

re”

del

des

arro

llo d

e so

ftw

are

24

/04

/20

13

TDDRefactor

Red

Green

eXce

nti

a : E

l “ca

jón

de

sast

re”

del

des

arro

llo d

e so

ftw

are

24

/04

/20

13

"Every piece of knowledge must have a single, unambiguous, authoritative representation within a system.“

D.R.Y. PrincipleDon’t Repeat Yourself

eXce

nti

a : E

l “ca

jón

de

sast

re”

del

des

arro

llo d

e so

ftw

are

24

/04

/20

13

S.O.L.I.D. Principles

Robert C. Martin“Uncle Bob”

eXce

nti

a : E

l “ca

jón

de

sast

re”

del

des

arro

llo d

e so

ftw

are

24

/04

/20

13

S. O. L. I. D.Single Responsibility Principle

“There should never be more than onereason for a class to change”

public class SuperDashboard extends JFrame {

public Component getLastFocusedComponent()

{...}

public void setLastFocusedComponent(Component lastFocusedComponent)

{...}

public int getMajorVersionNumber ()

{...}

public int getMinorVersionNumber ()

{...}

public int getBuildNumber ()

{...}

}

eXce

nti

a : E

l “ca

jón

de

sast

re”

del

des

arro

llo d

e so

ftw

are

24

/04

/20

13

S. O. L. I. D.Open-Closed Principle

“Software entities (classes, modules, functions, etc.) shouldbe open for extension, but closed for modification.”

eXce

nti

a : E

l “ca

jón

de

sast

re”

del

des

arro

llo d

e so

ftw

are

24

/04

/20

13

S. O. L. I. D.Open-Closed Principle

class GraphicEditor {

...

public void drawShape(Shape shape) {

if (shape.type == RECTANGLE)

drawRectangle(shape);

else if (shape.type == CIRCLE)

drawCircle(shape);

}

public void drawCircle(Circle circle)

{....}

public void drawRectangle(Rectangle rectangle)

{....}

}

eXce

nti

a : E

l “ca

jón

de

sast

re”

del

des

arro

llo d

e so

ftw

are

24

/04

/20

13

S. O. L. I. D.Open-Closed Principle

class Shape {

abstract void draw();

}

class Rectangle extends Shape {

public void draw() {

// draw the rectangle

}

}

class GraphicEditor {

public void drawShape(Shape shape) {

shape.draw();

}

}

eXce

nti

a : E

l “ca

jón

de

sast

re”

del

des

arro

llo d

e so

ftw

are

24

/04

/20

13

S. O. L. I. D.Liskov Substitution Principle

“Functions that use pointers or references to base classes must be able to use objects of derived

classes without knowing it.”

eXce

nti

a : E

l “ca

jón

de

sast

re”

del

des

arro

llo d

e so

ftw

are

24

/04

/20

13S. O. L. I. D.

class Rectangle {

...

public void setWidth(int width){ this.width = width; }

public void setHeight(int height) {this.height = height;}

public int getWidth(){ return width; }

public int getHeight(){ return height; }

public int getArea(){ return width * height; }

}

class Square extends Rectangle {

public void setWidth(int width){

this.width = width;

this.height = width;

}

public void setHeight(int height){

this.width = height;

this.height = height;

}

}

Liskov Substitution Principle

eXce

nti

a : E

l “ca

jón

de

sast

re”

del

des

arro

llo d

e so

ftw

are

24

/04

/20

13

class LspTest {

private static Rectangle getNewRectangle() {

...

return new Square();

}

public static void main (String args[]) {

Rectangle r = LspTest.getNewRectangle();

r.setWidth(5);

r.setHeight(10);

System.out.println(r.getArea());

}

}

S. O. L. I. D.Liskov Substitution Principle

eXce

nti

a : E

l “ca

jón

de

sast

re”

del

des

arro

llo d

e so

ftw

are

24

/04

/20

13

S. O. L. I. D.Interface Segregation Principle

“Clients should not be forced to depend uponinterfaces that they do not use.”

eXce

nti

a : E

l “ca

jón

de

sast

re”

del

des

arro

llo d

e so

ftw

are

24

/04

/20

13

S. O. L. I. D.Dependency Inversion Principle

“High level modules should not depend upon low level modules. Both should depend upon abstractions.”

“Abstractions should not depend upon details. Details shoulddepend upon abstractions.”

eXce

nti

a : E

l “ca

jón

de

sast

re”

del

des

arro

llo d

e so

ftw

are

24

/04

/20

13S. O. L. I. D.

Dependency Inversion Principle

class Worker {

public void work() {

// ....working

}

}

class Manager {

Worker worker;

public void setWorker(Worker worker) {

this.worker = worker;

}

public void manage() {

worker.work();

}

}

eXce

nti

a : E

l “ca

jón

de

sast

re”

del

des

arro

llo d

e so

ftw

are

24

/04

/20

13S. O. L. I. D.

Dependency Inversion Principleinterface IWorker {

public void work();

}

class Worker implements IWorker {

public void work() { ... }

}

class SuperWorker implements IWorker {

public void work() { ... }

}

class Manager {

Iworker worker;

public void setWorker(IWorker worker) {

this.worker = worker;

}

public void manage() {

worker.work();

}

}

eXce

nti

a : E

l “ca

jón

de

sast

re”

del

des

arro

llo d

e so

ftw

are

24

/04

/20

13

Martin Fowler

eXce

nti

a : E

l “ca

jón

de

sast

re”

del

des

arro

llo d

e so

ftw

are

24

/04

/20

13

En el método m de una clase sólo deberían aparecen llamadas a:

• Un método de un miembro de dicha clase

• Otro método de dicha clase

• Un método de un objeto creado por m

• Un método de un objeto pasado como argumento a m

No se debe llamar a métodos de los objetos devueltos por otros métodos.

Law of Demeter (LoD)

eXce

nti

a : E

l “ca

jón

de

sast

re”

del

des

arro

llo d

e so

ftw

are

24

/04

/20

13

String outputDir = context.getOptions().getDir().getAbsolutePath();

String outputDir = context.getAbsolutePathOfOptionsDir();

return options.getAbsolutePathOfDir();

return directory.getAbsolutePath();

eXce

nti

a : E

l “ca

jón

de

sast

re”

del

des

arro

llo d

e so

ftw

are

24

/04

/20

13

“Aquel que no conoce la historia, está condenado a repetirla “

eXce

nti

a : E

l “ca

jón

de

sast

re”

del

des

arro

llo d

e so

ftw

are

24

/04

/20

13

¿Dónde te vas de vacaciones?

5 segundos para continuar…

espacio publicitario

eXce

nti

a : E

l “ca

jón

de

sast

re”

del

des

arro

llo d

e so

ftw

are

24

/04

/20

13

¿Dónde te vas de vacaciones?

5 segundos para continuar…

espacio publicitario

Planifica también tus pruebas

eXce

nti

a : E

l “ca

jón

de

sast

re”

del

des

arro

llo d

e so

ftw

are

24

/04

/20

13

espacio publicitario

1 segundo para continuar…

Pruebas funcionales automatizadas…

…trátalas con cariño

eXce

nti

a : E

l “ca

jón

de

sast

re”

del

des

arro

llo d

e so

ftw

are

24

/04

/20

13

Más ideas para conseguir un código legible…

eXce

nti

a : E

l “ca

jón

de

sast

re”

del

des

arro

llo d

e so

ftw

are

24

/04

/20

13

Código spaghetti

eXce

nti

a : E

l “ca

jón

de

sast

re”

del

des

arro

llo d

e so

ftw

are

24

/04

/20

13

eXce

nti

a : E

l “ca

jón

de

sast

re”

del

des

arro

llo d

e so

ftw

are

24

/04

/20

13

Código ravioli

eXce

nti

a : E

l “ca

jón

de

sast

re”

del

des

arro

llo d

e so

ftw

are

24

/04

/20

13

// if the item should be deleted

if ((item.amountInStock() == 0) && item.lastEdition())

if (item.shouldBeDeleted())

eXce

nti

a : E

l “ca

jón

de

sast

re”

del

des

arro

llo d

e so

ftw

are

24

/04

/20

13

int n; // Number of items.

int numberOfItems;

eXce

nti

a : E

l “ca

jón

de

sast

re”

del

des

arro

llo d

e so

ftw

are

24

/04

/20

13

for (int i = 0; i < 10; i++) {

...

}

for (int i = 0; i < MAX_ARTICLES_IN_STOCK; i++) {

...

}

eXce

nti

a : E

l “ca

jón

de

sast

re”

del

des

arro

llo d

e so

ftw

are

24

/04

/20

13

Principle of least astonishment (POLA/PLA)

The result of performing some operation should be obvious, consistent, and predictable, based upon the name of the operation and other clues.

eXce

nti

a : E

l “ca

jón

de

sast

re”

del

des

arro

llo d

e so

ftw

are

24

/04

/20

13

public Space getSpace() {

if (space == null) {

space = new Space();

}

return space;

}

public Space createOrReturnSpace() {

if (space == null) {

space = new Space();

}

return space;

}

eXce

nti

a : E

l “ca

jón

de

sast

re”

del

des

arro

llo d

e so

ftw

are

24

/04

/20

13

Mutation Testing

eXce

nti

a : E

l “ca

jón

de

sast

re”

del

des

arro

llo d

e so

ftw

are

24

/04

/20

13

• Motivación

• Apertura del cajón

• Reflexión final• Ronda de preguntas

Agenda

eXce

nti

a : E

l “ca

jón

de

sast

re”

del

des

arro

llo d

e so

ftw

are

24

/04

/20

13

"Try and leave this world a little better than you found it . . ."

eXce

nti

a : E

l “ca

jón

de

sast

re”

del

des

arro

llo d

e so

ftw

are

24

/04

/20

13

The Boy Scout Rule

"Leave the campground cleaner than you found it“

Robert C. Martin“Uncle Bob”

eXce

nti

a : E

l “ca

jón

de

sast

re”

del

des

arro

llo d

e so

ftw

are

24

/04

/20

13

eXce

nti

a : E

l “ca

jón

de

sast

re”

del

des

arro

llo d

e so

ftw

are

24

/04

/20

13

“It seems that perfection is reached not when there is nothing left to add, but when there is nothing left to take away”

Antoine de Saint Exupéry

K.I.S.S. PrincipleKeep It Small and Simple

eXce

nti

a : E

l “ca

jón

de

sast

re”

del

des

arro

llo d

e so

ftw

are

24

/04

/20

13

eXce

nti

a : E

l “ca

jón

de

sast

re”

del

des

arro

llo d

e so

ftw

are

24

/04

/20

13

eXce

nti

a : E

l “ca

jón

de

sast

re”

del

des

arro

llo d

e so

ftw

are

24

/04

/20

13

Muévete Lee

Practica Comparte

eXce

nti

a : E

l “ca

jón

de

sast

re”

del

des

arro

llo d

e so

ftw

are

24

/04

/20

13

Coding Codedojo kata

eXce

nti

a : E

l “ca

jón

de

sast

re”

del

des

arro

llo d

e so

ftw

are

24

/04

/20

13

eXce

nti

a : E

l “ca

jón

de

sast

re”

del

des

arro

llo d

e so

ftw

are

24

/04

/20

13

eXce

nti

a : E

l “ca

jón

de

sast

re”

del

des

arro

llo d

e so

ftw

are

24

/04

/20

13

Oath of Non-Allegiance

"I promise not to exclude from consideration any idea based on its source, but to consider ideas across schools and heritages in order to find the ones that best suit the current situation."Alistair Cockburn

eXce

nti

a : E

l “ca

jón

de

sast

re”

del

des

arro

llo d

e so

ftw

are

24

/04

/20

13

eXce

nti

a : E

l “ca

jón

de

sast

re”

del

des

arro

llo d

e so

ftw

are

24

/04

/20

13

eXce

nti

a : E

l “ca

jón

de

sast

re”

del

des

arro

llo d

e so

ftw

are

24

/04

/20

13

“Life begins at the end of your comfort zone”

Neal Donald Walsh

eXce

nti

a : E

l “ca

jón

de

sast

re”

del

des

arro

llo d

e so

ftw

are

24

/04

/20

13

“It is not the strongest of the

species that survives, nor the

most intelligent that survives.

It is the one that is most

adaptable to change.”

eXce

nti

a : E

l “ca

jón

de

sast

re”

del

des

arro

llo d

e so

ftw

are

24

/04

/20

13

• Motivación

• Apertura del cajón

• Reflexión final

• Ronda de preguntas

Agenda

eXce

nti

a : E

l “ca

jón

de

sast

re”

del

des

arro

llo d

e so

ftw

are

24

/04

/20

13

@excentiawww.excentia.es

Raquel Morenormoreno@excentia.es

Muchas gracias por su atención