Académique Documents
Professionnel Documents
Culture Documents
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
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
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###############+=
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
Eugenia Bahit
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
Eugenia Bahit
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
.ntegracin continua############################################# ,,Jeneracin de 8est de .ntegracin##############################################,,7 8est de Aceptacin##################################################################,,7 8est Gunciona es######################################################################,,; 8est de Sistema#######################################################################,,=
=
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
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
,,
Eugenia Bahit
Eugenia Bahit
eva
m:s
tiempo
de
@ue
se
hab)a
"# 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
,-
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#
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
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#
,9
Eugenia Bahit
(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#
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
,=
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#
+$
Eugenia Bahit
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#
+,
Eugenia Bahit
Eugenia Bahit
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 #
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
+-
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#
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
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#
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 ?;& 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
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#
+;
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#
+=
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
"$
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#
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
"+
Eugenia Bahit
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#
""
Eugenia Bahit
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#
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#
"-
Eugenia Bahit
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#
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
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
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
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#
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
Eugenia Bahit
8ener RvocacinR D a buena predisposicin no a can6aF para trabajar en e@uipo Capacidad de auto-gestin
!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
";
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#
"=
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#
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
-$
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
-,
Eugenia Bahit
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
-+
Eugenia Bahit
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
BacI og de Producto'
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
--
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
Eugenia Bahit
PENDIENTES
EN CURSO
TERMINADAS
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
4h
6h
diseo
programacin
-B
Eugenia Bahit
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
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#
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
6h
"iliana
Tag:
1h
programacin
testing
Historia de Usuario #
123
4h
diseo
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
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
!in:mica
7,
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+
Eugenia Bahit
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
!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"
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
!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-
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
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
.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
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
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#
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;
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=
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#
Eugenia Bahit
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,
Eugenia Bahit
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"
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-
Eugenia Bahit
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
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
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
Eugenia Bahit
"# 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;
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=
Eugenia Bahit
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$
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,
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#
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+
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 #
9"
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#
9-
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.
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
/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
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#
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#
9;
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#
9=
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#
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>-#
Eugenia Bahit
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
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#
;"
Eugenia Bahit
;-
Eugenia Bahit
Eugenia Bahit
;B
Eugenia Bahit
;9
Eugenia Bahit
;;
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
;=
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! =$
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#
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
=+
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&
%reaci&n de una clase Test %ase con PyUnit (#'thon)( a clase hereda de unittest.TestCase
="
Eugenia Bahit
%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
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 '
=-
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
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 } }
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
Eugenia Bahit
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
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
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); } }
=;
Eugenia Bahit
archivo: /MyApp/Tests/BalanceContableTest.php
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
nuestro
==
8est'
y 3ste' deber:
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()&
,$$
Eugenia Bahit
AB)#) class *alance+ontable { )ublic $im)orte_bruto; )ublic $alicuota_i2a; )ublic function calcular_i2a() { return 3159 } } B<
:; (1 test, 1 assertion)
,$,
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<
,#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
,$+
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<
:; #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#$ {
,$"
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.
,$-
Eugenia Bahit
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
,$7
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
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<
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<
,$9
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<
,$;
Eugenia Bahit
,$=
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#
,,$
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()
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#
,,,
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
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
,,+
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
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
,,"
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
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#
8est de Aceptacin
Los 8est de Aceptacin' no dejan de ser 8est %nitarios' @ue
,,7
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
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")
,,9
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
,,;
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
,,=
Eugenia Bahit
T todas esta caracter)stica' son a@ue as @ue nos brindan os programas de contro de versiones,,#
Eugenia Bahit
.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.
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#
,++
Eugenia Bahit
RAMA ) (Branch)
REPOSITORIO (Repositor )
,+"
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#
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&
,+-
Eugenia Bahit
bNr 2ersion
,+7
Eugenia Bahit
os miembros de
=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
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:/
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
Eugenia Bahit
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
,+;
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)
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:/
,+=
Eugenia Bahit
,"$
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@
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(
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
,",
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)
,"+
Eugenia Bahit
?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
bNr resol2e
,""
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
os pasos que se encuentran sombreados en tono m1s claro! son opcionales! ' depender1n de cada caso en particular(
Gr !o2
h Ebtener e nro# de
,"-
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
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
Eugenia Bahit
," 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
Eugenia Bahit
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#
,- 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 ,";
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
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.
,"=
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; }
de
uso
tempora
@ue
reasignan
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&
,-$
Eugenia Bahit
+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
,-,
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);
<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&
,-+
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),
,-"
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); }
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; }
,--
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); }
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
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; }
,-B
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); }
,-9
Eugenia Bahit
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
=<=
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 #
,7$
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
@<=
/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,
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#
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
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#
,7-
Eugenia Bahit
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
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#
<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
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
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#
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&
,7=
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$
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.
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,
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+