Vous êtes sur la page 1sur 162

Scrum y eXtreme Programming para Programadores

Eugenia Bahit

Scrum y eXtreme Programming para Programadores de Eugenia Bahit se distribuye bajo una Licencia Creative Commons Atribucin-NoComercia Sin!erivadas "#$ %nported#

Comparte e conocimiento
Eres ibre de& Copiar' distribuir y compartir este ibro

Bajo as siguientes condiciones& (econocer y respetar a autor)a de a obra No hacer uso comercia de e a No a terar e contenido

*+$,,-+$,+ Eugenia Bahit "

Buenos Aires' Argentina

Scrum y eXtreme Programming para Programadores

Eugenia Bahit

Scrum y eXtreme Programming para Programadores

Eugenia Bahit

ndice General
.ntroduccin a a gestin de proyectos de desarro o de So/t0are ########################################################## ,"
12u3 es e !esarro o 4gi 5 ###########################################################," %n panta a6o genera sobre a gestin de proyectos####################," !i/erenciando as metodo og)as de gestin###############################,7 8ipos de Proyecto##########################################################################,9 !esarro o de un nuevo sistema in/orm:tico#############################,9 !esarro o de nuevas /unciona idades######################################,; (eingenier)a de un sistema#######################################################,; <antenimiento evo utivo##########################################################,; <antenimiento adaptativo########################################################,= <antenimiento preventivo########################################################,= <antenimiento correctivo#########################################################+$ La octava c asi/icacin##############################################################+$ Abordaje de un proyecto de construccin de So/t0are#################+$ E agi ismo y su <ani/iesto ###########################################################++ Los va ores de agi ismo############################################################++ .ndividuos e interacciones sobre procesos y herramientas###++ So/t0are /uncionando sobre documentacin e>tensiva########+" Co aboracin con e c iente sobre negociacin contractua ###+" (espuesta ante e cambio sobre seguir un p an####################+" Los doce principios de agi ismo################################################+Principio ?,& Satis/acer a c iente mediante a entrega temprana y continua de so/t0are con va or##########################+Principio ?+& Aceptamos @ue os re@uisitos cambien' inc uso en etapas tard)as de desarro o# Los procesos 4gi es aprovechan e cambio para proporcionar ventaja competitiva a c iente############################################################################### +7 Principio ?"& Entregamos so/t0are /unciona /recuentemente'
7

Scrum y eXtreme Programming para Programadores

Eugenia Bahit

entre dos semanas y dos meses' con pre/erencia a periodo de tiempo m:s corto posib e#################################################+7 Principio ?7& Los proyectos se desarro an en torno a individuos motivados# Aay @ue dar es e entorno y e apoyo @ue necesitan' y con/iar es a ejecucin de trabajo#############+B Principio ?B& Conversacin cara a cara################################+B Principio ?9& E so/t0are /uncionando es a medida principa de progreso###########################################################################+9 Principio ?;& Los promotores' desarro adores y usuarios debemos ser capaces de mantener un ritmo constante de /orma inde/inida####################################################################+9 Principio ?=& La atencin continua a a e>ce encia t3cnica y a buen diseCo mejora a Agi idad#############################################+9 Principio ?,$& La simp icidad' o e arte de ma>imi6ar a cantidad de trabajo no rea i6ado' es esencia #######################+; Principio ?,,& Las mejores ar@uitecturas' re@uisitos y diseCos emergen de e@uipos auto-organi6ados#################################+; Principio ?,+& A interva os regu ares e e@uipo re/ e>iona sobre cmo ser m:s e/ectivo para a continuacin ajustar y per/eccionar su comportamiento en consecuencia###############+=

Conociendo Scrum ################################################ "$


E <arco de 8rabajo de Scrum#######################################################", Los (o es en Scrum ##################################################################"" E !ueCo de Producto DProduct E0nerF en Scrum ################""

Gunciones y responsabi idades##################################"Aptitudes @ue debe tener un !ueCo de Producto#####"E Scrum <aster####################################################################"-

Gunciones y responsabi idades##################################"7 Aptitudes @ue debe tener un Scrum <aster##############"7 Actitudes @ue un buen Scrum <aster debe evitar inde/ectib emente#####################################################"B

Scrum y eXtreme Programming para Programadores

Eugenia Bahit

E E@uipo de !esarro o DScrum 8eam o E@uipo ScrumF########"9

Gunciones y responsabi idades##################################"9 %n buen Scrum 8eam' actHa como un verdadero e@uipo#######################################################################";
Arte/actos y Aerramientas #######################################################"= BacI og de Producto #############################################################"= Gormato de BacI og de Producto##########################################-$

Priori6acin de os )tems de BacI og de Producto#####-$ Estimacin de es/uer6o#############################################-, Jranu idad de os )tems #########################################-+ Criterios de Aceptacin#############################################-"
BacI og de Sprint######################################################################-7 !ividiendo Aistorias de %suario en 8areas############################-B .ncremento de Gunciona idad####################################################-= Ceremonias en Scrum###################################################################7$ Ceremonia de P ani/icacin de Sprint#######################################7$ (eunin diaria###########################################################################7+ Ceremonia de (evisin#############################################################7" Ceremonia de (etrospectiva& a bHs@ueda de a per/eccin#####77 Estimando es/uer6os#####################################################################7B Estimando con 8-Shirt Si6ing#####################################################7; 1Cmo se juega5###################################################################B$ Estimacin por PoIer################################################################B$ (eg as de Kuego####################################################################B, 1Cmo jugar Scrum PoIer5###################################################B+ Estimando por Co umnas##########################################################B7 Estimacin por Co umnas y PoIer#############################################B; Scrum Lit###################################################################################### B=
9

Scrum y eXtreme Programming para Programadores

Eugenia Bahit

.ntroduccin a a Programacin eXtrema ################## 9$


Bases de a programacin eXtrema##############################################9$ Comunicacin########################################################################### 9$ Simp icidad############################################################################### 9, (etroa imentacin#####################################################################9, (espeto##################################################################################### 9, Coraje####################################################################################### 9, Pr:cticas t3cnicas#########################################################################9+ P(4C8.CA ?,& CL.EN8E .N-S.8% DEN-S.8E C%S8E<E(F##############9+ P(4C8.CA ?+& SE<ANA !E -$ AE(AS D-$ AE%( MEELF###########9" P(4C8.CA ?"& <E84GE(A D<E8APAE(F#####################################9P(4C8.CA ?-& !.SENE S.<PLE DS.<PLE !ES.JNF######################97 P(4C8.CA ?7& (EGAC8E(.OAC.PN D(EGAC8E(.NJF###################9B P(4C8.CA ?B& P(EJ(A<AC.PN !E A PA(ES DPA.( P(EJ(A<<.NJF########################################################################99 P(4C8.CA ?9& EN8(EJAS CE(8AS DSAE(8 (ELEASESF#############9; P(4C8.CA ?;& 8ES8.NJ#############################################################9; P(4C8.CA ?=& CP!.JE ES84N!A( DCE!.NJ S8AN!A(!SF#######9= P(4C8.CA ?,$& P(EP.E!A! CELEC8.QA DCELLEC8.QE EMNE(SA.PF############################################################################# ;$ P(4C8.CA ?,,& .N8EJ(AC.PN CEN8.N%A DCEN8.N%E%S .N8EJ(AC.PNF###########################################################################;$ P(4C8.CA ?,+& K%EJE !E PLAN.G.CAC.PN DPLANN.NJ JA<EF##;, Programacin de a pares y Coding !ojo& 1@ui3n dijo @ue e trabajo es aburrido5################################################################################## ;+ 1Por @u3 R!ojoR5#######################################################################;+ 1Para @u3 hacer en un Coding !ojo5 1Cu: es a /ina idad5######;" !uracin de un Coding !ojo#####################################################;12u3 se hace en un Coding !ojo5#############################################;CodeIata en e Coding !ojo######################################################;;

Scrum y eXtreme Programming para Programadores

Eugenia Bahit

E Lata en e Coding !ojo######################################################;%n (andori Coding !ojo############################################################;7 E (andori en e Coding !ojo#################################################;7 Qentajas de imp ementar un Coding !ojo en e ugar de trabajo de /orma peridica####################################################################;B Cu:ndo y cmo imp ementar e Coding !ojo en a empresa#####;9

8!! S 8est-!riven !eve opment ############################## ;;


12u3 es e desarro o -o programacin- guiado por pruebas5#######;; 8est %nitarios################################################################################ =, Caracter)sticas de os 8est %nitarios##########################################=, Anatom)a################################################################################## =" A goritmo para escribir pruebas unitarias#################################=; P(.<E( PASE& Escribir e 8est y hacer @ue /a e####################=; SEJ%N!E PASE& Escribir a m)nima cantidad de cdigo para @ue e test pase##################################################################,$$ 8E(CE( PASE& Escribir un nuevo test y hacer @ue /a e######,$, C%A(8E PASE& Escribir e a goritmo necesario para hacer pasar e test########################################################################,$+ %nit 8esting con PAP%nit#############################################################,$7 <3todos Assert de PAP%nit#####################################################,$7 Ejercicio###################################################################################### ,$; %nit 8esting con Py%nit###############################################################,$= <3todos Assert de Py%nit#######################################################,$= Corriendo test por )nea de comandos####################################,,+

.ntegracin continua############################################# ,,Jeneracin de 8est de .ntegracin##############################################,,7 8est de Aceptacin##################################################################,,7 8est Gunciona es######################################################################,,; 8est de Sistema#######################################################################,,=
=

Scrum y eXtreme Programming para Programadores

Eugenia Bahit

%ni/icacin de cdigo en (epositorios########################################,+$ Sobre os Sistemas de Contro de Qersiones###########################,+, .ntegracin continua con Ba6aar#############################################,++ .nsta acin de Ba6aar##########################################################,+Ba6aar por )nea de comandos############################################,+Presentarse ante Ba6aar#####################################################,+7 .niciar un nuevo proyecto###################################################,+7 C onar e repositorio centra & crear os repositorios oca es#,+B Nociones b:sicas para integrar cdigo de /orma continua##,+9 Juardando e path de repo centra ####################################,+= .ntegracin continua avan6ada con Ba6aar#############################,"$ (esumen de comandos de uso /recuente###########################,", (esumen para uso diario de Ba6aar############################################,""

(e/actoring########################################################## ,"7
E prob ema################################################################################# ,"7 La so ucin################################################################################## ,"B Cu:ndo y cmo tomar a desicin de re/actori6ar###################,"9 %na so ucin a cada prob ema################################################,"; Qariab es de uso tempora ma imp ementadas##################,"; <3todos @ue reciben par:metros#######################################,-, E>presiones e>tensas#########################################################,-+ <3todos e>tensos###############################################################,-+ Cdigo dup icado en una misma c ase################################,-Cdigo dup icado en varias c ases con a misma herencia##,-7 Cdigo dup icado en varias c ases sin a misma herencia###,-B

Combinando Scrum y eXtreme Programming ########### ,-;


Compatibi i6ando ambas metodo og)as#######################################,-; Compatibi idad de Scrum con os va ores de XP#####################,-;
,$

Scrum y eXtreme Programming para Programadores

Eugenia Bahit

Compatibi idad con as pr:cticas t3cnicas de XP####################,7, Combinando ambas metodo og)as##############################################,7" Combinar Scrum con eXtreme Programming##########################,7" Combinar Scrum con eXtreme Programming##########################,7<ateria de ectura comp ementario###########################################,77

Lanban& a metodo og)a :gi @ue menor resistencia o/rece################################################################# ,7B


!e 8ETE8A a !esarro o de So/t0are######################################,7B Las tres reg as de Lanban ##########################################################,7; <ostrar e proceso #################################################################,7; Los tab eros Lanban ###########################################################,7= Limitar e trabajo en curso& M.P #############################################,B$ Eptimi6ar e / ujo de trabajo ###################################################,B+

,,

Scrum y eXtreme Programming para Programadores

Eugenia Bahit

.ntroduccin a a gestin de proyectos de desarro o de So/t0are


12u3 es e !esarro o 4gi 5
As) como e>isten m3todos de gestin de proyectos tradiciona es' como e propuesto por e Project <anagement .nstitute , m:s conocido como P<.* podemos encontrarnos con una rama di/erente en a gestin de proyectos' conocida como Agi e# E desarro o :gi de so/t0are' no es m:s @ue una metodo og)a de gestin de proyectos adaptativa' @ue permite evar a cabo' proyectos de desarro o de so/t0are' adapt:ndote a os cambios y evo ucionando en /orma conjunta con e so/t0are#

%n panta a6o genera sobre a gestin de proyectos


A o argo de a historia de So/t0are' muchos proyectos han /racasado y aHn continHan haci3ndo o# .mp ementar una metodo og)a de gestin' b:sicamente nos permite organi6ar mejor un proyecto y obtener mejores resu tados de so/t0are entregado a a c iente' evitando os /racasos# Pero 1por @u3 /racasan os proyectos5 Sin dudas' os Upor@ueV podr)an egar a ser casi in/initos' si nos pusier:mos demasiado e>igentes# Sin embargo' hay tres motivos de os @ue ningHn /racaso est: e>ento&
, Sitio Meb E/icia de P<.& http&WW000#pmi#orgW ,"

Scrum y eXtreme Programming para Programadores

Eugenia Bahit

,# E proyecto p ani/icadoX +# E proyecto invertirX

eva

m:s

tiempo

de

@ue

se

hab)a

eva m:s dinero de @ue se hab)a pautado

"# Las /unciona idades de So/t0are no resu tan como se esperaba# Las ra6ones por as cua es' os tres motivos anteriores generan e /racaso' pueden resumirse una simp e /rase& no se puede prever con e>actitud un proyecto de desarro o de So/t0are# T 1en @u3 se /unda esa a/irmacin5 Pues a respuesta est: en otra pregunta& 1en @u3 se di/erencia un So/t0are de otro producto5 La respuesta @ue primero nos viene a a mente es @ue e So/t0are es un producto no tangib e @ue no puede conocerse hasta no estar conc uido y poder probarse# No obstante e o' e So/t0are tiene grandes ventajas /rente a otros productos& No puedo construir una si a a medias para probar a ya @ue a necesito comp eta# Sin embargo' puedo construir una determinada /unciona idad de So/t0are para poder probar a# 8irar abajo un edi/icio reci3n terminado' por@ue no satis/ace as e>pectativas de os dueCos' ser)a una gran ocura' ya @ue re@uerir)a invertir tres veces e costo /ijado para reconstruir e edi/icio# Sin embargo' desarro ando un So/t0are con buenas pr:cticas de programacin' rehacer /unciona idades o desarro ar nuevas' es tan /actib e como simp emente agregar
,-

Scrum y eXtreme Programming para Programadores

Eugenia Bahit

cortinas a as ventanas de un edi/icio# T estas ventajas' deben ser aprovechadas# !e o contrario' insistir en gestionar un proyecto de desarro o de So/t0are de manera tradiciona ' imp icar)a caer en un capricho in/anti sin /undamentos v: idos# Sino' mira os siguientes nHmeros&
En e aCo +$$=' e Standish Jroup D000#standishgroup#comF e abor un in/orme amado Chaos (eport' e cua arroj como resu tado @ue so o e "+Y de os proyectos de desarro o de So/t0are han sido e>itosos # E mismo in/orme' indica @ue m:s de -7Y de as /unciona idades de So/t0are entregadas a usuario' jam:s se uti i6an# En e aCo +$$-' Price0aterhouseCoopers+ e abor un in/orme mediante e cua se investagaron a +$$ empresas en "7 pa)ses ' arrojando como resu tado @ue mas de 7$Y de os proyectos /racasan Dsobre a base de ,$#B-$ proyectos' representando 9#$$$ mi ones de d aresF #

Por o tanto' optar por una u otra metodo og)a de gestin' no puede basarse jam:s' en un mero capricho' ya @ue es mucho o @ue est: en juego#

!i/erenciando as metodo og)as de gestin


%na metodo og)a de gestin de proyectos' consiste en
+ http&WWes#0iIipedia#orgW0iIiWPrice0aterhouseCoopers ,7

Scrum y eXtreme Programming para Programadores

Eugenia Bahit

convencin de pr:cticas' m3todos' principios' t3cnicas y herramientas cuya principa uti idad es a de otorgar un mejor rendimiento de e@uipo de trabajo y por sobre todo' permitir a obtencin de mejores resu tados en o @ue se produce durante e proyecto Den nuestro caso& so/t0areF# Si bien as metodo og)as de gestin' podr)an resumirse en so o dos en/o@ues Do tendenciasF& e en/o@ue :gi Den e cua se centra este cursoF y e en/o@ue predictivo Dpropuesto por e Project <anagement .nstituteF' cada uno de estos en/o@ues' presenta una diversa variedad de propuestas @ue pueden ap icarse# En o @ue respecta a en/o@ue :gi ' e>isten un gran nHmero de propuestas' de as cua es' as m:s uti i6adas y estad)sticamente con mejores resu tados son Scrum Dse pronuncia RscramRF' Lanban Dse pronuncia ta cua se escribeF y eXtreme Programming ' m:s conocida como XP Dse pronuncia por sus sig as en ing 3s Re>-piR o en caste ano Ue@uis peVF# Los en/o@ues :gi es se di/erencian Dy tambi3n guardan ciertos aspectos en comHnF de os predictivos' b:sicamente por a /orma de abordaje de un proyecto # E en/o@ue predictivo' es a@ue @ue p antea e abordaje estricto de un proyecto' sobre a base de cump imiento de tres aspectos prede/inidos a comien6o de proyecto& a cance' costo y tiempo X mientras tanto' e en/o@ue :gi ' p antea os proyectos desde e cump imiento de un objetivo m:s amp io& entregar so/t0are con e mayor va or posib e# Esto' puede e>p icarse sino' comentando @ue a principa di/erencia es @ue e en/o@ue predictivo' propone a de/inicin deta ada de a cance de proyecto' y a estipu acin precisa de tiempo y costo' mientras @ue e en/o@ue :gi ' p antea a
,B

Scrum y eXtreme Programming para Programadores

Eugenia Bahit

de/inicin de un a canse g oba a comien6o' para uego ir increment:ndo o en as diversas iteraciones Dcada una de as cua es' supone a entrega de un so/t0are ,$$Y /unciona F#

8ipos de Proyecto
Si bien cada proyecto es Hnico y tiene sus propias caracter)sticas y restricciones' podemos estab ecer una di/erencia g oba ' entre 9 tipos de proyectos de desarro o de So/t0are principa es' como se de/ine a continuacin#

!esarro o de un nuevo sistema in/orm:tico


Es e proyecto mediante e cua ' se desea automati6ar un proceso de negocio# (e@uiere construir una ap icacin desde cero' como por ejemp o' desarro ar un nuevo sistema de /inan6as' e sitio Meb corporativo de una compaC)a' etc# Este tipo de proyectos' sue en ser os m:s comp ejos desde e punto de vista de re evamiento /unciona necesario @ue demanda una ap icacin hasta ahora no conocida# Sin embargo' iniciar de cero una ap icacin' presenta a mismo tiempo' una gran ventaja para e e@uipo de desarro adores' ya @ue no deber:n idiar con cdigos ajenos o ma as pr:cticas de programacin @ue arrastran bugs desde argo tiempo atr:s#

,9

Scrum y eXtreme Programming para Programadores

Eugenia Bahit

!esarro o de nuevas /unciona idades


A igua @ue en e caso anterior' son proyectos donde tambi3n se re@uiere automati6ar un proceso de negocio' no contemp ado en una ap icacin e>iste# En este caso puntua ' dicha automati6acin' se trans/orma en una /unciona idad @ue deber: ser incorporada a una ap icacin ya e>istente# Es e caso' por ejemp o' de agregar a emicin de cdigos de barras a un sistema de contro de StocI# En este tipo de proyectos' a ap icacin e>istente puede representar una ventaja si se ha desarro ado bajo buenas pr:cticas de programacin' tendientes a sostener e mantenimiento y evo ucin de sistema' o una desventaja' cuando se haya desarro ado sin tener en cuenta su esca abi idad#

(eingenier)a de un sistema
Este tipo de proyectos son mucho m:s puntua es y comp ejos' @ue os dos anteriores# En estos casos' se pretende reemp a6ar un sistema actua ' por uno con caracter)sticas simi ares pero m:s espec)/icas y posib emente -en gran parte de os casos- se re@uiera migrar de tecno og)a a una m:s moderna' con mejor soporte o simp emente m:s robusta# %n ejemp o de e o' ser)a migrar un sistema desarro ado en os Z;$ en Cobo ' a Python#

<antenimiento evo utivo


Este tipo de proyectos' son os @ue m:s acercan a !esarro o de Nuevas Gunciona idades' pero con una gran di/erencia& se en/ocan en a evo ucin de una /unciona idad de So/t0are e>istente# !icha evo ucin' genera mente se centra en agregar
,;

Scrum y eXtreme Programming para Programadores

Eugenia Bahit

a una /unciona idad e>istente Dpor ejemp o' a a /unciona idad de generacin de cdigos de barra de sistema de contro de stocIF' una o m:s caracter)sticas adiciona es' tendientes a enri@uecer dicha /unciona idad Dpor ejemp o' @ue a emisin de cdigos de barra' guarde un og de cdigos de barra emitidos' @ue se sume a os reportes de os productosF#

<antenimiento adaptativo
En estos casos' a comp ejidad de proyecto' estar: atada a tipo de adaptacin re@uerida# Son proyectos donde genera mente' se necesita adaptar e So/0tare e>istente' a un nuevo entorno de hard0are' versin de Sistema Eperativo' de enguaje in/orm:tico con e @ue se ha escrito a ap icacin o de /rame0orI# %n ejemp o de e o' podr)a ser adaptar un sistema desarro ado en Python +#> a Python "#>' o un comp emento de Gire/o> B#> a Gire/o> ,$' etc#

<antenimiento preventivo
Este tipo de proyectos' sue en ser os @ue mayor resistencia presentan' muchas veces' por parte de os dueCos de producto y en otras' por parte de os desarro adores# Los mantenimientos preventivos son a@ue os @ue no generan cambios visib es a a ap icacin y su objetivo es mejorar cuestiones inherentes a rendimiento interno de sistema' como podr)an ser re/actori6aciones de cdigo para e iminar redundancia' generacin de ogs de acceso a servidor o a base de datos' insta acin de pa@uetes de seguridad' desarro o de
,=

Scrum y eXtreme Programming para Programadores

Eugenia Bahit

script para prevencin de ata@ues de diversos tipos DXSS' Guer6a bruta' !!oS' etc#F#

<antenimiento correctivo
E mantenimiento correctivo est: genera mente igado de /orma directa' a as /a as actua es de un sistema y su objetivo' es corregir bugs Dbug-/i>ingF#

La octava c asi/icacin
Etro tipo de proyectos @ue puede de/inirse' son os destinados a a investigacin cuyos objetivos pueden estar centrados' en e avance de pruebas de concepto' una tecno og)a o producto#

Abordaje de un proyecto de construccin de So/t0are


Como comentamos anteriormente' un proyecto puede abordarse de manera tradiciona o adaptativa' en a cua nos centraremos en este curso# Si bien hemos marcado a gunas di/erencias entre ambas metodo og)as de gestin -y continuaremos amp iando e tema-' una de as di/erencias /undamenta es' es a /orma de abordar a construccin de un So/t0are# La construccin de un So/t0are' tiene un cic o de vida imp )citamente de/inido' @ue consiste en&

+$

Scrum y eXtreme Programming para Programadores

Eugenia Bahit

,# E re evamiento de necesidades re@uieren ser automati6adasX

de

negocio

@ue

+# E an: isis de os re@uerimientos t3cnicos' tecno gicos y /unciona esX "# E diseCo de os procesos de automati6acinX -# La construccin de os procesos de automati6acinX 7# Las pruebas de o construidoX B# La imp ementacin de o construido# Las metodo og)as tradiciona es Do predictivasF' encaran as /ases @ue componen e cic o de vida de desarro o de So/t0are' de manera sucesiva# Es decir' @ue una /ase sucede a otra' y cada /ase' ocupa un espacio inea en e #
Relevamiento Anlisis Diseo Construccin Pruebas Implementacin

En cambio' as metodo og)as :gi es' so apan estas etapas' permitiendo ahorrar tiempo' evitando a dependencia Dcada etapa es independiente de a otraF y haciendo de cic o de vida' un proceso iterativo Dse inicia con e re evamiento' se /ina i6a con a imp ementacin y se vue ve a comen6ar para abordar nuevas /unciona idadesF#

+,

Scrum y eXtreme Programming para Programadores

Eugenia Bahit

Comparacin en tiempo' entre :gi y predictivo&

E agi ismo y su <ani/iesto


As) como e P<.' propone a trav3s de a P<BEL* " Juide una serie de normas' procesos y herramientas para mejorar a gestin de un proyecto' as metodo og)as :gi es poseen su propio mani/iesto& e Agi e <ani/esto Do <ani/iesto 4gi en espaCo F' e cua ' a di/erencia de a gu)a P<BEL * en muy pocas )neas' se encarga de de/inir una serie de principios y va ores @ue rigen a agi ismo #

Los va ores de agi ismo


En e <ani/iesto 4gi ' podemos eer os cuatro va ores @ue impu sa e agi ismo&

.ndividuos e interacciones sobre procesos y herramientas


<ientras @ue as metodo og)as tradiciona es' centran su es/uer6o en de/inir procesos y herramientas @ue regu en a gestin de un proyecto' as metodo og)as :gi es' pre/ieren va orar a idoneidad de cada individuo' depositando en 3sta' a con/ian6a necesaria para ograr una buena comunicacin' / u)da e interactiva entre todos os participantes de proyecto#

" Qersin en espaCo de a P<BEL Juide en /ormato P!G& http&WWgio#uniovi#esWdocumentosWso/t0areWJ%.A[P<BoI#pd/ ++

Scrum y eXtreme Programming para Programadores

Eugenia Bahit

So/t0are /uncionando sobre documentacin e>tensiva


<ientras @ue as metodo og)as predictivas Do tradiciona esF' invirtien una gran cantidad de tiempo y dedicacin a desarro o de documentos @ue describan deta adamente e a cance de un sistema as) como e diseCo de prototipos o bocetos @ue intenten proveer una imagen visua de /uturo So/t0are' as metodo og)as :gi es proponen destinar ese tiempo a desarro o de a ap icacin' centrando e mismo' en pe@ueCas partes ,$$Y operativas y /unciona es' @ue por un ado' otorguen mayor va or a negocio y por otro' permitan probar So/t0are rea Dno prototipos ni bocetosF#

Co aboracin con e c iente sobre negociacin contractua


