Glosario Testing
Glosario Testing
Glosario Testing
Qué es DevOps (y sobre todo qué no es DevOps)
presentábamos la génesis del término, pero como ocurre con la mayoría de las
flagrantemente incorrectos.
1
DevOps según WikiPedia
Comenzamos con lo más próximo que hoy en día podemos tener a una
2
un requisito de negocio de diez despliegues diarios. A este tipo de sistemas se
desde 2009".
administradores de sistemas.
3
Con estos conceptos en mente, repasemos algunas corrientes de opinión en
torno a DevOps.
sistemas.
ven abocadas a adoptar en sus inicios, en los que todos los miembros del
4
bases de datos... y hasta de cablear la oficina, comprar portátiles y hasta
en sustituir esas dos gorras por una sola: una nueva gorra DevOps.
que se centren en hacer lo que mejor saben hacer: escribir software. DevOps
5
Si esto es así, ¿qué es un ingeniero DevOps? ¿No hemos quedado en que
encontrar.
6
DevOps es especialmente útil en el nuevo entorno de la transformación digital y
el desarrollo de productos digitales, para los que el usuario final y/o el cliente
DevOps
DevOps (acrónimo inglés de development -desarrollo- y operations -
operaciones-) es una práctica de ingeniería de software que tiene como
objetivo unificar el desarrollo de software (Dev) y la operación del software
(Ops). La principal característica del movimiento DevOps es defender
enérgicamente la automatización y el monitoreo en todos los pasos de la
construcción del software, desde la integración, las pruebas, la liberación hasta
la implementación y la administración de la infraestructura. DevOps apunta a
ciclos de desarrollo más cortos, mayor frecuencia de implementación,
lanzamientos más confiables, en estrecha alineación con los objetivos
comerciales.1234
Índice
1Definiciones e Historia
2Herramientas DevOps
3Relación y otros enfoques
o 3.1Agile
o 3.2Entrega Continua
o 3.3ArchOps
o 3.4DataOps
o 3.5Objetivos
o 3.6Microservicios
4Véase también
5Referencias
6Enlaces externos
Definiciones e Historia[editar]
7
Ilustración que muestra DevOps como la intersección de desarrollo,
operaciones de tecnología y calidad (QA)
En la conferencia Agile 2008 Toronto, Yhens Wasna y Patrick Debois
introdujeron el término en su charla sobre "Infraestructura Ágil". 5 A partir de
2009, el término DevOps se ha promocionado constantemente y se ha
incorporado a un uso más general a través de una serie de "devopsdays", 6 que
comenzaron en Bélgica y ahora también se han extendido a otros países.7
El término DevOps ha sido utilizado en múltiples contextos diferentes. 8
Una definición propuesta por Bass, Weber y Zhu es:
DevOps es un conjunto de prácticas destinadas a reducir el tiempo entre el
compromiso de un cambio en un sistema y el cambio que se coloca en la
producción normal, al tiempo que garantiza una alta calidad. 9
En los últimos años, también han evolucionado iniciativas de DevOps más
tangenciales, como OpsDev,10 WinOps,11 y BizDevOps.12
Herramientas DevOps[editar]
Como DevOps pretende ser un modo de trabajo interfuncional, en lugar de una
sola herramienta de DevOps existen conjuntos (o "toolchains") de múltiples
herramientas.13 Se espera que tales herramientas de DevOps encajen en una o
más de estas categorías, que reflejen los aspectos clave del proceso de
desarrollo y entrega:1415
8
7. Monitor: monitoreo del rendimiento de las aplicaciones, experiencia del
usuario final
Algunas categorías son más esenciales en una cadena de herramientas
DevOps que otras; especialmente la integración continua (por
ejemplo, Jenkins) y la infraestructura como código (por ejemplo, Puppet).1617
DataOps[editar]
La aplicación de entrega continua y DevOps para el análisis de datos se ha
denominado DataOps. DataOps busca integrar ingeniería de datos, integración
de datos, calidad de datos, seguridad de datos y privacidad de datos con
operaciones.23 Aplica principios de DevOps, desarrollo ágil y el control
estadístico del proceso, utilizado en la fabricación ajustada, para mejorar el
tiempo de ciclo de extracción de valor del análisis de datos. 24
Objetivos[editar]
Los objetivos de DevOps abarcan todo el proceso de entrega. Incluyen:
9
Baja tasa de errores en nuevas versiones;
Tiempo de entrega más corto entre parches;
Tiempo de recuperación más rápido (en caso de que una nueva versión
falle).
Los procesos simples se vuelven cada vez más programables y dinámicos,
utilizando un enfoque DevOps.25 DevOps tiene como objetivo maximizar la
previsibilidad, eficiencia, seguridad y mantenimiento de los procesos
operativos. Muy a menudo, la automatización apoya este objetivo.
La integración de DevOps se enfoca en la entrega de productos, pruebas
continuas, pruebas de calidad, desarrollo de características y versiones de
mantenimiento para mejorar la confiabilidad y la seguridad y proporcionar ciclos
de desarrollo e implementación más rápidos. Muchas de las ideas (y personas)
involucradas en DevOps provienen de la administración de sistemas
empresariales y los movimientos ágiles de desarrollo de software. 26
Microservicios[editar]
Este tipo de enfoque permite a las empresas digitales brindar alta disponibilidad
y estabilidad a sus aplicaciones; esto se debe a que todas las partes de las
aplicaciones (base de datos, back-end, frontend, etc.) son independientes y, si
una de ellas falla, no implica que toda la aplicación se caiga, en lugar de eso,
las otras partes continuarán trabajando mientras se restaura el componente
afectado.27 Los creadores de DevOps requieren de microservicios para
optimizar sus desarrollos, y dejar atrás arquitecturas monolíticas.
10
TDD
Se centra en capturar requisitos en test de aceptación y los usa para conducir
el desarrollo.
ATDD
Esta centrado en los requisitos desde el punto de vista del desarrollador, BDD
esta enfocado en la captura de requisitos desde el cliente
Profundicemos en el BDD
Es un método de diseño y codificación que integra pruebas de (a)
Aceptación y (b) Unitarias
Esta orientado a un desarrollo “Outside -> In”
Define el uso de un DSL(pre-condiciones, proceso, post-condiciones)
para las pruebas (es un subconjunto del lenguaje natural Gerkin)
En el Gerkin, se describe el comportamiento del software sin importar el
desarrollo
La Sintaxis en el Gerkin esta compuesta por Feature y Scenario
Respecto a Cucumber
Se trabaja bajo Framework tipo BDD
Esta escrito en Ruby pero disponible para otros lenguajes
Los primeros pasos para trabajar con él deben ser: (a) Instalar Ruby y
(b) Instalar Cucumber
Es una herramienta que trabaja con las líneas de comandos
Lee los ficheros “.features” (a partir del directorio indicado)
Por cada “scenario”, ejecuta sus “steps”
El roadmap sería algo por el estilo:
o Fase inicial: Nuestro proyecto (con la intención de automatizar)
o Fase de Negocio: Features -> Scenario -> Steps
o Fase tecnológica: Step Definitions -> Support Code -> Automation
Library
o Fase final: Nuestro proyecto (automatizado)
El framework podría armarse con:
o una herramienta para la creación y configuración de entornos de
desarrollo virtualizados
o un sistema de control de código fuente distribuído
Las acciones a seguir podrían ser:
o Crear un directorio: ejemplo-cucumber
o Crear un sub directorio: feature
o Crear un archivo: features/primeros_pasos.features
o Ir a la consola, situarse en el directorio y escribir: cucumber
o Crear un test: abrir un editor de texto y escribirlo
o Ejecutar el test case
o Crear un directorio dentro del directorio features
o Copiar la salida obtenida de la ejecución del test case y copiarla a
un nuevo archivo
o Ejecutar el test case de nuevo
o En definitiva…
o BDD y Cucumber son demandados por la industria ya que
permiten introducir testing desde el principio del desarrollo
11
Aclaración de algunos conceptos
Feature:
Es la funcionalidad que vamos a testear.
Scenario:
El escenario vendría a ser una historia de usario de la funcionalidad, esto
quiere decir que cada scenario sería probar una funcionalidad en un contexto
distinto.
Given:
El estado inicial del escenario, se pueden concatenar varios con And’s.
When:
El proceso que queremos probar, también se pueden concatenar varios usando
And’s… pero de inicio no tiene sentido, deberíamos probar sólo una cosa en
cada escenario.
Then:
Las comprobaciones para saber si el escenario se está ejecutando
correctamente o no.
Una vez escritos los pasos de la “feature”, nos queda escribir los “steps” para
que se ejecute el test del escenario.
A continuación, les muestro un ejemplo:
Índice de contenidos
1. Introducción
2. Entorno
3. Preparar el proyecto
4. El primer Test
5. Generar el reporte
6. Conclusiones
7. Referencias
1. Introducción
Serenity es una herramienta que nos facilita hacer BDD centralizando los test
de nuestra aplicación.
13
El reporte generado nos indica el estado funcional de nuestra aplicación con
gran detalle y sirve también como documentación viva.
Nos ofrece muchas posibilidades, pero en este tutorial nos vamos a centrar en
un reporte con Cucumber para la definición de escenarios y su implementación.
2. Entorno
Hardware: Portátil MacBook Pro Retina 15′ (2.5 Ghz Intel Core I7,
16GB DDR3).
Sistema Operativo: Mac OS Sierra
Entorno de desarrollo: Intellij Idea CE
Java 1.8
Apache Maven 3.5.0
3. Preparar el proyecto
pom.xml
XHTML
1 <dependencies>
2 <dependency>
3 <groupId>net.serenity-bdd</groupId>
14
4 <artifactId>serenity-cucumber</artifactId>
5 <version>1.6.4</version>
6 </dependency>
7 </dependencies>
También incluimos el failsafe plugin para que ejecute los test en la fase de
verificación y el plugin de serenity para generar el reporte en la fase justo
después de ejecutar los tests (post-integration-tests).
XHTML
1 <plugins>
2 <plugin>
3 <artifactId>maven-failsafe-plugin</artifactId>
4 <version>2.19.1</version>
5 <configuration>
6 <includes>
7 <include>RunTest.java</include>
8 </includes>
15
9 </configuration>
10 <executions>
11 <execution>
12 <goals>
13 <goal>integration-test</goal>
14 <goal>verify</goal>
15 </goals>
16 </execution>
17 </executions>
18 </plugin>
19 <plugin>
20 <groupId>net.serenity-bdd.maven.plugins</groupId>
21 <artifactId>serenity-maven-plugin</artifactId>
22 <version>1.7.2</version>
23 <executions>
24 <execution>
25 <id>serenity-reports</id>
26 <phase>post-integration-test</phase>
27 <goals>
28 <goal>aggregate</goal>
29 </goals>
30 </execution>
31 </executions>
32 </plugin>
33 </plugins>
16
En él podemos definir muchas variables que utiliza serenity y agregar nuestras
propiedades.
Podéis consultar todas las que existen
aquí.
Java
17
public class MyFirstScenario {
1
2 @Given("^some context$")
4 // Write code here that turns the phrase above into concrete
actions
5
throw new PendingException();
6
}
7
8
9
@When("^some action is carried out$")
10
public void navigatesTo(String url) throws Throwable {
11
// Write code here that turns the phrase above into concrete
12 actions
14 }
15
}
18
Creamos el runner que va a ejectuar los tests:
Java
1 import cucumber.api.CucumberOptions;
2 import net.serenitybdd.cucumber.CucumberWithSerenity;
3 import org.junit.runner.RunWith;
4
5 @RunWith(CucumberWithSerenity.class)
6 @CucumberOptions("src/test/resources/MyFirstFeature.feature")
8 }
Java
@RunWith(CucumberWithSerenity.class)
1
@CucumberOptions(features = {"src/test/resources/myWorkingFeatures",
2
"src/test/resources/myPendingFeatures"})
3
public class RunTest {
4
}
19
Java
@RunWith(CucumberWithSerenity.class)
1
@CucumberOptions(features =
2 {"src/test/resources/myWorkingFeatures/frist.feature",
"src/test/resources/myPendingFeatures/second.feature"})
3
public class RunTest {
4
}
Los test definidos en este runner se pueden ejecutar desde la misma clase:
5. Generar el reporte
20
Anteriormente, en el tercer paso, incluimos un RunTest.java, que es el runner
que acabamos de definir, para ser ejecutado como test de integración.
Al invocar «mvn verify», ejecutará el runner y generará el reporte de serenity.
Por defecto lo crea en target/site/serenity.
21
En este ejemplo hemos definido varios escenarios de como cenan los niños
22
pequeños según sus gustos o sus capacidades. Pulsando en cada test, se ve
en detalle la ejecución de cada test.
Por ejemplo, vemos que Sofía cuando cena pescado con patatas, parece que
no le gusta demasiado.
23
Aunque parece que todavía no es su momento para tomar tortilla, y hay un
compromiso de hacerlo próximamente:
24
6. Conclusiones
Serenity nos ayuda a implementar los escenarios y tener un reporte del estado
de nuestra aplicación. Tiene una buena integración con cucumber y es
bastante sencilla tanto la configuración inicial como la implementación.
Esto es sólo el principio, iremos conociendo qué otras posibilidades nos ofrece
Serenity.
7. Referencias
Serenity
Github
Código de ejemplo
25
Conceptos básicos para una ejecución en Screenplay
26
27
Features: los features son las historias de usuario que se llevarán a cabo en
las pruebas y proveerá los métodos que utilizaremos más adelante para los
StepDefinitions.
28
Y los pegamos en los StepDefinitions correspondientes.
29
Se deben tener en cuenta las importaciones para las anotaciones @Given,
@When y @Then
Actor
30
Task: son las interacciones que se llevarán a cabo para cumplir con las
historias de usuarios planteadas. Las tasks se pueden caracterizar porque
no se habla en términos de clic, set data o select. Son verbos más amplios
como loguearse formulario, cerrar sesión y buscar.
Interactions: indicar acciones como dar clic, select, enviar datos, scroll, entre
otras cosas.
31
Qu
estions: son lo assert a llevar a cabo para asegurar el cumplimiento de ciertos
parámetros.
32
BDD para la automatización de pruebas
En la actualidad en muchas de las empresas del mundo digital en las que se
desarrolla software, se habla de la Automatización de pruebas, esto con la
finalidad de sacar productos más rápidos, reducir errores, procesos
automáticos y muchos otros motivos. Probablemente cuando se abarca este
tema lo primero que nos preguntamos es ¿Porque deberíamos hacerlo, quién
debería hacerlo y cómo hacerlo?, por ello hablaremos de BDD y algunas de las
cosas que se pueden realizar.
Por definición, las pruebas automatizadas son aquellas que se ejecutan sin
requerir la intervención de una persona. En el articulo sobre Selenium
WebDriver podremos encontrar información sobre la herramienta de
automatización Selenium y algunas particularidades para tener en cuenta a la
hora de la automatización de pruebas.
33
Hoy en día, BDD es una estrategia que encaja muy bien en las
metodologías ágiles, ya que en estas generalmente los requerimientos son
entregados como HU’s (Historias de usuario). Lo que se plantea a través del
desarrollo dirigido por comportamientos es la definición de un lenguaje común
para el negocio y equipo solucionador.
34
Una de las principales características cuando hacemos BDD con Cucumber es
que los escenarios de prueba a la funcionalidad se escriben mucho antes de la
elaboración del código de una prueba automatizada. Cuando se escribe en
lenguaje Gherkin sobre Cucumber se utilizan ejemplos concretos de lo que
queremos que haga el software y a medida que se escriben los escenarios,
estos asumen un papel importante como documentación del proyecto y
documentación sobre las pruebas automatizadas.
35
// Write code here that turns the phrase above into concrete actions
throw new PendingException();
}
Cucumber
Software
Descripción
Traducción del inglés-Cucumber es una herramienta de software utilizada por
programadores informáticos que admite el desarrollo basado en el
comportamiento. El enfoque central del Cucumber BDD es su analizador en
lenguaje simple llamado Gherkin.
Pruebas de software
Diagrama que en forma gráfica, evoca la situación en la cual las opiniones y/o
evaluaciones se concretan a través de una multitud de evaluadores y
aportantes (crowdsourced testing), trabajando en forma abierta y participativa
(crowdsourcing).
Las pruebas de software (en inglés software testing) son las investigaciones
empíricas y técnicas cuyo objetivo es proporcionar información objetiva e
independiente sobre la calidad del producto a la parte interesada o stakeholder.
Es una actividad más en el proceso de control de calidad.
36
Las pruebas son básicamente un conjunto de actividades dentro del desarrollo
de software. Dependiendo del tipo de pruebas, estas actividades podrán ser
implementadas en cualquier momento de dicho proceso de desarrollo. Existen
distintos modelos de desarrollo de software, así como modelos de pruebas. A
cada uno corresponde un nivel distinto de involucramiento en las actividades de
desarrollo.
Índice
1Definición
2Historia
3Proceso de Desarrollo de Software
o 3.1Pruebas estáticas
o 3.2Pruebas dinámicas
4Pruebas contra Especificación (ESRE)
5Tipos de pruebas por su ejecución
6Enfoques de pruebas
7Clasificación de las pruebas según lo que verifican
o 7.1Pruebas funcionales
7.1.1Niveles de prueba
o 7.2Pruebas no funcionales
8Herramientas para realizar pruebas de software
o 8.1Herramientas en código abierto
o 8.2Herramientas comerciales
8.2.1Herramientas de gestión de pruebas
8.2.2Herramientas para pruebas funcionales
8.2.3Herramientas para pruebas de carga y rendimiento
9Véase también
10Referencias
11Enlaces externos
Definición[editar]
Un caso de pruebas es una breve declaración de algo que debería ser
probado. Es el mecanismo, manual o automático, de verificar si el
comportamiento del sistema es el deseado o no. 1
Historia[editar]
El objetivo de las pruebas es presentar información sobre la calidad del
producto a las personas responsables de este. Las pruebas de calidad
presentan los siguientes objetivos: encontrar defectos o bugs, aumentar la
confianza en el nivel de calidad, facilitar información para la toma de
decisiones, evitar la aparición de defectos.
37
Teniendo esta afirmación en mente, la información que puede ser requerida es
de lo más variada. Esto hace que el proceso de testing sea completamente
dependiente del contexto en el que se desarrolla. 2
El ambiente ideal de las pruebas es aquel que es independiente del desarrollo
del software, de esta manera se logra objetividad en las pruebas.
A pesar de lo que muchos promueven, no existen las "mejores prácticas" como
tales. Toda práctica puede ser ideal para una situación, pero completamente
inútil o incluso perjudicial en otra.
Por esto, las actividades técnicas, documentación, enfoques y demás
elementos que condicionarán las pruebas a realizar deben ser seleccionadas y
utilizadas de la manera más eficiente según contexto del proyecto.
38
Las pruebas dinámicas permiten el uso de técnicas de caja negra y caja blanca
con mayor amplitud. Debido a la naturaleza dinámica de la ejecución de
pruebas es posible medir con mayor precisión el comportamiento de la
aplicación desarrollada.
Pruebas manuales
Pruebas automáticas
Enfoques de pruebas[editar]
Testing aleatorio3
Pruebas unitarias
Pruebas de componentes
Pruebas de integración
Pruebas de sistema
39
Pruebas de humo
Pruebas alpha
Pruebas beta
Pruebas de aceptación
Pruebas de regresión
Niveles de prueba[editar]
Podemos considerar el proceso de pruebas funcionales como un proceso
donde se va probando inicialmente lo de más bajo nivel y se van integrando y
probando paulatinamente componentes hasta lograr un sistema completo
totalmente probado. Por eso se dice que hay distintos niveles de prueba. Se
empieza por las pruebas unitarias, luego las pruebas de Integración, luego las
de pruebas de sistema, las de humo, las alpha, las beta y finalmente las
de pruebas de aceptación.
Las pruebas de regresión se puede considerar como la ejecución (normalmente
automática) de las pruebas ya realizadas hasta el momento.
Pruebas no funcionales[editar]
Una prueba no funcional es una prueba cuyo objetivo es la verificación de un
requisito que especifica criterios que pueden usarse para juzgar la operación
de un sistema (requisitos no funcionales) como por ejemplo la disponibilidad,
accesibilidad, usabilidad, mantenibilidad, seguridad, rendimiento. Podemos
clasificar las pruebas no funcionales según el tipo de requisito no funcional que
abarcan:
Pruebas de compatibilidad
Pruebas de seguridad
Pruebas de Estrés
Pruebas de usabilidad
Pruebas de rendimiento
Pruebas de internacionalización y localización
Pruebas de escalabilidad
Pruebas de mantenibilidad
Pruebas de instalabilidad
Pruebas de portabilidad
40
3. Herramientas para pruebas de carga y rendimiento
Herramientas en código abierto[editar]
Bugzilla Testopia
FitNesse
qaManager
qaBook
RTH.5
Salome-tmf
Squash TM
Test Environment Toolkit
TestLink
Testitool
XQual Studio
Radi-testdir
Data Generator
Selenium
Soapui
Watir
WatiN (Pruebas de aplicaciones web en .Net)
Capedit
Canoo WebTest
Solex
Imprimatur
SAMIE
ITP
WET
WebInject
JMeter
Gatling
FunkLoad
FWPTT load testing
loadUI
Herramientas comerciales[editar]
Herramientas de gestión de pruebas[editar]
ApTest Manager
41
HP Quality Center/ALM
PractiTest
QA Complete
QAS.Test Case Studio
qaBook
SMARTS
Silk Central
SpiraTest
T-Plan Professional
TestLog
Zephyr
Herramientas para pruebas funcionales[editar]
BASSP testConfig/testExecutor
Internet Macros
QA Wizard
QuickTest Pro
Ranorex
Rational Robot
Sahi
Silk Test
SoapTest
Squish
Test Complete
vTest
Herramientas para pruebas de carga y rendimiento[editar]
42
Esquema de una caja negra
Índice
1 Justificación
2 Caja negra y programación modular
3 Pruebas de software
4 Caja negra vs 'Cajanegrizar'
5 Véase también
Justificación
Pruebas de software
43
En pruebas de software, conociendo una función específica para la que fue
diseñado el producto, se pueden diseñar pruebas que demuestren que dicha
función está bien realizada. Dichas pruebas son llevadas a cabo sobre la
interfaz del software, es decir, de la función, actuando sobre ella como una caja
negra, proporcionando unas entradas y estudiando las salidas para ver si
concuerdan con las esperadas.
44
Pruebas de bifurcación (branch testing)
Pruebas de caminos básicos
Hacking[editar]
En los análisis de vulnerabilidades y pruebas de penetración de sistemas
informáticos (Pentest), las pruebas de caja blanca hacen referencia a una
metodología donde el ciberdelincuente posee conocimiento total y absoluto del
sistema que pretende atacar. El objetivo de estos tests, que perciben el sistema
de forma transparente, es simular el comportamiento de un intruso malicioso
que contase con permisos de acceso e información precisa acerca del sistema.
Testing aleatorio
Ir a la navegaciónIr a la búsqueda
AUTOMATIZACIÓN DE PRUEBAS
En las pruebas de software, la automatización de pruebas consiste en el uso
de software especial (casi siempre separado del software que se prueba) para
controlar la ejecución de pruebas y la comparación entre los resultados
obtenidos y los resultados esperados. La automatización de pruebas permite
incluir pruebas repetitivas y necesarias dentro de un proceso formal de pruebas
ya existente o bien adicionar pruebas cuya ejecución manual resultaría difícil.
45
Generalidades[editar]
Algunas pruebas de software tales como las pruebas de regresión intensivas
de bajo nivel pueden ser laboriosas y consumir mucho tiempo para su
ejecución si se realizan manualmente. Adicionalmente, una aproximación
manual puede no ser efectiva para encontrar ciertos tipos de defectos, mientras
que las pruebas automatizadas ofrecen una alternativa que lo permite. Una vez
que una prueba ha sido automatizada, esta puede ejecutarse repetitiva y
rápidamente en particular con productos de software que tienen ciclos de
mantenimiento largo, ya que incluso cambios relativamente menores en la vida
de una aplicación pueden inducir fallos en funcionalidades que anteriormente
operaban de manera correcta. Existen dos aproximaciones a las pruebas
automatizadas:
46
2. Normalmente se prueban los requerimientos básicos o el flujo normal
del caso de uso en vez de todos los flujos alternativos, dado que
extender las pruebas más allá de la prueba base eleva el costo del
producto. En algunas ocasiones los flujos alternativos son probados por
un equipo de pruebas más o menos independiente del equipo de
desarrollo.
Índice
47
1Principios de desarrollo
o 1.1Adaptar el proceso
o 1.2Equilibrar prioridades
o 1.3Demostrar valor iterativamente
o 1.4Colaboración entre equipos
o 1.5Enfocarse en la calidad
o 1.6Elevar el nivel de abstracción
2Ciclo de vida
3Principales características
4Fases
o 4.1Fase de Inicio
o 4.2Fase de Elaboración
o 4.3Fase de Desarrollo
o 4.4Fase de Transición
5Artefactos
o 5.1Inicio
o 5.2Elaboración
o 5.3Construcción
o 5.4Transición
6Historia
7Comentarios sobre Método
8Referencias
Principios de desarrollo[editar]
La Filosofía del RUP está basado en 6 principios clave que son los siguientes:
Adaptar el proceso[editar]
El proceso deberá adaptarse a las necesidades del cliente ya que es muy
importante interactuar con él. Las características propias del proyecto, el
tamaño del mismo, así como su tipo o las regulaciones que lo condicionen,
influirán en su diseño específico. También se deberá tener en cuenta el alcance
del proyecto.
Equilibrar prioridades[editar]
Los requisitos de los diversos participantes pueden ser diferentes,
contradictorios o disputarse recursos limitados. Debe poder encontrarse un
equilibrio que satisfaga los deseos de todos. Gracias a este equilibrio se podrán
corregir desacuerdos que surjan en el futuro. Al igual esta metodología está
acorde con UML, Unificado Modelo Lenguajes'
Demostrar valor iterativamente[editar]
Los proyectos se entregan, aunque sea de un modo interno, en etapas
iteradas. En cada iteración se analiza la opinión de los inversores, la
estabilidad y calidad del producto, y se refina la dirección del proyecto así como
también los riesgos involucrados.
48
Colaboración entre equipos[editar]
El desarrollo de software no lo hace una única persona sino múltiples equipos.
Debe haber una comunicación fluida para coordinar requisitos, desarrollo,
evaluaciones, planes, resultados, etc.
Enfocarse en la calidad[editar]
El control de calidad no debe realizarse al final de cada iteración, sino
en todos los aspectos de la producción. El aseguramiento de la calidad forma
parte del proceso de desarrollo y no de un grupo independiente, también es
una estrategia de desarrollo de software.
Elevar el nivel de abstracción[editar]
Artículo principal: Abstracción (informática)
Ciclo de vida[editar]
49
En la fase de elaboración, las iteraciones se orientan al desarrollo de la
baseline de la arquitectura, abarcan más los flujos de trabajo de requisitos,
modelo de negocios (refinamiento), análisis, diseño y una parte de
implementación orientado a la baseline de la arquitectura.
En la fase de construcción, se lleva a cabo la construcción del producto por
medio de una serie de iteraciones.
Para cada iteración se seleccionan algunos Casos de Uso, se refinan su
análisis y diseño y se procede a su implementación y pruebas. Se realiza una
pequeña cascada para cada ciclo. Se realizan iteraciones hasta que se termine
la implementación de la nueva versión del producto.
En la fase de transición se pretende garantizar que se tiene un producto
preparado para su entrega a la comunidad de usuarios.
Como se puede observar en cada fase participan todas las disciplinas, pero
dependiendo de la fase el esfuerzo dedicado a una disciplina varía.
Principales características[editar]
Desarrollo iterativo
Administración de requisitos
Uso de arquitectura basada en componentes
Control de cambios
Modelado visual del software
Verificación de la calidad del software
Pretende implementar las mejores prácticas en Ingeniería de Software,
de forma que se adapte a cualquier proyecto
El RUP es un producto de Rational (IBM). Se caracteriza por ser iterativo e
incremental, estar centrado en la arquitectura y guiado por los casos de uso.
Incluye artefactos (que son los productos tangibles del proceso como por
ejemplo, el modelo de casos de uso, el código fuente, etc.) y roles (papel que
desempeña una persona en un determinado momento, una persona puede
desempeñar distintos roles a lo largo del proceso).
Fases[editar]
Modelado de negocio
Requisitos
Análisis y Diseño
50
Implementación
Pruebas
Despliegue
Soporte
En esta parte nos encontramos con las siguientes etapas:
Artefactos[editar]
51
RUP en cada una de sus fases (pertenecientes a la estructura dinámica)
realiza una serie de artefactos que sirven para comprender mejor tanto
el análisis como el diseño del sistema (entre otros). Estos artefactos
(entre otros) son los siguientes:
Inicio[editar]
Documento Visión.
Diagramas de caso de uso.
Especificación de Requisitos.
Diagrama de Requisitos.
Elaboración[editar]
Documento Arquitectura que trabaja con las siguientes vistas:
Vista Lógica
o Diagrama de clases
o Modelo E-R (Si el sistema así lo requiere)
Vista de Implementación
o Diagrama de Secuencia
o Diagrama de estados
o Diagrama de Colaboración
Vista Conceptual
o Modelo de dominio
Vista física
52
Historia[editar]
Los orígenes de RUP se remontan al modelo espiral original de Barry
Boehm. Ken Hartman, uno de los contribuidores claves de RUP
colaboró con Boehm en la investigación. En 1995, Rational Software
compró una compañía sueca llamada Objectory AB, fundada por Ivar
Jacobson, famoso por haber incorporado los casos de uso a los
métodos de desarrollo orientados a objetos. El Rational Unified
Process fue el resultado de una convergencia de Rational Approach y
Objectory (el proceso de la empresa Objectory AB). El primer resultado
de esta fusión fue el Rational Objectory Process, la primera versión de
RUP, fue puesta en el mercado en 1998, siendo el arquitecto en jefe
Philippe Kruchten.
El primer libro para describir el proceso fue titulado The Unified
Software Development Process3
En 2006, IBM creó un subconjunto de RUP ajustado para proyectos
de desarrollo ágil - publicado como un método libre, llamado OpenUP a
través del sitio de Eclipse.4
53
El ISTQB (International Software Testing
Qualifications Board) es una organización de certificación de la calidad del
software que opera internacionalmente. El ISTQB fue fundado en noviembre de
2002 en Edimburgo y está legalmente registrado en Bélgica. Esta organización
se encarga de soportar y definir un esquema de certificación internacional.
Suministra el plan de estudios y el glosario sobre los que se definen los que se
establecen las guías para la acreditación y evaluación de los profesionales del
testing a cargo de los comités de cada país Según ellos mismos, el ISTQB ha
creado esquema más exitoso del mundo para la certificación de los probadores
de software. Hasta junio de 2013, ha certificado a más de 307.000 testers en
70 países en todo el mundo, con una tasa de crecimiento de aproximadamente
12.000 certificaciones por trimestre.
54
Certificaciones ISTQB
Si decides ir adelante con la certificación, aquí te dejamos algunos enlaces de
interés. Para más información podéis visitar el artículo ISTQB – Material de
Estudio de la web Testing en Español.
Desarrollo iterativo.
Forma disciplinada de asignar tareas y responsabilidades (quién hace
qué, cuándo y cómo).
Pretende implementar las mejores prácticas en Ingeniería de Software.
Administración de requisito.
Uso de arquitectura basada en componentes.
Control de cambios.
Modelado visual del software.
Verificación de la calidad del software.
55
Ciclo de Vida:
El ciclo de vida RUP es una implementación del desarrollo en espiral. Fue
creado ensamblando los elementos en secuencias semi-ordenadas. El ciclo de
vida organiza las tareas en fases e iteraciones. RUP divide el proceso en
cuatro fases, dentro de las cuales se realizan pocas pero grandes y formales
iteraciones en número variable según el proyecto. En la Figura muestra cómo
varía el esfuerzo asociado a las disciplinas según la fase en la que se
encuentre el proyecto RUP.
Las primeras iteraciones (en las fases de Inicio y Elaboración) se enfocan hacia
la comprensión del problema y la tecnología, la delimitación del ámbito del
proyecto, la eliminación de los riesgos críticos, y al establecimiento de una
baseline (línea base)2 de la arquitectura.
Durante la fase de inicio las iteraciones hacen mayor énfasis en actividades de
modelado del negocio y de requisitos.
56
Como se puede observar en cada fase participan todas las disciplinas, pero
dependiendo de la fase el esfuerzo dedicado a una disciplina varía.
Fases:
57
La parte izquierda de la V representa la corriente donde se definen las
especificaciones del sistema. La parte derecha de la V representa la corriente
donde se comprueba el sistema (contra las especificaciones definidas en la
parte izquierda). La parte de abajo, donde se encuentran ambas partes,
representa la corriente de desarrollo.
La corriente de especificación consiste principalmente de:
Especificaciones de requerimiento de usuario
Especificaciones funcionales
Especificaciones de diseño
La corriente de pruebas, por su parte, suele consistir de:
Calificación de instalación
Calificación operacional
Calificación de rendimiento
los proyectos lleguen finalmente a ser exitosos desde los puntos de vista de
objetivos de negocio, costos, funcionalidad, sencillez y capacidad de soporte.
La corriente de desarrollo puede consistir (depende del tipo de sistema y del
alcance del desarrollo) en personalización, configuración o codificación.
Pero la contra al chiste clásico de la implementación de soluciones de cómputo
puede lograrse utilizando metodologías de ingeniería y arquitectura de
software, logrando que
En general las metodologías llevan a cabo una serie de procesos comunes que
son buenas prácticas para lograr los objetivos antes mencionados
independientemente de cómo hayan sido diseñadas. Las fases que agrupan
estos procesos son las siguientes:
Análisis
Especificación
Diseño
Programación
Prueba
Documentación
Mantenimiento
Reingeniería
Así mismo las diferentes metodologías tienen diversos ciclos de vida del
desarrollo de software, los modelos más comúnmente utilizados son los
siguientes:
Modelo en cascada
Modelo en espiral
Modelo de prototipos
Método en V
Desarrollo por etapas
Escribiré más adelante acerca de cada una de las metodologías mencionadas
a continuación de forma más extensa posteriormente, por lo pronto dejaré
abierta la investigación a los lectores acerca de los diferentes marcos de
trabajo y metodologías formales de desarrollo de software. Las metodologías a
tratar desde el punto de vista de la arquitectura de software y la administración
de proyectos serán las siguientes:
Metodologías tradicionales
Capability Maturity Model (SW-CMM)
Capability Maturity Model Integration for Development (CMMI-DEV)
58
Big Design Up Front (BDUF)
Cleanroom Software Engineering
Rational Unified Process (RUP)
Essential Unified Process for Software Development (EssUP)
Fusebox Lifecycle Process (FLiP)
Software Process Improvement and Capability dEtermination (SPICE)
Métrica
Jackson System Development (JSD)
Joint Application Development (JAD)
Open Unified Process (OpenUP)
Metodologías ágiles
Extreme Programming (XP)
Scrum
Agile Modeling Adaptive Software Development (ASD)
Crystal Clear
Dynamic Systems Development Method (DSDM)
Feature Driven Development (FDD)
Lean Software Development (LSD)
Agile Unified Process (AUP)
Software Development Rhythms
Agile Documentation
ICONIX Process
Microsoft Solutions Framework (MSF)
Agile Data Method
Database Refactoring
LeanCMMI
Debido a la coyuntura económica internacional, que diría mi primo) que quiero
construirme una casa.
¿Qué pensaríais de mí si empezara a poner ladrillos sin antes haber hecho un
estudio...
...del suelo, materiales, recursos, y sin haber hecho un diseño previo?
Pensaríais de mí, lo mismo que yo pienso de la gente que se pone a programar
sin seguir una metodología de programación.
La metodología que os presento es el Modelo en V, o Modelo de Cuatro
Niveles.
¿En qué casos la utilizo?
Se trata de un proceso ideal, por su robustez, para proyectos pequeños, con
equipos de una a cinco personas.
También es ideal, por su claridad, para toda esa gente que nunca ha
programado siguiendo una metodología. Para el proyecto final de carrera o
para ese cliente que te ha conseguido un amigo de un amigo que te lo pide a ti
y no se dirige a una empresa por esto de la desaceleración.
¿En que consiste exactamente?
La figura que aparece a continuación presenta el Modelo en V, o Modelo de
Cuatro Niveles, del ciclo de vida de un proyecto de desarrollo de software. El
modelo representa, en forma de V, las relaciones temporales entre las distintas
fases del ciclo de desarrollo de un proyecto.
59
En los niveles lógicos del 1 al 4, para cada fase del desarrollo, existe una fase
correspondiente o paralela de verificación o validación. Esta estructura
obedece al principio de que para cada fase del desarrollo debe existir un
resultado verificable.
En la misma estructura se advierte también que la proximidad entre una fase
del desarrollo y su fase de verificación correspondiente va decreciendo a
medida que aumenta el nivel dentro de la V. La longitud de esta separación
intenta ser proporcional a la distancia en el tiempo entre una fase y su
homóloga de verificación.
El nivel 1 está orientado al “cliente”. El inicio del proyecto y el fin del
proyecto constituyen los dos extremos del ciclo. Se compone del análisis de
requisitos y especificaciones, se traduce en un documento de requisitos y
especificaciones.
El nivel 2 se dedica a las características funcionales del sistema
propuesto. Puede considerarse el sistema como una caja negra, y
caracterizarla únicamente con aquellas funciones que son directa o
indirectamente visibles por el usuario final, se traduce en un documento
de análisis funcional.
El nivel 3 define los componentes hardware y software del sistema final,
a cuyo conjunto se denomina arquitectura del sistema.
El nivel 4 es la fase de implementación, en la que se desarrollan los
elementos unitarios o módulos del programa.
60
¿Tengo que hacer documentación de todo?
Por supuesto. Cada fase tiene que estar respaldada por su documento
correspondiente y test.
¿Por qué utilizar una metodología?
Porque es lo más rápido y barato. Volviendo al ejemplo de la casa, imaginad la
cantidad de veces que debería volver atrás y tirar paredes ya hechas porque de
pronto descubro que el suelo es inestable, la bañera no cabe, la instalación
eléctrica no la había tenido en cuenta…
Pues, con el código pasa exactamente lo mismo.
Pruebas de carga
61
un lapso de tiempo determinado, según los usuarios que espera tender el
cliente en su sistema, sin forzarlo a una capacidad mayor a la esperada.
62
Acá colocamos a prueba la robustez y la confiabilidad del software probado,
sometiéndolo a condiciones de uso extremas. Entre estas condiciones se
incluyen el envío excesivo de peticiones y la ejecución en condiciones de
hardware limitadas. El objetivo es saturar el programa hasta un punto de
quiebre donde aparezcan bugs (defectos) potencialmente peligrosos y verificar
si los mismos pueden recuperar sus recursos físicos de forma autónoma sin
requerir la intervención humana.
GreenSQA
Somos una empresa especializada en la implementación de estándares,
metodologías y modelos usados en la Industria del software a nivel mundial
para las pruebas y el aseguramiento de calidad tanto de los productos de
software como del proceso productivo para su desarrollo.
greensqa.com/
63
Las pruebas de rendimiento son un conjunto de pruebas que nos permiten
medir la velocidad de ejecución de una serie de tareas en un sistema, bajo
unas condiciones determinadas.
Tipos de pruebas
Pruebas de carga:
Pruebas de stress:
Pruebas de resistencia:
64
Se realizan con el fin de determinar si la aplicación puede mantener la carga
esperada de manera continuada y durante un largo periodo de tiempo. El
objetivo principal de este tipo de pruebas es verificar que no existen fugas de
memoria o procesos que pierdan rendimiento transcurrido un cierto periodo de
tiempo.
65
Pruebas de rendimiento
66
Pruebas de Carga. Se comprueba si el sistema es capaz de asumir la
carga esperada, con tiempos de respuesta aceptables y consumos de recursos que
no pongan en peligro la producción.
Pruebas de Capacidad. Se obtienen los límites de funcionamiento del
sistema y los elementos que limitan el rendimiento dentro de la plataforma.
Pruebas de Estabilidad. Permiten garantizar el correcto uso de los
recursos por parte de la aplicación durante un periodo prolongado de tiempo.
Pruebas de Estrés o sobrecarga. Se somete al sistema a un nivel de
carga por encima de lo esperado, pero que puede llegar a producirse bajo
determinadas circunstancias.
Pruebas de Aislamiento. Se comprueba el correcto funcionamiento de
cada uno de los elementos que forman arquitecturas complejas.
Pruebas de Regresión. Se compara el rendimiento actual de una
aplicación con el que tenía antes de una implantación.
PRUEBAS DE RENDIMIENTO
METODOLOGIAS ÁGILES
67
tecnologías de la información y las comunicaciones (TIC) en el que la velocidad
y agilidad al cambio es fundamental. Por esta razón, surgen las metodologías
ágiles.
Contenidos [hide]
1 ¿QUÉ ES METODOLOGÍA AGILE?
o 1.1 Metodología Ágile
o 1.2 Metodologías Tradicionales
2 MANIFIESTO ÁGIL
3 ALGUNOS TIPOS DE METODOLOGÍAS ÁGILES
o 3.1 1. metodologia agile Scrum
o 3.2 2. Programación Extrema – XP
o 3.3 3. metodologia agile Kanban
o 3.4 1.-metodologia agile Scrum
o 3.5 2.- Programación Extrema (XP)
o 3.6 3.- metodologia agile Kanban
4 LA METODOLOGÍA ÁGIL MÁS USADA: SCRUM
¿QUÉ ES METODOLOGÍA AGILE?
A menudo me hacen la pregunta: ¿Qué es la metodología agile? En pocas
palabras, agile en informática, se usa para describir un método alternativo de
gestión de proyectos.
Agile es un proceso que ayuda a los equipos a proporcionar respuestas rápidas
a los cambios que se reciben sobre su proyecto. ¿Esto qué significa? Pues que
crea oportunidades para evaluar la dirección de un proyecto durante el ciclo de
desarrollo del mismo. Los equipos evalúan el proyecto en reuniones regulares
llamadas sprints o iteraciones.
Este 2019 he querido poner en un cuadro las diferencias más significativas que
existen entre la metodología agile y las metodologías tradicionales.
METODOLOGÍA ÁGILE METODOLOGÍAS
TRADICIONALES
68
arquitectura de software software mediante modelos
– Continuo Feedback acortando el – Poco Feedback lo que extiende el
tiempo de entrega tiempo de entrega
– Diversidad de roles – Mínimos roles
– Basadas en heurísticas a partir de – Basadas en normas de estándares
prácticas de producción de código de desarrollo
– Procesos menos controlados, – Procesos muy controlados por
pocas políticas y normas políticas y normas
– Capacidad de respuesta ante los – Seguimiento estricto del plan inicial
cambios de desarrollo
Sin embargo, siempre que sea posible, se debe considerar el enfoque ágil
(metodología agile), ya que proporciona más beneficios, especialmente para
las nuevas empresas. Permite lanzar una aplicación de software funcional
completa mucho más rápido. También es más rentable, ya que hacer cambios
es menos costoso que con el enfoque tradicional.
En base a este cuadro podemos entender mejor ahora el manifiesto ágil.
MANIFIESTO ÁGIL
Los 11 principios del manifiesto ágil son:
69
6. La forma más eficiente y efectiva de comunicar información de ida y
vuelta dentro de un equipo de desarrollo es mediante la conversación cara a
cara.
7. El software/producto/servicio que funcione es la principal medida de
progreso.
8. Los procesos ágiles promueven el desarrollo sostenido. Los
desarrolladores, patrocinadores, y usuarios han de mantener un ritmo
constante de forma indefinida.
9. La atención continua a la excelencia técnica ensalza la agilidad.
10. La simplicidad como arte de maximizar la cantidad de trabajo que se
hace, es esencial.
11. Las mejores arquitecturas, requisitos y diseños emergen de equipos que
se auto organizan.
70
Es un modelo de desarrollo ágil caracterizado por:
4.- Seguir los pasos del desarrollo ágil: Desde el concepto o visión general de
la necesidad del cliente, construcción del producto de forma incremental a
través de iteraciones. Estas iteraciones (En scrum se llaman Sprint) se repiten
de forma continua hasta que el cliente da por cerrada la evolución del producto.
Características específicas de SCRUM.
TE PUEDE INTERESAR: Qué es Cloud Computing
71
Metodología ágil centrada en potenciar las relaciones interpersonales como
clave para el éxito en desarrollo del software, promoviendo el trabajo en
equipo, preocupándose por el aprendizaje de los desarrolladores y propiciando
un buen clima de trabajo.
Características específicas de XP
72
3.- METODOLOGIA AGILE KANBAN
Kanban es una palabra japonesa que significa “tarjetas visuales” (kan significa
visual, y ban tarjeta). Esta técnica se creó en Toyota, y se utiliza para controlar
el avance del trabajo, en el contexto de una línea de producción. Actualmente
está siendo aplicado en la gestión de proyectos software.
Fuente: Javier Garzás
[device]
[countdown id=»1517594246″ relative=»70″ format=»dHMS»
serverSync=»true» alwaysExpire=»false» compact=»false» tickInterval=»1″
counter=»until» template=»minimal» expiryText=»C%C3%B3digo%3A
%23W23%7BQ~%2412DACWE1″ until=»12,2,2018,16,53″]
[/device]
Se basa en una idea muy simple. Ésta es que el trabajo en curso (Work In
Progress, WIP)
73
LA METODOLOGÍA ÁGIL MÁS USADA: SCRUM
Lo óptimo recomendado por la DSDM Consortium (organización ágil), es la
utilización de modelos de gestión mixtos. Recomendado como modelo de
gestión integral y estratégica del proyecto a PRINCE2 y en las fases iterativas
que se repitan durante la creación del producto/servicio se debería usar al
modelo SCRUM.
LA METODOLOGÍA SCRUM O SCRUM METHODOLOGY
74
VALORES DE SCRUM
Para trabajar con una metodología scrum se necesita una base firme de
valores que sirvan como fundamento para el proceso y los principios del
equipo. A través del uso del trabajo en equipo y la mejora
continua, Scrum tanto crea como depende de estos valores. Éstos son Foco,
Coraje, Apertura, Compromiso y Respeto.
Foco. Porque nos enfocamos en sólo unas pocas cosas a la vez,
trabajamos bien juntos y producimos un resultado excelente. De este modo
logramos entregar ítems valiosos antes.
75
Scrum es un framework pensado para construir productos: todo comienza
cuando tenemos stakeholders que necesitan uno.
TE PUEDE INTERESAR: Metodología SCRUM
76
cada Sprint. Es una versión integrada del producto, mantenida en un nivel de
calidad lo suficientemente alto como para poder ser lanzado si así lo decidiera
el Product Owner. Adicionalmente a estos artefactos, Scrum requiere
transparencia dentro del equipo y para con las partes interesadas. Por lo tanto,
el Equipo Scrum produce muestras visibles de planes y avances.
Scrum incluye cinco Actividades o reuniones. Estas son: el Refinamiento del
Product Backlog, la Planificación del Sprint, el Scrum Diario, la Revisión
del Sprint y la Retrospectiva del Sprint.
Describiremos los roles, artefactos, actividades y el flujo del ciclo de Scrum a
continuación.
ROLES DE SCRUM
Los roles que existen en scrum son tres. Product Owner, Equipo de
desarrollo y Scrum Master. La manera en que confluyen dichos roles dentro de
la consecución del producto se muestra en esta gráfica.
77
El Equipo de Desarrollo es responsable de determinar cuánto trabajo puede ser
tomado en un Sprint, y de producir un Incremento de Producto al finalizar el
mismo.
De todas formas, el Product Owner, en Scrum, se encuentra en una posición
única. Suele ser la persona más cercana al “costado del negocio» de todo el
proyecto. Es típicamente el encargado de «sacar el producto» y quien se
espera hará el mejor trabajo posible en cuanto a satisfacer a todas las partes
interesadas. El Product Owner lleva adelante esta tarea mediante la gestión
del Product Backlog y asegurándose que el Product Backlog y el avance contra
éste se mantengan visibles.
El Product Owner, al decidir sobre qué debe hacer y qué posponer el Equipo de
Desarrollo, toma las decisiones de alcance versus fechas que llevan al mejor
producto posible.
78
Los miembros del Equipo de Desarrollo tienen la responsabilidad de auto-
¬organizarse para lograr el objetivo del Sprint, produciendo cada nuevo
Incremento de Producto siguiendo el Plan del Sprint.
El Product Owner crea una lista ordenada de lo que hay que hacer. Los
miembros del Equipo de Desarrollo hacen un pronóstico de cuánto pueden
realizar en un Sprint y deciden cómo lo van a llevar a cabo.
EL ROL SCRUM MASTER
El Scrum Master es un «líder servicial», que ayuda al resto del equipo Scrum a
seguir su proceso. Debe tener una buena comprensión de Scrum y la habilidad
de capacitar a otros en sus sutilezas.
El Scrum Master trabaja junto al Product Owner para que éste logre crear y
mantener el Product Backlog. Trabaja junto al Equipo de Desarrollo para
encontrar e implementar las prácticas técnicas que les permitirán tener un
Incremento de Producto ‘Hecho’ al final de cada Sprint. Trabaja con el
Equipo Scrum completo para evolucionar la Definición de Hecho.
El Scrum Master también es responsable de velar por la remoción de los
impedimentos al avance del equipo. Estos impedimentos pueden ser externos
al equipo, como por ejemplo la falta de apoyo de otro equipo, o internos, como
ser que el Product Owner no sepa preparar el Product Backlog de forma
adecuada. El Scrum Master fomenta la auto-¬organización. Los problemas
deben ser resueltos por el equipo siempre que sea posible.
El Scrum Master actúa como coach para el Equipo Scrum, ayudando a sus
miembros a ejecutar el proceso Scrum. Los ayuda a trabajar juntos y a
aprender el framework Scrum, al tiempo que los protege de distracciones tanto
internas como externas. Puede facilitar reuniones y ayuda a mantener al
Equipo Scrum en el buen camino, productivo y creciendo en sus capacidades.
El Scrum Master es responsable de asegurar que Scrum sea comprendido e
implementado, tanto dentro como fuera del equipo. Ayuda a personas fuera del
equipo a entender el proceso y a comprender qué interacciones con el equipo
son valiosas y cuáles no. El Scrum Master ayuda a todos a mejorar para que el
Equipo Scrum sea más productivo y valioso.
79
PRODUCT BACKLOG – ARTEFACTO
El Product Backlog es un artefacto esencial en Scrum. Es una lista ordenada
de ideas para el producto, mantenida en el orden en que esperamos llevarlas a
cabo. Es la única fuente posible de requerimientos. Esto significa que todo el
trabajo que realiza el Equipo de Desarrollo proviene del Product Backlog. Toda
idea de funcionalidad, mejora, bug fix, requerimiento de documentación -¬todas
y cada una de las tareas que llevan a cabo-¬se deriva de un ítem
de Product Backlog. Cada ítem en el Product Backlog incluye una descripción y
una estimación.
El Product Backlog puede comenzar como una lista extensa o breve. Puede
estar descrito de forma detallada o muy vaga. Típicamente empieza siendo
breve e impreciso y se va convirtiendo en más extenso y concreto con el correr
del tiempo. Aquellos ítems del Product Backlog que estén programados para
ser implementados en breve serán «refinados»: es decir clarificados, definidos
en mayor detalle, divididos en fracciones más pequeñas, como parte de la
actividad de Refinamiento del Product Backlog.
El Product Owner es responsable de mantener el Product Backlog, aunque
puede -¬y debería-¬recibir ayuda para construirlo y mantenerlo actualizado.
Los ítems del Product Backlog pueden surgir del Product Owner, los miembros
del Equipo de Desarrollo o incluso de otras partes interesadas.
RECORDATORIO :: ROLES
Product Owner
Scrum Master
Equipo de desarrollo
80
REFINAMIENTO DEL PRODUCT BACKLOG – ACTIVIDAD
Como los Ítems del Product Backlog a menudo son grandes y generales al
momento de nacer, y dado que las ideas vienen y van y las prioridades
cambian, el Refinamiento de Product Backlog es una actividad constante a lo
largo de un proyecto Scrum. Esta actividad incluye pero no se limita a:
estimar ítems.
Un beneficio clave del Refinamiento de Product Backlog es la preparación de
los Sprints subsiguientes. Es por ello que esta actividad presta especial
atención a la preparación de ítems que deben ser implementados en breve.
Hay muchos elementos a considerar al llevarla a cabo, incluyendo pero no
limitado a:
Cada ítem que ingresa al Sprint debería idealmente representar un
incremento de «valor de negocio».
El Equipo de Desarrollo debe poder construir cada ítem dentro de un
único Sprint.
Debe ser claro para todos qué se pretende.
Dependiendo de la naturaleza del producto, pueden ser necesarias otras
habilidades y aportes. Sea cual sea el caso, siempre es preferible considerar al
Refinamiento de Product Backlog una actividad para todos los miembros del
equipo, no solo para el Product Owner.
PLANIFICACIÓN DEL SPRINT – ACTIVIDAD
Cada Sprint comienza con una actividad acotada en el tiempo (time-¬boxed)
llamada Planificación del Sprint. En esta reunión el Equipo Scrum colabora
para seleccionar y comprender el trabajo que será realizado en el Sprint que
está por comenzar.
El equipo completo participa de la reunión de Planificación del Sprint.
Trabajando a partir del Product Backlog ordenado, el Product Owner y los
Miembros del Equipo de Desarrollo discuten cada ítem y llegan a un acuerdo
compartido respecto al mismo y al trabajo necesario para completarlo en forma
consistente con la Definición de Hecho actual.
Todas las reuniones de Scrum son acotadas en el tiempo. La duración
recomendada para la Planificación del Sprint es de dos horas o menos por
81
cada semana de duración del Sprint. Debido a que la reunión está acotada en
el tiempo, el éxito de la Planificación del Sprint es altamente dependiente de la
calidad del Product Backlog utilizado. Es por esto que el Refinamiento
del Product Backlog es una actividad importante en Scrum.
En Scrum, la Planificación del Sprint se describe como compuesta de dos
partes:
TE PUEDE INTERESAR: Qué es Cloud Computing
82
durante el Sprint y -¬dentro de un rango de circunstancias razonables-¬espera
poder completarlo. El Equipo de Desarrollo pronostica la cantidad de trabajo
que completará y se compromete a realizarlo.
Resumiendo: en la Planificación del Sprint, el Equipo de Desarrollo
considera y discute ítems del Product Backlog con el Product Owner;;
se asegura de haberlos comprendido;;
83
Equipo Scrum y cada parte del mismo debe ser aceptable para el Product
Owner.
INDICADORES ADICIONALES DE AVANCE VISIBLE
Scrum requiere transparencia dentro y fuera del equipo. Así como el
Incremento de Producto es la forma más poderosa de crear transparencia, el
Equipo Scrum creará cualquier otro artefacto que necesite para asegurarse que
el estado del proyecto sea transmitido de forma eficaz. Los burn charts y task
boards son algunos de los más populares.
DEFINICIÓN DE HECHO (DEFINITION OF DONE) – ACUERDO
Cuando se entrega el Incremento de Producto, éste tiene que estar «hecho» de
acuerdo a una visión compartida de qué significa «hecho». Esta definición es
diferente para cada Equipo Scrum y, a medida que el equipo madura, la
Definición de Hecho se irá expandiendo y se volverá más exigente.
Ésta siempre debe incluir la noción de que el Incremento de Producto es de
calidad suficiente como para ser lanzado: el Product Owner podría elegir
lanzarlo en forma inmediata.
El Incremento de Producto contiene toda la funcionalidad de Incrementos de
Producto anteriores y está plenamente verificado de manera que todos los
Ítems del Product Backlog completados continúan funcionando en forma
conjunta.
SCRUM DIARIO – ACTIVIDAD
El Equipo de Desarrollo se auto-¬organiza. El mismo emplea el Scrum
Diario para asegurarse que todo marcha “viento en popa” para lograr el
Objetivo del Sprint. La reunión tiene lugar a la misma hora y en el mismo lugar
todos los días. Cada Miembro del Equipo de Desarrollo cuenta tres cosas:
Qué he logrado desde el último Scrum Diario;
Lo qué pienso lograr entre este momento y el próximo Scrum Diario;
Qué está impidiendo mi avance.
Puede haber breves preguntas y respuestas aclaratorias, pero no hay una
discusión de ninguno de estos asuntos durante el Scrum Diario. Sin embargo,
muchos equipos se reúnen inmediatamente luego del Scrum Diario para
trabajar sobre cualquier asunto que haya surgido de esta reunión.
84
El Scrum Diario es un elemento clave de Scrum, que lleva a obtener
transparencia, confianza y una mejor performance. Permite el reconocimiento
rápido de problemas y promueve la auto-¬organización y que el equipo
aprenda a depender sólo de sí mismo. Las reuniones de Scrum siempre las
acotamos en el tiempo. La duración máxima recomendada para el Scrum
Diario es de quince minutos.
RECORDATORIO :: ARTEFACTOS
Sprint Backlog
Incremento de Producto
Product Backlog
La Revisión del Sprint brinda a todos los presentes una vista panorámica del
Incremento de Producto. Bajo esta perspectiva, es común actualizar el Product
Backlog como parte de la Revisión del Sprint.
85
qué salió bien y qué no tan bien, e identifica potenciales mejoras. Luego diseña
un plan para mejorar las cosas a futuro. Todas las reuniones en Scrum están
acotadas por tiempo. La duración recomendada de la Retrospectiva del Sprint
es una hora por cada semana de duración del Sprint.
Para resumir:
Contenidos [hide]
1 Qué es Cloud Computing
2 Características del Cloud Computing
o 2.1 Ubicuidad
o 2.2 Tecnología de la virtualización
o 2.3 Virtualización
o 2.4 Facilidad de uso
o 2.5 Escalabilidad
3 Tipos del Cloud Computing
o 3.1 Software como servicio – SaaS.
o 3.2 Infraestructura como servicio – IaaS.
86
o 3.3 Plataforma como servicio – PaaS
4 Modos del Cloud Computing
o 4.1 Nubes públicas
o 4.2 Nubes privadas
o 4.3 Nubes híbridas
o 4.4 Nubes comunitarias
5 Beneficios usando Cloud Computing
o 5.1 Reducción de costes
o 5.2 Seguridad y fiabilidad
o 5.3 Flexibilidad
o 5.4 Movilidad
o 5.5 Focalización
QUÉ ES CLOUD COMPUTING
Definamos Qué es Cloud Computing. Nace de los términos Cloud o Nube, es el
símbolo que se usa generalmente para representar internet. Es una metáfora
empleada para hacer referencia al servicio Web que permite el
almacenamiento de archivos y el uso de aplicaciones online. Y del termino
Computing o Computación, que reúne los conceptos de informática, lógica de
coordinación y almacenamiento.
Concepto conocido también bajo los términos de servicios en la
nube, informática en la nube, o nube de conceptos, es un paradigma que
permite ofrecer servicios de informática y almacenamiento a través de Internet,
los sistemas de información están alojados en servidores accesibles desde
internet. Son servidores encargados de atender peticiones en cualquier
momento y en modo servicio, de recursos computacionales, hardware, software
y datos, mediante una conexión a Internet.
El término Cloud Computing no hace referencia a una tecnología concreta sino
a un modelo de implementación de servicios de las TIC a través de Internet.
Los servicios más habituales en la nube son el almacenamiento de datos,
aplicaciones de software, procesamiento remoto de datos, repositorio de
contenidos, entornos colaborativos, etc.
87
UBICUIDAD
Posibilidad ofrecida a los usuarios de acceder a los servicios contratados
de Cloud Computing desde cualquier dispositivo ,en cualquier lugar y en
cualquier momento, siempre cuando se disponga de conexión a redes de
internet.
TECNOLOGÍA DE LA VIRTUALIZACIÓN
Ofrece a los usuarios el nivel de flexibilidad necesario con los dispositivos para
la realización de las actividades diarias.
VIRTUALIZACIÓN
Consiste en la creación, a través de software, de una versión virtual de algún
recurso tecnológico. Es la tecnología que sustenta el Cloud Computing.
FACILIDAD DE USO
La complejidad tecnológica del Cloud es transparente para el usuario final, no
hay necesidad de conocer la infraestructura que hay detrás de la nube para
hacer uso de sus servicios.
ESCALABILIDAD
Provisión escalable y elástica en función de la demanda. Capacidad
consistente en aumentar o disminuir las funcionalidades ofrecidas al cliente, en
función de sus necesidades puntuales sin necesidad de nuevos contratos,
eliminando así el sobrecoste derivado de mantener los sistemas infrautilizados
fuera de las puntas de demanda.
88
Posiblemente en la vanguardia de las Empresas que ofrecen este servicio
está Salesforce, que comenzó a prestar sus servicios en 1999 siendo pioneros
en el sector, es el paradigma de software como servicio. Grandes
organizaciones de todo tipo de sectores han contratado sus servicios con éxito
como por ejemplo en las Finanza (American Express, Barclays Bank),
Tecnológico (Vodafone, BCM software, Bq, Spotify, EA sport), trasportes
(KLM).
INFRAESTRUCTURA COMO SERVICIO – IAAS.
Con este modelo se externaliza el uso de servidores fuera del entorno de la
empresa, transfiriendo el espacio en disco o las bases de datos a servidores
externos. El consumidor alquila los recursos de hardware (ciclos de CPU,
memoria, disco o equipamientos de red) en vez de comprarlos e instalarlos en
su propio CPD, lo que le permite ir variando el consumo de los recursos en
función de sus necesidades, es lo que se conoce como elasticidad de la
infraestructura.
89
desarrollo de aplicaciones que necesitan herramientas para alojar y desarrollar
sus propias aplicaciones. Entre estas herramientas están bases de datos,
servidores de aplicaciones, gestores de fuentes, software de trabajo
colaborativo, etc.
NUBES PÚBLICAS
Los servicios se encuentran instalados en servidores externos a la empresa. Su
principal ventaja es que no requieren de fuertes inversiones en hardware y en
mantenimiento, sólo se paga por el uso. Los trabajos de gestión,
mantenimiento y seguridad recaen en la empresa proveedora del servicio. La
desventaja es que toda la información de la empresa estará en manos de
terceros, por lo que se debe comprobar a quién se contrata el servicio y su
fiabilidad: la empresa proveedora debe informar sobre el grado de protección,
los usuarios que tienen acceso y las copias de seguridad de los datos.
NUBES PRIVADAS
El desarrollo es el mismo que en las públicas con la salvedad de que los
servidores se encuentran dentro de la propia empresa que genera y mantiene
la nube. De esta manera la empresa controla los datos lo que supone mayor
seguridad para la misma. Como contrapartida, se debe realizar una inversión
más fuerte en la compra de los equipos, la contratación de ancho de banda y
sistemas y software de seguridad, además de los gastos de mantenimiento.
NUBES HÍBRIDAS
Permiten aprovechar las aplicaciones locales en una nube pública, es decir, la
empresa es propietaria de una parte de la red y comparte otra parte. Permite,
90
entre otras cosas, sincronizar y/o replicar datos entre clouds públicas y
privadas y migrar servicios de forma continua entre ambos tipos de nubes.
NUBES COMUNITARIAS
Compartidas por varias organizaciones y dan soporte a una comunidad
específica con preocupaciones similares. Tienen características de los modelos
indicados anteriormente: pueden ser gestionadas por la empresa o por terceros
y su ubicación puede ser interna o externa a la empresa. Algunos de estos
servicios son gratuitos, otros son de pago (aunque normalmente más
económicos que la compra de la licencias tradicionales).
REDUCCIÓN DE COSTES
La tecnología cloud convierte los coste fijos (de infraestructura) en coste
variables (de operación), lo que permite mejorar el control del gasto y evita la
adquisición de activos así como su mantenimiento. Al no gestionar el centro de
procesos de datos (CPD) y el desarrollo/mantenimiento del software de gestión
se consigue reducir costes de adquisición de equipos y del personal técnico,
los problemas de actualizaciones de hardware y software, despliegues de SI,
etc
SEGURIDAD Y FIABILIDAD
Habitualmente la seguridad es mayor ya que los proveedores de servicios de
Cloud suelen disponer de políticas de seguridad mucho más rigurosas. Del
mismo modo, al tratase de un servicio en la nube, es altamente improbable la
caída de servicio o cualquier pérdida de información y estará disponible 24X7.
El acceso puede realizarse desde cualquier lugar del mundo, a cualquier hora y
desde cualquier dispositivo al realizarse el acceso por Internet. Las soluciones
tradicionales son mucho más limitadas.
FLEXIBILIDAD
El servicio se paga de acuerdo a la demanda. La forma de pago suele ser por
mes y se suele pagar una cuota dependiendo del número de usuarios,
módulos, servicios, potencia… etc.
91
MOVILIDAD
Los datos alojados en la nube pueden ser consultados desde cualquier lugar.
FOCALIZACIÓN
Permite a las compañías y organismos públicos concentrar su energía en su
actividad principal (core business).
Un vídeo explicativo de lo que es cloud computing que a mi me gusta mucho.
Como no, es de google.
Ingeniería de software
Ingeniería de software
Áreas del
Software
saber
Desarrollo y
Campo de
mantenimiento
aplicación
de software
Ciencias de la
Subárea de
computación
92
de software.1Integra ciencias de la computación y las ciencias básicas cuyos
orígenes se encuentran en la ingeniería.2
Se citan las definiciones más reconocidas, formuladas por prestigiosos autores:
93
un producto innovador regido por metodologías y las buenas prácticas. Dicho
producto es un medio que interviene en las funciones de sus usuarios para
obtener un proceso productivo más eficaz y eficiente; hoy en día las empresas
no podrían funcionar sin software porque este es un producto de uso masivo;
por lo cual, el nivel de una empresa está determinado por la calidad de su
infraestructura tecnológica y los productos desarrollados o adquiridos de
acuerdo a sus necesidades.
Índice
1Historia
2Objetivos
3Recursos
o 3.1Recursos humanos
o 3.2Recursos de entorno
4Implicaciones socioeconómicas
o 4.1Económicamente
o 4.2Socialmente
5Notaciones
o 5.1LUM (lenguaje unificado de modelado) o UML
o 5.2BPMN (notación para el modelado de procesos de negocios)
o 5.3Diagrama de flujo de datos (DFD)
6Herramienta CASE
7Metodología
o 7.1Etapas del proceso
7.1.1Obtención de los requisitos
7.1.2Análisis de requisitos
7.1.3Limitaciones[20]
7.1.4Especificación
7.1.5Arquitectura
7.1.6Programación
7.1.7Desarrollo de la aplicación
7.1.8Pruebas de software
7.1.9Implementación
7.1.10Documentación
7.1.11Mantenimiento
o 7.2Ventajas[24]
7.2.1Desde el punto de vista de gestión
7.2.2Desde el punto de vista de los ingenieros de software
7.2.3Desde el punto de vista de cliente o usuario final
8Modelos y ciclos de vida del desarrollo de software
o 8.1Modelo en cascada o clásico
o 8.2Modelo de prototipos
o 8.3Modelo en espiral
94
o 8.4Modelo de desarrollo por etapas
o 8.5Modelo incremental o iterativo
8.5.1Modelo estructurado
8.5.2Modelo orientado a objetos
o 8.6Modelo RAD (rapid application development)
o 8.7Modelo de desarrollo concurrente
o 8.8Proceso unificado del desarrollo de software
9Producto
10Naturaleza de la ingeniería de software
o 10.1Matemáticas
o 10.2Creación
o 10.3Gestión de Proyecto
11Participantes y papeles
o 11.1Cliente
o 11.2Desarrolladores
o 11.3Gestores
o 11.4Usuarios finales
o 11.5Código ético de un ingeniero de software
12Educación ética
o 12.1Organizaciones
13Véase también
14Referencias
15Bibliografía
16Enlaces externos
Historia[editar]
Artículo principal: Historia de la ingeniería del software
95
contra la vida de estas personas.10Esto remarca los riesgos de control
por software,11 afectando directamente al nombre de la ingeniería de software.
A principios de los 1980,12 la ingeniería del software ya había surgido como una
genuina profesión, para estar al lado de las ciencias de la computación y la
ingeniería tradicional. Antes de esto, las tareas eran corridas poniendo tarjetas
perforadas como entrada en el lector de tarjetas de la máquina y se esperaban
los resultados devueltos por la impresora.
Debido a la necesidad de traducir frecuentemente el software viejo para
atender las necesidades de las nuevas máquinas, se desarrollaron lenguajes
de orden superior. A medida que apareció el software libre, las organizaciones
de usuarios comúnmente lo liberaban.
Durante mucho tiempo, solucionar la crisis del software fue de suma
importancia para investigadores y empresas que se dedicaban a producir
herramientas de software.
Para la década de 1980, el costo de propiedad y mantenimiento
del software fue dos veces más caro que el propio desarrollo del software, y
durante la década de 1990, el costo de propiedad y mantenimiento aumentó
30 % con respecto a la década anterior. En 1995, muchos de los proyectos de
desarrollo estaban operacionales, pero no eran considerados exitosos. El
proyecto de software medio sobrepasaba en un 50 % la estimación de tiempo
previamente realizada, además, el 75 % de todos los grandes productos
de software que eran entregados al cliente tenían fallas tan graves, que no eran
usados en lo absoluto o simplemente no cumplían con los requerimientos del
cliente.11
Algunos expertos argumentaron que la crisis del software era debido a la falta
de disciplina de los programadores.
Cada nueva tecnología y práctica de la década de 1970 a la de 1990 fue
pregonada como la única solución a todos los problemas y el caos que llevó a
la crisis del software. Lo cierto es que la búsqueda de una única clave para el
éxito nunca funcionó. El campo de la ingeniería de software parece un campo
demasiado complejo y amplio para una única solución que sirva para mejorar la
mayoría de los problemas, y cada problema representa solo una pequeña
porción de todos los problemas de software.
El auge del uso del Internet llevó a un vertiginoso crecimiento en la demanda
de sistemas internacionales de despliegue de información en la World Wide
Web. Los desarrolladores se vieron en la tarea de manejar ilustraciones,
mapas, fotografías y animaciones, a un ritmo nunca antes visto, con casi
ningún método para optimizar la visualización y almacenamiento de imágenes.
También fueron necesarios sistemas para traducir el flujo de información en
múltiples idiomas extranjeros a lenguaje natural humano, con muchos sistemas
de software diseñados para uso multilenguaje, basado en traductores
humanos.
La ingeniería de software contribuyó alrededor de 90 000 millones de dólares
por año, ya que entró en juego el Internet. Esto hace que los desarrolladores
tuviesen que manejar imágenes mapas y animaciones para optimizar la
visualización/almacenamiento de imágenes (como el uso de imágenes en
96
miniatura). El uso de los navegadores y utilización de lenguaje HTML cambia
drásticamente la visión y recepción de la información.
Las amplias conexiones de red causaron la proliferación de virus informáticos y
basura o spam en los correos electrónicos (E-mail). Esta situación puso en una
carrera contra el tiempo a los desarrolladores con el fin de crear nuevos
sistemas de bloqueo o seguridad de dichas anomalías en la informática, ya que
se volvían sumamente tediosas y difíciles de arreglar 11
Después de una fuerte y creciente demanda surge la necesidad de crear
soluciones de software a bajo costo, lo que conlleva al uso de metodologías
más simples y rápidas que desarrollan software funcional. Cabe señalar que los
sistemas más pequeños tenían un enfoque más simple y rápido para poder
administrar el desarrollo de cálculos y algoritmos de software.
Objetivos[editar]
La ingeniería de software aplica diferentes normas y métodos que permiten
obtener mejores resultados, en cuanto al desarrollo y uso del software,
mediante la aplicación correcta de estos procedimientos se puede llegar a
cumplir de manera satisfactoria con los objetivos fundamentales de la
ingeniería de software.
Entre los objetivos de la ingeniería de software están:
Recursos[editar]
Recursos humanos[editar]
Artículo principal: Recursos humanos
97
Recursos de entorno[editar]
Es el entorno de las aplicaciones (software y hardware)
el hardware proporciona el medio físico para desarrollar las aplicaciones
(software), este recurso es indispensable.14
Implicaciones socioeconómicas[editar]
Económicamente[editar]
En los Estados Unidos, el software contribuyó a una octava parte de todo el
incremento del PIB durante la década de 1990 (alrededor de 90 000 millones
de dólares por año), y un noveno de todo el crecimiento de productividad
durante los últimos años de la década (alrededor de 33.000 millones de dólares
estadounidenses por año). La ingeniería de software contribuyó a US$ 1 billón
de crecimiento económico y productividad en esa década. Alrededor del globo,
el software contribuye al crecimiento económico de maneras similares, aunque
es difícil de encontrar estadísticas fiables. [cita requerida]
Además, con la industria del lenguaje está hallando cada vez más campos de
aplicación a escala global.
Socialmente[editar]
La ingeniería de software cambia la cultura del mundo debido al extendido uso
de la computadora. El correo electrónico (e-mail), la WWW y la mensajería
instantánea permiten a la gente interactuar de nuevas maneras. El software
baja el costo y mejora la calidad de los servicios de salud, los departamentos
de bomberos, las dependencias gubernamentales y otros servicios sociales.
Los proyectos exitosos donde se han usado métodos de ingeniería
de software incluyen a GNU/Linux, el software del transbordador espacial,
los cajeros automáticos y muchos otros.
Notaciones[editar]
LUM (lenguaje unificado de modelado) o UML[editar]
Artículo principal: Lenguaje unificado de modelado
98
El objetivo de la notación para el modelado de procesos de negocios es
proporcionar de una manera fácil de definir y analizar los procesos de negocios
públicos y privados simulando un diagrama de flujo. La notación ha sido
diseñada específicamente para coordinar la secuencia de los procesos y los
mensajes que fluyen entre los participantes del mismo, con un conjunto de
actividades relacionadas. Características básicas de los elementos de BPMN
Herramienta CASE[editar]
Las Herramienta CASE son herramientas computacionales (software) que
están destinadas a asistir en los procesos de ciclo de vida de un software,
facilitan la producción del software, varias se basan principalmente en la idea
de un modelo gráfico.17
Metodología[editar]
Un objetivo de décadas ha sido el encontrar procesos y metodologías, que
sean sistemáticas, predecibles y repetibles, a fin de mejorar la productividad en
el desarrollo y la calidad del producto software, en pocas palabras, determina
los pasos a seguir y como realizarlos para finalizar una tarea.
Etapas del proceso[editar]
La ingeniería de software requiere llevar a cabo numerosas tareas agrupadas
en etapas, al conjunto de estas etapas se le denomina ciclo de vida. Las etapas
comunes a casi todos los modelos de ciclo de vida son las siguientes:
Obtención de los requisitos[editar]
Se debe identificar sobre qué se está trabajando, es decir, el tema principal que
motiva el inicio del estudio y creación del nuevo software o modificación de uno
ya existente. A su vez identificar los recursos que se tienen, en esto entra el
conocer los recursos humanos y materiales que participan en el desarrollo de
las actividades. Es importante entender el contexto del negocio para identificar
adecuadamente los requisitos.
99
Se tiene que tener dominio de la información de un problema, lo cual incluye
los datos fuera del software (usuarios finales, otros sistemas o dispositivos
externos), los datos que salen del sistema (por la interfaz de usuario, interfaces
de red, reportes, gráficas y otros medios) y los almacenamientos de datos que
recaban y organizan objetos persistentes de datos (por ejemplo, aquellos que
se conservan de manera permanente).
También hay que ver los puntos críticos, lo que significa tener de una manera
clara los aspectos que entorpecen y limitan el buen funcionamiento de los
procedimientos actuales, los problemas más comunes y relevantes que se
presentan, los motivos que crean insatisfacción y aquellos que deben ser
cubiertos a plenitud. Por ejemplo: ¿El contenido de los reportes generados,
satisface realmente las necesidades del usuario? ¿Los tiempos de respuesta
ofrecidos, son oportunos?, etc.
Hay que definir las funciones que realizará el software ya que estas ayudan al
usuario final y al funcionamiento del mismo programa.
Se tiene que tener en cuenta cómo será el comportamiento del software ante
situaciones inesperadas como lo son por ejemplo una gran cantidad de
usuarios usando el software o una gran cantidad de datos entre otros.
Análisis de requisitos[editar]
Caso de uso
Historias de usuario
Siendo los primeros más rigurosas y formales, los segundas más ágiles e
informales.
Arquitectura[editar]
Artículo principal: Arquitectura de software
101
El arquitecto de software es la persona que añade valor a los procesos de
negocios gracias a su valioso aporte de soluciones tecnológicas.
La arquitectura de sistemas en general, es una actividad de planeación, ya sea
a nivel de infraestructura de red y hardware, o de software.
Lo principal en este punto es poner en claro los aspectos lógicos y físicos de
las salidas, modelos de organización y representación de datos, entradas y
procesos que componen el sistema, considerando las bondades y limitaciones
de los recursos disponibles en la satisfacción de las pacificaciones brindadas
para el análisis.
Hay que tener en consideración la arquitectura del sistema en la cual se va a
trabajar, elaborar un plan de trabajo viendo la prioridad de tiempo y recursos
disponibles. En los diseños de salidas entra los que es la interpretación de
requerimientos lo cual es el dominio de información del problema, las funciones
visibles para el usuario, el comportamiento del sistema y un conjunto de clases
de requerimientos que agrupa los objetos del negocio con los métodos que les
dan servicio.
La arquitectura de software consiste en el diseño de componentes de una
aplicación (entidades del negocio), generalmente utilizando patrones de
arquitectura. El diseño arquitectónico debe permitir visualizar la interacción
entre las entidades del negocio y además poder ser validado, por ejemplo por
medio de diagramas de secuencia. Un diseño arquitectónico describe en
general el cómo se construirá una aplicación de software. Para ello se
documenta utilizando diagramas, por ejemplo:
Diagrama de clases
Diagrama de base de datos
Diagrama de despliegue
Diagrama de secuencia
Los diagramas de clases y de base de datos son los mínimos necesarios para
describir la arquitectura de un proyecto que iniciará a ser codificado.
Dependiendo del alcance del proyecto, complejidad y necesidades, el
arquitecto elegirá cuales de los diagramas se requiere elaborar.
Las herramientas para el diseño y modelado de software se
denominan CASE (Computer Aided Software Engineering) entre las cuales se
encuentran:
Enterprise Architect
Microsoft Visio for Enterprise Architects
Programación[editar]
Artículo principal: Programación
Implementar un diseño en código puede ser la parte más obvia del trabajo de
ingeniería de software, pero no necesariamente es la que demanda mayor
trabajo y ni la más complicada. La complejidad y la duración de esta etapa está
íntimamente relacionada al o a los lenguajes de programación utilizados, así
como al diseño previamente realizado.
102
Desarrollo de la aplicación[editar]
Para el desarrollo de la aplicación es necesario considerar cinco fases para
tener una aplicación o programa eficiente, estas son:
103
experiencia, personas que saben sin mayores indicaciones en qué condiciones
puede fallar una aplicación y que pueden poner atención en detalles que
personal inexperto no consideraría.
De acuerdo con Roger S. Pressman, el proceso de pruebas se centra en los
procesos lógicos internos del software, asegurando que todas las sentencias se
han comprobado, y en los procesos externos funcionales, es decir, la
realización de pruebas para la detección de errores. Se requiere poder probar
el software con sujetos reales que puedan evaluar el comportamiento
del software con el fin de proporcionar realimentación a los desarrolladores. Es
importante que durante el proceso de desarrollo del software no se pierda
contacto con los interesados o solicitantes del desarrollo de software, de esta
manera los objetivos del proyecto se mantendrán vigentes y se tendrá una idea
clara de los aspectos que tienen que probarse durante el período de pruebas. 22
Implementación[editar]
Artículo principal: Implementación
104
parte reside en extender el sistema para incorporarle nuevas funcionalidades y
hacer frente a su evolución.
Ventajas24[editar]
Desde el punto de vista de gestión[editar]
105
Prueba de unidad: prueba individual de cada subconjunto de la
aplicación para garantizar que se implementaron de acuerdo con las
especificaciones.26
Integración: para garantizar que los diferentes módulos se integren con
la aplicación. Este es el propósito de la prueba de integración que está
cuidadosamente documentada.26
Prueba beta (o validación), para garantizar que el software cumple con
las especificaciones originales.26
Documentación: sirve para documentar información necesaria para los
usuarios del software y para desarrollos futuros.26
Implementación
Mantenimiento: para todos los procedimientos correctivos
(mantenimiento correctivo) y las actualizaciones secundarias
del software (mantenimiento continuo).26
Modelo en cascada o clásico[editar]
Artículo principal: Desarrollo en cascada
106
Modelo en espiral[editar]
Artículo principal: Desarrollo en espiral
Especificación conceptual.
Análisis de requisitos.
Diseño inicial.
Diseño detallado (codificación, depuración, prueba y liberación).
Cuando es por etapas, en el diseño global estas fases pueden repetirse según
la cantidad de etapas que sean requeridas.
Entre sus ventajas tenemos:
107
Desarrollo iterativo y creciente (o incremental) es un proceso de desarrollo
de software, creado en respuesta a las debilidades del modelo tradicional de
cascada, es decir, este modelo aplica secuencias lineales como el modelo en
cascada, pero de una manera iterativa o escalada según como avance el
proceso de desarrollo y con cada una de estas secuencias lineales se
producen incrementos (mejoras) del software.30
Se debe tener en cuenta que el flujo del proceso de cualquier incremento
puede incorporar el paradigma de construcción de prototipos, ya que como se
mencionó anteriormente, este tipo de modelo es iterativo por naturaleza, sin
embargo se diferencia en que este busca la entrega de un producto
operacional con cada incremento que se le realice al software.
Este desarrollo incremental es útil principalmente cuando el personal necesario
para una implementación completa no está disponible.
Modelo estructurado[editar]
Este modelo ―como su nombre lo indica― utiliza las técnicas del diseño
estructurado o de la programación estructurada para su desarrollo, también se
utiliza en la creación de los algoritmos del programa. Este formato facilita la
comprensión de la estructura de datos y su control. 31Entre las principales
características de este modelo se encuentran las siguientes:
108
Permite la reutilización de software en un grado significativo.
Su simplicidad facilita el desarrollo de herramientas informáticas de
ayuda al desarrollo, el cual es fácilmente implementada en una notación
orientada a objetos llamado UML.34
Modelo RAD (rapid application development)[editar]
Artículo principal: Desarrollo rápido de aplicaciones
109
En realidad, el modelo de desarrollo concurrente es aplicable a todo tipo de
desarrollo de software y proporciona una imagen exacta del estado actual de
un proyecto. En vez de confinar actividades de ingeniería de software a una
secuencia de sucesos, define una red de actividades, todas las actividades de
la red existen simultáneamente con otras. Los sucesos generados dentro de
una actividad dada o algún otro lado de la red de actividad inicia las
transiciones entre los estados de una actividad.
Proceso unificado del desarrollo de software[editar]
Artículos principales: Proceso Unificado y Rational Unified Process.
Producto[editar]
El software se ha convertido en algo muy necesario en nuestra sociedad actual,
es la máquina que conduce a la toma de decisiones comerciales, sirve para la
investigación científica moderna, es un factor clave que diferencia productos y
servicios modernos. Esto se da porque el software está inmerso en sistemas de
todo tipo alrededor de nosotros.
110
El software de computadora es el producto que diseñan y construyen los
ingenieros de software. Esto abarca programas que se ejecutan dentro de una
computadora de cualquier tamaño y arquitectura, después de estar construido
casi cualquier persona en el mundo industrializado, ya sea directa o
indirectamente.
Los productos se pueden clasificar en:
Productos genéricos: Son los producidos por una organización para ser
vendidos al mercado.
Productos hechos a medida: Sistemas que son desarrollados bajo
pedido a un desarrollador específico.
Estos productos deben cumplir varias características al ser entregados, estas
son:
111
Participantes y papeles[editar]
Para el desarrollo de un sistema de software es necesaria la colaboración de
muchas personas con diversas competencias, capacidades e intereses. Al
conjunto de personas involucradas en el proyecto se les conoce como
participantes.
Al conjunto de funciones y responsabilidades que hay dentro del proyecto o
sistema se le conoce como roles o papeles. Los roles están asociados a las
tareas que son asignadas a los participantes, en consecuencia, una persona
puede desempeñar uno o múltiples roles, así también un mismo rol puede ser
representado por un equipo.39
Cliente[editar]
Es frecuente el uso de los términos "usuarios", "usuarios finales" y "clientes"
como sinónimos, lo cual puede provocar confusión; estrictamente, el cliente
(persona, empresa u organización) es quién especifica los requisitos del
sistema,40 en tanto que el usuario es quien utiliza u opera finalmente el
producto software, pudiendo ser o no el cliente.
Desarrolladores[editar]
Esta clase de participantes están relacionados con todas las facetas
del proceso de desarrollo del software. Su trabajo incluye la investigación,
diseño, implementación, pruebas y depuración del software.41
Gestores[editar]
En el contexto de ingeniería de software, el gestor de desarrollo de software es
un participante, que reporta al director ejecutivo de la empresa que presta el
servicio de desarrollo. Es responsable del manejo y coordinación de los
recursos y procesos para la correcta entrega de productos de software,
mientras participa en la definición de la estrategia para el equipo de
desarrolladores, dando iniciativas que promuevan la visión de la empresa. 42
Usuarios finales[editar]
El usuario final es quien interactúa con el producto de software una vez es
entregado.40 Generalmente son los usuarios los que conocen el problema, ya
que día a día operan los sistemas.
Código ético de un ingeniero de software[editar]
Un ingeniero de software debe tener un código donde asegura, en la medida
posible, que los esfuerzos realizados se utilizarán para realizar el bien y deben
comprometerse para que la ingeniería de software sea una profesión benéfica y
respetada. Para el cumplimiento de esta norma, se toman en cuenta ocho
principios relacionados con la conducta y las decisiones tomadas por el
ingeniero; donde estos principios identifican las relaciones éticamente
responsables de los individuos, grupos y organizaciones donde participen. Los
principios a los que deben sujetarse son sobre la sociedad, cliente y
empresario, producto, juicio, administración, profesión, colegas y por último el
personal.
112
Sociedad: Los ingenieros de software deben actuar de manera
congruente con el interés social, aceptando la responsabilidad total de su
trabajo, moderando los intereses con el bienestar social, aprobando
el software solamente si se tiene una creencia bien fundamentada,
cooperando en los esfuerzos para solucionar asuntos importantes de
interés social, ser justo y veraz en todas las afirmaciones relativas
al software o documentos asociados.
Cliente y empresario: Se debe actuar de manera tal que se llegue a
conciliar los mejores intereses de los clientes y empresarios,
congruentemente con el interés social. Estos deberán prestar servicios en
sus áreas de competencia, siendo honestos y francos sobre las
limitaciones, no utilizar un software que se obtenga ilegalmente o sin ética,
usar la propiedad de los clientes o empresarios de manera autorizada,
mantener secreto cualquier documento de información confidencial.
Producto: Hay que asegurarse que los productos y sus modificaciones
cumplan con los estándares profesionales más altos posibles, procurando
la alta calidad, costos aceptables y una agenda razonable asegurando que
los costos y beneficios sean claros y aceptados por el empresario y el
cliente. Asegurar que las metas y objetivos de cualquier proyecto sean
adecuados y alcanzables.
Juicio: Se debe mantener una integridad e independencia en el juicio
profesional, moderando todo juicio técnico por la necesidad de apoyar y
mantener los valores humanos, mantener la objetividad profesional con
respecto a cualquier software o documento relacionado, no involucrarse en
prácticas financieras fraudulentas.
Administración: Se deberá asegurar una buena administración para
cualquier proyecto en el cual se trabaje, utilizando procedimientos efectivos
para promover la calidad y reducir riesgos, asegurándose también que se
conozcan las políticas y procedimientos del empresario para proteger
contraseñas, archivos e información confidencial.
Profesión: Se debe incrementar la integridad y reputación de la profesión
en conjunto con el interés social, ayudando al desarrollo de un ambiente
organizacional favorable para actuar, promoviendo el conocimiento público
de la ingeniería de software, extendiendo el conocimiento de la ingeniería
de software por medio de participaciones en organizaciones, reuniones y
publicaciones profesionales.
Colegas: Cada ingeniero deberá apoyar y ser justos con los colegas,
motivando a sus colegas sujetándose al código, ayudando también a su
desarrollo profesional, reconocer los trabajos de otros y abstenerse a
atribuirse de méritos indebidos, revisar los trabajos de manera objetiva,
sincera y propiamente documentada.
Personal: Los ingenieros de software participaran toda su vida en el
aprendizaje con la práctica y promoverán un enfoque ético de la profesión,
mejorando su conocimiento de los avances en el análisis, especificación,
diseño, desarrollo, mantenimiento, pruebas del software y documentos
relacionados en conjunto con administración del proceso de desarrollo. 43
METODOLOGÍAS, MODELOS, NORMAS Y ESTÁNDARES
INTERNACIONALES DE CALIDAD
113
Metodologías, modelos, normas y estándares internacionales de calidad.
114
¿Por qué mejorar nuestros procesos de producción y servicios en la industria del
software y las TI?
Existen muchas razones para hacerlo pero más que nada se hace para cumplir
algunos de los siguientes objetivos:
ISO 29110
115
La ISO/IEC 29110 ha sido desarrollada para mejorar la calidad del producto y/o
servicio de software, y para mejorar el desempeño de la organización, sin
pretender excluir el uso de diferentes modelos de ciclo de vida tales
como: Cascada, Iterativo, Incremental, Evolutivo o Prototipos. La ISO/IEC
29110 se divide en 5 partes de acuerdo al tipo de audiencia a la que está
dirigida, es decir, al campo de aplicación de cada una conformando un marco
de trabajo.
ITIL
ITIL Foundation
116
Diseño del Servicio
Transición del Servicio
Operación del Servicio
Mejora Continua del Servicio
CMMI
117
entornos ágiles. CMMI no te define cómo debes hacer las cosas sino un
conjunto de metas que debes cumplir y una propuesta de prácticas y
evidencias que te ayudan a alcanzar y certificar esas metas. Hemos definido e
implementado con éxito procesos de desarrollo ágiles con CMMI aplicando
nuestro modelo de desarrollo DAC.
Scrum
Scrum
118
Scrum es un proceso en el que se aplican de manera regular un conjunto
de buenas prácticas para trabajar colaborativamente, en equipo, y obtener el
mejor resultado posible de un proyecto. Estas prácticas se apoyan unas a otras
y su selección tiene origen en un estudio de la manera de trabajar de equipos
altamente productivos.
120
lo menos dos casos de prueba para cada requisito. Uno de ellos debe realizar
la prueba positiva de los requisitos y el otro debe realizar la prueba negativa.
Si la aplicación es creada sin requisitos formales, entonces los casos de prueba
se escriben basados en la operación normal de programas de una clase
similar.
Lo que caracteriza un escrito formal de caso de prueba es que hay una entrada
conocida y una salida esperada, los cuales son formulados antes de que se
ejecute la prueba. La entrada conocida debe probar una precondición y
la salida esperada debe probar una postcondición.
Bajo circunstancias especiales, podría haber la necesidad de ejecutar la
prueba, producir resultados, y luego un equipo de expertos evaluaría si los
resultados se pueden considerar como "correctos". Esto sucede a menudo en
la determinación del número del rendimiento de productos nuevos. La primera
prueba se toma como línea base para los subsecuentes ciclos de
pruebas/lanzamiento del producto.
Los casos de prueba escritos, incluyen una descripción de la funcionalidad que
se probará, la cual es tomada ya sea de los requisitos o de los casos de uso, y
la preparación requerida para asegurarse de que la prueba pueda ser dirigida.
Los casos de prueba escritos se recogen generalmente en una suite de
pruebas.
Las variaciones de los casos de prueba son comúnmente utilizados en pruebas
de aceptación. La prueba de aceptación es realizada por un grupo de usuarios
finales o los clientes del sistema, para asegurarse que el sistema desarrollado
cumple sus requisitos. La prueba de aceptación de usuario se distingue
generalmente por la incorporación de un trayecto feliz o casos de prueba
positivos.
121
o Propósito: Contiene una breve descripción del propósito de la
prueba, y la funcionalidad que chequea.
o Dependencias: Indica qué otros subsistemas están involucrados
y en qué grado.
Actividades de los casos de prueba
o Ambiente de prueba/configuración: Contiene información
acerca de la configuración del hardware o software en el cual se
ejecutará el caso de prueba.
o Inicialización: Describe acciones, que deben ser ejecutadas
antes de que los casos de prueba se hayan inicializado. Por ejemplo,
debemos abrir algún archivo.
o Finalización: Describe acciones, que deben ser ejecutadas
después de realizado el caso de prueba. Por ejemplo si el caso de
prueba estropea la base de datos, el analista debe restaurarla antes de
que otro caso de prueba sea ejecutado.
o Acciones: Pasos a realizar para completar la prueba.
o Descripción de los datos de entrada
Resultados
o Salida esperada: Contiene una descripción de lo que el analista
debería ver tras haber completado todos los pasos de la prueba.
o Salida obtenida: Contiene una breve descripción de lo que el
analista encuentra después de que los pasos de prueba se hayan
completado.
o Resultado: Indica el resultado cualitativo de la ejecución del caso
de prueba, a menudo con un Correcto/Fallido.
o Severidad: Indica el impacto del defecto en el sistema: Grave,
Mayor, Normal, Menor.
o Evidencia: En los casos que aplica, contiene información, bien un
link al print de pantalla (screenshot), bien una consulta a una base de
datos, bien el contenido de un fichero de trazas, donde se evidencia la
salida obtenida.
o Seguimiento: Si un caso de prueba falla, frecuentemente la
referencia al defecto implicado se debe enumerar en esta columna.
Contiene el código correlativo del defecto, a menudo corresponde al
código del sistema de tracking de bugs que se esté usando.
o Estado: Indica si el caso de prueba está: No iniciado, En curso, o
terminado.
122
manual fue el más utilizado durante mucho tiempo. El funcionamiento depende
exclusivamente de un analista – un humano -, que tiene la función de ejecutar
la prueba. Hoy, con el aumento de la complejidad de las aplicaciones y la
constante necesidad de reducción del lead time, se hizo inviable el uso de la
prueba manual en todos los casos. A partir de este gap en el mercado, se creó
la prueba automatizada. Su cartilla de ventajas es grande. Desde la adhesión,
pasando por la velocidad hasta la precisión que los humanos no logran
alcanzar.
123
pruebas de software, tres pilares fundamentales necesitan ser observados:
Datos para Pruebas, Ambiente, y Virtualización de Servicios.
¿Qué es, cómo y por qué usar el CrowdTesting será un artículo publicado
próximamente aquí en el Blog. ¡Quedate atento!
Pruebas exploratorias
Pruebas de usabilidad
Pruebas Ad-hoc
Pruebas de regresión
Pruebas de carga
Pruebas de rendimiento
Pruebas de integración
Pruebas del sistema
Pruebas de unidad
Pruebas de aceptación
Que es Selenium:
124
Selenium WebDriver[editar]
Selenium WebDriver es el sucesor de Selenium RC. Selenium WebDriver
acepta comandos (enviados en Selenese o vía el API de cliente) y los envía a
un navegador. Esto se implementa a través de un controlador del navegador
específico para cada navegador que envía los comandos y trae los resultados
de regreso. La mayoría de los controladores del navegador lanzan y acceden a
la aplicación de navegador (como Mozilla Firefox o Internet Explorer), pero
también hay un controlador para HtmlUnit que simula un navegador. A
diferencia de Selenium 1, donde el servidor Selenium RC era indispensable, en
Selenium WebDriver no se requiere de un servidor especial para ejecutar las
pruebas, en vez de ello WebDriver inicia una instancia del navegador y lo
controla; sin embargo puede usarse Selenium Grid (ver abajo) para ejecutar
pruebas en sistemas remotos (ver más abajo). Desde inicios de 2012, Simon
Stewart de Google (inventor del WebDriver) y David Burns de la Fundación
Mozilla se encuentran negociando con el W3C que WebDriver se convierta en
un estándar de Internet, como tal Selenium-Webdriver (Selenium 2.0) apunta a
ser la implementación de referencia del estándar WebDriver en varios
lenguajes de programación. Selenium-WebDriver está completamente
implementado y soportado en Java, Ruby, Python y C#. En la práctica, esto
significa que la API de Selenium 2.0 tiene significativamente menos llamadas
que el API de Selenium 1.0. Donde Selenium 1.0 intentaba proveer una interfaz
rica en muchas operaciones, Selenium 2.0 intenta proveer de los bloques de
construcción básicos con los cuales los desarrolladores puedan programar su
propio lenguaje específico de dominio. Uno de ellos ya existe y es el
proyecto Watir en Ruby que tiene una historia rica en buen diseño. Watir-
WebDriver implementa el API de Watir como un envolvente del Selenium-
Webdriver en Ruby. Watir-WebDriver se crea de forma completamente
automática, basado en las especificaciones del WebDriver y HTML.
Que es Scrum
125
Scrum también se utiliza para resolver situaciones en que no se está
entregando al cliente lo que necesita, cuando las entregas se alargan
demasiado, los costes se disparan o la calidad no es aceptable, cuando se
necesita capacidad de reacción ante la competencia, cuando la moral de
los equipos es baja y la rotación alta, cuando es necesario identificar y
solucionar ineficiencias sistemáticamente o cuando se quiere trabajar
utilizando un proceso especializado en el desarrollo de producto.
El proceso
En Scrum un proyecto se ejecuta en ciclos temporales cortos y de duración
fija (iteraciones que normalmente son de 2 semanas, aunque en algunos
equipos son de 3 y hasta 4 semanas, límite máximo de feedback de producto
real y reflexión). Cada iteración tiene que proporcionar un resultado completo,
un incremento de producto final que sea susceptible de ser entregado con el
mínimo esfuerzo al cliente cuando lo solicite.
126
El primer día de la iteración se realiza la reunión de planificación de la iteración.
Tiene dos partes:
Ejecución de la iteración
Cada día el equipo realiza una reunión de sincronización (15 minutos),
normalmente delante de un tablero físico o pizarra (Scrum Taskboard). El
equipo inspecciona el trabajo que el resto está realizando (dependencias entre
tareas, progreso hacia el objetivo de la iteración, obstáculos que pueden
impedir este objetivo) para poder hacer las adaptaciones necesarias que
permitan cumplir con la previsión de objetivos a mostrar al final de la iteración.
En la reunión cada miembro del equipo responde a tres preguntas:
Inspección y adaptación
El último día de la iteración se realiza la reunión de revisión de la iteración.
Tiene dos partes:
127
1. Revisión (demostración) (1,5 horas). El equipo presenta al cliente los
requisitos completados en la iteración, en forma de incremento de producto
preparado para ser entregado con el mínimo esfuerzo. En función de los
resultados mostrados y de los cambios que haya habido en el contexto del
proyecto, el cliente realiza las adaptaciones necesarias de manera objetiva, ya
desde la primera iteración, replanificando el proyecto.
2. Retrospectiva (1,5 horas). El equipo analiza cómo ha sido su manera
de trabajar y cuáles son los problemas que podrían impedirle progresar
adecuadamente, mejorando de manera continua su productividad. El
Facilitador se encargará de eliminar o escalar los obstáculos identificados que
estén más allá del ámbito de acción del equipo.
Pruebas de desempeño
Índice
1Introducción
o 1.1Pruebas de carga
o 1.2Prueba de estrés
o 1.3Prueba de estabilidad (soak testing)
o 1.4Pruebas de picos (spike testing)
o 1.5Prerrequisitos para las pruebas de carga
2Mitos de las pruebas de rendimiento
3Tecnología
4Especificaciones del rendimiento
5Tareas a realizar
6Metodología
o 6.1Metodología de pruebas de rendimiento de aplicaciones Web
7Véase también
8Enlaces externos
Introducción[editar]
Las pruebas de rendimiento pueden servir para diferentes propósitos. Pueden
demostrar que el sistema cumple los criterios de rendimiento. Pueden
128
comparar dos sistemas para encontrar cual de ellos funciona mejor. O pueden
medir que partes del sistema o de carga de trabajo provocan que el conjunto
rinda mal. Para su diagnóstico, los ingenieros de software utilizan herramientas
como pueden ser monitorizaciones que midan qué partes de un dispositivo o
software contribuyen más al mal rendimiento o para establecer niveles (y
umbrales) del mismo que mantenga un tiempo de respuesta aceptable.
Es fundamental para alcanzar un buen nivel de rendimiento de un nuevo
sistema, que los esfuerzos en estas pruebas comiencen en el inicio
del proyecto de desarrollo y se amplie durante su construcción. Cuanto más se
tarde en detectar un defecto de rendimiento, mayor es el coste de la solución.
Esto es cierto en el caso de las pruebas funcionales, pero mucho más en
las pruebas de rendimiento, debido a que su ámbito de aplicación es de
principio a fin.
En las pruebas de rendimiento, a menudo es crucial (y con frecuencia difícil de
conseguir) que las condiciones de prueba sean similares a las esperadas en el
uso real. Esto es, sin embargo, casi imposible en la práctica. La razón es que
los sistemas en producción tienen un carácter aleatorio de la carga de trabajo y
aunque en las pruebas se intente dar lo mejor de sí para imitar el volumen de
trabajo que pueda tener el entorno de producción, es imposible reproducir
exactamente la variabilidad de ese trabajo, salvo en el sistema más simple.
Los nuevos conceptos en la implementación de la arquitectura (por
ejemplo: SOA) han añadido complejidad adicional a las pruebas de
rendimiento. Los servicios o recursos de la empresa (que comparten
infraestructura o plataforma) requieren pruebas de rendimiento coordinadas
(con la creación del volumen y carga de todos los sistemas que comparten la
infraestructura o plataformas) para reproducir realmente el estado del entorno
de producción. Debido a la complejidad, coste y tiempo necesario en torno a
esta actividad, algunas organizaciones emplean herramientas que pueden
mostrar y crear condiciones (también conocido como "ruido") en los entornos
de pruebas de rendimiento para comprender la capacidad y las necesidades de
recursos y verificar/validar los niveles de calidad.
Pruebas de carga[editar]
Este es el tipo más sencillo de pruebas de rendimiento. Una prueba de carga
se realiza generalmente para observar el comportamiento de
una aplicación bajo una cantidad de peticiones esperada. Esta carga puede ser
el número esperado de usuarios concurrentes utilizando la aplicación y que
realizan un número específico de transacciones durante el tiempo que dura la
carga. Esta prueba puede mostrar los tiempos de respuesta de todas las
transacciones importantes de la aplicación. Si la base de datos, el servidor de
aplicaciones, etc.. también se monitorizan, entonces esta prueba puede
mostrar el cuello de botella en la aplicación.
Prueba de estrés[editar]
Esta prueba se utiliza normalmente para romper la aplicación. Se va doblando
el número de usuarios que se agregan a la aplicación y se ejecuta una prueba
de carga hasta que se rompe. Este tipo de prueba se realiza para determinar la
solidez de la aplicación en los momentos de carga extrema y ayuda a los
129
administradores para determinar si la aplicación rendirá lo suficiente en caso de
que la carga real supere a la carga esperada.
Prueba de estabilidad (soak testing)[editar]
Esta prueba normalmente se hace para determinar si la aplicación puede
aguantar una carga esperada continuada. Generalmente esta prueba se realiza
para determinar si hay alguna fuga de memoria en la aplicación.
Pruebas de picos (spike testing)[editar]
La prueba de picos, como el nombre sugiere, trata de observar el
comportamiento del sistema variando el número de usuarios, tanto cuando
bajan, como cuando tiene cambios drásticos en su carga. Esta prueba se
recomienda que sea realizada con un software automatizado que permita
realizar cambios en el número de usuarios mientras que los administradores
llevan un registro de los valores a ser monitorizados.
Prerrequisitos para las pruebas de carga[editar]
Un desarrollo estable de la aplicación instalado en un entorno lo más parecido
al de producción.
El entorno de pruebas de rendimiento no debe cruzarse con pruebas de
aceptación de usuarios ni con el entorno de desarrollo. Esto es tan peligroso
que si las pruebas de aceptación de usuarios, o las pruebas de integración o
cualquier otra prueba se ejecutan en el mismo entorno, entonces los resultados
no son fiables. Como buena práctica, siempre es aconsejable disponer de un
entorno de pruebas de rendimiento lo más parecido como se pueda al entorno
de producción.
130
3. El probar el rendimiento sólo implica la creación de scripts y
cualquier cambio en la aplicación solo puede causar una simple
refactorización de dichos scripts: Las pruebas de rendimiento son en
sí mismas una ciencia evolucionada de la industria del software. En sí
mismos, los scripts, aunque importantes, son sólo uno de los
componentes de las pruebas de rendimiento. El principal desafío para
cualquier persona que pruebe el rendimiento es determinar el tipo de
pruebas necesarias y analizar los distintos medidores de rendimiento
para determinar el cuello de botella de rendimiento.
Por otro lado, en relación con este mito, también es falso que cualquier cambio
en la interfaz de usuario, especialmente en el ámbito Web, supone un completo
desarrollo de los scripts desde cero. Este problema se vuelve mayor si
los protocolos involucrados incluyen Web Services, Siebel, scripts de
acciones, Citrix o SAP.
Tecnología[editar]
La tecnología de las pruebas de rendimiento utiliza uno o
más PCs o servidores para actuar como peticionarios. Cada uno emula la
presencia de un número de usuarios y cada uno ejecuta una secuencia
automática de las interacciones (registrada como una secuencia de comandos,
o como una serie de scripts para simular los distintos tipos de uso por parte de
los usuarios) con la aplicación cuyo rendimiento se pone a prueba. Por lo
general, un PC actúa como gestor de prueba, coordinando, recopilando
las métricas de cada uno de los ejecutores y acumulando los datos de
rendimiento para la realización de los informes.
La secuencia habitual es incrementar la carga, comenzando con un pequeño
número de usuarios virtuales y aumentando el número durante un periodo
hasta alcanzar el máximo. El resultado de la prueba muestra la forma en que el
rendimiento varía con la carga, mostrando como el número de usuarios
modifica el tiempo de respuesta. Existen diversas herramientas disponibles
para la realización de tales pruebas. Estas herramientas suelen ejecutar un
conjunto de pruebas que simulan usuarios reales utilizando el sistema. A veces
los resultados pueden revelar curiosidades, por ejemplo, si el promedio de
tiempo de respuesta puede ser aceptable, si existen valores anómalos en las
peticiones que necesitan tiempos considerablemente más largo para ejecutarse
- algo que puede ser causado por peticiones poco eficientes a la base de
datos, fotos, etc.
Las pruebas de rendimiento se pueden combinar con pruebas de estrés, con el
fin de ver qué pasa cuando una carga aceptable se supera ¿Se cae el sistema?
¿Cuánto tiempo tarda en recuperarse si se reduce una gran carga? ¿Un fallo
produce daños colaterales?
El modelo de análisis de rendimiento es un método para modelar el
comportamiento de una aplicación en una hoja de cálculo. El modelo se
alimenta con las mediciones de los recursos solicitados por las peticiones
(CPU, IO, LAN, WAN), ponderado por el nivel de transacción (las peticiones
realizadas por unidad de tiempo, habitualmente una hora).
La demanda de recursos de las peticiones son acumuladas para obtener la
demanda de recursos por unidad de tiempo y divididas por la capacidad total
131
de recursos por la misma unidad, obteniendo así la carga de recursos. Usando
la fórmula de tiempo de respuesta (R=S/(1-U), R=tiempo de respuesta,
S=tiempo del servicio, U=carga), los tiempos de respuesta pueden ser
calculados y calibrados con los resultados de las pruebas de rendimiento. El
modelo de análisis del rendimiento permite la evaluación de diferentes
opciones de diseño y dimensionamiento del sistema sobre la base actual o la
prevista del uso de la aplicación. Por lo tanto, es mucho más rápido y más
barato que las pruebas de rendimiento, aunque requiere una alta comprensión
de las plataformas de hardware.
132
conexiones (caso ideal) o simular la latencia de la red de conexiones de este
tipo, siguiendo el mismo perfil de usuario.
Siempre es útil disponer de una estimación del pico de número de usuarios que
se espera que utilicen el sistema en las horas punta. Si puede ser también una
estimación del máximo tiempo de respuesta permitido en el percentil 95, para
que la configuración de la ejecución de las pruebas se ajuste a estas
especificaciones.
La especificación de rendimiento, como mínimo, debería responder a las
siguientes preguntas:
Tareas a realizar[editar]
Las tareas para realizar una prueba de este tipo serían las siguientes:
133
Desarrollar un plan de prueba de rendimiento detallado, incluyendo
todas las dependencias y los plazos.
Instalar y configurar los simuladores de peticiones y controladores.
Configurar el entorno de prueba (lo ideal es que sea idéntico hardware a
la plataforma de producción), configurar los router, aislar la red (no
queremos alterar los resultados por parte de otros usuarios), desplegar la
aplicación en el servidor, desarrollar la base de datos de prueba, etc.
Ejecutar las pruebas, probablemente en repetidas ocasiones
(iterativamente), a fin de ver si el desconocimiento de cualquier factor
podría afectar a los resultados.
Analizar los resultados - ya sea de aceptando/rechazando, o
investigando el camino crítico y recomendando medidas correctivas .
Metodología[editar]
Metodología de pruebas de rendimiento de aplicaciones Web[editar]
Según Microsoft Developer Network, la Metodología de las Pruebas de
Rendimiento consiste en las siguientes actividades:
134
Actividad 6. Ejecutar la prueba. Ejecutar y monitorizar las pruebas.
Validar las pruebas, los datos de las pruebas, y recoger los resultados.
Ejecutar pruebas válidas para analizar, mientras se monitoriza la prueba y
su entorno.
Actividad 7. Analizar los resultados, realizar un informe y repetirlo.
Consolidar y compartir los resultados de la prueba. Analizar los datos, tanto
individualmente, como con un equipo multidisciplinario. Volver a priorizar el
resto de las pruebas y volver a ejecutarlas de ser necesario. Cuando todas
las métricas estén dentro de los límites aceptados, ninguno de
los umbrales establecidos han sido rebasados, y toda la información
deseada se ha reunido, las pruebas han acabado para el escenario definido
por la configuración.
Prueba unitaria
Índice
1Características
2Ventajas
3Limitaciones
4Herramientas
5Referencias
Características[editar]
Para que una prueba unitaria tenga la calidad suficiente se deben cumplir los
siguientes requisitos:
135
Repetibles o Reutilizables: No se deben crear pruebas que sólo puedan
ser ejecutadas una sola vez. También es útil para integración continua.
Independientes: La ejecución de una prueba no debe afectar a la
ejecución de otra.
Profesionales: Las pruebas deben ser consideradas igual que el código,
con la misma profesionalidad, documentación, etc.
Aunque estos requisitos no tienen que ser cumplidos al pie de la letra, se
recomienda seguirlos o de lo contrario las pruebas pierden parte de su función.
Ventajas[editar]
El objetivo de las pruebas unitarias es aislar cada parte del programa y mostrar
que las partes individuales son correctas. Proporcionan un contrato escrito que
el trozo de código debe satisfacer. Estas pruebas aisladas proporcionan cinco
ventajas básicas:
Limitaciones[editar]
Es importante darse cuenta de que las pruebas unitarias no descubrirán todos
los errores del código. Algunos enfoques se basan en la generación aleatoria
de objetos para amplificar el alcance de las pruebas de unidad. 1 Esta técnica se
conoce como testing aleatorio (RT, por random testing). Por definición, sólo
prueban las unidades por sí solas. Por lo tanto, no descubrirán errores de
integración, problemas de rendimiento y otros problemas que afectan a todo el
sistema en su conjunto. Además, puede no ser trivial anticipar todos los casos
especiales de entradas que puede recibir en realidad la unidad de programa
bajo estudio. Las pruebas unitarias sólo son efectivas si se usan en conjunto
con otras pruebas de software.
Herramientas[editar]
136
Typemock[1]: Entorno de pruebas para C++, C# y .NET - incluso puedes
probar el código legado con él.
JUnit: Entorno de pruebas para Java creado por Erich Gamma y Kent
Beck. Se encuentra basado en SUnit creado originalmente para realizar
pruebas unitarias para el lenguaje Smalltalk.
TestNG: Creado para suplir algunas deficiencias en JUnit.
JTiger: Basado en anotaciones, como TestNG.
SimpleTest: Entorno de pruebas para aplicaciones realizadas en PHP.
PHPUnit: Sistema para la realización pruebas unitarias en PHP.
CPPUnit: Versión del framework para lenguajes C/C++.
NUnit: Versión del framework para la plataforma.NET.
FoxUnit: Entorno OpenSource de pruebas unitarias para Microsoft Visual
FoxPro.
MOQ: Entorno para la creación dinámica de objetos simuladores
(mocks). «MOQ».
QUnit: Biblioteca para pruebas unitarias en Javascript. Creada por la
fundación jQuery, ha sido reescrita para ser independiente de la biblioteca
jQuery.
libunittest: Biblioteca portable para pruebas unitarias en C++ que usa el
nuevo estándar C++11.
CUnit: Entorno para escribir, administar y correr test unitarios en
lenguaje C.
PyUnit: Framework para la elaboración de pruebas unitarias en python.
QtTest: Clases para pruebas unitarias en la biblioteca Qt (C++).
utPLSQL: Framework para la elaboración de pruebas unitarias en
PLSQL.
Pruebas de regresión
Ir a la navegaciónIr a la búsqueda
137
Este tipo de cambio puede ser debido a prácticas no adecuadas de control de
versiones, falta de consideración acerca del ámbito o contexto de producción
final y extensibilidad del error que fue corregido (fragilidad de la corrección), o
simplemente una consecuencia del rediseño de la aplicación.
Por lo tanto, en la mayoría de las situaciones del desarrollo de software se
considera una buena práctica que cuando se localiza y corrige un bug, se
grabe una prueba que exponga el bug y se vuelvan a probar regularmente
después de los cambios subsiguientes que experimente el programa.
Existen herramientas de software que permiten detectar este tipo de errores de
manera parcial o totalmente automatizada, la práctica habitual en programación
extrema es que este tipo de pruebas se ejecuten en cada uno de los pasos
del ciclo de vida del desarrollo del software.
Índice
1Tipos de regresión
2Como mitigar los riesgos
3Usos
4Automatización
5Citas
6Véase también
7Referencias
Tipos de regresión[editar]
Clasificación de ámbito
138
o Beta - distribución a clientes potenciales y actuales de versiones
beta.
o Pilot - distribución a un subconjunto bien definido y localizado.
o Paralela - simultaneando uso de ambos sistemas.* Usar releases
mayores. Probar nuevas funciones a menudo cubre las funciones
existentes. Cuantas más nuevas características haya en un release,
habrá mayor nivel de pruebas de regresión "accidental".
Parches de emergencia - estos parches se publican inmediatamente, y
serán incluidos en releases de mantenimiento futuras.
Usos[editar]
Las Pruebas de Regresión pueden usarse no solo para probar
la corrección de un programa, sino a menudo usarse para rastrear la calidad
de su salida. Por ejemplo en el diseño de un compilador, las pruebas de
regresión deben rastrear el tamaño del código, tiempo de simulación, y el
tiempo de compilación de las suites de prueba. Cuando quiera que aparece un
nuevo build, el proceso de regresión aparece.
Automatización[editar]
Las pruebas de regresión se pueden llevar a cabo manualmente o mediante
automatización. A medida que pasa el tiempo, las pruebas de regresión se van
acumulando hasta tal punto que son difíciles de mantener. A través de
la automatización de pruebas, se puede ejecutar una suite de pruebas de
regresión cada vez que hay un cambio en el software. 1
Citas[editar]
Cada vez más los usuarios móviles se han vuelto más exigentes
e impacientes. En tan sólo unos segundos, ya pueden determinar si una App
les gusta o no.
139
Si la app es demasiado complicada o lenta, seguramente no sólo pasarán al
competidor sino que también publicarán una crítica negativa de tu sitio en las
redes sociales que podría perjudicar tu reputación.
140
Fuente foto: http://toka-solutions.com
Pruebas de software estructurales
Fuente foto: blog.elevenpaths.com
Las pruebas de regresión se realizan una vez que un error detectado ha sido
corregido para confirmar que éste ha sido eliminado.
141
Fuente foto: http://christianfontalvo.com
142
forma sistemática, con el objetivo final de prevenirlos. Un proceso de pruebas
maduro pasa de focalizarse en la detección de defectos para orientarse en la
prevención de los mismos. Esta prevención consiste, básicamente, en analizar
defectos detectados durante el proceso de pruebas y en producción, identificar
sus causas y tomar acciones correctivas para prevenir que vuelvan a ocurrir.
Se trata de una prevención proactiva, en la que se analizan los defectos para
mejorar el proceso 'aguas arriba' y evitar que ese tipo de defecto, así como
otros similares, aparezcan de nuevo.
143
La prevención de defectos es muy útil en cualquier servicio de pruebas, sobre
todo en aquellos sectores donde la evolución del negocio o del software sea
muy dinámica. Por ejemplo, en el sector Telco, caracterizado por el gran
volumen de aplicaciones que intervienen en los flujos de provisión -CRM,
integración, facturación, backend, plataforma de red, etc.- y por la continua
aparición de nuevas campañas que implican cambios en el software, disponer
de un proceso de pruebas de alta madurez basado en la prevención de
defectos garantiza un aumento evidente de la calidad del software, a la vez que
una reducción del time to market muy significativa.
Que es Cucumber
144
ahora se les está dando su importancia de manera más ámplia. Y, cómo suele
suceder, esto suele llevar a algunas interpretaciones no del todo correctas y de
ahí viene este post.
Las primeras ideas sobre BDD vienen de hace ya sus años, de allá por 2003, y
aunque hoy han sido etiquetadas por muchos como sólo de Testing,
deberíamos tener presente que todo esto no sólo es, ni exclusivamente nació,
para el Testing: realmente nació para evitar los históricos problemas que
conllevan las necesidades de negocio (requisitos, historias, etc.) que se
malentienden.
La idea que dio origen a Cucumber era la de combinar las “pruebas de
aceptación automatizadas”, los “requisitos funcionales” (historias de usuario,
etc.) y la “documentación”, todo ello en un formato entendible (Gherkin) por
personas sin conocimientos técnicos (Product Owners, negocio, etc.).
Cuando en 2008 se creó Cucumber, lo hizo para proporcionar ese (a) lenguaje
común entendible por personas sin conocimientos técnicos (Gherkin), (b) dar
soporte a un proceso (BDD) y (c) ser una herramienta que proporcionaría una
fuente única con el comportamiento esperado para el software a desarrollar.
Por ello, el hacer uso de Cucumber es para mucho más que contar con una
ayuda para automatizar pruebas. Y esto lo puedes ver claramente en las dos
actividades que siempre deben acompañar a Cucumber: los talleres de
especificación (tres amigos) y el proceso de “fuera a dentro”.
Los talleres de especificación (tres amigos)
En inglés le llaman así «los tres amigos», en español queda un poco raro, en
cualquier caso todo esto viene a que en la definición de una necesidad
(requisito, historia, etc.) siempre deben participar “tres amigos”: la persona de
negocio, el programador y el Tester. Los tres especifican con ejemplos cómo el
software deberá comportarse y lo escriben en escenarios Gherkin.
145
de la aplicación. Las características de Cucumber nacen con los requisitos de
software. Cucumber es una herramienta de colaboración que busca un
entendimiento común de las necesidades, basado en la colaboración de tres
roles: negocio, desarrollo y Testing.
Pruebas de humo
Ir a la navegaciónIr a la búsqueda
Aun hay gente, que prefieren ahorrar dinero en el proceso de testeo. Y esto es
un gran error!
Incluso aunque la inversión inicial pueda ser mayor, a largo plazo el
mantenimiento de la plataforma y el proceso de desarrollo es mucho mas
barato. Los test de software dan feedback rápido, por lo que todos los amantes
de la metodología Agile lo usan.
146
Hablamos con nuestro equipo de desarrollo de software y aunque haya
docenas de diferentes tests en internet, hemos subrayado 4 que creemos ser
los más importantes y esenciales para construir software que funciona.
Tambien encontraras una lista de las mejores herramientas que utilizamos en
nuestros proyectos.
1. Prueba unitaria
2. Pruebas de integración
147
integración están basados en pruebas unitarias con base de datos u otra
biblioteca ajena de terceras partes.
3. Pruebas funcionales
Las pruebas funcionales son elementos cruciales para asegurar la calidad del
producto software y confirmar que actúa acorde a sus funciones tal y como el
usuario espera. Los test se utilizan para verificar que la aplicación, página web
ejecute sus funcionalidad a través de una respuesta adecuada a los controles
de usuario, una interfaz de usuario consistente, integración con otros sistemas
y procesos de negocios, y manejo adecuado de información y búsqueda.
Como <type of user>, quiero <some goal> para que <some reason>
Por ejemplo,
Los test de funcionalidad testean este tipo de historias de usuarios. Otra forma
de nombrar las pruebas funcionales son los test de aceptación, test de
consumidor, etc. Hay miles de versiones en internet, pero creemos que “prueba
funcional” es la mejor manera de nombrar a estos test.
Herramientas de pruebas
funcionales: Jmeter, Gatling, Supertest, SoapUI, Cucumber, Robolectric, KIF
148
4. Pruebas de rendimiento
Puede servir para verificar que una plataforma de software presenta las
especificaciones del product owner. Este test muestra como eficiente es un
software. Chequea como de bien un software trabaja bajo una carga máxima
de trabajo. Hay varias variaciones o subtipos de pruebas de rendimiento como
tests de carga, test de estrés, test de volumen y muchas otras más. Estos
métodos de tests de aseguran de que lo que se ha hecho, se ha realizado
correctamente, teniendo en cuenta las diferentes circunstancias que pueden
aparecer en el futuro.
Que es Testware
149
general testware es conocido también como herramientas de pruebas e incluye
casos de prueba, plan de pruebas e informes de pruebas.
Incrementa el riesgo.
150
Para conseguir llegar al nivel de evaluación, es preciso contar con datos
relevantes, precisos y actualizados sobre diferentes áreas, que faciliten una
perspectiva global de la solución. Así, las métricas de calidad de
software pueden aplicarse a diferentes contextos, como:
1. El proyecto: son las que facilitan la gestión del riesgo permitiendo tomar
el pulso a la iniciativa de desarrollo desde su inicio.
2. El producto: están enfocadas a medir las características del software y
todos los entregables que lo acompañan, fruto del proyecto de desarrollo,
como modelos, componentes adicionales y documentación.
3. El proceso: tienen por objeto identificar mejores prácticas para su
exportación a futuros proyectos y, para conseguirlo, recopilan datos de
distintas iniciativas a lo largo de un periodo de tiempo determinado.
151
En esta actividad se inicia la definición del plan de pruebas, el cual sirve como
guía para la realización de las pruebas, y permite verificar que el sistema de
información cumple las necesidades establecidas por el usuario, con las
debidas garantías de calidad.
Pruebas unitarias.
Pruebas de integración.
Pruebas del sistema.
Pruebas de implantación.
Pruebas de aceptación.
TÉCNICAS Y
TAREA PRODUCTOS PRÁCTICAS PARTICIPANTES
152
ASI 10.3: Definición de Plan de Sesiones de Jefe de
las Pruebas de Pruebas Trabajo Proyecto
Aceptación del Analistas
Sistema Equipo de
Soporte Técnico
Usuarios
Expertos
¿Qué es un mainframe?
¿Qué es un mainframe?
153
Los mainframe son super computadoras al servicio de una red. Imagen
de: Argonne National Laboratory. Bajo licencia: CC BY 2.0.
154
Mainframe antiguo en acción. Imagen de: Erik Pitti. Bajo licencia: CC BY 2.0.
Podemos decir entonces que los mainframe son el corazón de una empresa, ya
que centralizan el trabajo de red y facilitan la ejecución de tareas a velocidades
realmente grandes, equilibrando seguridad y eficiencia a un costo mucho más
bajo que utilizar varios servidores. A pesar de no ser un concepto nuevo, estos
equipos han evolucionado, permitiendo incluso un bajo consumo de energía y
alta resistencia a cambios bruscos de temperatura.
Pruebas exploratorias
El testing exploratorio o pruebas exploratorias es un estilo o enfoque para
la realización de pruebas de software. Su principal característica es que el
aprendizaje, el diseño y la ejecución de las pruebas se realizan de forma
simultánea. Cem Kaner, quien acuñó el término en 1983, define el testing
exploratorio como "un estilo de testing que enfatiza la libertad personal y la
responsabilidad del tester para optimizar continuamente la calidad de su trabajo
tratando el aprendizaje a través de las pruebas, el diseño de las pruebas, la
ejecución de las pruebas y la interpretación del resultado de las pruebas como
actividades que se apoyan mutuamente y que se ejecutan en paralelo a lo largo
del proyecto."
Mientras se está probando el software, el tester va aprendiendo a manejar el
sistema y junto con su experiencia y creatividad, genera nuevas pruebas a
ejecutar. A menudo se piensa que el testing exploratorio es como una técnica
de prueba de caja negra. Sin embargo, aquellos que lo han estudiado, lo
consideran un enfoque que se puede aplicar a cualquier técnica de pruebas, en
cualquier etapa del proceso de desarrollo. La clave no es la técnica ni el
elemento que estamos probando o revisando; la clave es el compromiso
cognitivo del tester y la responsabilidad del tester para gestionar su tiempo.
Descripción[editar]
El testing exploratorio persigue saber cómo funciona realmente el software y
responder a preguntas sobre cómo éste maneja los casos fáciles y difíciles. La
calidad del testing exploratorio depende de las habilidades del tester de realizar
155
los casos de prueba oportunos y encontrar los defectos presentes. Mientras
más conocimientos tiene el tester sobre el producto y los diferentes métodos de
prueba, mejor será el testing realizado.
Se puede comparar el testing exploratorio libre con su antítesis, el scripted
testing o testing basado en procedimientos de prueba. En este enfoque, los
casos de prueba son diseñados con antelación, incluyendo tanto los pasos a
realizar como el resultado esperado. Estas pruebas son más tarde ejecutadas
por un tester que compara el resultado actual con el resultado esperado.
Cuando realizamos testing exploratorio, los resultados esperados están
abiertos. Algunos resultados pueden ser precedidos y esperados, otros puede
que no. El tester configura, opera, observa y evalúa el producto y su
comportamiento, investigando de forma crítica el resultado y reportando la
información de lo que parecen ser defectos (que amenazan el valor del
producto) o problemas (que amenazan la continuidad y calidad de las pruebas).
En realidad, el testing casi siempre es una combinación de testing exploratorio
y guiado, pero con una tendencia hacia uno de ellos, dependiendo del contexto.
Según Cem Kaner y James Marcus Bach, el testing exploratorio es más una
mentalidad o "...una forma de pensar sobre el testing" que una metodología.
Ellos también dicen que hay todo un abanico de opciones desde lo ligeramente
exploratorio (testing ligeramente ambiguo o vagamente guiado) hasta lo
altamente exploratorio (testing exploratorio totalmente libre).
La documentación del testing exploratorio se mueve en un rango que va desde
documentar todas las pruebas realizadas a documentar únicamente los
defectos. En las pruebas por parejas, dos personas crean los casos de pruebas
juntas; una los ejecuta y la otra documenta. El testing basado en sesiones es
un método específicamente diseñado para el testing exploratorio auditable y
medible a gran escala.
Para el testing exploratorio se usan a menudo herramientas, incluyendo
herramientas de captura de pantalla o video que se usan a modo de registro de
la sesión. O herramientas para ayudar a la generación rápida de situaciones de
interés, por ejemplo, la herramienta de James Bach: Perlclip.
Caso de uso. En Ingeniería del software, es una técnica para la captura de
requisitos potenciales de un nuevo Sistema o una actualización de Software.
Cada caso de uso proporciona uno o más escenarios que indican cómo
debería interactuar el sistema con el usuario o con otro sistema para conseguir
un objetivo específico. Normalmente, en los casos de usos se evita el empleo
de jergas técnicas, prefiriendo en su lugar un lenguaje más cercano al usuario
final.
Habilidades de un tester
Descripción
156
Los probadores de software (también conocidos como testers, su
denominación en inglés) planifican y llevan a cabo pruebas de software de los
ordenadores para comprobar si funcionan correctamente. Identifican el riesgo
de sufrir errores de un software, detectan errores y los comunican. Evalúan el
funcionamiento general del software y sugieren formas de mejorarlo.
Ver todos los cursos de Probadores de software (testers)
Actividades laborales
Los probadores de software pueden probar todo tipo de software, programas
individuales para aplicaciones o productos (una serie de programas que
almacenan y procesan información para realizar una tarea específica). Las
aplicaciones incluyen pantallas para que los usuarios introduzcan información y
puedan imprimir los resultados. Los probadores también pueden analizar sitios
web o juegos de ordenador.
En primer lugar, identifican todos los riesgos tales como: errores que podrían
ocurrir en el software cuando alguien lo está usando, confusiones a la hora de
utilizar un software por parte de un usuario debido a la falta de información, la
instalación del software en diferentes tipos de sistemas, etc. Prueban estos
riesgos para conseguir que un software ofrezca la máxima confianza. Deben
diseñar pruebas que se puedan repetir y evaluar.
157
Si se puede utilizar herramientas de automatización de pruebas para iniciar una
sesión en muchos usuarios al mismo tiempo.
Si cuando el software tiene que compartir información con otro programa,
continúa funcionando correctamente.
Los probadores de software no suelen tener tiempo para probar todas las
combinaciones posibles de las acciones que pueden aplicarse con un software,
por lo que tienen que ponerse de acuerdo de antemano con el cliente sobre el
tiempo disponible que tendrán. Mantienen un registro detallado las pruebas que
realizan. Una vez completadas las pruebas, enumeran los errores y redactan
un informe para que los programadores y administradores de proyectos puedan
implementar posteriormente.
158
Acuerda de antemano cuánto hay que testar en el tiempo disponible.
Aptitudes para la comunicación verbal y escrita.
Aptitudes para la planificación.
Aptitudes para redactar informes.
Bien organizado.
Capacidad de análisis.
Capacidad para priorizar tareas.
Capacidad para trabajar en equipo.
Capaz de prestar atención al detalle.
Capaz de trabajar bajo presión.
Conocimientos especializados en informática.
Destrezas en informática.
Elabora y realiza tests sobre programas informáticos, páginas web y
juegos.
Habilidad para evaluar.
Habilidad para resolver problemas.
Idea tests que puedan repetirse y valorarse.
Identifica riesgos.
Lista errores y redacta informes para programadores y directores de
proyectos para que actúen según los mismos.
Lleva registros precisos de lo que se ha testado.
Metódico.
Observador.
Recomienda formas de mejorar la realización de tests.
Resuelve cómo probar riesgos a fin de que el software resulte lo más
seguro posible.
Sensato.
Sentido común.
Trabaja en equipo.
Tranquilo.
Estudios oficiales
A continuación se relacionan algunos de los estudios oficiales (ciclos formativos
o carreras universitarias) que permiten ejercer esta profesión. Hay que tener en
cuenta que dependiendo del ámbito de especialización, es posible que se
159
tenga que complementar la formación con otros cursos más específicos del
sector. La formación continua es un aspecto clave para la mejora profesional.
empresarial
160
Para José Luis Antón, “el informe de este año refleja claramente que
garantizar la calidad ya no es una tarea de “back office”, sino una actividad
crítica para los negocios, ya que de ellos depende la satisfacción de los
clientes y, consecuentemente, la competitividad de las empresas”.
161
“Con las ambiciones sobre la experiencia del consumidor establecidas para los
equipos de QA, la adopción de la inteligencia artificial y automatización para
optimizar el software de pruebas es inevitable. Creemos –
subrayó Antón -, que esta transformación cambiará de manera radical el
panorama de habilidades para QA y Testing. Nuevos roles como el IA QA
strategist, Data scientists, o expertos en pruebas para Inteligencia Artificial
entrarán a formar parte de los equipos de Quality Assurance”.
162
FUNCIONES Y RESPONSABILIDADES DE UN LIDER DE
TESTING
Creado porGustavo Terrera
/
Comentarios0
163
3. Revisar y analizar los requisitos del proyecto.
4. Planificar y organizar la transferencia de conocimientos, como así también el
autoaprendizaje.
5. Levantar las consultas relacionadas con los requisitos y conseguir el usuario
clave del negocio (por ejemplo, el cliente, el analista de negocio, gerente de
producto o proyecto manager) asignado al proyecto, para que resuelva
nuestros problemas.
6. Planificar, organizar y dirigir la reunión de lanzamiento de pruebas.
7. Alcance de las pruebas requeridas.
8. Diseñar la estrategia de prueba requerida conformes con el alcance y los
estándares de organización.
9. Crear el plan de pruebas de software, para que sea revisado, aprobado y
firmado por las partes interesadas.
10. Evaluar e identificar las herramientas para la gestión y automatización de
pruebas requeridas
11. Estimación del esfuerzo de la prueba y al equipo requerido (en cuanto a su
tamaño, habilidades, actitudes y calendario)
12. Crear un cronograma de pruebas (tareas, dependencias y asignación de
recursos)
13. Identificar las necesidades de formación
14. Identificar las métricas de prueba a recoger
15. Comunicarse con el cliente o los miembros del equipo on site, según los
requerimientos
16. Revisar los casos de prueba y datos de prueba obtenidos durante las
pruebas, para conducir los comentarios de revisión posteriores
17. Seguir los nuevos requerimientos actualizados y modificar en consecuencia
los artefactos de prueba.
18. Determinar, adquirir, controlar, mantener y optimizar el entorno de prueba
(hardware, software y red)
19. Obtener información sobre los últimos releases / construcciones desde el
equipo de desarrollo / cliente.
20. Crear y mantener el framework de automatización de pruebas requerido
21. Administrar el proyecto de gestión de pruebas
22. Administrar las aplicaciones bajo prueba
23. Asignar tareas de acuerdo con el plan de pruebas
24. Comprobar el estado de cada tarea diaria asignada y resolver los
problemas que afecten a los miembros del equipo con dichas tareas
25. Asegurar que cada miembro del equipo está ocupado con el trabajo de
manera óptima, teniendo en cuenta y balanceando la sobrecarga y demasiada
inactividad
26. Reasignar las tareas de prueba de acuerdo a lo que requerido
27. Seguir las tareas asignadas en relación con el plan de pruebas y la
programación del proyecto
28. Revisar la automatización de las pruebas creadas y obtener los
comentarios de revisión
29. Tomar el control y mantener la suite de automatización de pruebas del
proyecto
30. Planificar y ejecutar la automatización de pruebas
31. Revisar los informes de incidencias y asignar los defectos válidos al área de
desarrollo correspondiente
164
32. Asignar los defectos que vuelven por reporte y ayudar al Tester que tome el
tema en todo lo que requiera
165
55. Promover/auditar la creación de pruebas unitarias por parte de Desarrollo.
56. Controlar los casos y datos de prueba cuando sea necesario.
57. Velar por que se aplique la metodología de trabajo, dentro de los
lineamientos definidos.
58. Proponer ajustes o mejoras a la metodología vigente.
59. Funcionar como nexo para la correcta implementación de las tareas de
Testing de los equipos externos contratados, incluyendo el control
correspondiente.
60. Desarrollar y analizar los indicadores de la gestión del área de testing.
61. Gestionar Riesgos: identificar y gestionar los riegos del testeo.
62. Gestionar el alcance: aceptar o demorar solicitudes de testeo según la
demanda y características del proyecto.
63. Participar en la revisión de la estrategia de testing para cada proyecto.
64. Monitorear el cumplimiento de los objetivos del área.
65. Proponer ajustes a la planificación estratégica definida.
66. Evaluar el desempeño de colaboradores a cargo.
67. Identificar necesidades de capacitación, para propiciar el conocimiento del
equipo.
68. Participar en la gestión del presupuesto del sector.
69. Estar orientado al logro de objetivos.
70. Poseer habilidades de planificación y organización.
71. Poseer buenas habilidades de comunicación, dinamismo y proactividad.
72. Estar certificado en algún área de conocimiento de testing
(ISTQB, CAT, Scrum Master, TMMi)
166
Cómo probar un sitio web
¿Quieres saber cómo probar tu sitio web? Aquí puede encontrar información
sobre las principales técnicas de prueba de sitios web. Consideraremos los
elementos de la lista de verificación de prueba del sitio web que se deben
revisar para garantizar la preparación de su sitio para el lanzamiento.
ARTICLE CONTENT
Pruebas de documentación
Pruebas de funcionalidad del sitio web
Pruebas de usabilidad
Pruebas de interfaz de usuario
Pruebas de compatibilidad (configuración)
Pruebas de rendimiento
Pruebas de seguridad
Pruebas relacionadas con el cambio
Pruebas amigables para móviles
Prueba beta
Cómo probar su sitio web con EasyQA Chrome Extension
167
Las pruebas, como la etapa final del desarrollo del sitio web, desempeñan un
papel vital en el proceso de creación de software de alta calidad.
Después de la prueba del sitio web, el cliente recibe un proyecto listo sin
errores, con buena legibilidad, facilidad percibida, comodidad y confiabilidad.
Las reglas básicas para probar un sitio web son los pasos que muestran al
usuario lo fácil y lógico que es el proyecto, lo fácil y posible de encontrar la
información requerida.
Cuanto más complejo sea el sitio, más tiempo llevará probarlo y depurarlo.
Según los detalles del proyecto, hasta el 50% del presupuesto total y los
recursos de tiempo pueden asignarse para probar un sitio web.
Para organizar las pruebas del sitio web, se proporciona una metodología
especialmente desarrollada. La verificación de su sitio web se realiza de
acuerdo a esta metodología.
Entonces, consideremos las etapas principales que debe pasar para probar su
sitio. Mira la foto de abajo. Aquí puedes verlos.
Esto podría ser como un tutorial de prueba de sitios web para su sitio.
Pruebas de documentación
Los principales artefactos relacionados con las pruebas del sitio web se
analizan en esta etapa:
168
Requerimientos
Plan de prueba
Casos de prueba
Matriz de trazabilidad.
Las pruebas funcionales tienen como objetivo garantizar que cada función del
sitio web funcione de acuerdo con la especificación del requisito. Prueba de
sitio web de la funcionalidad muestra “Lo que hace el sistema”.
Intentemos crear la lista de verificación para las pruebas de funcionalidad de tu
sitio web.
Pruebas de enlaces
Prueba de cookies
Las cookies son pequeños archivos que se almacenan en la computadora del
usuario después de visitar su página web.
169
Verifique que el sitio esté disponible para las máquinas de búsqueda.
Verifique que su página web tenga un mapa del sitio preciso en formato
XML y HTML
Pruebas de usabilidad
170
Pruebas de interfaz de usuario (UI) Se proporciona para verificar que la
interfaz gráfica de usuario de su sitio web cumpla con las especificaciones.
171
Asegúrese de que todas las páginas de su sitio se ajusten al tamaño del
papel y al tamaño definido en la opción de impresión.
Pruebas de rendimiento
Pruebas de seguridad
172
Asegúrese de que el acceso no autorizado a páginas seguras no sea
posible
Verifique que las sesiones se eliminen automáticamente después de una
inactividad prolongada del usuario
Probar las funciones de seguridad SSL
Todos los intentos de romper, informar errores, etc. deben registrarse y
almacenarse en un archivo separado para su posterior análisis.
Verifica el trabajo de captcha usando scripts automáticos.
Asegúrese de que los archivos restringidos no se puedan descargar sin
el acceso adecuado
Asegúrese de que no haya capacidad de inicio de sesión al ingresar la
contraseña o el nombre de usuario incorrectos
Siga este enlace para saber más sobre las pruebas de seguridad
– https://geteasyqa.com/qa/software-testing-types/
Aquí puede obtener más información sobre las pruebas relacionadas con el
cambio – https://geteasyqa.com/qa/software-testing-types/
Como ha leído antes, algunas de las verificaciones del sitio web se referían a la
versión móvil de su sitio. Hoy en día, la cantidad de personas que usan solo
dispositivos móviles para el acceso a Internet tiende a aumentar de manera
estable. Por eso es muy importante asegurarse de que el sitio web sea
compatible con dispositivos móviles.
173
Verificar la compatibilidad con teléfonos inteligentes y tabletas.
Asegúrate de que la navegación del sitio sea lo más sencilla posible.
Optimiza el tiempo de carga de tu sitio.
Asegúrese de que los botones sean lo suficientemente grandes para las
personas con dedos grandes
Optimizar el tamaño de todas las imágenes
No uses Flash y ventanas emergentes
Usa viñetas y oraciones cortas.
Asegúrese de que su número de teléfono esté a un clic de distancia de
ser marcado
Verifique que el sitio web pueda acceder a su ubicación a través de GPS
Prueba beta
Ahora, cuando hemos considerado las fases principales del proceso de prueba
del sitio web, tratemos de encontrar el error y reportarlo con una de las
herramientas de prueba web real, EasyQA Chrome Extension.
174
Inicia sesión (solo si lo deseas).
Testeo unitario: se prueba que cada módulo funcione bien por separado.
Prueba de stress: se prueba la resistencia de la aplicación enviándole una
cantidad de peticiones excesiva, buscando que colapse.
Test de integración: los módulos probados independientemente durante el
testeo unitario se acoplan y se prueban en conjunto.
Test funcional: se prueba que el software ofrezca las funciones solicitadas.
Test de aceptación: el usuario verifica que el producto satisfaga sus
expectativas.
Las pruebas de QA no sólo son beneficiosas para el usuario final, que recibirá un
producto de calidad, sino también para el equipo de desarrollo, que al establecer un
control permanente sobre el proceso evitará en buena medida los costos de tener
que corregir errores en etapas avanzadas del proyecto.
175
QA es la etapa donde se deben revisar mediante diversos testings el
resultado de la app que se ha creado. Se llevan a cabo un conjunto de
actividades sirven como control de calidad de lo obtenido.
Para los Clientes: Qué buscar en un profesional de QA y por qué deben
realizar este proceso.
176
Te recomendamos:
Aun hay gente, que prefieren ahorrar dinero en el proceso de testeo. Y esto es
un gran error!
Incluso aunque la inversión inicial pueda ser mayor, a largo plazo el
mantenimiento de la plataforma y el proceso de desarrollo es mucho mas
barato. Los test de software dan feedback rápido, por lo que todos los amantes
de la metodología Agile lo usan.
177
1. Prueba unitaria
2. Pruebas de integración
178
3. Pruebas funcionales
Las pruebas funcionales son elementos cruciales para asegurar la calidad del
producto software y confirmar que actúa acorde a sus funciones tal y como el
usuario espera. Los test se utilizan para verificar que la aplicación, página web
ejecute sus funcionalidad a través de una respuesta adecuada a los controles
de usuario, una interfaz de usuario consistente, integración con otros sistemas
y procesos de negocios, y manejo adecuado de información y búsqueda.
Como <type of user>, quiero <some goal> para que <some reason>
Por ejemplo,
Los test de funcionalidad testean este tipo de historias de usuarios. Otra forma
de nombrar las pruebas funcionales son los test de aceptación, test de
consumidor, etc. Hay miles de versiones en internet, pero creemos que “prueba
funcional” es la mejor manera de nombrar a estos test.
Herramientas de pruebas
funcionales: Jmeter, Gatling, Supertest, SoapUI, Cucumber, Robolectric, KIF
4. Pruebas de rendimiento
179
particular. También puede servir para investigar, medir, validar o verificar otros
atributos de calidad del sistema, como la escalabilidad, seguridad y uso de
recursos.
Puede servir para verificar que una plataforma de software presenta las
especificaciones del product owner. Este test muestra como eficiente es un
software. Chequea como de bien un software trabaja bajo una carga máxima
de trabajo. Hay varias variaciones o subtipos de pruebas de rendimiento como
tests de carga, test de estrés, test de volumen y muchas otras más. Estos
métodos de tests de aseguran de que lo que se ha hecho, se ha realizado
correctamente, teniendo en cuenta las diferentes circunstancias que pueden
aparecer en el futuro.
Ahora bien, habiendo distintos tipos de Testing nos enfrentamos con distintos
desafíos al tener que utilizar herramientas específicas que atiendan a los
mismos.
Algunas de ellas tienen una curva de aprendizaje corta, es decir que el tester
no demora mucho en comprender su alcance, sus funciones y su aplicabilidad.
180
En la sección Tutoriales podrás encontrar vídeos q muestran el uso de
distintas herramientas, producto de trabajos realizados por distintos equipos y
personas, que han pasado por el curso Intensivo Manual Testing
Click Aquí
Podemos pensar incluso, en que nuestra propuesta por una nueva herramienta
o nuevo framework permitirá q también el área de desarrollo acepte su
incorporación para traccionar con la misma.
Podrán ver q hay más de un bugtracker y ésto tiene q ver con las
particularidades q presente cada instalación.
181
En lo personal, durante el año estaré explorándolas para publicar el resultado
de la evaluación q haga en nuestra sección Tutoriales, donde podrás encontrar
las grabaciones q han hecho los distintos grupos o personas q han pasado por
el curso Intensivo Manual Testing.
Listado de herramientas
Selenium
Referencias
http://www.seleniumhq.org/projects/webdriver/
Appium
Referencias
http://appium.io
JMeter
Referencias
http://jmeter.apache.org
183
Jenkins
Referencias
https://jenkins.io
Testlink
Referencias
http://testlink.org
Mantis
Referencias
184
https://www.mantisbt.org
Postman
Referencias
www.getpostman.com
Firebug
Referencias
http://getfirebug.com
GitHub
Referencias
https://github.com
185
Bugzilla
Referencias
https://www.bugzilla.org
Razor SQL
Referencias
https://razorsql.com
PhantomJS
Referencias
http://phantomjs.org
UIAutomator
186
para probar aplicaciones preinstaladas, como Ajustes del teléfono, así como
aplicaciones de terceros.
Referencias
https://google.github.io/android-testing-support-library/docs/uiautomator/
Notepad++
Referencias
https://notepad-plus-plus.org
FileZilla
Referencias
https://filezilla-project.org
AutoIT
187
Kubernetes vs Docker: ¿En que se diferencian?
¿QUÉ ES UN CONTENEDOR?
Un contenedor es un paquete cerrado que contiene todo lo necesario para que
una aplicación o un servicio que se ejecute encapsulado dentro de una sola
imagen completamente independiente el servidor anfitrión que lo aloje, incluye
tanto binarios como archivos de configuración y demás ficheros que necesite.
La idea detrás de esto es que sea ligeros y portables, que se pueda transferir
entre diferentes entornos sin contratiempos ya que el funcionamiento interno es
completamente independiente del sistema operativo que lo aloja.
¿QUÉ ES DOCKER?
188
Básicamente Docker es un sistema que nos permite construir, transferir,
desplegar y ejecutar los contenedores con nuestras aplicaciones dentro de una
manera muy sencilla y confiable, garantizando un despliegue escalable de
forma eficiente sin importar el sistema operativo anfitrión.
Con Docker podemos tener este grado de certeza y confianza en cuanto a
compatibilidad entre equipos porque todo lo que necesita nuestra aplicación
junto las librerias y demás dependencias se encuentran encapsuladas dentro
del mismo contenedor, lo que nos garantiza que el contenedor se ejecutara de
la misma forma en cualquier equipo o servidor.
¿QUÉ ES KUBERNETES?
Si bien Docker mismo permite ejecutar los contenedores creados y las
herramientas de gestión que nos provee pueden ser suficientes para gestionar
un solo servidor, resultan muy poco practicas de utilizar a gran escala para
montar una infraestructura distribuida de múltiples contenedores corriendo en
tal vez docenas o cientos de servidores al mismo tiempo.
189
De esta forma permite no tener recursos ociosos que cuestan dinero, por lo que
solo pagamos por lo que usamos, en ese sentido el Cloud Hosting es mas
rentable que las soluciones tradicionales.
Si bien Kubernetes soporta varios tipos de contenedores diferentes el mas
común y popular es Docker, en esta sociedad perfecta que forman ambos,
Docker es el que se encarga de crear las imágenes y los contenedores que se
van a utilizar y Kubernetes se encarga de gestionar todo.
Ambos tienen la ventaja de ser de código abierto, esto es una ventaja no solo
por un tema económico, sino que lo fundamental de este punto es que al ser
open-source nos da la opción de adaptarlo a nuestras necesidades con libertad
sin estar atado a las limitaciones de una licencia y a las limitaciones técnicas
que muchas veces enfrentamos con un producto cerrado.
Tampoco olvidar que detrás de estos dos productos hay una amplia comunidad
que nos asegura respaldo técnico, ademas las empresas desaparecen y con
ellas sus productos pero los proyectos de codigo abierto normalmente no
mueren, solo se transforman, esto es otra ventaja ya que nos ofrece proyección
de futuro a mediano y largo plazo.
Si has oído hablar de Gherkin pero no sabes en qué consiste, te explicamos qué
es y las ventajas que hacen que sea un lenguaje para todos, por lo que es el
lenguaje empleado en BDD.
Hay entornos donde es muy importante que haya mucha cohesión entre esos
perfiles, por lo que es vital tener un lenguaje común que entiendan estos dos
perfiles, incluso que entiendan las máquinas.
Este lenguaje se llama Gherkin, y que sirve para acercar estos dos mundos.
Qué es Gherkin
190
Gherkin es un DSL o Lenguaje Específico de Dominio (Domain-Specific
Languaje), es decir, un lenguaje que está creado para resolver un problema.
Tiene una estructura generada por varios elementos, como vemos en la siguiente
imagen.
Estos elementos nos ayudan a que todos esos comportamientos vayan poco a
poco bajando de nivel, hasta llegar a un lenguaje que entiendan fácilmente los
desarrolladores.
Después eso aterriza en algo mucho más palpable, qué es lo que todos
entendemos como acciones, como puede ser seleccionar un curso nuevo o
arrancar el curso dado un usuario, que están mucho más relacionado con
pruebas de aceptación.
191
multiplataforma y se ha consolidado últimamente como una de las herramientas
más usadas en la actualidad para realizar las tareas de integración continua.
192
sea en base a las pruebas del software o a las métricas de calidad
definidas.
o Generar o visualizar la documentación de un proyecto
Como servidor de automatización, además, Jenkins es capaz de extender sus
funcionalidades con centenares de plugins para realizar un sin fin de tareas
útiles.
Es aquí donde Gradle toma protagonismo, si aún no conoces qué es, cuáles son
sus ventajas y algunos complementos que serán de gran ayuda te invitamos a
que continúes leyendo este artículo y sigas aprendiendo sobre esta herramienta.
¿QUÉ ES GRADLE?
Gradle tiene una gran flexibilidad y nos deja hacer usos otros lenguajes y
no solo de Java , también cuenta con un sistema de gestión de dependencias
muy estable. Gradle es altamente personalizable y rápido ya que completa las
tareas de forma rápida y precisa reutilizando las salidas de las ejecuciones
anteriores, sólo procesar las entradas que presentan cambios en paralelo.
193
CARACTERÍSTICAS
194
Compara builds: Resalta de forma rápida las diferencias entre
compilaciones, lo que hace que el análisis de la causa raíz sea mucho
más rápido y eficaz.
Compilador daemon: Gradle crea un proceso de daemon que se
reutiliza dentro de una compilación de múltiples proyectos, cuando
necesita bifurcar el proceso de compilación, mejorando la velocidad de
compilación.
Personalizar y extender escaneos: Ofrece la opción de agregar sus
propios datos para construir escaneos como etiquetas, valores y enlaces,
integrando escaneos de compilación en la cadena de herramientas.
Caché de dependencia de terceros: Las dependencias de repositorios
remotos se descargan y almacenan en caché localmente, las
compilaciones posteriores utilizan los artifacts almacenados en caché para
evitar el tráfico de red innecesario.
COMPLEMENTOS GRADLE
195
Esta herramienta cuenta con una gran variedad de complementos o
plugins que ayudan agilizar la construcción, entre los cuales destacamos los
siguientes:
¿Qué es Gradle?
¿Qué es Gradle?
196
y maven pero intenta llevarlo todo un paso mas allá. Para empezar se apoya
en Groovy y en un DSL (Domain Specific Language) para trabajar con un
lenguaje sencillo y claro a la hora de construir el build comparado con
Maven. Por otro lado dispone de una gran flexibilidad que permite trabajar con
ella utilizando otros lenguajes y no solo Java. Dispone por otro lado de un
sistema de gestión de dependencias sólido.
Vamos a construir un ejemplo sencillo de Gradle. Para ello el primer paso será
instalarnos las herramientas de Gradle para eclipse a través del marketplace.
197
198
199
Como podemos ver disponemos de un fichero build.gradle que es el
encargado de gestionar el build y que mostramos su código a continuación.
Java Plugin: Se encarga de poner a nuestra disposición tareas del mundo java
como por ejemplo la tarea “jar” de empaquetado que usamos en la linea 13.
200
1. package com.arquitecturajava;
2.
3. import org.apache.logging.log4j.LogManager;
4. import org.apache.logging.log4j.Logger;
5.
6. public class Principal {
7. private static final Logger logger = LogManager.getLogger();
8.
9. public static void main(String[] args) {
10. logger.error("hola, mundo");
11. }
12. }
En este caso se trata de una clase que usa el API de log4j (versión2) para
imprimir un mensaje de error. Para ello deberemos definir en la carpeta de
resources el fichero log4j2.xml que nos configura el appender de consola.
201
Realizada esta operación gradle nos generará un jar con el proyecto
preparado.
202