XP Explained (Extracto del libro)
El problema
Riscos del programari
- Objectiu: evitar els riscos del programari
- En concret:
- Fora de termini: Hem de dir al client que no arribem a data
- Cancel·lació del projecte: tants terminis fora al final es cancela abans d'entrar a producció
- Programari feixuc: El sistema es feixuc de mantenir i corregir
- Programari defectuós: Alta tasa de falles
- Negoci malentés: No s'ha entés el negoci i no soluciona el problema
- Negoci canviant: El negoci canvia i quan entra a producció el sistema ja és vell
- Sobredisseny: S'han implementat funcionalitats divertides de programar, inútils pel client
- Fugida de cervells: Els programadors bons, s'agobien del projecte i s'en van a d'altres més engrescadors
- Solucions XP:
- Fora de termini:
- Cicles curts, d'abast limitat
- Tasques comprehensibles i detallades
- Prioritzacio amb el client
- Les tasques que queden fora son les menys prioritaries
- Cancel·lació del projecte:
- El client escull quin és el conjunt mínim de funcionalitats que poden fer una release útil.
- Això màximitza el valor de la feina des de l'inici
- Programari feixuc:
- Test unitaris cobrint el programari
- S'executen continuament
- No s'acomula el codi brossa
- Programari defectuós:
- Programadors testejen a baix nivell
- Clients defineixen testos a nivell de funcionalitat
- Negoci malentés:
- El client s'integra en l'equip
- L'especificació es refina amb l'aprenentatge dels desenvolupadors
- Negoci canviant:
- Cicles curts redueixen la possibilitat de que canviin mentres ho fem
- El client és benvingut a canviar l'especificacio del que s'esta fent al cicle
- Això fa que l'equip treballi amb requeriments nous com si fossin vells.
- Sobredisseny:
- Només es fa el que es decideix que és prioritari
- Fugida de cervells:
- Programaires prenen la responsabilitat de estimar i finalitzar el seu treball
- Aprenen de les seves estimacions
- No se li demanen terminis impossibles i fustrants
- Força interacció amb companys i clients, reduint la solitud
- Formació contínuada incoorporada al treball
- Fora de termini:
El dia a dia
- Parelles de programaires programen junts
- Desenvolupament dirigit per testos
- Primer fas el test, després el codi que el fa passar (no codi sense test)
- Quan no pots pensar un test que falli, ja estàs (no sobretesteix)
- Refactoring:
- En paral·lel als testos que afegeixen funcionalitat, modifiquen el codi per millorar el disseny
- El codi que toca una parella no està restringit en abast
- Integració contínua:
- La integració es fa seguidament del codi
- Test d'integració inclosos
Economia del programari
- Generar beneficis el més abans possible, generar costos el més tard possible
-
Allargar la vida productiva del projecte per arribar a amortitzar-ho
-
Opcions:
- Abandonar: Millor si podem obtindre valor d'un projecte tot i abandonar-ho
- Dredreçar: Millor com més sovint i violentament podem redreçar el projecte
- Retardar: Millor si podem retrasar la inversió sense perdre l'oportunitat d'invertir
- Creixer: Millor si podem escalar amb més inversió si hi ha més demanda
-
Valor de les opcions:
- Inversió requerida
- Benefici obtingut
- Valor actual del benefici obtingut
- Finestra temporal on es viable
- Incertesa sobre el valor del benefici en el futur
- Normalment domina la incertesa en el valor
4 variables dels projectes
-
Cost, Temps, Qualitat, Abast (agafa'n 3... o 2... o 1)
-
Cost:
- Ha de ser suficient, pero massa diners massa d'hora no sol ser bo
- No sempre els diners aconsegueixen reduir el temps
- 9 dones no fan un nen en un mes
- Es pot invertir en millors eines, infrastructura o especialistes
- Time:
- Amb més temps pots incrementar la qualitat i l'abast.
- Massa temps sense arribar a producció, no rebem feedback i pot tenir impacte a la qualitat
- No donar suficient va en detriment de les altres
- Sovint es una restriccio externa
- Quality:
- No paga controlar el projecte amb aquesta variable
- Podem reduir el temps reduint qualitat pero a la llarga ho paguem.
- Sovint exigint mes qualitat els projectes acaben abans: testing, coding standards...
- A vegades les restriccions de qualitat es poden relaxar
- Treure coses amb qualitat dona moral
-
Abast:
- Tenint cobertes les necessitats ens permet controlar molt be el temps i els costos amb alta qualitat
-
Focalitzar en l'abast
- Amb un abast més curt els clients poden reaccionar, al començament, potser les idees no estan clares
- La indefinició dels requeriments es una oportunitat, no un problema
- El definim poc a poc, maximitzant les altres variables
- Definim l'scope donades les altres tres variables
- Ho fem amb el client al costat per maximitzar el valor
- Com evitar defraudar al client
- El client prioritza les funcionalitats que vol ficar
- Anar aprenent a estimar per definir quant entra, per minimitzar les funcionalitats que cauen
- Dintre de la iteració fer primer les tasques prioritaries, si cal deixar caure, que sigui lo menys important
Cost del canvi
- Quant costa fer un canvi?
- Teoria clasica:
- model cascada: Analisis-Disseny-Implementacio-Testeig-Implantacio
- el cost dels canvis implica revisar decissions previes, creix exponencialment
- Actualitat
- Hi ha eines (tecnologies, pràctiques) per controlar el cost dels canvis
- Orientacio a objectes per abstreure i desacoblar implementacions
- Disseny el més simple possible que fa la funcionalitat
- Tests de regressió per fer canvis amb confiança
- Constant refactoring to improve the design
Els quatre valors
Comunicació
-
Els problemes als projectes sovint es poden reseguir fins a algu no parlant amb algu altres
- Un canvi en el disseny no comunicat
- Un desenvolupador no preguntant alguna cosa al client
- Un gestor fent la pregunta equivocada als programadors i obtenint un informe de progrés erroni
- ...
-
Coses que minen la comuniciació
- Un programador dona males notítices al seu cap i el cap li castiga, això fa que les males notícies futures no arribin a temps en el futur
- Un desenvolupador ignorant alguna cosa que li ha dit el client
- ...
-
XP força la comunicació introduint práctiques que requereixen comunicació entre desenvolupadors, clients i gestors.
- XP introdueix la figura
Simplicitat
- Quina es la solució més simple que funciona
- Com no avançar-se als problemes de demà si ens han acollonit amb el cost exponencial dels projectes
- XP fa una aposta:
- Millor invertir poc ara i asumir cost del canvi posterior
- que invertir molt ara i arriscar-se a que no sigui útil demà
Realimentació
- "No m'ho preguntis a mi, pregunta-ho al sistema"
- Es posa en valor tenir una visió real de l'estat del sistema (testos, progres, estimacions...)
- Les pràctiques XP donen resposta a les accions que fem:
- Els testos sobre els canvis que anem fent al codi
- La planificacio sobre el progres de les tasques
- El planning game sobre el cost de les funcionalitats
- Testos funcionals per cada història (cas d'us simplificat)
- Posar d'hora les funcionalitats a producció
Coratge
- Els altres valors permeten tenir coratge per fer coses que sense elles no en tindries
- Però de fet, sovint els temors heredats a fer segons quines coses ens dominen, cal tenir coratge
- Exemples:
- Començar a implementar sense tenir una visió completa del problema
- Tirar codi que ja no es fa servir
- Intentar una solucio que simplifica el sistema
Interaccions positives entre els valors
- (Com->Sim) Com més comuniqueu, millor veieu el que cal i el que no cal en un sistema i podeu simplificar
- (Sim->Com) Com més simple és el sistema, més fàcil és comunicar
- (Com->Cor) Si comuniqueu bé, aquests canvis els podeu fer amb més confiança, més coratge
- (Com->Cor) Quan comuniquem bé obrim la porta al coratge perque podem comunicar més obertament a idees d'experiments que tenim que suposen alt risk i alta recompensa.
- (Sim->Cor) Quan la solució és simple també, tindreu més coratge per fer canvis.
- (Fb->Cor) Quan tenim feedback ens permet ser coratjosos perque si la caguem ens adonem d'hora i podem tirar enrera
- (Fb->Com) Quan tenim molt feedback es molt més fàcil comunicar: Si detectes un flaw en un codi, fas un test
- (Com->Fb) Si comuniques efectivament saps que testejar i quines metriques calen
- (Sim->Fb) Simple systems are easier test (feedback)
- (Fb->Sim) Having test feedback let's you focus on how to simplify the system.
Principis
- Els valors ens donen una idea de que valorar en un bon projecte
-
Són massa difusos per establir unes pràctiques
-
Feedback rapid:
- Cal poder incorporar ràpid la informació que ofereix el feedback sobre l'acció que fem
- El temps entre l'acció i la reacció és clau per l'aprenentatge
- Asumir la simplicitat:
- Tractar cada problema com si es pogués resoldre amb una simplifitat ridícula
- Molt difícil d'empassar pels programadors:
- No planegis el futur
- Confia en que pots afegir complexitat en el futur si la necessites
- L'economia del software com a opcions ho recolza
- Canvi incrementals:
- Els grans canvis mai funcionen i menys a la primera
- Disseny es canvia poc a poc
- La planificació canvia poc a poc
- L'equip canvia poc a poc
- Fins i tot, l'adopcio de XP es fa poc a poc
- Canvi és benvingut
- Accepta el canvi com a motor de tot
-
Trabajo de calidad
- Ningú treballa a gust fent xapuses
- Tothom es sent bé fent un bon treball
- La qualitat no ha de ser una de les variables de controlar.
- Els únics valors possibles són excel·lent o malaltisament excel·lent en cas de que en depenguin vides.
-
Altres menys primaris
-
Ensenya aprenent:
- En comptes de ensenyar amb doctrines
- planificar camins d'aprenentatge
- Que cadascú trobi les seves pròpies respostes
- Inversio inicial petita
- Massa recursos a l'inici del projecte es recepta pel fracàs
- Si no hi ha recursos per resoldre un problema interessant, el projecte no és interessant
- Jugar para ganar
- No para no perder
- Si juegas para no perder te ciñes al libro, no porque tenga sentido sino para que nadie pueda culparte del fracaso
- Ceñirse al libro son reuniones, documentacion inutiles que se hacen porque tocan, no porque ayude al exito.
- Experiments concrets
- Davant d'una decissió, testejar-la
- El resultat de les sessions de disseny no és un disseny acabat sinó un conjunt de coses a comprovar.
- El resultat d'una sessió d'anàlisis de requeriments ha de ser també un conjunt d'experiments a fer.
- Comunicació oberta i honesta
- Hem de poder dir els problemes que veiem en el codi dels altres
- Hem de poder expresar les pors i demanar auxili
- Hem de poder donar males notícies als clients i als caps
- Fer-ho com abans millor i sense castigs
- Treballar amb els instints de les persones no en contra d'ells
- A les persones els agrada:
- guanyar, apendre, interactuar amb altres persones, ser part d'un equip, rebre confiança, fer un bon treball, tenir un software funcionant...
- A la gent no li agrada:
- procediments, burocracia, castigs...
- A les persones els agrada:
- Responsabilitat aceptada:
- No s'asigna responsabilitats a les persones
- Son les persones les que accepten la responsabilitat
- Si l'equip arriba a la conclusio de que cal fer una tasca algu asumira la responsabilitat
- Local adaptation
- Cada pais, organitzacio, equip és diferent
- Les receptes d'XP no son regles absolutes
- Cal pero evaluar els canvis i les seves conseqüències
- Es un procés progressiu
- Viatja lleuger
- No ens podem moure àgilment si portem molt d'equipatge
- Artefactes: pocs, simples i valuosos
- Cultura nòmada llestos per canviar de lloc
- Si el client decideix pendre un altre camí
- Si decidim portar el disseny per un camí no anticipat
- Si l'entorn del negoci canvia
- Si una nova tecnologia esdevé interessant
- Mètriques honestes
- Si hi ha incertesa no interessa tant una estimació amb molts decimals sinó un rang o un ordre de magnitud
- No fer servir mètriques que no es correlin amb el progrés
- ie. LoC no tè sentit si simplificar ho redueix
Activitats bàsiques
Quins son les activitats bàsiques que necessitem?
Codificar
- El codi és el producte principal, el que has d'acabar generant
- Pots voler dir una altra cosa, pero el que está escrit hi queda
- El codi comunica sense retorica
- Si m'expliques una idea, la puc malinterpretar
- Si la codifiquem junts, precissament el que volies dir (en un test o en un Sut)
- Aquesta comunicació esdevé aprenentatge al temps que evolucionem el codi
- Com és lo bàsic, ho farem servir per el que poguem
- Comunicar
- Especificació operacional (testos autocomprovats)
Testejar
- Molt de programari es fa sense testos automatics, perque seria essencial?
- Llarg: Mante el programari viu més temps
- Pots fer canvis durant més temps
- La confiança en el sistema es manté, millor modificar el que hi ha que refer-ho tot de nou perque no ens atrevim a tocar-ho
- Curt: Es mes divertit amb test (lo curt es el que va a favor de l'instint)
- Llarg: Mante el programari viu més temps
- Dos nivells:
- Unitaris: Els codi fa el que els programadors volen que faci
- Funcionals: El codi fa el que els clients volen que faci
Escoltar
- Els programadors no saben res (que els interessi a la gent de negoci)
- Els testos recullen saber de negoci capturat pels programadors
- D'on el treuen? d'escoltar al client
- Els programadors tambe ajuden al client a entendre el que es complicat i el que es fàcil
- Cal una bona estructura de comunicació per a que això funcioni
Dissenyar
- Si escoltem, testejem i codifiquem arribara un moment que l'entropia no ens deixarà avançar
- Cal reorganitzar el codi, dissenyar
- Disseny bo:
- Un canvi a una part no implica un canvi a un altra part (baix acoblament)
- Cada peça de logica es troba a un sol lloc (no duplicació)
- La lògica és a prop de les dades que modifica (cohesió)
- Extensions al sistema es poden fer canviant-ho a un sol lloc (extensibilitat)
- La forma de dissenyar també és incremental
- No es fa un disseny d'entrada sinó que es va evolucionant
- Refactorings: canvis en el codi per millorar el disseny
- El procés de disseny separat de l'afegir funcionalitats