Las metodo og)as predictivas' p antean un sistema de gestin de riesgos' mediante e cua ' cada cambio sugerido por e c iente' debe superar una serie de procesos administrativos' ta es como a amp iacinWmodi/icacin de a cance' a ree aboracin de presupuestos y una nueva estipu acin de tiempo de entrega o @ue con eva a a inevitab e modi/icacin de un cronograma de entregab es# A di/erencia de esto' as metodo og)as :gi es' pre/ieren integrar a c iente a proyecto' /aci itando a comunicacin directa de 3ste con e e@uipo de desarro o' a /in de generar un ambiente de co aboracin mutua' donde os UcambiosV sugeridos por e c iente' no signi/i@uen un riesgo' sino un UaporteV a va or de So/t0are#

(espuesta ante e cambio sobre seguir un p an


En a gestin tradiciona ' antes de comen6ar e desarro o de So/t0are D amado Uproceso de ejecucinVF' se e abora un deta ado p an donde se describe un a cance /unciona
+"

Scrum y eXtreme Programming para Programadores

Eugenia Bahit

minucioso y preciso' as) como tambi3n' se pautan /echas de entregas @ue se pretende' no su/ran variaciones# Cuando en p eno proceso de ejecucin' e c iente so icita a gHn cambio' a e>istir un p an previsto @ue no puede desviar su rumbo' surgen una serie de con/ ictos derivados de cambio' os cua es con evan a ree aborar e p an inicia y en consecuencia' e>tender o prorrograr os p a6os de entrega# Por e contrario' as metodo og)as :gi es proponen adaptarse a os cambios sugeridos por e c iente' o @ue signi/ica' @ue a a modi/icacin propuesta' no se sumar:n escoyos administrativos' sino por e contrario' se ace erar:n os procesos' actuando en consecuencia de o @ue ha sido pedido# Qa e ac arar' @ue si bien as metodo og)as :gi es' va oran os e ementos de a derecha Dderivados de as propuestas tradiciona istasF' otorgan un mayor va or a os de a i6@uierda# T 3sto' tiene su /undamento en os doce principios' @ue tambi3n se e>ponen en e <ani/iesto 4gi #

Los doce principios de agi ismo


En e <ani/iesto 4gi ' podemos eer os doce principios en os cu: es se argumentan os va ores de <ani/iesto# Estos son&

Principio ?,& Satis/acer a c iente mediante a entrega temprana y continua de so/t0are con va or#
E agi ismo' propone desarro ar e So/t0are de manera iterativa e incrementa # Esto signi/ica' @ue os re@uerimientos
+-

Scrum y eXtreme Programming para Programadores

Eugenia Bahit

/unciona es de producto' son /ragmentados en o @ue se denomina UAistorias de %suarioV y' bas:ndose en a prioridad de c iente y e es/uer6o disponib e para e desarro o' se hace una se eccin de historias de usuario a ser desarro adas en un per)odo de tiempo /ijo Dpor ejemp o' + semanasF y a /ina i6ar dicho per)odo' as Aistorias de %suario habr:n sido convertidas en So/t0are @ue puede uti i6arse y por o tanto' se entrega a c iente# Este cic o' es continuo Da /ina i6ar un cic o comien6a e siguienteF y 3sto' genera una entrega r:pida y continuada a c iente#

Principio ?+& cambien' inc Los procesos proporcionar

Aceptamos @ue os re@uisitos uso en etapas tard)as de desarro o# 4gi es aprovechan e cambio para ventaja competitiva a c iente#

E agi ismo respeta a idoneidad de c iente como ta # Acepta @ue 3ste' es e Hnico capa6 de decir' cu: es /unciona idades re@uiere e So/t0are' ya @ue como dueCo yWo usuario de mismo' es e Hnico @ue conoce verdaderamente su negocio# En este sentido' e agi ismo recibe os cambios' no como un capricho incmodo' sino con a humi dad y e orgu o de saber @ue dicho cambio' har: de So/t0are un mejor producto#

Principio ?"& Entregamos so/t0are /unciona /recuentemente' entre dos semanas y dos meses' con pre/erencia a periodo de tiempo m:s corto posib e#
En este sentido' e>tiende e Principio ?,' proponiendo como per)odos de tiempo /ijo para a entrega temprana y continua' cic os de + a ; semanas# Principio ?-& Los responsab es de negocio y os desarro adores trabajamos juntos de /orma cotidiana durante todo e proyecto# Este cuarto principio' marca
+7

Scrum y eXtreme Programming para Programadores

Eugenia Bahit

una di/erencia radica e inigua ab e con as metodo og)as tradiciona es# E <ani/iesto 4gi ' de /orma e>p )cita' propone inc uir a c iente en e proceso de desarro o de So/t0are' sum:ndo o a proyecto' como parte imprescindib e#

Principio ?7& Los proyectos se desarro an en torno a individuos motivados# Aay @ue dar es e entorno y e apoyo @ue necesitan' y con/iar es a ejecucin de trabajo#
Si uno busca principios c aros y de a to contenido humano y socia ' este principio es e ejemp o de o @ue se busca# Por un ado' as) como e agi ismo respeta a idoneidad de c iente' propone @ue dicho respeto sea muto y se recono6ca a idoneidad de e@uipo de desarro o' acept:ndo os como os Hnicos capaces de decidir Ue cmoV# T este UcmoV inc uye tanto a a autogestin de tiempo como a as t3cnicas de programacin @ue ser:n uti i6adas# Por otro ado' abarca un concepto m:s amp iamente humano cuando se re/iere a a motivacin de os individuos' su entorno y e dar apoyo# En este sentido' as metodo og)as :gi es' humani6an e entorno de trabajo' promoviendo actividades de motivacin Dcomo os Coding !ojo' por ejemp oF e incentivando a respeto tanto por as ibertades individua es como co ectivas' de os integrantes de e@uipo as) como tambi3n' e respeto por su dignidad pro/esiona ' como pi ar /undamenta de un entorno de trabajo co aborativo' ibre de ma as intensiones y presiones poco humanas#

Principio ?B& Conversacin cara a cara#


E agi ismo' p antea @ue a /orma m:s e/ica6 de comunicarse entre @uienes participan de proyecto' es Ucara a caraV# T esto se re/iere' a a erradicacin de intermediarios& todo cambio y
+B

Scrum y eXtreme Programming para Programadores

Eugenia Bahit

toda p ani/icacin' se debe rea i6ar entre e principa interesado en e producto Dc ienteF y as personas @ue se encargar:n de desarro ar o e imp ementar o De@uipo de desarro adoresF#

Principio ?9& E so/t0are /uncionando es a medida principa de progreso#


E agi ismo' p antea @ue no puede medirse e 3>ito de un proyecto' so o en base a cump imiento e/ectivo de un p an' puesto @ue 3ste' inc uso cuando se cump a a pie de a etra' no garanti6a @ue e So/t0are' satis/aga a ,$$Y as e>pectativas de c iente# As) es' @ue como e emento de medicin de 3>ito y progreso' se propone e So/t0are @ue haya sido entregado y se encuentre en p eno /uncionamiento#

Principio ?;& Los promotores' desarro adores y usuarios debemos ser capaces de mantener un ritmo constante de /orma inde/inida#
E agi ismo priori6a a ca idad de So/t0are por sobre as imitaciones de tiempo# En este sentido' e agi ismo p antea @ue e desarro o de un So/t0are debe ser constante y continuado' permitiendo a c iente a trav3s de as entregas tempranas' poder ir amp iando su campo de a cance /unciona ' en a medida @ue a ap icacin' va siendo uti i6ada#

Principio ?=& La atencin continua a a e>ce encia t3cnica y a buen diseCo mejora a Agi idad#
%n punto c ave en e agi ismo' es a bHs@ueda constante' de a per/eccin tecno gica' proponiendo buenas pr:cticas de programacin @ue aseguren tanto a mantenibi idad de So/t0are' como su evo ucin y esca abi idad#
+9

Scrum y eXtreme Programming para Programadores

Eugenia Bahit

Principio ?,$& La simp icidad' o e arte de ma>imi6ar a cantidad de trabajo no rea i6ado' es esencia #
A proponer e desarro o en cic os con entregas iterativas' e agi ismo ad@uiere una gran ventaja /rente a as metodo og)as tradiciona es& /aci ita e an: isis y a revisin retrospectiva de os m3todos imp ementados en cic os anteriores# Esto' permite ir corrigiendo sobre a marcha' ciertos impedimentos @ue hacen @ue e trabajo se estan@ue o avance entamente# A generar So/t0are de manera iterativa' se /aci ita a mejora de m3todos' amp iando as)' as posibi idades de ma>imar a cantidad de trabajo rea i6ado en cada cic o#

Principio ?,,& Las mejores ar@uitecturas' re@uisitos y diseCos emergen de e@uipos auto organi6ados#
Nuevamente' e agi ismo hace a@u)' hincapi3 en a idoneidad pro/esiona de e@uipo de desarro o# Es sabido @ue en proyectos gestionados de manera tradiciona ' un L)der de Proyecto DL)der de E@uipo o Jerente de ProyectoF' es @uien e abora U os diseCosV indicando Ue cmoV debe desarro arse un so/t0are# T tambi3n es cierto' @ue @uien gestiona un proyecto' no siempre cuenta con a idoneidad pro/esiona necesaria' para diseCar a Ar@uitectura de un Sistema' e mode o de datos o su inter/a6 gr:/ica# Es por e o' @ue e agi ismo p antea @ue en un e@uipo autogestionado' sus miembros tienen a /acu tad de decir' @ue parte de trabajo se encargar:n de evar ade ante' bas:ndose en sus propias cua idades pro/esiona es#

+;

Scrum y eXtreme Programming para Programadores

Eugenia Bahit

Principio ?,+& A interva os regu ares e e@uipo re/ e>iona sobre cmo ser m:s e/ectivo para a continuacin ajustar y per/eccionar su comportamiento en consecuencia#
Este principio' est: estrechamente igado a d3cimo principio' pero en e sentido' no de ma>imar a cantidad de trabajo' sino a ca idad de mismo#

+=

Scrum y eXtreme Programming para Programadores

Eugenia Bahit

Conociendo Scrum
Aemos comentado anteriormente' @ue Scrum es una metodo og)a :gi para a gestin de proyectos re acionados con a construccin Ddesarro oF de So/t0are# Qeremos ahora en deta e' de @ue se trata esto de UScrumV# Pete !eemer' Jabrie e Bene/ie d' Craig Larman y Bas Qodde ' de/inen Scrum en e ibro 8he Scrum Primer D+$$=F' con os siguientes p:rra/os&
UScrum es un marco de trabajo iterativo e incrementa para e desarro o de proyectos' productos y ap icaciones# Estructura e desarro o en cic os de trabajo amados Sprints# Son iteraciones de , a semanas' y se van sucediendo una detr:s de otra# Los Sprints son de duracin /ija S terminan en una /echa espec)/ica aun@ue no se haya terminado e trabajo' y nunca se a argan# Se imitan en tiempo# A comien6o de cada Sprint' un e@uipo mu ti-/unciona se ecciona os e ementos Dre@uisitos de c ienteF de una ista priori6ada# Se comprometen a terminar os e ementos a /ina de Sprint# !urante e Sprint no se pueden cambiar os e ementos e egidos# \###]V D8he Scrum Primer' +$$=' p:g# 7F

%n Sprint tiene dos caracter)sticas /undamenta es& aF una duracin /ija entre , a - semanas X bF cada Sprint se ejecuta de /orma consecutiva Dsin tiempo muerto entre un sprint y otroF# E objetivo principa es trans/ormar un conjunto de )tems re@ueridos por e c iente en un incremento de /unciona idad ,$$Y operativa para e so/t0are#
U8odos os d)as e e@uipo se reHne brevemente para in/ormar de progreso' y actua i6an unas gr:/icas
"$

Scrum y eXtreme Programming para Programadores

Eugenia Bahit

senci as @ue es orientan sobre e trabajo restante# A /ina de Sprint' e e@uipo revisa e Sprint con os interesados en e proyecto' y es enseCa o @ue han construido# La gente obtiene comentarios y observaciones @ue se puede incorporar a siguiente Sprint# Scrum pone e 3n/asis en productos @ue /uncionen a /ina de Sprint @ue rea mente est3n UhechosVX en e caso de so/t0are signi/ica @ue e cdigo est3 integrado' comp etamente probado y potencia mente para entregar \###]V D8he Scrum Primer' +$$=' p:g# 7F-

SegHn Ke// Suther and 7 ' uno de os creadores de Scrum y de m3todo de contro emp)rico de procesos en e cua se basa dicha metodo og)a' 3ste se sostiene en a imp ementacin de tres pi ares& transparencia Dvisibi idad de os procesosF' inspeccin Dperidica de procesoF y adaptacin Dde os procesos inspeccionadoFB 9#

E <arco de 8rabajo de Scrum


En un sentido amp io' e marco de trabajo de Scrum se compone de una serie de reg as' @ue de/inen ro es @ue integran os e@uipos' arte/actos necesarios para os procesos' b o@ues de tiempo preestab ecidos y ceremonias @ue deben respetarse# Los e@uipos de Scrum de/inen tres ro es bien di/erenciados&
- 8he Scrum Primer S versin en espaCo & http&WWassets#scrum/oundation#comWdo0n oadsW"Wscrumprimer[es#pd/5 ,+;7="+$B" 7 Sitio Meb de Ke// Suther and& http&WWje//suther and#comW B Len Sch0aber' Ke// Suther and # Scrum Juide D+$$;F 9 Scrum Juide - versin en espaCo & http&WW000#scrum#orgWstorageWscrumguidesWScrumY+$JuideY+$-Y+$ES#pd/ ",

Scrum y eXtreme Programming para Programadores

Eugenia Bahit

,# E Scrum <aster' responsab e de asegurar os procesosX +# E !ueCo de Producto ' responsab e de ma>imi6ar e va or de productoX "# E E@uipo' responsab e de rea i6ar e trabajo# La de/inicin de b o@ues de tiempo iterativos Dde + a semanasF' est: destinada a crear continuidad y regu aridad en as cu: es' se basar:n as seis ceremonias DreunionesF @ue aseguran e cump imiento de objetivos& ,# (eunin de P ani/icacin de a Entrega +# (eunin de P ani/icacin de Sprint "# E Sprint S cora6n de Scrum -# (eunin diaria 7# (eunin de revisin B# (eunin de (etrospectiva Cmo herramientas ap icab es a todos os procesos anteriores' Scrum emp ea cuatro arte/actos & ,# BacI og de Producto Duna ista priori6ada de todo o @ue re@uiere e so/t0areF +# BacI og de Sprint Duna ista de tareas necesarias para convertir parte de BacI og de Producto' en incremento de /unciona idad de So/t0areF "# Scrum tasIboard Dun tab ero /)sico @ue permite a transparencia de os )tems de trabajos pendientes' en curso y terminados de un mismo SprintF -# !iagrama de Burndo0 Dun gr:/ico @ue permite medir
"+

Scrum y eXtreme Programming para Programadores

Eugenia Bahit

visua mente' e progreso de os items de BacI og de ProductoF


U\###] Las reg as sirven de unin para os b o@ues de tiempo' os ro es y os arte/actos de Scrum \###]# Por ejemp o' una reg a de Scrum es @ue s o os miembros de e@uipo - a gente comprometida a convertir e Product BacI og en un incremento - pueden hab ar durante un Scrum !iario \###]V DScrum Juide' +$$;' P:g# 7F

Los (o es en Scrum
Como comentamos anteriormente' Scrum de/ine tres ro es bien di/erenciados& e Scrum <aster' e !ueCo de Producto y e E@uipo# En este cap)tu o' veremos en deta e' as responsabi idades y caracter)sticas de cada uno de e os#

E !ueCo de Producto DProduct E0nerF en Scrum


E !ueCo de Producto es a Hnica persona autori6ada para decidir sobre cu: es /unciona idades y caracter)sticas /unciona es tendr: e producto# Es @uien representa a c iente' usuarios de so/t0are y todas a@ue as partes interesadas en e producto#
UE propietario de producto puede ser un miembro de e@uipo' @ue tambi3n participe en as tareas de desarro o# Esta responsabi idad adiciona puede disminuir a capacidad de Propietario de Producto de trabajar con os interesados de proyecto o producto# Sin embargo' e propietario de producto no puede ser nunca e Scrum<aster# V DScrum Juide' +$$;' P:g# 9F

""

Scrum y eXtreme Programming para Programadores

Eugenia Bahit

Gunciones y responsabi idades

Cana i6ar as necesidades de de negocio' sabiendo RescucharR a as partes interesadas en e producto y transmitir as en Robjetivos de va or para e productoR' a scrum team# <a>imi6ar e va or para e negocio con respecto a (etorno de .nversin D(E.F' abogando por os intereses de negocio# (evisar e producto e ir adapt:ndo e sus /unciona idades' ana i6ando as mejoras @ue 3stas puedan otorgar un mayor va or para e negocio#

Aptitudes @ue debe tener un !ueCo de Producto

E>ce ente /aci icidad de comunicacin en as re aciones interpersona es E>ce ente conocimiento de negocio Gaci idad para an: isis de re aciones costoWbene/icio Qisin de negocios

E Scrum <aster
E Scrum <aster es e a ma mater de Scrum# %n error /recuente es amar o R )derR' puesto @ue e Scrum <aster no es un )der t)pico' sino @ue es un un aut3ntico Servidor neutra ' @ue ser: e encargado de /omentar e instruir sobre os principios :gi es de Scrum#
%n buen Scrum <aster es a@ue capa6 de trabajar a a par de e@uipo' sinti3ndose parte de 3 y siendo capa6 de co ocarse a servicio de 3ste' y no' a mando de mismo#

"-

Scrum y eXtreme Programming para Programadores

Eugenia Bahit

Gunciones y responsabi idades

Jaranti6ar a correcta ap icacin de Scrum# Esto inc uye' desde a correcta trasmicin de sus principios a as a tas gerencias' hasta a prevencin de a inversin ro es Des decir' guardar especia cuidado en @ue e dueCo de producto no actHe en nombre de Scrum 8eam y viceversa' o @ue a audencia se inmiscuya en tareas @ue no e son propiciasF (eso ver os con/ ictos @ue entorpe6can e progreso de proyecto# .ncentivar y motivar a Scrum 8eam' creando un c ima de trabajo co aborativo' /omentar a auto-gestin de e@uipo e impedir a intervensin de terceros en a gestin de e@uipo#

Aptitudes @ue debe tener un Scrum <aster

E>ce entes conocimientos de Scrum & !ebe contar con amp ios conocimientos de os va ores y principios de agi ismo' as) como de as pautas organi6ativas y pr:cticas de Scrum Amp ia vocacin de servicio & Lisa anamente' hab amos de tener vocacin de servicio evitando a ambicin de poder# E Scrum <aster !EBE ser servicia a Scrum 8eam# Si so o se pretende U evar e mandoV' iderar y sobresa ir' no ser: una buena idea convertirse en Scrum <aster# 8endencia a truista Amp ia capacidad para a reso ucin de prob emas& La /aci idad para reso ver os impedimentos detectados ser: una caracter)stica c ave de a cua ' si se carece de e a' no habr: 3>ito posib e# Ana )tico y observador & E poder de observacin ser: /undamenta a a hora de detectar os impedimentos @ue e Scrum 8eam deba en/rentar#
"7

Scrum y eXtreme Programming para Programadores

Eugenia Bahit

Saber incentivar y motivar Capacidad docente e instructiva & ser did:ctico y contar con una a ta capacidad para transmitir os conocimientos de Scrum a toda a organi6acin y principa mente' a os miembros de Scrum 8eam y !ueCo de Producto Buen carisma para as negociaciones& Ser carism:tico y contar con una marcada tendencia negociadora' abrir: as puertas a @ue os cambios organi6aciona es de o tradiciona a agi ismo' se conviertan en un hecho @ue no provo@ue UrocesV#
RE Scrum<aster puede ser un miembro de E@uipoX por ejemp o' un desarro ador rea i6ando tareas de Sprint# Sin embargo' esto conduce /recuentemente a con/ ictos cuando e Scrum<aster tiene @ue e egir entre e iminar obst:cu os o rea i6ar as tareas# E Scrum<aster nunca debe ser e Propietario de Producto#R DScrum Juide' +$$;' p:g#9F

Actitudes @ue un buen Scrum <aster debe evitar inde/ectib emente

Entrometerse en a gestin de e@uipo sin dejar os de/inir su propio proceso de trabajo& recordemos @ue e Scrum 8eam debe ser un e@uipo auto-gestionado# E Scrum <aster NE P%E!E invo ucrarse en as decisiones organi6ativas de trabajo de e@uipo' pues no e corresponde# Asignar tareas a uno o m:s miembros de e@uipo# Co ocarse en actitud de autoridad /rente a e@uipo& e Scrum <aster no tiene Usuper-poderesV# !ebe ser servi y no intentar UdominarV# !ebe ser Uparte de e@uipoV# %na actitud autoritaria' podr)a provocar e @uiebre de e@uipo' obteniendo resu tados poco deseab es#
"B

Scrum y eXtreme Programming para Programadores

Eugenia Bahit

Negociar con e !ueCo de Producto a ca idad de producto a desarro ar& e Scrum <aster debe tener muy en c aro' @ue so o e c iente tiene autoridad para decidir @ue otorga va or a negocio y @ue no# !e egar a reso ucin de un con/ icto a un miembro de e@uipo o a un tercero& e Scrum <aster tiene a ob igacin de tomar en sus manos a reso ucin de un prob ema# Cuando 3sta' no est3 a su a cance' deber: Ugo pear as puertasV @ue sean necesarias' y ser 3 ' @uien rea ice un seguimiento a /in de asegurarse @ue e prob ema ha sido resue to#
E peor error @ue un Scrum <aster puede cometer' es de egar a reso ucin de un con/ icto a un miembro de e@uipo' o intentar co ocarse en posicin de autoridad /rente a Scrum 8eam#

E E@uipo de !esarro o DScrum 8eam o E@uipo ScrumF


E Scrum 8eam Do simp emente Re@uipoRF' es e e@uipo de desarro adores mu tidiscip inario' integrado por programadores' diseCadores' ar@uitectos' testers y dem:s' @ue en /orma auto-organi6ada' ser: os encargados de desarro ar e producto#
Gunciones y responsabi idades

Convertir e BacI og de potencia mente entregab e#

Producto'

en

so/t0are

Aptitudes @ue deben tener os integrantes de un Scrum 8eam& Ser pro/esiona es e>pertos o avan6ados en su discip ina
"9

Scrum y eXtreme Programming para Programadores

Eugenia Bahit

8ener RvocacinR D a buena predisposicin no a can6aF para trabajar en e@uipo Capacidad de auto-gestin

%n buen Scrum 8eam' actHa como un verdadero e@uipo

!i/)ci mente' a guien se anime a Ureve arV con e>actitud' e per/i persona @ue un miembro de e@uipo de desarro o' debe tener para /ormar parte de un Scrum 8eam' pues muchos' podr)an aprovechar esta Ureve acinV para mentir en una entrevista de trabajo# Sin embargo' cada ve6 @ue inicio un entrenamiento con un nuevo Scrum 8eam' e digo a mi e@uipo& no o viden @ue pueden aprovechar esta in/ormacin' para mejorar a@ue os aspectos de su persona idad' @ue os har:n sentirse a gusto con ustedes mismos y como parte de un verdadero e@uipo# Las actitudes persona es con as cua es' os miembros de Scrum 8eam deben contar y a@ue as' @ue deben ser evitadas' se describen a continuacin& Ser so idario y co aborativo& si @uieres /ormar parte de un verdadero e@uipo' debes ser consciente de @ue tus compaCeros' pueden necesitar tu ayuda pro/esiona # Cuando un compaCero de e@uipo no sepa a go @ue tH s) sepas' debes ser so idario con tu conocimiento y co aborar con as tareas de tu compaCero# Ser motivador' en ve6 de pretender sobresa ir& No es o mismo decir Uyo puedo reso ver esoV @ue Ume gustar)a @ue intent:ramos reso ver o juntosV# 2ue un compaCero de trabajo sienta @ue o apoyas' es motivar o# Pero si te pones en e pape de Usabe otodoV' so o estar:s
";

Scrum y eXtreme Programming para Programadores

Eugenia Bahit

adoptando una postura odiosa# En un e@uipo' no debes @uerer sobresa ir& debes sentirte a gusto' ogrando objetivos entre todos# Evitar a competencia& 1cu: es e objetivo de @uerer ser UmejorV @ue tu compaCero5 .ntentando ser Umejor @ueV' ma gastas tus energ)as en competencias sin sentido# Puedes aprovechar toda esa energ)a' en aprender de tus compaCeros a@ue o @ue ignoras' y enseCar es a@ue o en o @ue tu eres bueno# Notar:s a gran di/erencia' a /ina i6ar cada sprint' y ver @ue e resu tado de o entregado' es o @ue verdaderamente sobresa e#
Aprende a dis/rutar de os ogros de tu e@uipo y ver:s como e orgu o es mayor' @ue cuando so o intentas sobresa ir en a go#

Arte/actos y Aerramientas
Scrum' propone tres herramientas o Rarte/actosR para mantener organi6ados nuestros proyectos# Estos arte/actos' ayudan a p ani/icar y revisar cada uno de os Sprints' aportando medios ine udib es para e/ectuar cada una de as ceremonias @ue veremos m:s ade ante# Ahora' nos concentraremos principa mente' en e bacI og de producto' e bacI og de Sprint y e Scrum 8asIboard' para uego hab ar brevemente sobre os diagramas de Burndo0n#

BacI og de Producto
E BacI og de Producto es un istado din:mico y pHb icamente visib e para todos os invo ucrados en e proyecto#
"=

Scrum y eXtreme Programming para Programadores

Eugenia Bahit

UE Propietario de Producto es responsab e de Product BacI og' de su contenido' disponibi idad y priori6acin#V DScrum Juide' +$$;' p:g#,;F

En 3 ' e !ueCo de Producto' mantiene una ista actua i6ada de re@uerimientos /unciona es para e so/t0are# Esta ista' representa ^@u3 es o @ue se pretende_ pero sin mencionar ^cmo hacer o_' ya @ue de esto H timo' se encargar: e e@uipo#
E BacI og de Producto' es creado y modi/icado Hnicamente por e !ueCo de Producto# !urante a ceremonia de p ani/icacin' e Scrum 8eam obtendr: os items de producto' @ue deber: desarro ar durante e Sprint y de 3 ' partir:n para generar e BacI og de Sprint#

Gormato de BacI og de Producto


E BacI og de producto' es una ista de items @ue representan os re@uerimientos /unciona es esperados para e so/t0are# Para cada uno de estos )tem' ser: necesario especi/icar& E grado de prioridad Es/uer6o @ue demanda Jranu idad Criterios de aceptacin

Priori6acin de os )tems de BacI og de Producto

Los items de bacI og de producto' deben guardar un orden de prioridad' cuya base se apoye en& Bene/icios de imp ementar una /unciona idad
-$

Scrum y eXtreme Programming para Programadores

Eugenia Bahit

P3rdida o costo @ue demande imp ementacin de una /unciona idad (iesgos de imp ementar a Coherencia con os intereses de negocio Qa or di/erencia competencia con respecto a

posponer

productos

de

Estimacin de es/uer6o

A di/erencia de as metodo og)as tradiciona es' Scrum' propone a estimacin de es/uer6o y comp ejidad @ue demanda e desarro o de as /unciona idades' so o para a@ue as cuyo orden sea prioritario# Estas estimaciones' no se e/ectHan sobre items poco prioritarios ni tampoco sobre a@ue os donde e>ista un a to grado de incertidumbre# !e esta manera' se evita a p3rdida de tiempo en estimaciones irre evantes' posterg:ndo as para e momento en e cua rea mente sea necesario comen6ar a desarro ar as#
UE e@uipo da a !ueCo de Producto as estimaciones de es/uer6o re@uerido para cada e emento de a Pi a de Producto# Adem:s' e !ueCo de Producto es responsab e de asignar una estimacin de va or de negocio a cada e emento individua # Esto es norma mente una pr:ctica desconocida para e !ueCo de Producto# Por esa ra6n' a veces e Scrum<aster puede enseCar a !ueCo de Producto a hacer o#V D8he Scrum Primer' +$$=' p:g# ;F

-,

Scrum y eXtreme Programming para Programadores

Eugenia Bahit

Jranu idad de os )tems

Los items de BacI og de Producto no necesariamente deben tener una granu idad pareja# Es posib e encontrar )tems ta es como Res necesario contar con un mdu o de contro de stocI y og)sticaR o uno tan pe@ueCo como R<odi/icar e co or de /ondo de os mensajes de error de sistema' de negro a rojoR# `tems de tan baja granu idad' sue en agruparse en un /ormato denominado ^Aistorias de %suario_ mientras @ue os de a ta granu idad' sue en amarse ^temas o epics_#
UCuando os e ementos de Product BacI og han sido preparados con este nive de granu aridad' os @ue est:n en a parte superior de mismo D os de mayor prioridad' y mayor va orF se descomponen para @ue @uepan en un Sprint#V DScrum Juide' +$$;' p:g#,=F

%na historia de usuario es a@ue a @ue puede escribirse con a siguiente /rase&
Como [un usuario], puedo [accin/funcionalidad] para [beneficio]

Por ejemp o& Como administrador de sistema' puedo agregar productos a cat: ogo para ser visua i6ados por os c ientes# <uchas veces' puede resu tar redundante o hasta inc uso carecer de sentido' indicar e bene/icio# Por e o' es /recuente describir as historias de usuario' sin incorporar este trecer e emento& Como administrador de sistema' puedo agregar productos a cat: ogo# Qa e ac arar' @ue es /recuente encontrar t3rminos como U@uieroV o UnecesitoV en reemp a6o de UpuedoV cuando se
-+

Scrum y eXtreme Programming para Programadores

Eugenia Bahit

describen as historias de usuario&

UE Product BacI og nunca est: comp eto# La primera versin para e desarro o' tan s o estab ece os re@uisitos inicia mente conocidos' y @ue son entendidos mejor# E Product BacI og evo uciona a medida @ue e producto y e entorno en e @ue se uti i6ar: evo uciona# E Product BacI og es din:mico' ya @ue cambia constantemente para identi/icar @u3 necesita e producto para ser adecuado' competitivo y Hti #V DScrum Juide' +$$;' p:g#,;F

Criterios de Aceptacin

Es recomendab e @ue cada )tem de


-"

BacI og de Producto'

Scrum y eXtreme Programming para Programadores

Eugenia Bahit

especi/i@ue cua es son os criterios de aceptacin Do test de aceptacin @ue debe superarF' para considerar cump ido e re@uisito# Los criterios de aceptacin' entonces' no son m:s @ue UpautasV o pe@ueCas Ureg asV @ue una historia de usuario debe respetar para considerar a cump ida# Por ejemp o' para a historia de usuario ^Como administrador de sistema necesito agregar productos a cat: ogo_ os criterios de aceptacin' podr)an ser& Cada producto debe contener& cdigo de producto Dopciona F' descripcin de hasta 7$$ caracteres Dopciona F precio Dob igatorioF stocI inicia Dopciona F un nombre Dob igatorioF' una /oto Dopciona F

No pueden e>istir dos productos con e mismo nombre de producto o cdigo de producto E nombre de producto jam:s puede estar vac)o o tener menos de " caracteres Cuando no se asigne un stocI inicia a producto' 3ste debe asignarse autom:ticamente en cero Dsin stocIF
ULas pruebas de aceptacin se uti i6an a menudo como un atributo m:s de Product BacI og# A menudo pueden sustituir a descripciones de te>to m:s deta adas' @ue contengan una descripcin comprobab e' de o @ue e e emento de Product
--

Scrum y eXtreme Programming para Programadores

Eugenia Bahit

BacI og debe hacer cuando est3 comp etado#V DScrum Juide' +$$;' p:g#,=F

BacI og de Sprint
E BacI og de Sprint es una ista reducida de )tems de BacI og de Producto' @ue han sido negociados entre e !ueCo de Producto y e Scrum 8eam durante a p ani/icacin de Sprint# Esta ista' se genera a comien6o de cada Sprint y representa a@ue as caracter)sticas @ue e e@uipo se compromete a desarro ar durante a iteracin actua # Los )tems inc uidos en e BacI og de Sprint se dividen en tareas as cua es genera mente' no demanden una duracin superior a un d)a de trabajo de miembro de e@uipo @ue se haya asignado dicha tarea# Se actua i6a diariamente permanente' muestra& por e e@uipo y de manera

Las tareas pendientes' en curso y terminadas# La estimacin de es/uer6o pendiente de cada tarea sin conc uir# E nombre de miembro de e@uipo @ue se ha asignado dicha tarea# Jenera mente' e BacI og de Sprint' se visua i6a mediante un tab ero /)sico' montado en a guna de as paredes de a sa a de desarro o#

-7

Scrum y eXtreme Programming para Programadores

Eugenia Bahit

PENDIENTES

EN CURSO

TERMINADAS

Tablero fsico (Scrum Taskboard)

Es muy /recuente' a a ve6 de ser una pr:ctica recomendada' @ue cada tarea sea a a ve6' Reti@uetada R' di/erenciando' por ejemp o' cuando representa un bug' una tarea de diseCo' un test' etc#
Historia de Usuario #

123

Historia de Usuario #

123

Disear HTML del formulario de login


Mara del Carmen
Tag:

Crear controlador para el modelo Usuario


Martn
Tag:

4h

6h

diseo

programacin

!ividiendo Aistorias de %suario en 8areas


La estrategia consiste en desmembrar e item a a m)nima e>presin posib e' encuadrada en un mismo tipo de actividad#

-B

Scrum y eXtreme Programming para Programadores

Eugenia Bahit

E desmembramiento debe hacerse Rde particu ar' y de o particu ar a deta eR#

o genera

Historia de Usuario # 123 Como usuario puedo ingresar mi e-mail y contrasea para acceder al sistema

Prioridad

5
Valor

Criterios de aceptacin:

100
Esfuerzo

21
Ficha tpica de Historia de Usuario

An: isis Jenera & Es a@ue @ue responde a a pregunta 1@u3 es5 un sistema de va idacin de usuarios registrados

An: isis Particu ar& Es e @ue responde a a pregunta 1cmo hacer o5 Ar@uitectura <QC Dre@uiere hacer e mode o' a gica y a J%. de a vista y e contro adorF

An: isis deta ado& Es e @ue responde a a pregunta genera 1@u3 tareas se necesitan hacer para ograr o5
-9

Scrum y eXtreme Programming para Programadores

Eugenia Bahit

Los deta es' son a@ue as restricciones @ue deber:n considerarse para todo o anterior# Por ejemp o' a creacin de mode o' repercutir: en a base de datos# Por o cua ' tras crear os nuevos mode os' habr: @ue correr e E(< para @ue modi/i@ue as tab as# Etro deta e a considerar' es e tiempo @ue demanda cada tarea# Por ejemp o' correr un E(< eva so o a gunos minutos' pues no puede ser considerado una Hnica tarea# Entonces' puede Rsumarse como deta eR a a tarea Rcrear mode osR# !e manera contraria' documentar en e manua de usuario' evar: todo un d)a de trabajo# Por o cua ' debe asignarse a una Hnica tarea#

Crear e mode o %suario y correr e E(< para modi/icar as tab as


8ag& programacin Es/uer6o& + h

!iseCar un /ormu ario A8<L para insertar usuario y contraseCa


8ag& diseCo Es/uer6o& - h

!esarro ar a gica de a vista de /ormu ario de ogueo


8ag& programacin Es/uer6o& - h

Crear e contro ador para e mode o


8ag& programacin Es/uer6o& B h

Correr os test e integrar


8ag& testing Es/uer6o& , h
-;

Scrum y eXtreme Programming para Programadores

Eugenia Bahit

Gina mente' dichas tareas se p asmar:n en di/erentes post-it Duna tarea en cada unoF# Los miembros de e@uipo decidir:n @u3 tareas se asignar: cada uno y se co ocar:n os post-it en e tab ero&
Historia de Usuario #

123

Historia de Usuario #

123

Crear modelo usuario y correr ORM


David
Tag:

Correr Test de Usuario e Integrar al sistema

6h

"iliana
Tag:

1h

programacin

testing

Historia de Usuario #

123

Disear HTML del formulario de login


Mara del Carmen
Tag:

4h

diseo

.ncremento de Gunciona idad


A /ina i6ar cada Sprint' e e@uipo har: entrega de un incremento de /unciona idad para e sistema# Este incremento' debe ograr asemejarse a Uun so/t0are /uncionandoV pudiendo ser imp ementado en un ambiente de produccin de manera ,$$Y operativa#
-=

Scrum y eXtreme Programming para Programadores

Eugenia Bahit

Ceremonias en Scrum
En Scrum' es /recuente oir hab ar de UceremoniasV cuando nos re/erimos a as cuatro reuniones @ue se rea i6an de /orma iterativa en cada Sprint# Estas reuniones Do ceremoniasF son& ,# P ani/icacin de Sprint +# (eunin diaria "# (evisin -# (etrospectiva

Ceremonia de P ani/icacin de Sprint


La p ani/icacin es o primero @ue debe hacerse a comien6o de cada Sprint# !urante esta ceremonia' participan e !ueCo de Producto' e Scrum <aster y e Scrum 8eam# E objetivo de esta ceremonia' es @ue e !ueCo de Producto pueda presentar a e@uipo' as historias de usuario prioritarias' comprendidas en e BacI og de productoX @ue e e@uipo comprenda e a cance de as mismas mediante preguntasX y @ue ambos negocien cu: es pueden ser desarro adas en e Sprint @ue se est: p ani/icando# %na ve6 de/inido e a cance de sprint' es cuando e e@uipo divide cada historia de usuario' en tareas' as cua es ser:n necesarias para desarro ar a /unciona idad descrita en a historia#
7$

Scrum y eXtreme Programming para Programadores

Eugenia Bahit

Estas tareas' tendr:n un es/uer6o de desarro o estimado Den horas @ue se deducen de a estimacin de es/uer6o rea i6ada para a Aistoria de %suario' mediante t3cnicas como P aning PoIer' Co umnas o 8-Shirt Si6ing' @ue veremos m:s ade nateF' tras o cua ' ser:n pasadas a bacI og de Sprint y de a ) se visua i6ar:n en e tab ero una ve6 @ue cada miembro se haya asignado a@ue as @ue considere puede rea i6ar# La p ani/icacin puede demandar so o unas horas' o toda una jornada abora comp eta#
2ue e Scrum 8eam cono6ca os )tems prioritarios de BacI og de Producto 2ue e !ueCo de Producto negocio con e e@uipo os )tems a desarro ar 2ue e e@uipo de/ina as tareas necesarias para cump ir con a entrega !ueCo de Producto E@uipo Scrum <aster A comien6o de Sprint Gija' entre + y ; horas BacI og de producto& para negociar os items a desarro ar y comprender su importancia BacI og de Sprint& se de/ine durante a p ani/icacin Presentar items E !ueCo de Producto presenta os )tems Aacer preguntas

Ebjetivos

Participantes <omento !uracin

Arte/actos invo ucrados

!in:mica

7,

Scrum y eXtreme Programming para Programadores

Eugenia Bahit

E Scrum 8eam rea i6a as preguntas @ue considere necesarias a !ueCo de Producto a /in de entender os )tems presentados

Estimar es/uer6o E Scrum 8eam rea i6a as estimaciones de es/uer6o y comp ejidad necesarias para desarro ar os )tems propuestos por e !ueCo de Producto# Estas estimaciones pueden rea i6arse a trav3s de t3cnicas como P anning PocIer' co umnas yWo 8-Shirt Si6ing# !e/inir a cance Basados en a estimacin e/ectuada' e Scrum 8eam' de/ine e a cance de Sprint Negociar E !ueCo de Producto' acepta' recha6a o so icita cambios a a cance de/inido por e Scrum 8eam !e/inir tareas E Scrum 8eam' de/ine as tareas para cada )tem se eccionado' estimando a duracin de horas de cada una Armar tab ero Se checIea a ista y se arma e tab ero

(eunin diaria
Las reuniones diarias para Scrum' son RconversacionesR de no m:s de 7-,7 minutos' @ue e Scrum <aster tendr: a comien6o de cada d)a' con cada miembro de e@uipo# En esta conversacin' e Scrum <aster deber: ponerse a d)a de o @ue cada miembro ha desarro ado Den a jornada previaF' o @ue har: en a /echa actua ' pero por sobre todo' conocer cu: es impedimentos est3n surgiendo' a /in de reso ver os y
7+

Scrum y eXtreme Programming para Programadores

Eugenia Bahit

@ue e Scrum 8eam preocupaciones#

pueda

continuar

sus

abores'

sin

Ebjetivos

2ue os miembros de e@uipo sincronicen sus tareas (eportar a Scrum <aster os avances e impedimentos E@uipo Scrum <aster %na ve6 por d)a en horario /ijo Dgenera mente' a comien6o de a jornada abora F Gija' no mayor a ,7 minutos BacI og de Sprint& actua i6acin de tab ero Entrevista con e Scrum <aster E Scrum <aster se reHne con os miembros de e@uipo y pregunta por o @ue se ha heho' o @ue @ueda pendiente para hoy y si e>iste a gHn impedimento para reso ver o uego de a reunin Actua i6acin de tab ero Se actua i6a y checIea e tab ero

Participantes

<omento

!uracin Arte/actos invo ucrados

!in:mica

Ceremonia de (evisin
!urante a ceremonia de revisin en Scrum' e e@uipo presentar: a !ueCo de Producto as /unciona idades desarro adas# Las e>p icar: y har: una demostracin de e as' a /in de @ue' tanto !ueCo de Producto como a eventua audencia' puedan e>perimentar as#

7"

Scrum y eXtreme Programming para Programadores

Eugenia Bahit

E !ueCo de Producto podr: sugerir mejoras a as /unciona idades desarro adas' aprobar as por comp eto o eventua mente' recha6ar as si considera @ue no se ha cump ido e objetivo# La ceremonia de revisin se eva a cabo e H timo d)a de Sprint' y no tiene una duracin /ija# En a pr:ctica' se uti i6a e tiempo @ue sea necesario#
Ebjetivos 2ue os principa es interesados e>perimenten as /unciona idades construidas y eventua mente sugieran a guna mejora 2ue e !ueCo de Producto acepte o rechace as /unciona idades construidas Scrum <aster !ueCo de Producto Scrum 8eam Audiencia Dopciona menteF a timo d)a de Sprint No menor a , hora y no mayor una jornada comp eta .ncremento de /unciona idad

Participantes <omento !uracin Arte/actos invo ucrados

!in:mica

Prsentacin de os items desarro ados E Scrum 8eam presenta os items desarro ados de BacI og de Producto y procede a mostrar e so/t0are en /uncionamiento Evacuacin de consu tas E !ueCo de Producto y principa es interesados' rea i6an a Scrum 8eam
7-

Scrum y eXtreme Programming para Programadores

Eugenia Bahit

consu tas re/eridas a /uncionamiento y eventua mente' e dueCo de producto' podr: sugerir mejoras o so icitar a imp ementacin de as mismas en e entorno de produccin

Actua i6acin de bacI og de producto Dopciona F A@ue as /unciona idades aHn no resue tas Dy p ani/icadasF' e !ueCo de Producto' as reincorpora a BacI og de Producto Acuerdo de pr>imo encuentro E Scrum <aster' anuncia /echa' horario y ugar de pr>imo encuentro

Ceremonia de (etrospectiva& a bHs@ueda de a per/eccin


No es en vano a /rase Ren a bHs@ueda de a per/eccinR# Como H tima ceremonia de Sprint' Scrum propone e/ectuar a e@uipo' una retrospectiva en /orma conjunta con e Scrum <aster y opciona mente' e !ueCo de Producto# E objetivo de esta retrospectiva' como su nombre o indica' es Rmirar hacia atr:s Den retrospectivaFR' rea i6ar un an: isis de o @ue se ha hecho y sus resu tados correspondientes' y decidir @ue medidas concretas emp ear' a /in de mejorar esos resu tados# La retrospectiva en Scrum sue e ser vista como una Rterapia de aprendi6ajeR' donde a /ina idad es Raprender de os aciertos' de os errores y mejorar todo a@ue o @ue sea /actib eR#
Ebjetivos !etectar /orta e6as de e@uipo y
77

Scrum y eXtreme Programming para Programadores

Eugenia Bahit

oportunidades de mejora Participantes Acordar acciones concretas de mejoras para e pr>imo Sprint E@uipo Scrum <aster !ueCo de producto Dopciona menteF A /ina i6ar a jornada' de H timo d)a de Sprint Gija' no mayor a + o " horas ninguno

<omento

!uracin Arte/actos invo ucrados !in:mica

.denti/icacin de oportunidades de mejora E Scrum <aster identi/ica a@ue os mecanismo o procedimientos @ue deban mejorarse !e/inicin de acciones concretas E Scrum <aster y e@uipo' de/inen as acciones concretas @ue ser:n evadas a cabo en e pr>imo Sprint' a /in de mejorar o necesario (evisin de acciones pasadas Se revisan as acciones acordadas en retrospectivas anteriores y se decide si ser:n continuadas o no

Estimando es/uer6os
A di/erencia de as t3cnicas de estimacin tradiciona es' centradas en e UtiempoV @ue demanda a rea i6acin de actividades inciertas' as metodo og)as :gi es en genera '
7B

Scrum y eXtreme Programming para Programadores

Eugenia Bahit

proponen rea i6ar estimaciones de Ues/uer6oV ya @ue seguramente' es mucho m:s /:ci y certero indicar Ucu:nto es/uer6o te demanda mover ,$$ adri osV @ue Ucu:nto tiempo te evar: mover 7 bo sas de arenaV# Con certe6a' uno podr)a segurar' @ue pintar un edi/icio de ,pisos' e evar: Umucho es/uer6oV# Pero muy di/)ci mente' pueda decir de /orma certera' cuanto tiempo tardar:# <uy probab emente' e tiempo @ue se indi@ue no sea e @ue /ina mente resu te# Estimar e Ues/uer6oV es a go @ue resu ta independiente de a cantidad y ca idad de os /actores de entorno# Pues para cua @uier pintor' pintar e edi/icio de ,- pisos demandar: mucho es/uer6o# .nc uso aun@ue os pintores designados a rea i6ar a tarea' sean seis# Sin embargo' estimar e tiempo' es un /actor @ue adem:s de poco certero' es inherente a os e ementos de entorno# Pues es /:ci decir @ue pintar e edi/icio demandar: mucho es/uer6o' pero ca cu ar e tiempo @ue demande hacer o' imp icar:n /actores como a cantidad de pintores invo ucrados' a ca idad de a pintura' as herramientas @ue se uti icen' e estado c imato gico' entre decenas de otros /actores# Por todo esto' es @ue e agi ismo se avoca a estimar o certero' bas:ndose en un principio de honestidad' mediante e cua ' os miembros de e@uipo se compremeten a ser sinceros' teniendo a humi dad necesaria y su/iciente' re@uerida para conocer sus propias imitaciones# E>isten varias t3cnicas para estimar e es/uer6o# 8odas as t3cnicas de estimacin' se rea i6an sobre as Aistorias de %suarios y sin e>cepciones' invo ucran un juego de
79

Scrum y eXtreme Programming para Programadores

Eugenia Bahit

p ani/icacin @ue hace @ue estimar' sea a go divertido# A@u) hab aremos de " t3cnicas& 8-Shirt Si6ing Estimacin por PoIer y Estimacin por Co umnas

Aab aremos adem:s' de una nueva t3cnica @ue nos proponen Leonardo de Seta y Sergio Jiana66a de .deasAgi es#com' a cua consiste en a combinacin de Co umnas y PoIer#

Estimando con 8-Shirt Si6ing


8-Shirt Si6ing es una t3cnica @ue se basa en a tab a de medidas americana @ue uti i6an as prendas de vestir& XS& e>tra sma Dmuy pe@ueCoF S& sma Dpe@ueCoF <& medium DmedianoF L& arge DgrandeF XL& e>tra arge Dmuy grandeF

Cuanto m:s pe@ueCa es a medida' menor es/uer6o re@uiere una Aistoria de %suario# T cuanto m:s grande' mayor es/uer6o#

7;

Scrum y eXtreme Programming para Programadores

Eugenia Bahit

Historia de Usuario # 123 Como usuario puedo ingresar mi e-mail y contrasea para acceder al sistema

Prioridad

5
Valor

Criterios de aceptacin:

100
Esfuerzo

#"
Una historia de usuario estimada con T-Shirt Sizing que requiere de mucho esfuerzo Historia de Usuario # 123 Como usuario del sitio $e%& puedo ver todos los artculos pu%licados en el cat'logo de productos

Prioridad

2
Valor

Criterios de aceptacin:

(5
Esfuerzo

)
Una historia de usuario estimada con T-Shirt Sizing que requiere de poco esfuerzo

7=

Scrum y eXtreme Programming para Programadores

Eugenia Bahit

1Cmo se juega5
Kugar a estimar con 8-Shirt Si6ing' es sumamente senci o# E juego consiste en& %n miembro de e@uipo ee una Aistoria de %suario Cada miembro de e@uipo anota en un pape ' e es/uer6o @ue cree @ue demanda rea i6ar dicha A% 8odos a mismo tiempo' giran e pape ' haci3ndo o visib e Si hay consenso' se indica en a /icha de a A% a UmedidaV estimada !e o contrario' e miembro de e@uipo @ue mayor es/uer6o haya estimado' argumenta su estimacin A continuacin' argumenta e @ue menor es/uer6o estim y se vue ve a votar Cuando no se ega a un consenso' puede optarse por e egir a estimacin rea i6ada por a mayor)a o intervenir e Scrum <aster para so ventar dicha /a ta de consenso' como un impedimento' pudiendo optar por dar una nueva argumentacin y permitir votar una ve6 m:s' o directamente' e egir a estimacin @ue considera oportuna# !e todas /ormas' o idea ' siempre es encontrar e consenso#

Estimacin por PoIer


Aacer estimaciones con PoIer' no so o es una t3cnica& bEs un juego muy divertidoc E Scrum PoIer DP anning PoIer o PoIer a secasF' se juega con una baraja de cartas numeradas siguiendo a serie de Gibonacci' a cua se compone de una serie gica donde cada
B$

Scrum y eXtreme Programming para Programadores

Eugenia Bahit

nHmero es a suma de os dos anteriores&

1, 1, 2, 3, 5, 8, 13, 21, 34,


Serie de Fibonacci donde cada nmero es la suma de los dos anteriores

A menor nHmero' menor es/uer6o demanda una Aistoria de %suario# T cuanto m:s e evado es e va or' mayor es/uer6o# La baraja de Scrum PoIer' cuenta adem:s con dos cartas adiciona es& %na ta6a de ca/3' @ue signi/ica UbNo doy m:sc Aagamos una pausaV %n signo de interrogacin ' @ue puede signi/icar UNo estoy seguro de es/uer6o @ue demandaV o tambi3n UNo entend) muy bien os re@uerimientosV#

En .nternet' pueden encontrarse un sin/)n de variantes de barajas para Scrum PoIer' encontrando a gunas muy origina es y divertidas como a de 000#Autentia#com#

(eg as de Kuego
Antes de comen6ar' deben estab ecerse as reg as& E Scrum <aster podr: ser @uien actHa de moderador de juego !ebe decidirse @u3 tiempo de e>posicin ser: asignado a cada participante para e>p icar su estimacin 8ambi3n ser: necesario de/inir' e tiempo de descanso
B,

Scrum y eXtreme Programming para Programadores

Eugenia Bahit

previsto cuando un miembro de e@uipo' arroje a carta Uta6a de ca/3V

1Cmo jugar Scrum PoIer5


En a p ani/icacin de Sprint' una ve6 @ue e !ueCo de Producto ha presentado un )tem de BacI og de Producto' y ya todos os miembros de Scrum 8eam han hecho as preguntas necesarias para entender e a cance de mismo' es hora de determinar e es/uer6o y a comp ejidad @ue demanda construir a Uhistoria de usuarioV# T a@u) es donde comien6a e juego& ,# Cada miembro de e@uipo debe tener en su poder un juego de cartas +# 8ras haber discutido e a cance' cada miembro pensar: en e es/uer6o @ue construir dicha /unciona idad demanda' y co ocar: a carta correspondiente' boca abajo Des decir' sin @ue e nHmero sea visib eF' sobre a mesa# "# %na ve6 @ue todos os miembros hayan bajado una carta sobre a mesa' se dan vue ta' haci3ndo as visib es# -# Si todos os miembros han arrojado a misma carta' e es/uer6o ha sido estimado y debe indicarse e mismo' en a /icha de Aistoria de %suario# %na ve6 hecho' se evanta a carta de a mesa y se prosigue a estimar e pr>imo )tem de BacI og de Producto Drepitiendo desde e paso +F 7# Si e>isten di/erencias en a estimacin' e miembro @ue
B+

Scrum y eXtreme Programming para Programadores

Eugenia Bahit

mayor es/uer6o haya estimado' deber: e>poner sus motivos Dmuy probab emente' encontr impedimentos @ue os otros miembros noF# Luego' e>pondr: a@ue @ue menor es/uer6o haya estimado Dseguramente' encontr una /orma m:s senci a de reso ver o @ue os otros miembrosF# B# Aecha a e>posicin' se vue ve a votar' repitiendo a secuencia desde e punto U+

Cuando no se ega a consenso tras a tercera ve6 de jugar una carta para a misma Aistoria de %suario' e Scrum <aster deber: decidir a estimacin /ina para dicha A%# E juego /ina i6a cuando ya no @ueden m:s Aistorias de %suario para estimar#

B"

Scrum y eXtreme Programming para Programadores

Eugenia Bahit

Historia de Usuario # 123 Como usuario puedo ingresar mi e-mail y contrasea para acceder al sistema

Prioridad

5
Valor

Criterios de aceptacin:

100
Esfuerzo

144
a misma historia de usuario estimada con T-Shirt Sizing que requiere de mucho esfuerzo! pero esta "ez! con "alores de Scrum #o$er

Historia de Usuario # 123 Como usuario del sitio $e%& puedo ver todos los artculos pu%licados en el cat'logo de productos

Prioridad

2
Valor

Criterios de aceptacin:

(5
Esfuerzo

13
a misma historia de usuario estimada con T-Shirt Sizing que requiere de poco B-

Scrum y eXtreme Programming para Programadores

Eugenia Bahit

esfuerzo! pero esta "ez! con "alores de Scrum #o$er

Estimando por Co umnas


La estimacin por co umnas es una t3cnica pensada para estimar grandes cantidades de Aistorias de %suario en b o@ue# E objetivo es agrupar as Aistorias de %suario en co umnas con e mismo grado de granu idad# Cuanto m:s a a i6@uierda est: a co umna' menor es/uer6o demandan as Aistorias de usuario de esa co umna# T cuanto m:s a a derecha' mayor es/uer6o&
Menor es uer!o " Ma#or es uer!o $

En a estimacin por co umnas' os miembros de e@uipo debn estar sentados a rededor de una mesa# E juego se inicia /ormando una pi a con as Aistorias de %suario' a modo de baraja#

B7

Scrum y eXtreme Programming para Programadores

Eugenia Bahit

,# %no de os miembros' toma a baraja de Aistorias de %suario y da inicio a a primera ronda de juego' e>trayendo una Aistoria de %suario de ma6o# La ee en vo6 a ta' y a ubica en a mesa' /ormando una co umna imaginaria# A continuacin' pasa a baraja a jugador ubicado a su i6@uierda# +# E segundo en jugar' vue ve a e>traer una Aistoria de %suario de a pi a' a ee en vo6 a ta y a ubica en a mesa' teniendo en cuenta @ue& Si a Aistoria de %suario demanda menor es/uer6o @ue a @ue se encuentra en a mesa' deber: co acar a a a i6@uierda de 3staX Si demanda e mismo es/uer6o' a ubicar: debajoX T si demanda mayor es/uer6o' a co acar: a a derechaX A continuacin' pasa a pi a a jugador ubicado a su i6@uierda#

"# A partir de tercer jugador' e juego continHa en ronda de a siguiente /orma& -# E juegador @ue posee a pi a de Aistorias de usuario en a mano' debe e egir entre dos opciones& 7# <over de co umna una Aistoria de %suario y pasar a pi a a siguiente jugador B# E>traer una nueva Aistoria de %suario' eer a en vo6 a ta y co ocar a en a mesa teniendo en cuenta o e>p icado en e punto +#

BB

Scrum y eXtreme Programming para Programadores

Eugenia Bahit

9# Cuando ya no @uedan m:s Aistorias de %suario en a pi a' se asigna a todas as Aistorias de una misma co umna' e mismo grado de es/uer6o Ddependiendo de a cantidad de co umnas' puede indicarse como es/uer6o' e nHmero de orden de as co umnas' de i6@uierda a derechaF y /ina i6a e juego

Menor es uer!o

"

Ma#or es uer!o $

1 2 3 4 5

B9

Scrum y eXtreme Programming para Programadores

Eugenia Bahit

Estimacin por Co umnas y PoIer


Leonardo de Seta y Sergio Jiana66a ' integrantes de e@uipo de .deasAgi es#com ' nos proponen una idea muy divertida y sumamente productiva' para estimar grandes cantidades de Aistorias de %suario en b o@ue# La t3cnica propuesta por Sergio y Leonardo consiste en rea i6ar a estimacin por Co umnas uti i6ando un m:>imo de 7 co umnas y a continuacin' rea i6ar una nueva estimacin por PoIer para cada co umna' de a siguiente manera& ,# Se comien6a a estimacin por PoIer desde a /i a de medio +# Como baraja' proponen contar con as siguientes cartas& d' ,' +' "' 7' ;' ,"' +,' (infinito)' ta6a de ca/3' 5' bc# La carta in/inito' indicar: @ue e es/uer6o es mayor a +, mientras @ue a de os signos de admiracin' indicar: @ue a Aistoria de %suario es demasiado grande para estimar y debe ser dividida#

"# Se e ige cua @uiera de as Aistorias de %suario de esta /i a y se estima e es/uer6o mediante a t3cnica de Scrum PoIer# Para estimar a co umna de medio' deben e>ceptuarse as cartas d y , Dya @ue a haber dos co umnas previas' no podr:n estimarse con menos de d y , cada unaF y ," y +, D as cua es se reservan para as dos H timas co umnasF
B;

Scrum y eXtreme Programming para Programadores

Eugenia Bahit

-# E va or estimado' se asigna a todas as Aistorias de %suario de a co umna# 7# A continuacin' se repite e procedimiento con as co umnas restantes' teniendo en cuenta @ue si a estimacin de a co umna centra ' /ue rea i6ada en "' as Aistorias de %suario de as dos primeras co umnas' ser:n estimadas autom:ticamente' en , y + respectivamente# B# E juego /ina i6a cuando estimada# a H tima co umna ha sido

Scrum Lit
En http&WWagi ecoaching#eugeniabahit#com puedes descargar un comp eto Lit para Scrum ' e cua inc uye& ,# <a6o de cartas para Scrum PoIerX +# Gichas para Aistorias de %suarioX "# Post-it para tareas de Scrum 8asIboardX -# !iagrama de Burndo0n para Sprints de + y " semanas#

B=

Scrum y eXtreme Programming para Programadores

Eugenia Bahit

.ntroduccin a a Programacin eXtrema


eXtreme Programming Dprogramacin e>tremaF tambi3n amado XP' es una metodo og)a @ue tiene su origen en ,==B' de a mano de Lent BecI' Mard Cunningham y (on Ke//ries# A di/erencia de Scrum' XP propone so o un conjunto de pr:cticas t3cnicas' @ue ap icadas de manera simu t:nea' pretenden en/ati6ar os e/ectos positivos de en un proyecto de desarro o de So/t0are#

Bases de a programacin eXtrema


eXtreme Programming se apoya en cinco va ores' os cua es en/ati6an a esencia co aborativa de e@uipo# Estos va ores son&

Comunicacin
En XP' todo es trabajado en e@uipo& desde e re evamiento y an: isis hasta e cdigo /uente desarro ado# 8odo se conversa cara a cara' procurando ha ar so uciones en conjunto a os prob emas @ue puedan surgir#

9$

Scrum y eXtreme Programming para Programadores

Eugenia Bahit

Simp icidad
Se pretende desarro ar so o o necesario y no perder tiempo en deta es @ue no sean re@ueridos en e momento# En este aspecto' se asemeja a otra metodo og)a :gi ' denominada Lanban' en a cua ' un proceso UanteriorV so o produce o @ue e proceso posterior demanda#

(etroa imentacin
E objetivo de eXtreme Programming es entregar o necesario a c iente' en e menor tiempo posib e# A cambio' demanda a c iente' un /eedbacI continuo -retroa imentacin-' a /in de conocer sus re@uerimientos e imp ementar os cambios tan pronto como sea posib e#

(espeto
E e@uipo respeta a idoneidad de c iente como ta Ds o 3ste' es @uien conoce e va or para e negocioF y e c iente ' a a ve6' respeta a idoneidad de e@uipo Dcon/iando en e os pro/esiona mente para de/inir y decidir e UcmoV se evar: a cabo e desarro o de o re@ueridoF#

Coraje
Se dice @ue en XP un e@uipo debe tener e va or para decir a verdad sobre e avance de proyecto y as estimaciones de mismo' p ani/icando e 3>ito en ve6 de buscar e>cusas sobre os errores#

9,

Scrum y eXtreme Programming para Programadores

Eugenia Bahit

Pr:cticas t3cnicas
eXtreme Programming propone ,+ pr:cticas t3cnicas ' simp es' de /:ci compresin y @ue ap icadas en /orma conjunta' garanti6an un mejor resu tado de rpoyecto# Estas doce pr:cticas' se describen a continuacin#

P(4C8.CA ?,& CL.EN8E .N-S.8% DEN-S.8E C%S8E<E(F


En XP se re@uiere @ue e c iente est3 dispuesto a participar activamente de proyecto' contando con a disponibi idad su/iciente y necesaria' para interactuar con e e@uipo en todas as /ases de proyecto#

Siempre es recomendable contar con ms de una persona (por parte del cliente), asignada a trabajar de forma permanente con el equipo.

La comunicacin cara a cara con e c iente es /undamenta ' ya @ue a partir de 3sta' e e@uipo avan6ar: m:s r:pidamente en e proyecto' puesto @ue& Evacuar: todas sus dudas sobre e proyecto' con e c iente y en e momento @ue 3stas surjan# Se estab ecer:n as prioridades a desarro ar' en tiempo rea ' as) como a reso ucin de con/ ictos#

9+

Scrum y eXtreme Programming para Programadores

Eugenia Bahit

Las personas asignadas por e c iente' deben ser& Conocedores e>pertos de o @ue se pretende producir# En o posib e' se pretende @ue sean usuarios rea es de so/t0are# Personas @ue cuenten con a in/ormacin su/iciente sobre a ap icacin y os objetivos de negocio' a /in de poder actuar con autoridad en a toma de decisiones #

P(4C8.CA ?+& SE<ANA !E -$ AE(AS D-$ AE%( MEELF


eXtreme Programming asegura a ca idad de e@uipo' considerando @ue 3ste' no debe asumir responsabi idades @ue e demanden mayor es/uer6o de @ue humanamente se puede disponer# Esto marca una di/erencia radica con otras metodo og)as' sobre todo' con a@ue as @ue siguen una )nea tradiciona donde as estimaciones de/icientes ob igan a e@uipo de desarro o' a sobre-es/uer6os signi/icativos# Los docentes de curso <etodo og)as Agi es para Jestin de Proyectos de !esarro o de So/t0are de a %niversidad 8ecno gica Naciona de Buenos Aires' % ises <artins' Aern:n (icchio y 8homas Ma et ' se re/ieren a 3sto' en os apuntes de a c:tedra' diciendo @ue&

9"

Scrum y eXtreme Programming para Programadores

Eugenia Bahit

Los proyectos de desarrollo tradicionales suelen necesitar horas extras y esfuer os heroicos para entregar el soft!are en la fecha prometida. "l resultado suele ser un equipo agotado y menos producti#o, lo cual genera una fuerte baja en la calidad del soft!are producido, ya sea en el corto, mediano o largo pla o. $oras extras y esfuer os heroicos son se%ales de problemas mayores, como por ejemplo compromisos por encima de las posibilidades, estimaciones pobres, falta de recursos&...' (arias organi aciones aceptan con#i#ir con este problema continuamente.) (* +,-- .lises /artins, $ernn 0icchio, 1homas 2allet)
%n e@uipo UdescansadoV' sin es/uer6os desmedidos' ogra un mejor resu tado#

P(4C8.CA ?"& <E84GE(A D<E8APAE(F


A /in de evitar os prob emas de comunicacin @ue sue en surgir en a pr:ctica' entre t3cnicos y usuarios' eXtreme Programming propone e uso de met:/oras' intentando ha ar un punto de re/erencia @ue permita representar un concepto t3cnico con una situacin en comHn con a vida cotideana y rea # Para @ue una met:/ora' cump a este objetivo' es /undamenta &

9-

Scrum y eXtreme Programming para Programadores

Eugenia Bahit

Aacer un para e ismo entre una /unciona idad de sistema y a vida rea Si ese para e ismo Dmet:/oraF no se entiende inmediatamente' se deber: buscar otra met:/ora Duna met:/ora so o sirve cuando es comprendida de /orma inmediataF

<uchas veces' puede ser necesario emp ear m:s de una met:/ora para e>p icar una misma caracter)stica de sistema# .nc uso' en a gunas oportunidades' pueden no encontrarse met:/oras @ue describan con precisin toda a caracter)stica @ue se intenta e>p icar# Son momentos' en os @ue se re@uiere de un gran ingenio y creatividad#

.na metfora es la forma de ser didcticos para explicar a nuestro receptor, un concepto t3cnico y que 3ste, lo comprenda con facilidad.

P(4C8.CA ?-& !.SENE S.<PLE DS.<PLE !ES.JNF


Esta pr:ctica' deriva de un /amoso principio t3cnico de desarro o de so/t0are& L.SS# Cuyas sig as derivan de ing 3s ULeep it simp e' stupidcV -b<ant3n o simp e' estHpidoc-# !ado @ue /recuentemente puede resu tar UchocanteV e t3rmino UstupidV' a o argo de os aCos' se han ido produciendo variantes' como Usi yV -tonto- e inc uso' muchos de nosotros' a veces' pre/erimos reemp e6ar o por un nombre propio' como si
97

Scrum y eXtreme Programming para Programadores

Eugenia Bahit

estuvi3semes dirigi3ndo a /rase a una persona en particu ar& Leep it Simp e' Susanc B:sicamente' e principio L.SS' se trata de mantener un diseCo senci o' estandari6ado' de /:ci compresin y re/actori6acin# Puede resumirse en Uhacer o m)nimo indispensab e' tan egib e como sea posib eV # Puedes ver m:s sobre esta t3cnica' eyendo e MiIipedia# art)cu o en

P(4C8.CA ?7& (EGAC8E(.OAC.PN D(EGAC8E(.NJF


La re/actori6acin Do re/actoringF es una t3cnica @ue consiste en modi/icar e cdigo /uente de un so/t0are sin a/ectar a su comportamiento e>terno # Puedes eer m:s sobre re/actori6acin en a MiIipedia#

/s adelante, #eremos las principales t3cnicas de 0efactoring, en detalle, utili ando como referencia, el manual de 0efactoring4 (en ingl3s) del sitio 2eb Source/a5ing.com

!ado @ue eXtreme Programming propone Udesarro ar o m)nimanete indispensab eV' en e desarro o de cada nueva /unciona idad' puede Dy debeF ser necesario' rea i6ar un
; http&WWsourcemaIing#comWre/actoring 9B

Scrum y eXtreme Programming para Programadores

Eugenia Bahit

re/actoring de cdigo' a /in de ograr una mayor cohesin de 3ste' impidiendo redundancias# Por e o' a re/actori6acin es a principa t3cnica propuesta por XP' para evo ucionar e cdigo de a ap icacin con /aci idad en cada iteracin#

P(4C8.CA ?B& P(EJ(A<AC.PN !E A PA(ES DPA.( P(EJ(A<<.NJF


Etra de as pr:cticas t3cnicas /undamenta es de eXtreme Programming' es a programacin de a pares# Se esti a Daun@ue no de /orma constanteF programar en parejas de dos desarro adores' os cua es podr:n ir intercambiando su ro ' en as sucesivas Pair Programming # 1En @u3 consiste a programacin de a pares5 Senci o# !os programadores' sentados /rente a una misma computadora' cada uno cump iendo un ro di/erente# Las combinaciones y caracter)sticas de este ro ' no so o son variab es' sino @ue adem:s' son inmensas' permitiendo a ibertad de User origina mente creativosV# A gunas de estas combinaciones Dta ve6 as m:s /recuentesF' sue en ser& %no escribe e cdigo' mientras @ue otro o va revisandoX %n programador m:s avan6ado' programa' mientras va e>p icando o desarro ado a otro menos e>pertoX
99

Scrum y eXtreme Programming para Programadores

Eugenia Bahit

Los dos programadores piensan en como reso ver e cdigo' y uno de e os o escribe#

!e esa /orma y segHn as necesidades de cada e@uipo' as /unciones de cada programador' podr:n variar i imitadamente#

P(4C8.CA ?9& EN8(EJAS CE(8AS DSAE(8 (ELEASESF


Se busca hacer entregas en breves apsos de tiempo' incrementando pe@ueCas /unciona idades en cada iteracin# Esto con eva a @ue e c iente pueda tener una mejor e>periencia con e So/t0are' ya @ue o @ue deber: probar como nuevo' ser: poco' y /:ci mente asimi ab e' pudiendo sugerir mejoras con mayor /aci idad de imp ementacin#

Las entregas cortas, reducen la cur#a de aprendi aje sobre la aplicaci6n.

P(4C8.CA ?;& 8ES8.NJ


En esta pr:ctica' podemos encontrar tres tipos de test -pruebas- propuestos por eXtreme Programming& ,# 8est %nitarios +# 8est de aceptacin "# 8est de integracin

9;

Scrum y eXtreme Programming para Programadores

Eugenia Bahit

Los primeros' consisten en testear e cdigo de manera unitaria Dindividua F mientras se va programando# 83cnica conocida como %nit 8esting' a cua /orma parte de a t3cnica 8!! D8est-driven deve opment -desarro o guiado por pruebas-F# Qeremos esta t3cnica deta adamente' con ejemp os rea es en Python y PAP y hab aremos de os Grame0orIs para %nit 8esting' en os pr>imos cap)tu os# Los 8est de Aceptacin est:n m:s avocados a as pruebas de /unciona idad' es decir a comportamiento /unciona de cdigo# Estas pruebas' a di/erencia de os 8est %nitarios' son de/inidas por e c iente y evadas a cabo mediante herramientas como Se enium ' por ejemp o' y basadas en Casos de %so rea es @ue de/inir:n si a /unciona idad desarro ada' cump e con os objetivos esperados Dcriterios de aceptacinF# Puedes eer m:s sobre as pruebas de aceptacin en MiIipedia# Los 8est de .ntegracin ' como su nombre o indica' tienen por objeto' integrar todos os test @ue com/orman a ap icacin' a /in de va idar e correcto /uncionamiento de a misma' evitando @ue nuevos desarro os' daCen a os anteriores#

P(4C8.CA ?=& CP!.JE ES84N!A( DCE!.NJ S8AN!A(!SF


Los est:ndares de escritura de cdigo /uente' son esencia es a a hora de programar# Permiten hacer m:s egib e e cdigo y m:s impio a a ve6 de proveer a otros programadores' una r:pida visua i6acin y entendimiento de mismo#

9=

Scrum y eXtreme Programming para Programadores

Eugenia Bahit

A gunos enguajes de programacin como Python' poseen sus propias reg as de esti o' estandari6ando a escritura de cdigo /uente' por medio de as PEP# Etros enguajes Umenos pro ijosV como PAP' no tienen reg as de esti o o est:ndares de/inidos Daun@ue Oend Grame0orI' est: rea i6ando un es/uer6o por proponer osF' y es a@u) donde e e@uipo deber: ponerse de acuerdo' de/inir y documentar sus propias reg as# <:s ade ante' tambi3n veremos como hacer o#

P(4C8.CA ?,$& P(EP.E!A! CELEC8.QA DCELLEC8.QE EMNE(SA.PF


Para eXtreme Programming no e>iste un programador UdueCoV de un determinado cdigo o /unciona idad# La propiedad co ectiva de cdigo tiene por objetivo @ue todos os miembros de e@uipo cono6can U@u3V y UcmoV se est: desarro ando e sistema ' evitando as)' o @ue sucede en muchas empresas' @ue e>isten Uprogramadores dueCos de un cdigoV y cuando surge un prob ema' nadie m:s @ue 3 puede reso ver o' puesto @ue e resto de e@uipo' desconoce cmo /ue hecho y cu: es han sido sus re@uerimientos a o argo de desarro o#

P(4C8.CA ?,,& .N8EJ(AC.PN CEN8.N%A DCEN8.N%E%S .N8EJ(AC.PNF


La integracin continua de XP propone @ue todo e cdigo Ddesarro ado por os miembros de e@uipoF encuentren un punto de a ojamiento comHn en e cu: deban enviarse os nuevos desarro os' diariamente' previo correr os test de integracin' a /in de veri/icar @ue o nuevo' no UrompaV o
;$

Scrum y eXtreme Programming para Programadores

Eugenia Bahit

anterior# Estos puntos de a ojamiento en comHn' sue en ser repositorios' os cua es pueden manejarse amp iando as ventajas de a integracin' mediante so/t0are de contro de versiones como Ba6aar' Jit o SQN Dentre otrosF#

"n este punto, los Test de Integracin, juegan un papel fundamental, puesto que de ellos depende la integraci6n de lo nue#o con lo ya desarrollado. 7ndependientemente de los repositorios, jams se lograr una integracin continua real, si no existen Test de Integracin o si stos fallan.
<:s ade ante' veremos como integrar un desarro o' uti i6ando Ba6aar' a herramienta ibre creada y mantenida por Canonica -creadores de Sistema Eperativo %buntu JN%WLinu>-#

P(4C8.CA ?,+& K%EJE !E PL AN.G.CAC.PN DPL ANN.NJ JA<EF


Con di/erencias pero grandes simi itudes con respecto a a p ani/icacin de Sprint en Scrum' a din:mica de p ani/icacin de eXtreme Programming evada a cabo a inicio de a iteracin' sue e ser a siguiente& ,# E c iente presenta a ista de as /unciona idades deseadas para e sistema' escrita con /ormato de UAistoria de %suarioV' en a cua se encuentra de/inido e
;,

Scrum y eXtreme Programming para Programadores

Eugenia Bahit

comportamiento de a criterios de aceptacin#

misma

con

sus

respectivos

+# E e@uipo de desarro o estima e es/uer6o @ue demanda desarro ar as' as) como e es/uer6o disponib e para e desarro o D as iteraciones en XP' sue en durar , a - semanasF # Estas estimaciones pueden hacerse mediante cua @uiera de as t3cnicas de estimacin' vista anteriormente# "# E c iente decide @ue desarro ar y en @u3 orden# Aistorias de %suario

Programacin de a pares y Coding !ojo& 1@ui3n dijo @ue e trabajo es aburrido5


"l 8oding 9ojo es una reuni6n de programadores formada con el objeti#o de resol#er un determinado desaf:o, la cual utili a la programaci6n de a pares como punto de partida para enfrentar los retos propuestos.

1Por @u3 R!ojoR5


!ojo es un t3rmino de origen japon3s' mediante e cua se
;+

Scrum y eXtreme Programming para Programadores

Eugenia Bahit

designa a os espacios destinados a aprendi6aje' a meditacin y a sabidur)a# 2ui3n ocupa e ugar de Rgu)aR en un !ojo' es amado Sensei# En Kapn' e t3rmino se emp ea para designar tambi3n' a os ugares donde se practica e instruye' sobre as artes marcia es# !e igua manera' en e resto de mundo' !ojo se emp ea para re/erirse a todo ugar en e cu: se practi@uen dichas artes marcia es# Por e o' e signi/icado sem:ntico de !ojo' se re/iere a a bHs@ueda de a per/eccin y de a )' es @ue se adopta e t3rmino de RCoding !ojoR& e ugar donde os programadores se reHnen en bHs@ueda de per/eccionarse pro/esiona mente#

1Para @u3 hacer en un Coding !ojo5 1Cu: es a /ina idad5


Para un programador' participar de un Coding !ojo es una e>periencia vita para su carrera# La /ina idad de un Coding !ojo' es aprender de otros programadores y ad@uirir nuevas t3cnicas# %n Coding !ojo' es un ugar e>ento de competitividad @ue se sostiene sobre a base de un esp)ritu de co aboracin mutua entre todos os participantes# Esto' es un concepto /undamenta ' ya @ue marca una de as mayores di/erencias' con cua @uier otro tipo de eventos para programadores#

;"

Scrum y eXtreme Programming para Programadores

Eugenia Bahit

!uracin de un Coding !ojo


En a pr:ctica' un Coding !ojo sue e durar entre - y = horas#

12u3 se hace en un Coding !ojo5


Jenera mente' en un Coding !ojo' se emp ea una de siguientes moda idades& ,# CodeIata +# (andori as

CodeIata en e Coding !ojo


En e codeIata o @ue se busca es per/eccionar una t3cnica de programacin # E Iata Dpa abra de origen japon3s \ ] @ue signi/ica R/ormaRF se uti i6a a menudo en e :mbito de as Artes <arcia es japonesas Dde /orma muy intensiva en e Larate !o y menos intensiva en e Kudo' por ejemp oF' para re/erirse a re/inamiento de os diversos RmovimientosR y Rt3cnicasR esencia es de cada arte marcia #

E Lata en e Coding !ojo


L evado meta/ricamente a a pr:ctica in/orm:tica' un Lata Do codeIataF' consiste en presentar una so ucin Dt3cnicaF ya probada y re/inada a un prob ema in/orm:tico concreto# Se presenta a so ucin' se e>p ica en deta e' se prueba y /ina mente' a t3cnica presentada' se per/ecciona mediante ensayos#

;-

Scrum y eXtreme Programming para Programadores

Eugenia Bahit

%n (andori Coding !ojo


En e randori o @ue se busca es encontrar una so ucin a un determinado prob ema p anteado # E (andori Dtambi3n de origen japon3sF es a pr:ctica de entrenamiento opuesta a Lata' a cua consiste en un Rentrenamiento ibreR#

E (andori en e Coding !ojo


L evado meta/ricamente a a pr:ctica in/orm:tica' e (andori p antea en principio' un prob ema a cua habr: @ue encontrar e una so ucin Dt3cnica @ue en un /uturo Coding !ojo' podr: ser uti i6ada como LataF# En e randori' se uti i6a a programacin de a pares Dpair programming' una t3cnica propuesta por a Programacin E>trema o eXtreme ProgrammingF# En a programacin de a pares' se van turnando parejas de programadores @ue a a ve6 rotan su ro entre ambos DcomHnmente' amados Rpi otoR y Rcopi otoRF# La pareja de programadores ir: ana i6ando y RcodeandoR a ternativas' mientras as e>p ica a a audiencia# A mismo tiempo' a audiencia puede Rco aborarR en a reso ucin de prob ema p anteado# 8ras un determinado tiempo' e programador @ue estaba en e tec ado Dpi otoF intercambia su ro con e copi oto# Gina mente' a pareja de programadores' sede e ugar a una nueva pareja de programadores y esto se repite' hasta @ue se agoten as parejas en a sa a#
;7

Scrum y eXtreme Programming para Programadores

Eugenia Bahit

Qentajas de imp ementar un Coding !ojo en e ugar de trabajo de /orma peridica


Si bien son decenas as ventajas @ue a@u) podr)an enumerarse' me centrar3 en a@ue as @ue considero m:s re evantes& ,# Se mantiene activo y motivado a e@uipo de programadores' ya @ue por as caracter)sticas psico gicas de un programador' e>iste una probada necesidad de satis/acer desa/)os pro/esiona es en e :mbito abora # +# Es una /orma de /omentar e trabajo co aborativo en e@uipo y reducir a competencia entre miembros de un mismo e@uipo Da cua genera mente' es a principa causa de os ambientes de tensinF# "# (epresenta un medio ibre de inversin' para capacitar a os desarro adores' puesto @ue' sumando os conocimientos y habi idades de todo e grupo' se per/eccionan as t3cnicas individua es a a ve6 de as co ectivas# -# Grente a prob emas rea es surgidos en un proyecto actua ' es una posibi idad certera' e/ectiva y r:pida' de encontrar una so ucin e/iciente a con/ icto ' reso ver o y evitar retrasos en e proyecto# 7# La empresa pasa a ser a go m:s @ue e ugar de trabajo' ya @ue se convierte en un !ojo& e ugar idea para per/eccionarse pro/esiona mente y ad@uirir sabidur)a#

;B

Scrum y eXtreme Programming para Programadores

Eugenia Bahit

Cu:ndo y cmo imp ementar e Coding !ojo en a empresa


Sin dudas' e mejor momento para imp ementar un Coding !ojo' es e H timo d)a de una iteracin mensua # Aacer o a /ina i6ar una iteracin' otorga un bene/icio adiciona a as ventajas istadas anteriormente& se comien6a a nueva iteracin' con conocimientos y t3cnicas re/or6ados# Sin dudas' e H timo viernes de cada mes' es e momento idea para imp ementar un Coding !ojo en a empresa' puesto @ue de esta /orma' os programadores @ue hayan @uedado motivados por a nueva t3cnica ad@uirida' seguramente uti i6ar:n su /in de semana para re/or6ar a y egar e unes Rcon m:s /uer6aR#

;9

Scrum y eXtreme Programming para Programadores

Eugenia Bahit

8!! S 8est-!riven !eve opment


Entre as pr:cticas t3cnicas sugeridas por XP' nos encontramos con a t3cnica de programacin 8!!' de ing 3s 8est-!riven !eve opmen D!esarro o Juiado por PruebasF# A muchos asusta esta pr:ctica por e simp e hecho de ser UdesconocidaV y resu tar su descripcin' a go con/usa& 12u3 es a caso' a@ue o de hacer un test antes de programar5 Pero no dejes @ue e miedo a o desconocido te gane' @ue aprender a programar gui:ndote por test' es a go rea mente simp e' divertido y sobre todo' muy productivo#

12u3 es e desarro o - o programacin- guiado por pruebas5


8!! es una t3cnica de programacin @ue consiste en guiar e desarro o de una ap icacin' por medio de 8est %nitarios # Los 8est %nitarios D%nit 8estingF no son m:s @ue a goritmos @ue emu an o @ue a ap icacin se supone deber)a hacer' convierti3ndose as)' en un modo simp e de probar @ue o @ue UpiensasV programar' rea mente /unciona#

;;

Scrum y eXtreme Programming para Programadores

Eugenia Bahit

Para ver o de /orma senci a' imagina @ue est:s desarro ando una ap icacin' @ue necesita un a goritmo @ue sume dos nHmeros# Sabes per/ectamente como hacer o&
function sumar_dos_numeros($a, $b) { return $a + $b; } $a = 1 ; $b = !"; $suma = sumar_dos_numeros($a, $b); ec#o $suma; // salida$ %"

1Senci o verdad5 1Para @u3 necesitar)as comp icarte a vida con eso de os test5
function sumar_dos_numeros($a, $b) { return $a + $b; } $a = &'ana#orias$ 1 &; $b = &!" #ino(os; $suma = sumar_dos_numeros($a, $b); ec#o $suma; // salida$ !"

1a caso ,$ 6anahorias m:s +7 hinojos no deber)a dar como resu tado' "7 vegeta es5 Aasta @ue no o pruebas' ta ve6 no sepas @ue suceda# T hasta no saber @ue sucede' no sabr:s como so ucionar o# T para esto' sirven os 8est' ya @ue te guiar:n para saber @u3' cmo' cu: es y cu:ntos a goritmos necesitar:s desarro ar para @ue tu ap icacin haga o @ue se supone debe hacer# Es entonces' @ue en e caso anterior' os test @ue se desarro en previamente' ir:n guiando tu desarro o hasta encontrar a so ucin a todos os prob emas# T siguiendo e ejemp o' sabr:s
;=

Scrum y eXtreme Programming para Programadores

Eugenia Bahit

@ue evidentemente' necesitar:s de a gHn a goritmo e>tra& va idas os par:metros antes de sumar os y' o os conviertes a enteros o retornas un mensaje de error# En de/initiva' os 8est %nitarios ser:n una gu)a para entender como /unciona e cdigo' ayud:ndote a organi6ar o de manera c ara' egib e y simp e # Car os B 3 Kurado = en su ibro !iseCo 4gi con 8!! ,$ nos de/ine a 8!! como&
U\###] a respuesta a as grandes preguntas& 1Cmo o hago5 1Por dnde empie6o5 1Cmo se @u3 es o @ue hay @ue imp ementar y o @ue no5 1Cmo escribir un cdigo @ue se pueda modiecar sin romper /unciona idad e>istente5 \###]V

SegHn Lent BecI -uno de os principa es /undadores de a metodo og)a XP-' imp ementar 8!! nos otorga grandes ventajas& ,# La ca idad de so/t0are aumenta disminuyendo pr:cticamente a cero' a cantidad de bugs en a ap icacinX +# Conseguimos cdigo a tamente reuti i6ab e puesto @ue os test nos ob igan a desarro ar a goritmos gen3ricosX "# E trabajo en e@uipo se hace m:s /:ci ' une a as personas' ya @ue a desarro ar con test' nos aseguramos no romper /unciona idades e>istentes de a ap icacinX
= Car os B 3 es un desarro ador de So/t0are y emprendedor espaCo ' con una gran trayectoria en a ingenier)a de sistemas :gi es# Qisitar su b og& 000#car osb e#com ,$ !iseCo 4gi con 8!!# .SBN =9;-,---7+-B-9,--# Creative Commons-N! =$

Scrum y eXtreme Programming para Programadores

Eugenia Bahit

-# Nos permite conear en nuestros compaCeros aun@ue tengan menos e>periencia# Esto es' debido a @ue e hecho de tener @ue desarro ar test antes de programar e a goritmo de/initivo' nos asegura -independientemente de grado de conocimiento y e>periencia de desarro ador- @ue e a goritmo e/ectivamente' har: o @ue se supone' debe hacer y sin /a osX 7# Escribir e ejemp o DtestF antes @ue e cdigo nos ob iga a escribir e m)nimo de /unciona idad necesaria' evitando sobrediseCar ' puesto @ue desarro ando o m)nimamente indespensab e' se obtiene un panorama m:s certero de o @ue a ap icacin hace y cu: y cmo es su comportamiento internoX B# Los tests son a mejor documentacin t3cnica @ue podemos consu tar a a hora de entender @u3 misin cump e cada pie6a de rompecabe6as ' ya @ue cada test' no es m:s @ue un Ucaso de usoV traducido en idioma in/orm:tico#

8est %nitarios
Los 8est %nitarios Do %nit 8estingF' representan e a ma de a programacin dirigida por pruebas# Son test @ue se encargan de veri/icar -de manera simp e y r:pida- e comportamiento de una parte m)nima de cdigo' de /orma independiente y sin a terar e /uncionamiento de otras partes de a ap icacin#

Caracter)sticas de os 8est %nitarios


%n 8est %nitario posee cuatro caracter)sticas particu ares @ue debe guardar para considerarse UunitarioV# Estas cua idades son&
=,

Scrum y eXtreme Programming para Programadores

Eugenia Bahit

,# Atmico& Prueba una parte m)nima de cdigo# !icho de manera simp e' cada test unitario debe probar una -y so o una- UaccinV rea i6ada por un m3todo# Por ejemp o' para un m3todo @ue retorna e neto de un monto bruto m:s e .QA correspondiente' deber: haber un test @ue veri/i@ue recibir en /orma correcta e importe bruto' otro @ue veri/i@ue e c: cu o de .QA sobre un importe bruto y /ina mente' un tercer test unitario @ue veri/i@ue e c: cu o de un importe bruto m:s su .QA correspondiente# +# .ndependiente& Cada 8est %nitario !EBE ser independiente de otro# Por ejemp o' siguiendo e caso anterior' e test @ue veri/i@ue a suma de un importe bruto m:s su .QA correspondiente' no debe depender de test @ue veri/ica e c: cu o de .QA# "# .nocuo& Podr)a decirse @ue cada test unitario debe ser ino/ensivo para e Sistema# %n test unitario !EBE poder correrse sin a terar ningHn e emento de sistema' es decir' @ue no debe' por ejemp o' agregar' editar o e iminar registros de una base de datos# -# (:pido& La ve ocidad de ejecucin de un test unitario cump e un pape /undamenta e ine udib e en e desarro o guiado por pruebas' ya @ue de a ve ocidad de ejecucin de un
=+

Scrum y eXtreme Programming para Programadores

Eugenia Bahit

test' depender: de manera proporciona ' a ve ocidad con a @ue una /unciona idad se desarro e#

Anatom)a
Los 8est %nitarios se rea i6an' en cua @uier enguaje de programacin' mediante herramientas -Grame0orIs- con un /ormato determinado' conocido como >%nit# !e a )' @ue os /rame0orIs para %nit 8esting @ue cump en con dicho /ormato' sue en tener nombres compuestos por una abreviatura de enguaje de programacin' seguida de t3rmino UunitV& Py%nit DPythonF' PAP%nit DPAPF' Sh%nit DShe ScriptingF' Cpp%nit DCffF' etc# E>ceptuando e caso de She Scripting' os /rame0orIs >%nit' uti i6an e paradigma de programacin orientada a objetos DEEPF tanto en su anatom)a de desarro o como para su imp ementacin Dcreacin de test unitariosF# Por o tanto' os 8est %nitarios se agrupan en c ases ' denominadas 8est Case ' @ue heredan de una c ase de /rame0orI >%nit' amada >8estCase&

im)ort unittest class *alance+ontable,est+ase(unittest.TestCase)$ - ./todos

%reaci&n de una clase Test %ase con PyUnit (#'thon)( a clase hereda de unittest.TestCase

="

Scrum y eXtreme Programming para Programadores

Eugenia Bahit

ini_set(&include_)at#&, &0$/usr/s#are/)#)$/usr/s#are/)ear&); class *alance+ontable,est e1tends PHPUnit_Framework_TestCase { - ./todos }

%reaci&n de una clase Test %ase con PHPUnit (#H#)( a clase hereda de PHPUnit_Framework_TestCase

Los m3todos contenidos en una c ase 8est Case' pueden o no' ser 8est %nitarios# Los 8est %nitarios contenidos en una c ase 8est Case' deben contener e pre/ijo test_ en e nombre de m3todo a /in de @ue e /rame0orI os identi/i@ue como ta es#
im)ort unittest class *alance+ontable,est+ase(unittest0,est+ase)$ def test_calcular_i2a(self)$ - 3l4oritmo

)efinici&n de un m*todo +test, con #'Unit en #'thon

ini_set(&include_)at#&, &0$/usr/s#are/)#)$/usr/s#are/)ear&); class *alance+ontable,est e1tends 5657nit_8rame9or:_,est+ase { pu !i" function test_calcular_i2a() { - 3l4oritmo } }

)efinici&n de un m*todo +test, con #H#Unit( -&tese que en #H#! los m*todos de una clase Test %ase )./.- ser m*todos pblicos(

Etra ventaja @ue os /rame0orIs >%nit nos proveen' es a /aci idad de poder crear dos m3todos especia es dentro de una c ase 8est Case -@ue no son test- ' os cua es est:n destinados a preparar e escenario necesario para correr os test de esa c ase y e iminar a@ue o @ue se desee iberar '
=-

Scrum y eXtreme Programming para Programadores

Eugenia Bahit

una ve6 @ue e test /ina ice# Estos m3todos' son denominados setUp#$ y tear%own#$ respectivamente&
im)ort unittest class *alance+ontable,est+ase(unittest0,est+ase)$ de& setUp#se!&$' self0im)orte_bruto = 1 self0alicuota_i2a = !1 de& tear%own#se!&$' self0im)orte_neto = self0alicuota_i2a = def test_calcular_i2a()$ - 3l4oritmo

os

os m*todos setUp() ' tear)o0n() en #'Unit

ini_set(&include_)at#&, &0$/usr/s#are/)#)$/usr/s#are/)ear&); class *alance+ontable,est e1tends 5657nit_8rame9or:_,est+ase { pu !i" &un"tion setUp#$ ( $t#is;<im)orte_bruto = 1 ; $t#is;<alicuota_i2a = !1; ) pu !i" &un"tion tear%own#$ ( $t#is;<im)orte_bruto = ; $t#is;<alicuota_i2a = ; ) )ublic function test_calcular_i2a() { - 3l4oritmo } }

os m*todos setUp() ' tear)o0n() en #H#Unit

Esta anatom)a dua -por un ado' a de Grame0orI y por otro' a de uti i6acin o imp ementacin de 3ste-' se ograr: /ina mente' dividiendo a cada 8est Case -imaginariamente- en tres partes' identi/icadas por as sig as A A A as cu: es representan a as tres UaccionesV @ue son necesarias evar a cabo' para dar /orma a os 8ests&
=7

Scrum y eXtreme Programming para Programadores

Eugenia Bahit

Arrange' Act and Assert


Dpreparar' actuar y a/irmarF
Preparar os test consiste en estab ecer -setear o con/igurartodo a@ue o @ue sea necesario para @ue cada uno de os m3todos UtestV pueda ejecutarse# Esto puede ser' a dec aracin de propiedades comunes a todos os test' a instancia a objetos' etc# Cuando estas Upreparaciones previasV sean comunes a todos os test' deber:n va erse de m3todo set%pDF para ser creadas# !e o contrario' se crear:n m3todos -a modo de he pers- dentro de a c ase 8est Case' a os cu: es cada uno de os test' recurra cuando os necesite# Qa e ac arar @ue estos Uhe persV NE podr:n contener e pre/ijo UtestV en su nombre#

Actuar' se re/iere a hacer a amada a cdigo de Sistema cubierto por 8est DS%8F @ue se desea probar# Esto se conoce como Ucobertura de cdigoV o Code Coverage&
class *alance+ontable,est e1tends 5657nit_8rame9or:_,est+ase { # Arrange (preparar) )ublic function set7)() { // importar la clase a ser testeada re=uire_once(&/contabilidad/models/balance_contable0)#)&); // setear propiedades comunes $t#is;<im)orte_bruto = 1 ; $t#is;<alicuota_i2a = !1; } )ublic function tear>o9n() { $t#is;<im)orte_bruto = ; $t#is;<alicuota_i2a = ; }

=B

Scrum y eXtreme Programming para Programadores

Eugenia Bahit

)ublic function test_calcular_i2a() { # Act (actuar) // Instanciar al objeto que ser probado $t#is;<co2era4e = ne9 *a!an"eConta !e(); // modificar las propiedades del objeto $t#is;<co2era4e;<importe_ ruto = $t#is;<im)orte_bruto; $t#is;<co2era4e;<a!i"uota_i+a = $t#is;<alicuota_i2a; // invocar al mtodo que se est testeando $result = $t#is;<co2era4e;<"a!"u!ar_i+a(); # Assert (afirmar) // sentencias } }

Gina mente' a/irmar e resu tado de un test ' se re/iere a invocar a os m3todos assert de Grame0orI >%nit ' @ue sean necesarios para a/irmar @ue e resu tado obtenido durante a actuacin' es e esperado Dm:s ade ante' veremos cu: es son estos m3todos assert de os cua es disponemosF&
class *alance+ontable,est e1tends 5657nit_8rame9or:_,est+ase { - 3rran4e ()re)arar) )ublic function set7)() { // im)ortar la clase a ser testeada re=uire_once(&/contabilidad/models/balance_contable0)#)&); // setear )ro)iedades comunes $t#is;<im)orte_bruto = 1 ; $t#is;<alicuota_i2a = !1;

)ublic function tear>o9n() { $t#is;<im)orte_bruto = ; $t#is;<alicuota_i2a = ; } )ublic function test_calcular_i2a() { - 3ct (actuar) // ?nstanciar al ob(eto =ue ser@ )robado $t#is;<co2era4e = ne9 *alance+ontable(); // modificar las )ro)iedades del ob(eto $t#is;<co2era4e;<im)orte_bruto = $t#is;<im)orte_bruto;

=9

Scrum y eXtreme Programming para Programadores

Eugenia Bahit

$t#is;<co2era4e;<alicuota_i2a = $t#is;<alicuota_i2a; // in2ocar al m/todo =ue se est@ testeando ,resu!t = $t#is;<co2era4e;<calcular_i2a(); # Assert (afirmar) $t#is;<assert-.ua!s(1!1, ,resu!t); } }

A goritmo para escribir pruebas unitarias


E>iste un a goritmo Do por @u3 no' Uuna /rmu aVF' para escribir 8est %nitarios bajo 8!!' e cua consiste en&

P(.<E( PASE& Escribir e 8est y hacer @ue /a e


Para e o' o primero @ue haremos ser: crear nuestra c ase 8est Case Dntese @ue ningHn otro cdigo ha sido escrito a momento' para esta ap icacinF# Nos baseremos en e mismo ejemp o @ue venimos siguiendo' donde o @ue se necesita es ca cu ar e .QA a un monto bruto dado#
AB)#) re=uire_once(&contabilidad/models/*alance+ontable0)#)&); class *alance+ontable,est e1tends 5657nit_8rame9or:_,est+ase { )ublic function test_calcular_i2a() { $t#is;<co2era4e = ne9 *alance+ontable(); $t#is;<co2era4e;<im)orte_bruto = 1" ; $t#is;<co2era4e;<alicuota_i2a = !1; $result = $t#is;<co2era4e;<calcular_i2a(); $t#is;<assertC=uals(%1", $result); } } B<

=;

Scrum y eXtreme Programming para Programadores

Eugenia Bahit

archivo: /MyApp/Tests/BalanceContableTest.php

Nuestro test' nos dici3ndonos @ue&

est:

guiando

desarro o'

,# !ebemos crear una c ase amada *alance+ontable @ue a guardaremos en e archivo *alance+ontable0)#) +# Esta c ase debe tener dos propiedades& im)orte_bruto y alicuota_i2a "# La c ase debe calcular_i2a() contener un m3todo amado

12u3 hace nuestro test5 Qeri/icar: @ue e m3todo calcular_i2a() retorne e va or %1"# Este va or' debe corresponder a +,Y Dalicuota_i2aF de ,7$$ Dim)orte_brutoF# Entonces' e siguiente paso' ser: crear a@ue o @ue nuestro 8est' nos gui a hacer&
AB)#) class *alance+ontable { )ublic $im)orte_bruto; )ublic $alicuota_i2a; )ublic function calcular_i2a() { } } B<

archivo: /MyApp/contabilidad/models/BalanceContable.php

Gina mente' correremos

nuestro
==

8est'

y 3ste' deber:

Scrum y eXtreme Programming para Programadores

Eugenia Bahit

/a ar&
eu4eniaDcococ#ito$E/borrador/.F3))$ p/punit Tests 5657nit %0G0" bF Hebastian *er4mann0 F ,ime$ seconds, .emorF$ G0 .b

,#ere 9as 1 failure$ 1) *alance+ontable,est$$test_calcular_i2a 8ailed assertin4 t#at 0nu!!1 matc#es e1)ected 0inte2er'31510 /#ome/eu4enia/borrador/.F3))/,ests/*alance+ontable,est0)#)$11 F345U6-78 ,ests$ 1, 3ssertions$ 1, 8ailures$ 10

.n la muestra de consola anterior! corrimos el Test creado mediante el comando phpunit al cual le pasamos como par1metro la carpeta Tests que contiene (' contendr1) todos nuestros test( Se resaltan en color naran2a! las e3plicaciones arro2adas por #H#Unit! donde nos dice que el m*todo test_calcular_iva del Test %ase BalanceContableTest ha fallado! en afirmar que !"" coincidi& con el "alor 456 esperado de tipo entero(

Con o anterior' nos aseguramos @ue e 8est /a e' cuando se espera @ue as) sea#

SEJ%N!E PASE& Escribir a m)nima cantidad de cdigo para @ue e test pase#
!e a misma /orma @ue nos aseguramos @ue e test /a ar: cuando deba hacer o' ahora debemos asegurarnos de @ue e test NE /a e cuando no o esperamos# Para e o' debemos evitar escribir -de buenas a primeras-' e a goritmo de nuestro m3todo# Por e contrario' debemos encontrar a e>presin m)nima @ue nos retorne e resu tado @ue esperamos# Es decir' @ue nos retorne e entero ",7# Entonces' editamos nuestra c ase *alance+ontable y agregamos a m)nima e>presin necesaria a m3todo calcular_i2a()&

,$$

Scrum y eXtreme Programming para Programadores

Eugenia Bahit

AB)#) class *alance+ontable { )ublic $im)orte_bruto; )ublic $alicuota_i2a; )ublic function calcular_i2a() { return 3159 } } B<

Qo vemos a correr e test para asegurarnos de @ue esta ve6' NE /a e&


eu4eniaDcococ#ito$E/borrador/.F3))$ p/punit Tests 5657nit %0G0" bF Hebastian *er4mann0 0 ,ime$ seconds, .emorF$ G0 .b

:; (1 test, 1 assertion)

8E(CE( PASE& Escribir un nuevo test y hacer @ue /a e


Aemos escrito a cantidad m)nima de cdigo para @ue nuestro primer test' pase# Lo hemos hecho /a ar' cuando aHn no e>ist)a a goritmo o instruccin en e m3todo probado# Es hora de crear un nuevo test @ue /a e' cuando ya e>iste una m)nima porcin de cdigo escrita Do modi/icar e e>iste' cambiando os par:metros de 3steF# Agregaremos entonces' un nuevo test y modi/icaremos e nombre de anterior' de manera ta @ue nuestro 8est Case se vea como sigue&
AB)#) re=uire_once(&contabilidad/models/*alance+ontable0)#)&); class *alance+ontable,est e1tends 5657nit_8rame9or:_,est+ase { )ublic function test_"a!"u!ar_i+a_"on_15<<_esperando_315#$ {

,$,

Scrum y eXtreme Programming para Programadores

Eugenia Bahit

$t#is;<co2era4e = ne9 *alance+ontable(); $t#is;<co2era4e;<im)orte_bruto = 1" ; $t#is;<co2era4e;<alicuota_i2a = !1; $result = $t#is;<co2era4e;<calcular_i2a(); ,t/is=1assert-.ua!s#315, ,resu!t$9 } )ublic function test_"a!"u!ar_i+a_"on_28<<_esperando_588#$ { $t#is;<co2era4e = ne9 *alance+ontable(); $t#is;<co2era4e;<im)orte_bruto = !I ; $t#is;<co2era4e;<alicuota_i2a = !1; $result = $t#is;<co2era4e;<calcular_i2a(); ,t/is=1assert-.ua!s#588, ,resu!t$9 }

} B<

Ahora nuestro segundo test' debe /a ar&


eu4eniaDcococ#ito$E/borrador/.F3))$ p/punit Tests 5657nit %0G0" bF Hebastian *er4mann0 08 ,ime$ seconds, .emorF$ G0 .b

,#ere 9as 1 failure$ 1) *alance+ontable,est$$test_calcular_i2a_con_!I _es)erando_"II 8ailed assertin4 t#at Ainte4er$%1"< matc#es e1)ected Ainte4er$"II<0 /#ome/eu4enia/borrador/.F3))/,ests/*alance+ontable,est0)#)$1J 83?K7LCHM ,ests$ !, 3ssertions$ !, 8ailures$ 10

C%A(8E PASE& Escribir e a goritmo necesario para hacer pasar e test


Es hora de programar o @ue nuestro m3todo' rea mente necesita y sin hardcodear e retorno de resu tados# <odi/icaremos nuestro m3todo calcular_i2a() de a c ase *alance+ontable a /in de escribir e a goritmo @ue e/ectivamente se encargue de ca cu ar e va or de retorno&
AB)#) class *alance+ontable {

,$+

Scrum y eXtreme Programming para Programadores

Eugenia Bahit

)ublic $im)orte_bruto; )ublic $alicuota_i2a; )ublic function calcular_i2a() { ,i+a > ,t/is=1a!i"uota_i+a ? 1<<9 ,neto > ,t/is=1importe_ ruto @ ,i+a9 return ,neto9 }

} B<

Nuestros test' ahora pasar:n&


eu4eniaDcococ#ito$E/borrador/.F3))$ p/punit Tests 5657nit %0G0" bF Hebastian *er4mann0 00 ,ime$ seconds, .emorF$ G0 .b

:; #2 tests, 2 assertions$

Es v: ido hacer notar' @ue a medida @ue se van escribiendo os test' 3stos' no so o guiar:n nuestro desarro o en cuanto a U o nuevo @ue se debe escribirV' sino @ue adem:s' nos ir:n ob igando a re/actori6ar e cdigo constantemente ' en principio' mostr:ndonos e camino para e iminar redundancias y crear un diseCo m:s simp e &

AB)#) re=uire_once(&contabilidad/models/*alance+ontable0)#)&); class *alance+ontable,est e1tends 5657nit_8rame9or:_,est+ase { )ublic function test_"a!"u!ar_i+a_"on_15<<_esperando_315#$ { ,t/is=1"o+era2e > new *a!an"eConta !e#$9 $t#is;<co2era4e;<im)orte_bruto = 1" ; ,t/is=1"o+era2e=1a!i"uota_i+a > 219 $result = $t#is;<co2era4e;<calcular_i2a(); ,t/is=1assert-.ua!s#315, ,resu!t$9 } )ublic function test_"a!"u!ar_i+a_"on_28<<_esperando_588#$ {

,$"

Scrum y eXtreme Programming para Programadores

Eugenia Bahit

,t/is=1"o+era2e > new *a!an"eConta !e#$9 $t#is;<co2era4e;<im)orte_bruto = !I ; ,t/is=1"o+era2e=1a!i"uota_i+a > 219 $result = $t#is;<co2era4e;<calcular_i2a(); ,t/is=1assert-.ua!s#588, ,resu!t$9 } B< }

La redundancia anterior' nos est: diciendo @ue e>isten e ementos de preparacin DarrangeF comunes para nuestra 8est Case&
AB)#) re=uire_once(&contabilidad/models/*alance+ontable0)#)&); class *alance+ontable,est e1tends 5657nit_8rame9or:_,est+ase { pu !i" &un"tion setUp#$ ( ,t/is=1"o+era2e > new *a!an"eConta !e#$9 ,t/is=1"o+era2e=1a!i"uota_i+a > 219 ) )ublic function test_calcular_i2a_con_1" _es)erando_%1"() { $t#is;<co2era4e;<im)orte_bruto = 1" ; $result = $t#is;<co2era4e;<calcular_i2a(); $t#is;<assertC=uals(%1", $result); } )ublic function test_calcular_i2a_con_!I _es)erando_"II() { $t#is;<co2era4e;<im)orte_bruto = !I ; $result = $t#is;<co2era4e;<calcular_i2a(); $t#is;<assertC=uals("II, $result); }

} B<

RECUERDA: cada cambio que se haga al c6digo tanto del test como del S.1 (c6digo de la aplicaci6n cubierta por test), requiere que se #uel#a a correr el test.

,$-

Scrum y eXtreme Programming para Programadores

Eugenia Bahit

%nit 8esting con PAP%nit


E>isten varios /rame0orIs >%nit para %nit 8esting en PAP' pero sin dudas' e Hnico @ue ha demostrado contar con una gran cobertura de cdigo' estabi idad y buena documentacin' es PAP%nit# E manua o/icia de PAP%nit Den ing 3sF encontrarse en& http&WW000#phpunit#deWmanua W"#BWenW# Se puede insta ar PAP%nit en sistemas JN%WLinu>' ejecutando os siguientes comandos&
sudo )ear u)4rade 5C3L )ear confi4;set auto_disco2er 1 )ear install )ear0)#)unit0de/5657nit

puede

operativos

Aun@ue en distribuciones basadas en !ebian ' puede hacerse directamente mediante a insta acin de pa@uete )#)unit con a)t;4et&
sudo a)t;4et install )#)unit

<3todos Assert de PAP%nit


PAP%nit provee una gran cantidad de m3todos assert cuyas re/erencias' podemos encontrar en e Cap)tu o - de manua o/icia & http&WW000#phpunit#deWmanua W"#BWenW0riting-tests-/orphpunit#htm

,$7

Scrum y eXtreme Programming para Programadores

Eugenia Bahit

A gunas caracter)sticas comunes de os m3todos assert' son& Jenera mente' por cada m3todo assert e>iste su opuesto& assert+ontains() y assertAot+ontains()# A a ve6' cada m3todo assert deber: recibir m)nimamente un par:metro @ue ser: e resu tado de ejecutar e cdigo de S%8# Adiciona mente' a cada m3todo assert' se e puede pasar como par:metro opciona ' un mensaje persona i6ado para ser arrojado en caso de error Dgenera mente' ser: e H timo par:metroF# Los m3todos assert @ue re@uieren e paso de dos par:metros ob igatorios Dva ores @ue deben compararse entre s)F' genera mente guardan e siguiente orden& metodo3ssert($2alor_es)erado, $2alor_recibido) Es decir' @ue en esos casos' siempre e primer par:metro ser: e va or esperado y e segundo par:metro' e va or recibido por a ejecucin de cdigo S%8# Qeamos a gunos ejemp os puntua es&
AB)#) re=uire_once(&contabilidad/models/*alance+ontable0)#)&); class *alance+ontable,est e1tends 5657nit_8rame9or:_,est+ase { )ublic function set7)() { $t#is;<co2era4e = ne9 *alance+ontable(); $t#is;<co2era4e;<alicuota_i2a = !1; } // 3ssert-.ua!s($2alor_es)erado, $2alor_recibido) )ublic function test_calcular_i2a() { $t#is;<co2era4e;<im)orte_bruto = 1" ; $result = $t#is;<co2era4e;<calcular_i2a(); $t#is;<assertC=uals(%1", $result); }

,$B

Scrum y eXtreme Programming para Programadores

Eugenia Bahit

// 3ssertTrue($2alor_recibido) )ublic function test_alcanNado_)or_im)uesto_de_im)ortacion_con_1O () { $t#is;<co2era4e;<im)orte_bruto = 1O ; $result = $t#is;<co2era4e;<alcanNado_)or_im)uesto_de_im)ortacion(); $t#is;<assert,rue($result); } // 3ssertAu!!($2alor_recibido) )ublic function test_alcanNado_)or_im)uesto_de_im)ortacion_con_1G%() { $t#is;<co2era4e;<im)orte_bruto = 1G%; $result = $t#is;<co2era4e;<alcanNado_)or_im)uesto_de_im)ortacion(); $t#is;<assertPull($result); } } B<

%&digo fuente de la clase Test %ase

AB)#) class *alance+ontable { )ublic $im)orte_bruto; )ublic $alicuota_i2a; - +alcular ?Q3 sobre un im)orte bruto )ublic function calcular_i2a() { $i2a = $t#is;<alicuota_i2a / 1 ; $neto = $t#is;<im)orte_bruto R $i2a; return $neto; } - >eterminar si un im)orte )a4a im)uesto de im)ortacin )ublic function alcanNado_)or_im)uesto_de_im)ortacion() { // im)ortes maFores a 1" 7H> )a4an im)uesto if($t#is;<im)orte_bruto < 1" ) { return ,rue; } } } B<

%&digo fuente del SUT

,$9

Scrum y eXtreme Programming para Programadores

Eugenia Bahit

Ejercicio
Escribir e cdigo S%8 de siguiente 8est Case&
AB)#) re=uire_once(&7suario0)#)&); class 7suario,est e1tends 5657nit_8rame9or:_,est+ase { )ublic function set7)() { $t#is;<co2era4e = ne9 7suario(); $t#is;<co2era4e;<username = S(uan)ereNT"S; $t#is;<co2era4e;<)ass9ord = md"(S)ablito$ cla2o_1_)alitoS); } )ublic function test_set_usuario_es)erando_:eF() { $result = $t#is;<co2era4e;<set_usuario(); $t#is;<assert3rraF6asUeF(&7suario&, $result); } )ublic function test_set_usuario_es)erando_(uan)ereNT"() { $result = $t#is;<co2era4e;<set_usuario(); $t#is;<assertC=uals(&(uan)ereNT"&, $result[&7suario&]); } )ublic function test_set_usuario_es)erando_)ass() { $result = $t#is;<co2era4e;<set_usuario(); $t#is;<assertC=uals(md"(&)ablito$ cla2o_1_)alito&), $result[&+la2e&]); } } B<

,$;

Scrum y eXtreme Programming para Programadores

Eugenia Bahit

%nit 8esting con Py%nit


Py%nit es e /rame0orI >%nit e egido E/ici amente por Python desde su versin ,#7#+# Si bien e>isten muchos otros' genera mente est:n destinados a amp iar os bene/icios de Py%nit para a rea i6acin de test m:s comp ejos' como e caso de Py!oub es -creado por Car os B 3-# 8oda a re/erencia sobre Py%nit -a di/erencia de PAP- se encuentra en e manua o/icia de Python Den ing 3sF & http&WWdocs#python#orgW ibraryWunittest#htm Py%nit no necesita ser insta ado' ya @ue desde a versin +#,' /orma parte de a ibrer)a est:ndar de Python' a trav3s de mdu o unittest#

<3todos Assert de Py%nit


%na ista comp eta de os m3todos assert de Py%nit puede encontrarse en a documentacin sobre unittest de Python en a siguiente %(L& http&WWdocs#python#orgW ibraryWunittest#htm ?assert-methods %na di/erencia particu ar @ue e>iste entre Py%nit y /rame0orIs como PAP%nit' es @ue nos permite e/ectuar a/irmaciones' con una sinta>is bastante simp e' sin necesidad de recurrir a m3todos assert espec)/icos&
assert resultado == valor_esperado

,$=

Scrum y eXtreme Programming para Programadores

Eugenia Bahit

En un ejemp o m:s concreto' podr)amos ver o as) Ddonde co2era4e ser: a instancia a objeto de S%8F&
assert self0co2era4e0sumar_dos_numeros(", 1") == !

Etra di/erencia /undamenta con PAP%nit ' es @ue e m3todo assert.gua dad' posee su nombre en singu ar&
5657nit$ assertC=uals($a, $b); 5F7nit$ asser-.ua!(a, b)

A gunas caracter)sticas comunes de os m3todos assert' son& A igua @ue con PAP%nit' genera mente' por cada m3todo assert e>iste su opuesto& assertC=ual() y assertAotC=ual()# 8ambi3n siguiendo nuevamente a )nea de PAP%nit' cada m3todo assert deber: recibir m)nimamente un par:metro @ue ser: e resu tado de ejecutar e cdigo de S%8 y opciona mente' como H timo par:metro' puede recibir un mensaje persona i6ado para ser arrojado en caso de error# A di/erencia de PAP%nit' os m3todos assert @ue re@uieren e paso de dos par:metros ob igatorios Dva ores @ue deben compararse entre s)F' genera mente guardan e siguiente orden& metodo3ssert(2alor_recibido, 2alor_es)erado) Es decir' @ue en esos casos' siempre e primer par:metro ser: e va or recibido por a ejecucin de cdigo S%8 y e segundo par:metro' e va or esperado#

,,$

Scrum y eXtreme Programming para Programadores

Eugenia Bahit

Qeamos e ejemp o rea i6ado anteriormente en PAP' pero esta ve6' en Python con Py%nit&
- ;R; codin4$ utf;I R;R im)ort sFs im)ort unittest sFs0)at#0a))end(&/)at#/a/la/a))&) from mFa))0modules0balance_contable im)ort *alance+ontable class *alance+ontable,est+ase(unittest0,est+ase)$ - set7)() def set7)(self)$ self0co2era4e = *alance+ontable() self0co2era4e0alicuota_i2a = !1 - assert-.ua!(2alor_recibido, 2alor_es)erado) def test_calcular_i2a(self)$ self0co2era4e0im)orte_bruto = !" result = self0co2era4e0calcular_i2a() self0assertC=ual(result, "!") - 3ssertTrue(2alor_recibido) def test_alcanNado_)or_im)uesto_de_im)ortacion_con_1O (self)$ self0co2era4e0im)orte_bruto = 1O result = self0co2era4e0alcanNado_)or_im)uesto_de_im)ortacion() self0assert,rue(result) - 3ssert4sAone(2alor_recibido) def test_alcanNado_)or_im)uesto_de_im)ortacion_con_1G%(self)$ self0co2era4e0im)orte_bruto = 1G% result = self0co2era4e0alcanNado_)or_im)uesto_de_im)ortacion() self0assert?sPone(result) - Pecesario )ara correr los test si es llamado )or lVnea de comandos if __name__ == S__main__S$ unittest0main()

%&digo fuente de la clase Test %ase

Ntese @ue e m3todo assertC=uals de PAP%nit' se denomina assertC=ual Den singu arF en Py%nit y @ue en reemp a6o de m3todo assertPull' Py%nit propone assert?sPone Desto es debido a @ue Python no retorna va ores nu os como ta es' sino como UNoneVF#

,,,

Scrum y eXtreme Programming para Programadores

Eugenia Bahit

- ;R; codin4$ utf;I R;R class *alance+ontable(ob(ect)$ def __init__(self)$ self0im)orte_bruto = self0alicuota_i2a = - +alcular ?Q3 sobre un im)orte bruto def calcular_i2a(self)$ i2a = self0im)orte_bruto R self0alicuota_i2a / 1 return i2a - >eterminar si un im)orte )a4a im)uesto de im)ortacin def alcanNado_)or_im)uesto_de_im)ortacion(self)$ - im)ortes maFores a 1" 7H> )a4an im)uesto if self0im)orte_bruto < 1" $ return ,rue

%&digo fuente del SUT

Corriendo test por )nea de comandos


!esde a versin +#9 de Python' ya no es necesario rea i6ar UmaniobrasV o crear 8est Suites' con e Hnico /in de correr todos os 8est de nuestra ap icacin' de un so o paso# !esde Python +#9 todos os test de una ap icacin' pueden correrse mediante e comando disco2er&
eu2eniaB"o"o"/ito'C?proDe"tos, pDt/on =m unittest dis"o+er

dis"o+er' Udescubrir:V todos os test' identi/ic:ndo os por e nombre de archivo& debe comen6ar por e pre/ijo U testV Ddiscover uti i6a a e>presin regu ar test@.pD para identi/icar 8est CasesF# Adem:s' debe tenerse en cuenta @ue e nombre de os m3todos de prueba' tambi3n deben comen6ar por e pre/ijo
,,+

Scrum y eXtreme Programming para Programadores

Eugenia Bahit

test# Ntese @ue tambi3n es posib e correr una Hnica 8est Case&
eu2eniaB"o"o"/ito'C?proDe"tos, pDt/on mDapp?Test?test_ a!an"e_"onta !e.pD

E un test en particu ar&


eu2eniaB"o"o"/ito'C?proDe"tos, pDt/on mDapp?Test?test_ a!an"e_"onta !e.p *a!an"eConta !eTestCase.test_"a!"u!ar_i+a

8ambi3n es posib e' pasar e par:metro =+ a /in de obtener un reporte m:s deta ado&
eu2eniaB"o"o"/ito'C?proDe"tos, pDt/on =m unittest dis"o+er =+
test_alcanNado_)or_im)uesto_de_im)ortacion_con_1G% (,est0test_balance_contable0*alance+ontable,est+ase) 000 o: test_alcanNado_)or_im)uesto_de_im)ortacion_con_1O (,est0test_balance_contable0*alance+ontable,est+ase) 000 o: test_calcular_i2a (,est0test_balance_contable0*alance+ontable,est+ase) 000 o: ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Lan % tests in 0 1s WU

,,"

Scrum y eXtreme Programming para Programadores

Eugenia Bahit

.ntegracin continua
La integracin continua es una t3cnica @ue se encuentra estrechamente re acionada con a de 8!! y veremos cmo egamos a esta conc usin# Para entender de @u3 se hab a e>actamente' cuando nos re/erimos a integracin continua' deber)amos centrarnos primero en e objetivo de 3sta De Upara @u3VF y uego' tratar de obtener e UcmoV ograr o# E objetivo de a integracin continua' consiste en integrar as nuevas /unciona idades desarro adas a as e>istentes' asegurando @ue o nuevo' no arruine o viejo# La respuesta a 1cmo ograr cump ir con este objetivo5 Es a @ue nos de/inir: de /orma e>acta' de @u3 se trata esta t3cnica# Qeamos cu: es son os pasos a seguir para ograr e objetivo# La t3cnica de integracin cont)nua' se ogra cuando diariamente' os miembros de e@uipo se comprometen a& ,# Escribir 8est %nitarios +# Correr os 8est %nitarios asegurando @ue todos pasen "# Jenerar os 8est de .ntegracin Des decir' a@ue os con/ormados por un conjunto de 8est %nitarios' 8est Gunciona es' 8est de Aceptacin y 8est de SistemaF -# Correr pasen os 8est de .ntegracin asegurando @ue todos

7# %ni/icar todos os desarro os @ue hayan pasado os test' en un repositorio oca


,,-

Scrum y eXtreme Programming para Programadores

Eugenia Bahit

B# L evar un contro histrico de cambios en e repositorio Estos seis pasos' son os @ue /ina mente' nos especi/ican @u3 es e>actamente a integracin continua y veremos a@u) en deta e' cmo ograr cada uno de estos pasos#

Jeneracin de 8est de .ntegracin


Los pasos , y +' os hemos visto en cap)tu os anteriores# Nos resta ahora' continuar con e paso "# E paso "' est: compuesto por cuatro tipo de test& ,# 8est %nitarios D@ue ya hemos vistoF +# 8est de Aceptacin& son 8est %nitarios @ue prueban os criterios de aceptacin de/inidos por e !ueCo de Producto Dc ienteF "# 8est Gunciona es& son test @ue prueban e conjunto de criterios eva uados mediante os 8est %nitarios' os cua es inetgran a /unciona idad comp eta Des decir' una Aistoria de %suarioF -# 8est de Sistema& a@ue os @ue prueban os casos de uso' y est:n m:s re acionados con a e>periencia de usuario @ue con cuestiones /unciona es o de programacin#

8est de Aceptacin
Los 8est de Aceptacin' no dejan de ser 8est %nitarios' @ue
,,7

Scrum y eXtreme Programming para Programadores

Eugenia Bahit

corren bajo a responsabi idad de programador# Estos test' simp emente se encargan de veri/icar @ue un criterio de aceptacin especi/icado por e c iente se cump e' o @ue con eva a pensar @ue Usi un test de aceptacin pasa' entonces ese criterio de aceptacin es aceptado por e c ienteV# Los 8est de Aceptacin son especi/icados por e c iente' generando un grado de deta e mayor' a cada criterio de aceptacin# Qeamos e siguiente ejemp o& %na Aistoria de %suario t)pica& Como usuario de sistema puedo ca cu ar e costo /ina de mi pedido con os gastos de env)o inc uidos ' posee os siguientes criterios de aceptacin&
5edidos inferiores a 7H> ! tienen un costo de en2Vo de 7H> T" , tienen un costo de en2Vo de 7H> un costo de en2Vo 5edidos entre 7H> !1 F 7H> 1 "

5edidos su)eriores a 7H> 1 , tienen e=ui2alente al 1"X del im)orte del )edido

Sobre esa base' e c iente de/inir: Den su idiomaF' os 8est de Aceptacin D os cua es ser:n criterios de aceptacin m:s deta ados' basados en casos de uso reducidos a resu tados -es decir' no inc uyen aspectos de sistema' como mode os gr:/icos' etc#-F&
5edidos inferiores a 7H> ! ,est de 3ce)tacin$ 5edido de 7H> 1 retorna 7H> TO 5edido de 7H> 1" retorna 7H> J tienen un costo de en2Vo de 7H> T"

,,B

Scrum y eXtreme Programming para Programadores

Eugenia Bahit

5edidos su)eriores a 7H> 1 , tienen e=ui2alente al 1"X del im)orte del )edido ,est de 3ce)tacin$

un

costo

de

en2Vo

5edido de 7H> 1!" retorna 7H> 1G%0T" 5edido de 7H> % retorna 7H> %G"

E Programador' deber: desarro ar estos test' de a misma /orma @ue o ha hecho con os 8est %nitarios' pero 1cu: es a di/erencia5 Simp emente' deber: a/irmar e resu tado de cada test' con os va ores sugeridos por e c iente# Pero para di/erenciar os 8est de Aceptacin de os %nitarios' se debe especi/icar en e nombre de os m3todos de prueba&
class +alculadora>e+ostos,est+ase(unittest0,est+ase)$ - set7)() def set7)(self)$ self0co2era4e = +alculadora>e+ostos() def test_calcular_)recio_final_"on_1_esperando_EF(self)$ self0co2era4e0im)orte_base = 1 result = self0co2era4e0calcular_)recio_final() self0assertC=ual(result, TO) def test_calcular_)recio_final_"on_3<<_esperando_345(self)$ self0co2era4e0im)orte_base = % result = self0co2era4e0calcular_)recio_final() self0assertC=ual(result, %G")

Etra /orma menos suti Dy m:s di/)ci de imp ementar cuando e criterio de aceptacin es demasiado argoF' es a siguiente&
def test_calcular_)recio_final_"riterio_3<<_a"epta"ion_345(self)$ self0co2era4e0im)orte_base = % result = self0co2era4e0calcular_)recio_final() self0assertC=ual(result, %G")

Pero gicamente' e nombre de os test' va en gustos#

,,9

Scrum y eXtreme Programming para Programadores

Eugenia Bahit

8est Gunciona es
A .gua @ue os 8est de Aceptacin' os 8est Gunciona es tambi3n corren por cuenta de programador# Los 8est Gunciones no dejan de ser 8est %nitarios y se asemejan a os 8est de Aceptacin' en e sentido de @ue os 8est de Aceptacin' indirectamente' tambi3n prueban a /unciona idad comp eta ya @ue os criterios de aceptacin' corresponden a una Aistoria de %suario#

$istoria de completa

.suario

<uncionalidad

Es decir' siguiendo con e ejemp o anterior' e m3todo calcular_)recio_final de S%8' seguramente estar: recurriendo a otros m3todos -inc uso' a m3todos de otras c ases-' ya @ue calcular_)recio_final ES a Aistoria !e %suario# Ergo' os 8est %nitarios' se encargar:n de probar m3todos m:s espec)/icos y puntua es&
def test_obtener_diccionario_costos_de_en2io(self)$ dummF = {T"$ [ , ! ], " $ [!1, 1 ], 1 1$ 1"} result = self0co2era4e0obtener_diccionario_costos_de_en2io() self0assert>ictC=ual(dummF, result)

<ientras @ue os 8est de Aceptacin' como hemos visto' probar:n e m3todo /ina ' @ue eng obe a todos os dem:s# Entonces' e 8est Gunciona ' har: o mismo' con una di/erencia /undamenta & es e objetivo e @ue o di/erencia# E 8est de Aceptacin' estar: basado en Ucriterios de negocioV' mientras @ue e 8est Gunciona -si bien puede ser e>actamente id3ntico a uno de Aceptacin-' se basar: en criterios de programacin' @ue muchas veces' no pueden ser contemp ados por e c iente y por o genera ' tienen a probar a@ue o @ue
,,;

Scrum y eXtreme Programming para Programadores

Eugenia Bahit

podr)a suceder si se provocase' por ejemp o' un /a o en e sistema# Es decir' a c iente se e puede ocurrir un test de aceptacin @ue diga pedido de %S! , retorna %S! 9B' pero muy di/)ci mente' se e pueda ocurrir U$ retorna un errorV o m:s di/)ci aHn' e surja a idea de probar si e objeto Ca cu adora!eEnvio se est: conectando de /orma correcta con e objeto Pedido#

8est de Sistema
A di/erencia de os anteriores' os 8est de Sistema' sue en correr por cuenta de 8esters' o personas @ue no necesariamente necesitan conta con conocimientos de programacin# Como este curso est: dirigido e>c usivamente a programadores' no nos e>p ayeremos en este tema# No obstante' comentar3 muy brevemente' en @u3 consisten# Los 8est de Sistema' a pesar @ue e nombre con/unde much)simo -yo pre/erir)a amar os 8est de %suario- tiene por objetivo probar a respuesta de So/t0are /rente a usuario# Estos test' son os Hnicos @ue deben rea i6arse !ESP%gS de haber desarro ado a Aistoria de %suario# En muchos casos' se rea i6an Uuti i6ando e So/t0are manua menteV y en otros' se generan os test con herramientas de automati6acin -como e caso de Se enium' para ap icaciones Meb based-' @ue permiten uti i6ar e so/t0are manua mente por Hnica ve6' e ir capturando os resu tados en tiempo rea ' para /ina mente' generar a automati6acin de o @ue se rea i6 manua mente# T en eso consisten& en usar e So/t0are -como usuarios /ina es- y ver si e So/t0are responde
,,=

Scrum y eXtreme Programming para Programadores

Eugenia Bahit

de a manera @ue se espera#

%ni/icacin de cdigo en (epositorios


%n (epositorio es un espacio destinado a a macenar in/ormacin digita # En nuestro caso' o @ue se a macenar: en ese repositorio' ser:n os archivos -cdigo /uente' tarba s' binarios' etc- de nuestra ap icacin# Sus principa es caracter)sticas son& Espacio de a macenamiento centra i6ado de' principa mente' e cdigo /uente de a ap icacin as) como scripts de construccin -en e caso de ap icaciones @ue re@uieran ser compi adas o simp emente' necesiten rea i6ar con/iguraciones especia es' ya sea tanto para continuar desarro :ndo as como para ejecutar as-# Para ser e/ectivos' deben evar un contro histrico de cambios @ue se vayan e/ectuando en os archivos -pre/erentemente autom:tico-' permitir e estab ecimiento de tags -eti@uetas- @ue ayuden a identi/icar di/erentes re eases -versiones-#

T todas esta caracter)stica' son a@ue as @ue nos brindan os programas de contro de versiones,,#

,, http&WWes#0iIipedia#orgW0iIiWProgramas[para[contro [de[versiones ,+$

Scrum y eXtreme Programming para Programadores

Eugenia Bahit

Sobre os Sistemas de Contro de Qersiones


Los Sistemas de Contro de Qersiones DSCQF pueden agruparse en dos tipos& Centra i6ados& un Hnico repositorio centra i6ado administrado por un so o responsab e# !istribuidos DrecomendadosF& donde e>iste un repositorio centra @ue cada usuario podr: c onar para obtener su propio repositorio - oca - e interactuar con con otros repositorios oca es# Entre os SCQ distribuidos podemos destacar e>ce entes a ternativas JPL DSo/t0are LibreF' como es e caso de -entre otros-' Jit Dde Linus 8orva ds' creador de Lerne Linu> en e @ue se basa e Sistema Eperativo JN%WLinu>F' <ercuria Ddesarro ado en Python y CF o e magn)/ico Ba6aar' nacido a partir de JN%Arch y desarro ado )ntegramente en Python por <artin Poo ' con e patrocinio de Canonica y e egido en este curso#

.na gran entaja de los !C" es que #ermiten a arios #rogramadores tra$ajar simultneamente so$re los mismos arc%i os, impidiendo que el trabajo de uno, pise al trabajo de otro.

Los SCQ pueden uti i6arse tanto a trav3s de )nea de comandos'


,+,

Scrum y eXtreme Programming para Programadores

Eugenia Bahit

como de ap icaciones gr:/icas# En este curso' nos centraremos en e uso por medio de )nea de comandos# Los SCQ' en su mayor)a -y a rasgos genera es- cuentan con un conjunto de /unciona idades' as cua es' para cada una' e>iste un determinado comando Dgenera mente' simi ar en a mayor)a de os SCQF#

.ntegracin continua con Ba6aar


Ba6aar' cuenta con una estructura @ue puede dividirse en& ,# (epositorio& conjunto de revisiones +# 4rbo de trabajo& un directorio @ue contiene correspondientes ramas "# (amas& un conjunto ordenado de as di/erentes revisiones con sus archivos correspondientes -# (evisiones& es una vista espont:nea de estado de cada uno de os archivos' en un momento determinado as revisiones con sus

,++

Scrum y eXtreme Programming para Programadores

Eugenia Bahit

RE%ISI&N '(' (Revision)

RE%ISI&N '() (Revision)

RAMA ' (Branch)

RE%ISI&N )(' (Revision)

RE%ISI&N )() (Revision)

RAMA ) (Branch)

*R+O, DE TRA+A-O (Work tree)

REPOSITORIO (Repositor )

,+"

Scrum y eXtreme Programming para Programadores

Eugenia Bahit

%n repositorio' entonces' contiene un :rbo de trabajo' @uien a a ve6' puede estar integrado por varias ramas' as cua es a macenar:n as distintas versiones DrevisionesF por as @ue ha ido transitando e So/t0are#

.nsta acin de Ba6aar


Ntese @ue Ba6aar deber: insta arse en cada una de as m:@uinas donde se desee usar# Esto es' en os ordenadores @ue contar:n con repositorios oca es y en e ordenador destinado a actuar como repositorio centra # Para insta ar Ba6aar' por http&WW0iIi#ba6aar#canonica #comW!o0n oad instrucciones necesarias# /avor' visita para obtener as

Ba6aar por )nea de comandos


<:s ade ante veremos todo o @ue puede hacerse con Ba6aar# A@u)' nos imitaremos a conocer a sinta>is b:sica#
Gr [;#Y;2Y;=] "omando=interno=de= aGaar [ar4umentos]

Las opciones g oba es Dopciona esF =/, =+ D =.' signi/ican ayuda Dsobre e comando internoF' modo verboso Ddesp iega mayor in/ormacin sobre o @ue sucede mientras se ejecuta e comando en cuestinF y si enciar Dso o desp egar: errores y advertenciasF' respectivamente# Qeremos os comandos internos de ba6aar' en e siguiente t)tu o# No obstante' citar3 a gunos comandos Hti es a a propia ap icacin' @ue pueden servirnos para entender mejor de @ue se trata&

,+-

Scrum y eXtreme Programming para Programadores

Eugenia Bahit

bNr #el) commands

!esp iega una ista comp eta de os comandos internos y su descripcin#

bNr 2ersion

!esp iega in/ormacin sobre a versin de Ba6aar#

bNr #el) comando#interno

!esp iega in/ormacin de ayuda sobre e comando indicado#

Presentarse ante Ba6aar


Cada ve6 @ue enviemos cambios a repositorio' Ba6aar tendr: @ue identi/icarnos a /in de poder o/recer a in/ormacin correcta sobre @uien ha e/ectuado a guna revisin# Para e o' e primer paso' es presentarnos&
Gr w/oami SZuan 5ereN A(uan)ereNDdominio0e1t<S

.niciar un nuevo proyecto


E siguiente paso' ser: crear un nuevo proyecto# Para e o' haremos o siguiente& Primero inicia i6amos e repositorio centra en e ordenador destinado a ta /in&
__eu4enia_1JTI_es3L__DmFdream$/sr2/re)os$ H#ared re)ositorF 9it# trees (format$ !a) Kocation$ s#ared re)ositorF$ a));curso;1) Gr init=repo app="urso=Hp

,+7

Scrum y eXtreme Programming para Programadores

Eugenia Bahit

Luego' a ) mismo' creamos nuestro branch Da @ue amaremos trunIF&


__eu4enia_1JTI_es3L__DmFdream$/sr2/re)os$ Gr init app="urso=Hp?trunk +reated a re)ositorF tree (format$ !a) 7sin4 s#ared re)ositorF$ /sr2/re)os/a));curso;1)/

C onar e repositorio centra & crear os repositorios oca es


Es hora de @ue cada miembro de e@uipo' se traiga e branch desde e repositorio centra # Esta actividad deber: rea i6arse en cada una de as m:@uinas de cada uno de os miembros de e@uipo Dpreviamente' deber:n presentarse ante Ba6aar mediante b6r 0hoamiF# Para c onar e repositorio' cada uno de e@uipo' har: os siguiente&
eu4eniaDcococ#ito$E/e1am)le$ Gr ran"/ bNr+ss#$//userD1010101/sr2/re)os/a));curso;1)/trun:
userD1010101&s )ass9ord$ *ranc#ed re2ision(s)0

os miembros de

Ntese @ue a ruta hacia e branch debe /ormarse por&


protocolo$//usuarioDhost/ruta/al/branch/central

=6tese que en el caso del #rotocolo !!&, debe anteponerse el prefijo bzr+

Si istamos e directorio donde c onamos e repo' podremos ver @ue ya tenemos nuestro branch oca &

,+B

Scrum y eXtreme Programming para Programadores

Eugenia Bahit

eu4eniaDcococ#ito$E/e1am)le$ !s =!/a total 1!U dr91r;1r;1 % eu4enia eu4enia G, U ! 1!; G;!1 1J$"J 0 dr91r;1r;1 O" eu4enia eu4enia G, U ! 1!; G;!1 ! $ G 00 dr91r;1r;1 % eu4enia eu4enia G, U ! 1!; G;!1 1J$"J trun:

Podremos comprobar tambi3n' @ue e/ectivamente estamos UconectandoV nuestro repo oca con e centra &
eu4eniaDcococ#ito$E/e1am)le$ "d trunk? eu4eniaDcococ#ito$E/e1am)le/trun:$ Gr in&o Htandalone tree (format$ !a) Kocation$ branc# root$ 0 Lelated branc#es$ )arent branc#$ bNr+ss#$//__eu4enia_1JTI_es3L__DOO0!!I0"!0J%/sr2/re)os/a)); curso;1)/trun:/

Nociones b:sicas para integrar cdigo de /orma continua


Crearemos ahora nuestro primer archivo Dde pruebaF&
eu4eniaDcococ#ito$E/e1am)le/trun:$ e"/o IHo!a JundoI 1 prue a.tHt

T veri/icaremos cua es e estado actua de nuestro repo&


eu4eniaDcococ#ito$E/e1am)le/trun:$ un:no9n$ )rueba0t1t Gr st

puede utilizarse tambien! bNr status

Nos indica @ue hay un archivo desconocido# bEs e archivo @ue acabamos de crearc No te preocupes# E siguiente paso tras crear nuevos archivos yWo directorios' es avisar e a Ba6aar' para o cua ' hay @ue agregar e archivo o directorio&
eu4eniaDcococ#ito$E/e1am)le/trun:$ addin4 )rueba0t1t Gr add prue a.tHt

,+9

Scrum y eXtreme Programming para Programadores

Eugenia Bahit

Qo vemos a comprobar e estado&


eu4eniaDcococ#ito$E/e1am)le/trun:$ added$ )rueba0t1t Gr st

Ba6aar no est: in/ormando @ue se ha rea i6ado un cambio en e repositorio# T todo cambio' debe ser in/ormado Ba6aar con un mensaje @ue o describa&
eu4eniaDcococ#ito$E/e1am)le/trun:$ Gr "i =m I32re2ado ar"/i+o de prue aI +ommittin4 to$ /#ome/eu4enia/e1am)le/trun:/ added )rueba0t1t +ommitted re2ision 10

bTa tenemos a primera revisinccc Pero e commit' /ue rea i6ado oca mente# Nuestro repo centra ' aHn no se ha enterado y tenemos @ue enviar os cambios a repositorio centra &
eu4eniaDcococ#ito$E/e1am)le/trun:$ Gr pus/ bNr+ss#$//__eu4enia_1JTI_es3L__DOO0!!I0"!0J%/sr2/re)os/a));curso;1)/trun:/ __eu4enia_1JTI_es3L__DOO0!!I0"!0J%&s )ass9ord$ ,#is trans)ort does not u)date t#e 9or:in4 tree of$ bNr+ss#$//__eu4enia_1JTI_es3L__DOO0!!I0"!0J%/sr2/re)os/a));curso;1)/trun:/0 Hee &bNr #el) 9or:in4;trees& for more information0 5us#ed u) to re2ision 10

Pero 1por @u3 nos dice @ue e :rbo de trabajo no se ha actua i6ado5 !ebemos actua i6ar o en e repositorio centra &
__eu4enia_1JTI_es3L__DmFdream$/sr2/re)os/a));curso;1)/trun:$ Gr st 9or:in4 tree is out of date, run &bNr u)date& __eu4enia_1JTI_es3L__DmFdream$/sr2/re)os/a));curso;1)/trun:$ Gr update +P )rueba0t1t 3ll c#an4es a))lied successfullF0 Updated to re+ision 1 o& ran"/ ?sr+?repos?app="urso=Hp?trunk

!iariamente' todos os miembros de e@uipo' deber:n traer os cambios desde e repo centra &
eu4eniaDcococ#ito$E/e1am)le/trun:$ Gr pu!! GrKss/'??__eu2enia_1LE8_es36__BFF.228.52.L3?sr+?repos?app="urso=Hp?trunk? __eu4enia_1JTI_es3L__DOO0!!I0"!0J%&s )ass9ord$ Po re2isions to )ull0

,+;

Scrum y eXtreme Programming para Programadores

Eugenia Bahit

TI'!: A isa de los cam$ios a (a)aar: 8ada #e que realices cambios, ha un commit local (b r ci >m mensaje)). En *a los cam$ios: "n#:a los cambios al repositorio central diariamente, solo despu3s de haber corrido todos los test #erificando que pasaran (b r push) Trae los cam$ios: 9iariamente, antes de comen ar a trabajar en el repo local, trae del repositorio central, todos los cambios que tus compa%eros de equipo hallan en#iado el d:a anterior (b r pull)

Juardando e path de repo centra


Puede ser e>tremadamente mo esto' tener @ue estar indicando a direccin de repo centra con cada pu y push @ue hagamos# Podemos evitar esto' editando e archivo de con/iguracin de nuestro repo oca &
eu4eniaDcococ#ito$E/e1am)le/trun:$ +im . Gr? ran"/? ran"/."on&

y con/iguramos as variab es pu [ ocation y push[ ocation Dmodi/icar a ruta por a @ue correspondaF&
pus/_!o"ation > bNr+ss#$//userD#ost/sr2/re)os/a));curso;1)/trun:/ pu!!_!o"ation > bNr+ss#$//userD#ost/sr2/re)os/a));curso;1)/trun:/

,+=

Scrum y eXtreme Programming para Programadores

Eugenia Bahit

Juardamos os cambios y ya podremos hacer pu y push' so o con e comando respectivo&


eu4eniaDcococ#ito$E/e1am)le/trun:$ Gr pu!! 7sin4 sa2ed )arent location$ bNr+ss#$//__eu4enia_1JTI_es3L__DOO0!!I0"!0J%/sr2/re)os/a));curso;1)/trun:/ __eu4enia_1JTI_es3L__DOO0!!I0"!0J%&s )ass9ord$ Po re2isions to )ull0 eu4eniaDcococ#ito$E/e1am)le/trun:$ Gr pus/ 7sin4 sa2ed )us# location$ bNr+ss#$//__eu4enia_1JTI_es3L__DOO0!!I0"!0J%/sr2/re)os/a));curso;1)/trun:/ __eu4enia_1JTI_es3L__DOO0!!I0"!0J%&s )ass9ord$ ,#is trans)ort does not u)date t#e 9or:in4 tree of$ bNr+ss#$//__eu4enia_1JTI_es3L__DOO0!!I0"!0J%/sr2/re)os/a));curso;1)/trun:/0 Hee &bNr #el) 9or:in4;trees& for more information0 Po ne9 re2isions to )us#0

.ntegracin continua avan6ada con Ba6aar


A a hora de trabajar con un SCQ' aparece una arga ista de cuestiones' @ue ameritan especia cuidado# Por ejemp o 1@u3 sucede si por accidente' e imino un archivo en mi repositorio oca 5 1Cmo o recupero5 E 1@u3 sucede si modi/i@u3 un archivo en mi repo oca ' sobre una versin distinta a a @ue est: en e repo centra 5 T estas' son so o dos de as decenas de preguntas @ue nos pueden surgir# Qeremos a@u)' como so ucionar cada una de as prob em:ticas m:s /recuentes @ue se presentan en a vida diaria de a integracin continua#

,"$

Scrum y eXtreme Programming para Programadores

Eugenia Bahit

Pro.le/a
I2norar arc3i4o Recu0erar arc3i4o De5ar de lado un arc3i4o te/0oral/ente Recu0erar ca/.ios Encontradas 4ersiones di erentes de un /is/o arc3i4o

Descri0ci1n
!e desea evitar "ue un archivo o directorio sea enviado al repo central Recuperar una versin anterior de un archivo o directorio !e desea evitar te#poral#ente$ enviar los ca#%ios de un archivo$ al repo central

soluci1n
Gr i2nore ar"/i+o bNr i4nore arc#i2o0t1t Gr re+ert nro_re+ision bNr re2ert ! Gr s/e!+e ar"/i+o bNr s#el2e arc#i2o0t1t

!e desea recuperar los ca#%ios de un Gr uns/e!+e ar"/i+o archivo$ previa#ente salvado #ediante bNr uns#el2e arc#i2o0t1t shelve &l traer los ca#%ios desde el repo central$ las #odificaciones hechas so%re un archivo$ interfieren con las efectuadas local#ente al #is#o archivo
Gr mer2e =i ar"/i+o la o)cin ;i es o)cional F )ermite seleccionar los cambios de forma interacti2a

*Gr "on&!i"t=di&& ar"/i+o 'ras co#%inar diferentes versiones$ Bazaar infor#a de conflictos e(istentes (4eneralmente re=uerir@

Mer2e no resol4i1 el con licto

solucionar el conflicto de forma manual0 +onflict; diff mostrar@ las diferencias encontradas =ue no )udieron resol2erse con el mer4e)

-&tese que toda "ez que se indica la palabra +archi"o,! se hace referencia no solo a archi"os sino tambi*n a directorios(

(esumen de comandos de uso /recuente


Co/ando
add "/e"k "i

Descri0ci1n
&)re)ar archivo o directorio Verifica la consistencia del *r%ol de tra%a+o Env,a #ensa+es al repo infor#ando ca#%ios (de%e e+ecutarse sie#pre despu-s de realizar ca#%ios antes de enviar ca#%ios al repo central con push) .uestra las diferencias "ue )eneran conflictos en un archivo .uestra la lista de archivos eli#inados /)nora un archivo .uestra la lista de archivos i)norados

"on&!i"t= di&& de!eted i2nore i2nored

,",

Scrum y eXtreme Programming para Programadores

Eugenia Bahit

in&o !o2 mer2e m+ pu!! pus/ remer2e remo+e renames reso!+e re+ert re+no s/e!+e st

.uestra infor#acin so%re el *r%ol de tra%a+o .uestra los ca#%ios histricos (revisiones) de un %ranch Co#%ina los ca#%ios centrales con los locales en un archivo (tras el #er)e$ sie#pre se de%e hacer co##it 0 )eneral#ente: %zr ci 1# 2#er)e3 ) .ueve o reno#%ra un archivo o directorio Enviar ca#%ios al repo central 'raer ca#%ios desde el repo central Eli#ina un #er)e anterior Eli#ina archivos o directorios .uestra la lista de archivos "ue han sido reno#%rados .arca resuleto un conflicto Recupera un archivo a una revisin anterior .uestra el n4#ero de la revisin actual 5e+a te#poral#ente a un lado$ un deter#inado archivo "ue no se desee enviar a4n al repo central .uestra el estado del repo (local#ente) 0 cuando no #uestra nada$ si)nifica "ue todo est* en orden se pueden enviar ca#%ios al repo central sin conflictos6 Cual"uier otro #ensa+e$ re"uerir* intervenir para resolverlo$ antes de enviar cual"uier ca#%io al repo central6 'a)uea (eti"ueta) una revisin (la re#ueve o #odifica se)4n las opciones pasadas co#o ar)u#entos) Retorna la lista co#pleta de ta)s Revierte un co##it efectuado anterior#ente Recupera los ca#%ios de un archivo salvado #ediante shelve &ctualiza el *r%ol de tra%a+o tra endo el 4lti#o co##it enviado Presentarse ante Bazaar (u o%tener los datos de presentacin aportados con anterioridad)

ta2 ta2s un"ommit uns/e!+e update w/oami

,"+

Scrum y eXtreme Programming para Programadores

Eugenia Bahit

(esumen para uso diario de Ba6aar


Esta' es una breve s)ntesis' de os pasos diarios a seguir ' cuando se trabaja con repositorios#

?l comien o, podr:a ser muy @til, imprimir esta planilla e ir marcando los casilleros #ac:os a medida que se completa cada paso.

6Cu7ndo8

69u:8
&ctualizar el repo local .er)ear archivos con diferencias (si aplica) Resolver conflictos en archivos$ no resueltos con un #er)e: nombre_arc#i2o (archivo conflictivo #er)eado local#ente)

6C1/o8
Gr pu!! Gr mer2e Gr "i =m Imer2eI

Al co/en!ar el d;a

nombre_arc#i2o.*37(ori)inal del repo central) nombre_arc#i2o.:TH-6 (archivo con las #odificaciones hechas por otro #ie#%ro del e"uipo) nombre_arc#i2o.TH47 (archivo #odificado por uno #is#o$ local#ente) Eli#inar el conflicto

2isualiNar los arc#i2os en conflicto F corre4irlos0

bNr resol2e

,ue2o de actuali!ar el re0o

'ra%a+ar li%re#ente so%re tus archivos

,""

Scrum y eXtreme Programming para Programadores

Eugenia Bahit

local Verificar el estado de los ca#%ios &)re)ar archivos nuevos (reportados co#o unkno7) Eli#inar archivos o%soletos /)norar archivos "ue no de%an actualizarse en el repo central Co#itear los ca#%ios Gr st bNr add nombre_arc#i2o bNr remo2e nombre_arc#i2o bNr i4nore nombre_arc#i2o Gr "i =m Sbre2e descri)cin de la tarea terminadaS )#) ;f test Correr todos los test pasen verificar "ue )Ft#on ;m unittest disco2er ;2 Gr pus/ Gr update

Al concluir un tas< =tarea>

Enviar ca#%ios al repo central Al inali!ar el d;a &ctualizar el repo CE8'R&9

os pasos que se encuentran sombreados en tono m1s claro! son opcionales! ' depender1n de cada caso en particular(

Qer e historia de revisiones& revisin actua & Gr re+no

Gr !o2

h Ebtener e nro# de

,"-

Scrum y eXtreme Programming para Programadores

Eugenia Bahit

(e/actoring
Qeremos a@u)' a @uinta pr:ctica sugerida por eXtreme Programming' con mayores deta es y a gunos ejemp os# (e/actoring' como comentamos anteriormente' es una t3cnica @ue consiste en mejorar e cdigo /uente de una ap icacin D impiar oF' sin @ue dichas modi/icaciones' a/ecten e comportamiento e>terno de sistema# E>isten di/erentes tipos de re/actori6aciones @ue pueden ser necesarias imp ementar a cdigo de nuestra ap icacin# Cada tipo' representa una t3nica di/erente de re/actori6acin# Por ejemp o' e iminar cdigo redundante' re@uiere de una t3cnica di/erente a dividir os a goritmos de un m3todo para crear m3todos derivados# Sin embargo' hab ar de t3cnicas de re/actori6acin puede resu tar con/uso' ya @ue a re/actori6acin en s) misma es una t3cnica' @ue o/rece di/erentes so uciones a cada tipo de prob ema# Por o tanto' es pre/erib e pensar a re/actori6acin como una Hnica t3cnica @ue propone di/erentes so uciones a cada tipo de prob ema#

E prob ema
En principio' habr)a @ue di/erenciar e t3rmino Uprob emaV de a pa abra UerrorV' para no generar con/usiones# E error en s)' es una /a a en e cdigo /uente' @ue impide e correcto comportamiento de sistema# <ientras @ue e prob ema' puede
,"7

Scrum y eXtreme Programming para Programadores

Eugenia Bahit

de/inirse como Ua go @ue hue e ma en e cdigo /uenteV ,+ pero sin embargo' no impide e correcto /uncionamiento de a ap icacin# Los prob emas @ue se pueden presentar en e cdigo /uente de una ap icacin' dependen de much)simos /actores' @ue en gran parte de os casos' encuentran una re acin directa con e paradigma de programacin emp eado as) como en e enguaje @ue se uti ice# Si se intentara abarcar todos os prob emas posib es' a ista podr)a tornarse in/inita' tediosa y hasta inuti o muy con/usa# Es por e o' @ue so o abarcaremos os prob emas m:s /recuentes' @ue puedan considerarse genera es' independientes a enguaje pero m:s cercanos a paradigma de a programacin orientada a objetos#

La so ucin
.nde/ectib emente' a so ucin a cada prob ema ser: a re/actori6acin y au@nue resu te redundante' a so ucin' depender: de cada prob ema# Sin embargo' como reg a genera ' a so ucin deber: comen6ar por identi/icar e momento en e cua evar a a cabo #

,+ Lent BecI' uno de os creadores de eXtreme Programming' es @uien introdujo e t3rmino Ubad sme sV Dma os o oresF para re/erirse de manera g oba ' a a@ue as e>presiones y a goritmos poco c aros @ue generan con/usin en e cdigo /uente de un sistema' torn:ndo o m:s comp ejo de o @ue deber)a ser# ,"B

Scrum y eXtreme Programming para Programadores

Eugenia Bahit

Cu:ndo y cmo tomar a desicin de re/actori6ar

Tres stri+es , -Refactori)a.


"n el mundo de la refactori aci6n, haciendo una anolog:a con el b3isbol, suele utili arse la regla 1res Stri5e-A y Brefactori aC). "sto puede descrbirse anlogamente comoD /la #rimera e) 0ue %agas algo, solo %a)lo1 2a segunda e) 0ue %agas algo similar, notars 0ue ests du#licando cdigo, #ero lo %ars de todas formas1 2a tercera e) 0ue te enfrentes al mismo caso, refactori)a31
Cuando se est: programando una ap icacin con 8!!' como hemos visto anteriormente' e proceso de desarro o se est: dividiendo en dos acciones concretas& programar y re/actori6ar# Esto es' a medida @ue vamos creando nuevos m3todos' vamos re/actori6ando e cdigo para e iminar redundancias y en de/initiva' hacer e cdigo -de test- m:s egib e y as) obtener un mejor rendimiento# Pero no estamos re/actori6ando e S%8 constantemente' puesto @ue 3ste' tiene un momento y ugar para ser re/actori6ado# La re/actori6acin de S%8' imp ica @ue o primero @ue debemos hacer' es cump ir e objetivo Dprogramar a@ue o @ue se necesitaF y uego re/actori6ar e cdigo de S%8' cada ve6 @ue& Se agregue un nuevo m3todo

," En e b3isbo ' un striIe es una anotacin negativa para e bateador o/ensivo' cuando a pe ota no es an6ada hacia e diamante# A tercer striIe anotado' termina e turno de bateador# ,"9

Scrum y eXtreme Programming para Programadores

Eugenia Bahit

Se corrija un bug Se haga una revisin de cdigo

Pero siempre' respetando a reg a de U os tres striIesV# %na ve6 identi/icado e momento' so o ser: cuestin de identi/icar e prob ema a /in de poder e egir a so ucin indicada#

%na so ucin a cada prob ema


Como comentamos anteriormente' no haremos una e>tensa ista de prob emas' sino @ue nos centraremos en prob emas genera es# <uchas de as so uciones sugeridas en este cap)tu o' han sido e>tra)das de Source<aIing#com,-' sitio donde se puede encontrar una comp eta c asi/icacin de prob emas ,7 y sus respectivas so uciones,B# Como hemos hecho a o argo de curso' iremos de o genera a o particu ar y de o particu ar a deta e#

Qariab es de uso tempora ma imp ementadas


En principio' de/iniremos a as variab es de uso tempora ' como a@ue as variab es @ue son asignadas en e :mbito oca de un m3todo de c ase y son necesarias tempora mente' so o en ese m3todo' sin ser amadas o re@ueridas por otros m3todos#

,- http&WWsourcemaIing#comWre/actoring# Ntese @ue a gunas de as t3cnicas e>puestas en e sitio Meb re/erido' no se mencionan en este curso' por considerar as poco apropiadas# Esto es debido a @ue a gunas pr:cticas son m:s espec)/icas de enguajes como Kava' mientras @ue a otras' as considero contrarias a as buenas pr:cticas de a programacin orientada a objetos y por o tanto' contraproducentes# ,7 UBad Sme s in CodeV http&WWsourcemaIing#comWre/actoringWbad-sme s-in-code ,B !i/erentes t3cnicas de re/actori6acin& http&WWsourcemaIing#comWre/actoring ,";

Scrum y eXtreme Programming para Programadores

Eugenia Bahit

Jenera mente representan un prob ema en casos& ,F Qariab es de uso tempora concreta&
$2ar = ($a R $b ) / (int)$c;

os siguientes

@ue de/inen una accin

En e ejemp o anterior' vemos una variab e de uso tempora ' @ue de/ine una accin concreta& dividir e producto de dos /actores# Esto representa un prob ema' ya @ue as acciones son responsabi idad de os m3todos y no de as variab es# En estos casos' a so ucin' es trans/erir a responsabi idad de a accin a un m3todo&
$2ar = di2idir_)roducto($a, $b, $c); function di2idir_)roducto($a, $b, $c) { return ($a R $b ) / (int)$c; }

=6tese que #ariables de uso temporal que definen un #alor directoD $2ar = 1"; o por el retorno de la llamada a una funci6nD $2ar = strlen($2ariable); no necesitan transferir su responsabilidad a otro m3todo.

+F Qariab es de uso tempora de un m3todo&


function metodo_a() {

son re@ueridas por m:s

,"=

Scrum y eXtreme Programming para Programadores

Eugenia Bahit

$a = 1"; $b = 1 ; $c = !; $2ar = self$$di2idir_)roducto($a, $b, $c); // continuar000 } )ri2ate static function di2idir_)roducto($a, $b, $c) { return ($a R $b ) / $c; }

En e ejemp o' anterior' as variab es tempora es ia' ib y ic' son re@ueridas por dos m3todos y se est:n de/iniendo como ta es en un m3todo' re@uiriendo ser pasadas como par:metros# A@u)' a so ucin' ser: convertir as variab es tempora es' en propiedades de c ase&
function metodo_a() { self$$$a = 1"; self$$$b = 1 ; self$$$c = !; $2ar = self$$di2idir_)roducto(); // continuar000 } )ri2ate static function di2idir_)roducto() { return (self$$$a R self$$$b ) / self$$$c; }

"F Qariab es par:metros&

de

uso

tempora

@ue

reasignan

function foo($a) { $a = #tmlentities($a); // continuar 000 }

En casos como 3ste' a con/usin puede ser grande& un par:metro es un par:metro y una variab e tempora ' una variab e tempora # Es entonces' cuando variab es tempora es no deben tener e mismo nombre @ue os par:metros&

,-$

Scrum y eXtreme Programming para Programadores

Eugenia Bahit

function foo($a) { $b = #tmlentities($a); // continuar 000 }

<3todos @ue reciben par:metros


A@u) debe hacerse una notab e distincin entre par:metros' variab es de uso tempora y propiedades de c ase# T esta distincin' est: dada por a /ina idad de cada una& Las variab es de uso tempora ' como hemos visto antes' est:n destinadas a de/inir un va or concreto a cua se har: re/erencia so o en e :mbito donde se haya de/inido# Las propiedades de c ase ' son caracter)sticas inherentes a objeto a as cua es se har: re/erencia desde diversos :mbitos# T /ina mente' os par:metros' ser:n va ores adiciona es' @ue no pueden ser considerados propiedades de objeto pero @ue sin embargo' son re@ueridos para @ue una accin' modi/i@ue as propiedades de un objeto#

+lass 7suario { function 2alidar_usuario($username, $)ass) { if($username == &)e)e& [[ $)ass == &1!%&) { return ,rue; } } }

En e ejemp o anterior' c aramente os par:metros iusername y ipass' deber)an ser propiedades de objeto %suario puesto @ue
,-,

Scrum y eXtreme Programming para Programadores

Eugenia Bahit

son caracter)sticas intr)nsecas a objeto# Como reg a genera ' os par:metros deben ser evitados toda ve6 @ue sea posib e' reemp a6:ndo os por propiedades de c ase&
+lass 7suario { function 2alidar_usuario() { if($t#is;<username == &)e)e& [[ $t#is;<)ass == &1!%&) { return ,rue; } } }

E>presiones e>tensas
<uchas veces' podremos encontrarnos con e>presiones @ue debido a su e>tensin' se hacen di/)ci es de eer y cuando no' con/usas&
return ((in_arraF(&abc&, $arraF) YY in_arraF(&bcd&, $arraF)) [[ (in_arraF(&cde&, $arraF) YY in_arraF(&def&, $arraF))) B &WU& $ &CLLWL&;

Cuando estamos en presencia de e>presiones tan e>tensas' o mejor es -a@u) s)- uti i6ar variab es de uso tempora para simp i/icar dichas e>presiones&
$a $b $c $d = = = = in_arraF(&abc&, in_arraF(&bcd&, in_arraF(&cde&, in_arraF(&def&, $arraF); $arraF); $arraF); $arraF);

return (($a YY $b) [[ ($c YY $d)) B &WU& $ &CLLWL&;

<3todos e>tensos
No so o una e>presin puede ser e>tensa# <uchas veces' nos encontraremos con m3todos con e>tensos a goritmos @ue rea i6an varias acciones&
,-+

Scrum y eXtreme Programming para Programadores

Eugenia Bahit

function renderiNar_)lantilla($data=arraF(), $)attern, $tem)late) { $ini_)attern = S[[?P?;53,,CLP;{$)attern}]]S; $end_)attern = S[[CP>;53,,CLP;{$)attern}]]S; $)lantilla = file_4et_contents($tem)late); $)os_ini = str)os($ini_)attern); $)os_fin = str)os($end_)attern); $lon4itud_cadena = $)os_fin ; $)os_ini; $cadena = substr($)lantilla, $)os_ini, $lon4itud_cadena); $reem)laNos = &&; foreac#($data as $identificador=<$2alor) { $reem)laNos 0= str_re)lace(S[{$identificador}]S, $2alor, $cadena); } $resultado = str_re)lace($cadena, &[[P7CQW;+WP,CP?>W]]&, $)lantilla); $resultado = str_re)lace(&[[P7CQW;+WP,CP?>W]]&, $reem)laNos, $)lantilla); return $resultado; }

Cuando e>isten m3todos tan e>tensos' probab emente' a so ucin consista en a combinacin de diversas t3cnicas' @ue van desde agrupar e>presiones en una misma )nea hasta evitar a asignacin de variab es tempora es Dcomo vimos a comien6oF y e>traer cdigo ev:ndo o a di/erentes m3todos&
function renderiNar_)lantilla($data=arraF()) { self$$set_)atterns(); self$$set_contenido_)lantilla(); self$$4et_)attern(); self$$reem)laNar_datos($data); return str_re)lace(&[[PC\]]&, self$$$reem)laNos, self$$set_ne9_)attern()); } // e$tracci%n de c%di&o para crear nuevo m'todo // y sustituci%n de par(metros por propiedades de clase static function set_)atterns() { self$$$ini_)attern = S[[?P?;53,,CLP;{self$$$)attern}]]S; self$$$end_)attern = S[[CP>;53,,CLP;{self$$$)attern}]]S; } // e$tracci%n de c%di&o para crear nuevo m'todo // y sustituci%n de par(metros por propiedades de clase static function set_contenido_)lantilla() { self$$$contenido = file_4et_contents(self$$$tem)late); } // e$tracci%n de c%di&o para crear nuevo m'todo // sustituci%n de par(metros por propiedades de clase // y sustituci%n de e$presiones en l)nea static function 4et_)attern() { self$$$cadena = substr(self$$$contenido, str)os(self$$$ini_)attern),

,-"

Scrum y eXtreme Programming para Programadores

Eugenia Bahit

(self$$$)os_fin ] self$$$)os_ini)); } // e$tracci%n de c%di&o para crear nuevo m'todo // y sustituci%n de par(metros por propiedades de clase static function reem)laNar_datos($data=arraF()) { self$$$reem)laNos = &&; foreac#($data as $identificador=<$2alor) { self$$$reem)laNos 0= str_re)lace(S[{$identificador}]S, $2alor, self$$ $cadena); } } // e$tracci%n de c%di&o para crear nuevo m'todo static function set_ne9_)attern() { return str_re)lace(self$$$cadena, &[[PC\]]&, self$$$contenido); }

Cdigo dup icado en una misma c ase


Es /recuente -y de o m:s comHn-' @ue as mismas e>presiones' comiencen a dup icarse en di/erentes m3todos de una misma c ase&
function metodo_1() { $a = stri)_ta4s(self$$$)ro)iedad); $a = #tmlentities(self$$)ro)iedad); return self$$metodo_a() 0 self$$$)ro)iedad; } function metodo_!() { $a = stri)_ta4s(self$$$)ro)iedad); $a = #tmlentities(self$$)ro)iedad); return self$$$)ro)iedad 0 self$$metodo_b() 0 self$$metodo_c(); }

Las e>presiones dup icadas en e cdigo de os di/erentes m3todos de una misma c ase' se so ucionan e>trayendo e cdigo dup icado de os m3todos' y co oc:ndo o en un nuevo m3todo de c ase&
function metodo_1() { self$$metodo_%(); return self$$metodo_a() 0 self$$$)ro)iedad; }

,--

Scrum y eXtreme Programming para Programadores

Eugenia Bahit

function metodo_!() { self$$metodo_%(); return self$$$)ro)iedad 0 self$$metodo_b() 0 self$$metodo_c(); } static function metodo_%() { self$$$)ro)iedad = stri)_ta4s(self$$$)ro)iedad); self$$$)ro)iedad = #tmlentities(self$$)ro)iedad); }

Cdigo dup icado en varias c ases con a misma herencia


E caso anterior puede darse tambi3n' cuando e cdigo se encuentra dup icado en di/erentes m3todos de c ases con a misma herencia&
class * e1tends 3 { function metodo_1() { $a = stri)_ta4s(self$$$)ro)iedad); $a = #tmlentities(self$$)ro)iedad); return self$$metodo_a() 0 self$$$)ro)iedad; }

class + e1tends 3 { function metodo_!() { $a = stri)_ta4s(self$$$)ro)iedad); $a = #tmlentities(self$$)ro)iedad); return self$$$)ro)iedad 0 self$$metodo_b() 0 self$$metodo_c(); }

En estos casos' en os cu: es e>isten dos o m:s c ases @ue heredan de a misma c ase' se e>trae e cdigo dup icado en os m3todos de as c ases hijas' y con 3ste' se crea un nuevo m3todo de en a c ase madre&
class 3 { static function metodo_%() { self$$$)ro)iedad = stri)_ta4s(self$$$)ro)iedad);

,-7

Scrum y eXtreme Programming para Programadores

Eugenia Bahit

self$$$)ro)iedad = #tmlentities(self$$)ro)iedad); } } class * e1tends 3 { function metodo_1() { self$$metodo_%(); return self$$metodo_a() 0 self$$$)ro)iedad; }

class + e1tends 3 { function metodo_!() { self$$metodo_%(); return self$$$)ro)iedad 0 self$$metodo_b() 0 self$$metodo_c(); } }

Cdigo dup icado en varias c ases sin a misma herencia


Como era de esperarse' e cdigo tambi3n podr: aparecer dup icado en di/erentes c ases pero @ue no tienen a misma herencia&
class * { function metodo_1() { $a = stri)_ta4s(self$$$)ro)iedad); $a = #tmlentities(self$$)ro)iedad); return self$$metodo_a() 0 self$$$)ro)iedad; } } class + { function metodo_!() { $a = stri)_ta4s(self$$$)ro)iedad); $a = #tmlentities(self$$)ro)iedad); return self$$$)ro)iedad 0 self$$metodo_b() 0 self$$metodo_c(); } }

,-B

Scrum y eXtreme Programming para Programadores

Eugenia Bahit

En estos casos' a so ucin es e>traer e cdigo dup icado' crear una nueva c ase y con e cdigo e>tra)do' crear un m3todo para esta nueva c ase @ue podr: ser heredada por as anteriores o simp emente' instanciada&
class 3 { static function metodo_%($)arametro) { return #tmlentities(stri)_ta4s($)arametro)); } } class * { function metodo_1() { return self$$metodo_a() 0 3$$metodo_%(self$$$)ro)iedad); }

class + { function metodo_!() { return 3$$metodo_%(self$$$)ro)iedad) 0 self$$metodo_b() 0 self$$metodo_c(); } }

,-9

Scrum y eXtreme Programming para Programadores

Eugenia Bahit

Combinando Scrum y eXtreme Programming


18e imaginas convertirte en unDaF programadorDaF eXtremoWa @ue organi6a su trabajo con Scrum o viceversa5 Sin dudas' a combinacin Scrum f XP Do XP f ScrumF' es per/ecta y compatibi i6ar ambas metodo og)as' es sumamente simp e# Qeremos a@u)' a gunas sugerencias' para obtener e m:>imo provecho de ambas#

Compatibi i6ando ambas metodo og)as


Para compatibi i6ar ambas metodo og)as' es necesario hacer un an: isis comparativo de cada propuesta para obtener as)' e grado de compatibi idad entre ambas# Aaremos un repaso por cada uno de os va ores y pr:cticas t3cnicas de eXtreme Programming' ana i6:ndo os de /orma separada a /in de deducir cu:n compatib es Do noF resu tan con Scrum#

Compatibi idad de Scrum con os va ores de XP


La siguiente tab a muestra una comparacin entre os va ores de XP y su corre acin con Scrum' obteniendo e grado de compatibi idad en una esca a de , a "' siendo ,' poco compatib e y re@uierir: decidir si se debe imp ementar o noX + a go compatib e pero debe adaptarse y "' abso utamente compatib e#
,-;

Scrum y eXtreme Programming para Programadores

Eugenia Bahit

%A,OR

?P

SCRUM 9os i#pedi#entos son relevados por el e"uipo al !cru# .aster -ste se encar)a de resolverlos (inclu endo o no$ al due:o de producto) !e priorizan las >istorias de ?suario$ desarrollando solo a"uellas #*s prioritarias

COMPATI+I,IDAD

Co/unicaci1n

9os i#pedi#entos son resueltos entre los #ie#%ros del e"uipo cliente

;<=

Si/0licidad

!e pretende desarrollar solo a"uellos aspectos #,ni#os necesarios para cu#plir con los o%+etivos

=<=

!e planifica revisa en for#a con+unta entre el e"uipo due:o de producto Pretende lo)rar un (cliente) en feed%ack continuo per,odos re)ulares6 Retroali/entaci1n con el cliente$ a !i sur)en trav-s de las i#pedi#entos$ son entre)as te#pranas relevados al !cru# .aster -ste se encar)a de resolverlos !e respeta la idoneidad del cliente con respecto a las decisiones "ue aportan valor al ne)ocio la del e"uipo con respecto al c#o esas decisiones de%en ser desarrolladas El e"uipo se co#pro#ete a esti#ar con sinceridad So o e dueCo de producto Dc ienteF puede decidir @ue Aistorias de %suario ser:n desarro adas en e Sprint y Hnicamente e e@uipo puede de/inir a /orma en a cu: ser:n desarro adas 9as esti#aciones se realizan frente al due:o de producto el e"uipo se
,-=

@<=

Res0eto

=<=

Cora5e

=<=

Scrum y eXtreme Programming para Programadores

Eugenia Bahit

co#pro#ete a relevar los co#entar con i#pedi#entos al honestidad el !cru# .aster avance del pro ecto #ostrar el avance del pro ecto en el ta%lero

Qisua i6ando a tab a anterior' nos encontramos con @ue a comunicacin' es e va or @ue menor compatibi idad posee# Esto signi/ica' @ue a momento de uni/icar metodo og)as' se deber: decidir a /orma en a cua ' os impedimentos ser:n a/rontados& Esti o XP j ser:n resue tos entre os miembros de e@uipo Esti o Scrum j ser:n resue tos por e Scrum <aster

Luego' a retroa imentacin ' re@uerir: ser adaptada ya @ue mayormente' es compatib e entre ambas metodo og)as# La adaptacin de este va or' depender: de /orma directa de o @ue se decida con respecto a a comunicacin #

Compatibi idad con as pr:cticas t3cnicas de XP


A@u) no ser: necesario hacer una an: isis e>haustivo de cada pr:ctica' ya @ue Scrum' no propone ninguna de /orma directa# So o nos concentraremos en a@ue as pr:cticas @ue puedan egar a generar ciertas dudas# %ti i6aremos e mismo m3todo de an: isis de compatibi idad' emp eado en e punto anterior#

,7$

Scrum y eXtreme Programming para Programadores

Eugenia Bahit

PR*CTICA

?P 9o inte)ra al desarrollo de for#a directa (el cliente est* f,sica#ente presente durante todo el proceso de desarrollo) Cada ; o @ se#anas El cliente define los test de aceptacin

SCRUM 9o inte)ra de for#a indirecta$ en las cere#onias de planificacin revisin opcional#ente$ en las de revisin retrospectiva6 Cada @ o A se#anas El due:o de producto define los criterios de aceptacin

COMPATI+I,IDAD

Cliente in@situ

@<=

Entre2as cortas

@<=

Testin2

@<=

-ue2o de Plani icaci1n

/ndefecti%le#ente propone el uso de al #enos una t-cnica 8o propone una de esti#acin t-cnica de (Plannin) Pocker$ '1 esti#acin de for#a !hirt !izin)$ e(plic,ta Colu#nas o una co#%inacin de varias)

=<=

Como podemos ver' son " as pr:cticas t3cnicas @ue deber:n ser adaptadas# En e caso de c iente in-situ' se deber: adaptar esta pr:ctica' ana i6ando si& Sumar a c iente a Scrum diario como en XP Contar con e c iente so o en as ceremonias p ani/icacin y revisin como en Scrum de

No obstante' e>iste una a ternativa intermedia' @ue es incorporar a !ueCo de Producto Dc ienteF en as ceremonias de revisin y retrospectiva' o cua es permitido por Scrum y se asemeja m:s a o propuesto por XP#

,7,

Scrum y eXtreme Programming para Programadores

Eugenia Bahit

Con respecto a as entregas cortas ' son per/ectamente compatib es entre ambas metodo og)as# Estab ecer Sprints de + semanas' ser)a e e@ui ibrio idea # En cuanto a testing' a Hnica di/erencia encontrada' es @ue en XP' e c iente de/ine os 8est de Aceptacin y en Scrum' so o indica os criterios de aceptacin# La /orma de compatibi i6ar ambas metodo og)as' es simp emente' sumar a c iente DdueCo de productoF' a /acu tad de de/inir 8est de Aceptacin para cada uno de os Criterios de Aceptacin de/inidos en una Aistoria de %suario#

Combinando ambas metodo og)as


1Scrum con XP o XP con Scrum5 Parece un simp e juego de pa abras' pero no o es# En este caso' Ue orden de os /actores' a tera e productoV# Por e o' a /orma en a cua se combinen ambas metodo og)as' depender: de cu: de as dos' se uti ice como base #

Combinar Scrum con eXtreme Programming


Sin ugar a duda' considero @ue uti i6ar Scrum con XP' es combinacin @ue mejores resu tados genera # En este caso' se uti i6a Scrum como base de toda organi6acin y sin modi/icaciones de ningHn tipo& Se respetan sus ceremonias' ro es y arte/actos
,7+

Scrum y eXtreme Programming para Programadores

Eugenia Bahit

Se organi6a e trabajo por Sprints' priori6ando Aistorias de %suario' estimando es/uer6os' p ani/ic:ndo as por Sprint y dividi3ndo as en tareas Se respeta a transparencia de todo e proceso' mediante e uso de tab eros /)sicos y diagramas de burndo0n @ue permitan conocer e es/uer6o restante por Sprint

Es decir' se respeta Scrum en su tota idad sin a teraraciones de ningHn tipo # En cada Sprint' e trabajo es comp ementado por as pr:cticas t3cnicas de eXtreme Programming @ue no re@uieren ser adaptadas y hacen re/erencia e>c usiva a cuestiones de )ndo e tecno gica& Pr:ctica ?-& L.SS DLeep it Simp e' Si ycF Pr:ctica ?7& (e/actoring Pr:ctica ?B& Pair Programming Pr:ctica ?;& 8esting W 8!! Pr:ctica ?=& Cdigo est:ndar Pr:ctica ?,$& Propiedad co ectiva Pr:ctica ?,,& .ntegracin cont)nua

Combinar Scrum con eXtreme Programming


En este caso' a base de proyecto ser: XP en su tota idad' respetando sus cinco va ores y as ,+ pr:cticas t3cnicas sin a teraciones de ningHn tipo# Esta base' ser: comp ementada' por os arte/actos Ceremonias de Scrum' adaptados a os va ores de XP&
,7"

Scrum y eXtreme Programming para Programadores

Eugenia Bahit

Ergani6acin por Sprints P ani/icacin' revisin y retrospectiva D@ueda e>c uido e Scrum diarioF 8ab ero /)sico' diagrama de burndo0n Estimacin por P anning PoIer' 8-Shirt Si6ing' Co umnas o combinaciones de 3stas

Los ro es' so o @uedar:n repartidos entre C iente D!ueCo de Producto para ScrumF y E@uipo# La /igura de Scrum <aster @ueda e>ceptuada en esta combinacin Dmarca una di/erencia radica con a combinacin Scrum f XPF#

<ateria de ectura comp ementario


Puedes encontrar m:s in/ormacin sobre cmo compatibi i6ar estas dos metodo og)as' en e ibro Scrum y XP desde as 8rincheras de AenriI Lniberg ' e cua se encuentra disponib e Den espaCo F en .n/o2& http&WW000#in/o@#comWminibooIsWscrum->p-/rom-the-trenches

,7-

Scrum y eXtreme Programming para Programadores

Eugenia Bahit

Lanban& a metodo og)a :gi @ue menor resistencia o/rece


A esta a tura' ya estamos sumamente /ami iari6ados con e agi ismo# Sabemos @u3 es y cmo evar o a a pr:ctica' con dos de as metodo og)as :gi es por e>ce encia& Scrum' a e egida por a mayor)a y XP' a @ue sugiere pr:cticas t3cnicas @ue inc uso' pueden imp ementarse en metodo og)as m:s tradiciona es# Sin embargo' e>isten much)simas otras metodo og)as :gi es y si bien' este curso so o se en/oca en Scrum y eXtreme Programming' e>iste una metodo og)a' @ue por una particu aridad' no podemos dejar de conocer# Esta metodo og)a' es Lanaban' y su particu aridad' es @ue debido a su simp icidad -y /aci idad para camu/ arse con as metodo og)as m:s tradiciona es- estad)sticamente' es a @ue menor resistencia a cambio o/rece a a hora de pasar de una metodo og)a predictiva a una :gi #

!e 8ETE8A A a !esarro o de So/t0are


Lanban es un t3rmino Kapon3s e cua puede traducirse como Uinsignia visua V DLan& visua ' ban& se o o insigniaF# !e todas as metodo og)as :gi es'
,77

Scrum y eXtreme Programming para Programadores

Eugenia Bahit

Lanban es a m:s nueva' ya @ue comen6 a imp ementarse' pr:cticamente una d3cada posterior a otros en/o@ues adaptativos# !escubierta por e .ng# 8aiichi Ehno de a empresa automotri6 8oyota ' Lanban ha egado a a industria de So/t0are recientemente en e aCo +$$-' de a mano de !avid Anderson en a %nidad de Negocio X.8 de <icroso/t ' arrojando resu tados muy a entadores#

Seg@n 9a#id ?nderson, Eanban permiti6 en /icrosoft, producir cambios incrementales en la forma de trabajo con una m*nima resistencia al cam$io, generando un incremento de #roducti idad su#erior al 4556 y promedi6 una reduccin del ciclo de desarrollo en un 756.
B:sicamente' Lanban se apoya en una produccin a demanda& se produce so o o necesario' de manera ta @ue e ritmo de a demanda sea @uien contro e a ritmo de a produccin Dse necesitan N partes' entonces so o se producen N partesF' imitando e trabajo en curso a una cantidad prede/inida#
\###] %n sistema Lanban es un sistema o proceso diseCado para disparar trabajo cuando hay capacidad para procesar o \###] D+$$7' !avid Anderson' <icroso/tF

En e sistema Lanban' este disparador es representado por tarjetas' @ue se distribuyen en cantidades imitadas Desto es' o @ue imitar: e trabajo en cursoF# Cada item de trabajo' se
,7B

Scrum y eXtreme Programming para Programadores

Eugenia Bahit

acompaCa de una de estas tarjetas' por o cua ' un nuevo )tem so o podr: iniciarse si se dispone de una tarjeta Lanban ibre# Cuando no hay m:s tarjetas ibres' no se pueden iniciar nuevos trabajos# T cuando un item es conc uido' una nueva tarjeta se ibera' permitiendo e comien6o de un nuevo item de trabajo#

Las tres reg as de Lanban


Partiendo de as bases anteriores' en e desarro o de So/t0are' se Uvirtua i6aV esta esencia' ev:ndo a a a pr:ctica mediante a imp ementacin de tres reg as& ,# <ostrar e proceso +# Limitar e trabajo en curso DM.PF "# Eptimi6ar e / ujo

<ostrar e proceso
Esta reg a busca hacer visib es os items de trabajo permitiendo conocer de manera e>p )cita e proceso trabajo actua ' as) como os impedimentos @ue vayan surgiendo# !icha visua i6acin' se rea i6a a trav3s de tab eros /)sicos' a igua @ue en Scrum' so o @ue con di/erentes co umnas D@ue veremos m:s ade anteF# En e caso de Lanban' a imp ementacin de tab eros /)sicos' es /undamenta a a hora de comprender a capacidad de proceso de e@uipo de desarro o# Para cump ir con a reg a de mostrar e proceso' ser: necesario de/inir con precisin&

,79

Scrum y eXtreme Programming para Programadores

Eugenia Bahit

Punto de inicio y /ina i6acin de a visibi idad de proceso Limitar a visua i6acin a as actividades de proceso en as cua es e e@uipo de desarro o tiene mayor in/ uencia para e/ectuar cambios# A partir de estos )mites' se negocia a /orma de interaccin entre procesos anteriores y posteriores#

8ipos de )tems de trabajo Esto hace re/erencia a os tipos de items so icitados en e proceso de trabajo Dpor ejemp o' bugs' re/actoring' actua i6aciones' etc#F

!iseCo de )tem

as tarjetas @ue acompaCar:n a cada

La in/ormacin contenida en cada tarjeta' debe ser o su/icientemente precisa' como para permitir su eva uacin y a toma de decisiones a cua @uier parte invo ucrada en e proyecto# Jenera mente' a in/ormacin m)nima @ue debe contener cada item es& titu o' .!' /echa de entrada' tipo de )tem' persona asignada' prioridad y dead ine#

Los tab eros Lanban


A igua @ue en Scrum' en Lanban se uti i6an tab eros /)sicos Do herramientas digita es e@uiva entesF para representar e / ujo de trabajo# En os tab eros Lanban' e / ujo de proceso de trabajo' se ver: re/ ejado de i6@uierda a derecha en e tab ero' mediante co umnas @ue representen cada etapa Dan: isis' diseCo' desarro o' test' etc#F T cada una de estas co umnas podr: dividirse a su ve6' en dos& en curso y terminado#
,7;

Scrum y eXtreme Programming para Programadores

Eugenia Bahit

Grecuentemente' en medio de cada co umna representativa de un proceso' sue e co ocarse una co umna intermedia para os )tems en espera# %n ejemp o de tab ero Lanban puede verse en a siguiente imagen&

Limitar e trabajo en curso& M.P


En Lanban' e )mite de trabajo en curso' est: dado por e M.P& MorI in Progress # E )mite M.P' consiste en de/inir a cantidad de )tems simu t:neos @ue pueden ejecutarse en un mismo proceso# Cada proceso' puede tener di/erentes )mites M.P' como se muestra a continuacin&

,7=

Scrum y eXtreme Programming para Programadores

Eugenia Bahit

Los )mites M.P' nos permitir:n detectar os cue os de bote a r:pidamente# Con so o observar e tab ero prestando atencin en as co umnas b o@ueadas y su procesos anterior y posterior inmediatos' podremos deducir donde se encuentran os puntos de con/ icto' y trabajar para remediar os# E>isten diversas /ormas de manejar os cue os de bote a ' pero sin dudas' a @ue mejore resu tados ha demostrado dar' es a de co ocar una co a de entrada Dbu//erF previa a proceso donde e cue o de bote a se genera# gsto' se rea i6a a /in de /omentar e@uipo& a co aboracin de

8uando un cuello de botella es detectado, habr procesos anteriores y posteriores que se encuentren bloqueados, generando en consecuencia, que los miembros del equipo cuyo proceso est3 a cargo, no tengan tareas
,B$

Scrum y eXtreme Programming para Programadores

Eugenia Bahit

que reali ar. La detecci6n de los cuellos de botella, pro#ocar que aquellos miembros del equipo estancados), colaboren con sus comp%aeros, para acelerar los procesos y liberar espacio para el ingreso de nue#os items.

Eptimi6ar e / ujo de trabajo


E / ujo de trabajo es a progresin visib e de os )tems de sucesivos procesos en un sistema Lanban# E objetivo optimi6ar dicho / ujo de trabajo' es a can6ar un proceso desarro o estab e' previsib e y acorde a as necesidades proyecto' en e cua se distinga un ritmo de trabajo parejo# os de de de

Cuando un )tem de trabajo se encuentra estancado' e e@uipo deber: co aborar a /in de ograr recuperar un / ujo parejo y tomar medidas para prevenir /uturos estancamientos#
U%n / ujo regu ar' estab ece a capacidad de un e@uipo para entregar so/t0are /uncionando con una ve ocidad /iab e# %na organi6acin @ue entrega con un / ujo regu ar ogra estab ecer c aramente as posibi idades de su proceso y puede medir /:ci mente su capacidad#V D<ary y 8om PoppendiecI' Lean so/t0are deve opmentF

Si bien no e>isten reg as preestab ecidas para optimi6ar e / ujo de trabajo en Lanban' as principa es actividades sobre as cua es sue e en/ocarse esta optimi6acin ' en a pr:ctica' son&

,B,

Scrum y eXtreme Programming para Programadores

Eugenia Bahit

E trabajo sobre cue os de bote a An: isis sobre as co as de entrada Dbu//er de )tems de trabajoF <ejoras @ue imp i@uen modi/icaciones en e proceso de creacin de va or

,B+

Vous aimerez peut-être aussi