SlideShare una empresa de Scribd logo
M E M B E R
Desarrollo y testeo
modular de interfaces
HTML5 / MVC
Santiago Bustelo
CodeCamp Buenos Aires • 15 de octubre, 2011
@sbustelo
Presentación bajo licencia Creative Commons
Atribución 2.5 Argentina
http://creativecommons.org/licenses/by/2.5/ar
Desarrollo y testeo modular de interfaces •M E M B E R
kambrica.com/congo
¿De qué tipo de desarrollo de interfaces
estamos hablando?
• Aplicaciones web complejas, escalando a sistemas de múltiples
aplicaciones y sitios web con diferentes tecnologías back-end
• Requerimientos de la interfaz:
• Consistencia
• Múltiples navegadores / dispositivos
• Usabilidad, accesibilidad, SEO
• No es aceptable generar la interfaz desde el código back-end
• Es necesario construir HTML, CSS, JavaScript a nivel de producción
2
Desarrollo y testeo modular de interfaces •M E M B E R
kambrica.com/congo
¿Qué vamos a ver?
• Contexto
• Vista general del proceso de diseño y desarrollo front-end
• Problemáticas específicas del desarrollo de interfaces HTML
• Propuesta
• Conjunto de prácticas y herramientas desarrolladas y probadas
en proyectos reales para reducir desperdicios y asegurar calidad
(¡y salud!)
• Congo, nuestro framework open source para desarrollo y testeo
modular HTML/CSS/JavaScript
3
Desarrollo y testeo modular de interfaces •M E M B E R
kambrica.com/congo
Contexto:
Diseño y desarrollo de
interfaces en sistemas de
aplicaciones web complejas,
usables y accesibles
4
Desarrollo y testeo modular de interfaces •M E M B E R
kambrica.com/congo
Aplicaciones y Sistemas de aplicaciones
5
Desarrollo y testeo modular de interfaces •M E M B E R
kambrica.com/congo
6
Aplicaciones y Sistemas de aplicaciones
Desarrollo y testeo modular de interfaces •M E M B E R
kambrica.com/congo
Proceso de diseño y
desarrollo front-end
7
• IxD / AI / UX
• Análisis, Wireframes
• Validación: negocio / usuarios
• Diseño de interfaces
• Diseño a nivel de detalle
• Validación: negocio / usuarios
• Desarrollo de interfaces
• Maquetado HTML/CSS/JavaScript
• Validación: dispositivos
• Prototipo navegable
• Validación: negocio / usuarios
Desarrollo y testeo modular de interfaces •M E M B E R
kambrica.com/congo
Entregables de diseño y desarrollo de la
interfaz para implementación
• Documentación de procesos del usuario, elementos de la interfaz,
operación y funcionamiento
• HTML validado con negocio, usuario y dispositivos a ser generado
por el back-end (“modelo terminado”)
• El desarrollo front-end no se realiza sobre el framework de
implementación, debido a que ello:
• no permite trabajar la interfaz en el contexto correcto
• no permite iteraciones económicas
• genera apego a funcionalidades aunque no pasen validación UX
8
Desarrollo y testeo modular de interfaces •M E M B E R
kambrica.com/congo
Patrones de arquitectura de software
Integración front/back end
• MVC: Model-View-
Controller
• MVP: Model-View-Presenter
• MVVM: Model-View-
ViewModel
• BBM: estándar de facto de
arquitectura de software
Desarrollo front-end
• BBM
9
Desarrollo y testeo modular de interfaces •M E M B E R
kambrica.com/congo
10
• Trabajo reactivo sobre lo evidente e
inmediato, poco o ningún
planeamiento e infraestructura
• Cada cambio “local” tiene
consecuencias globales, obliga a
repasar desarrollo previo (Shlemiel
the painter)
• Se acumulan incertidumbres que
explotan tardíamente
• Cada vez más difícil lograr
escalabilidad, performance,
mantenibilidad
BBM: Big Ball of Mud
(aka Shantytowns)
Desarrollo y testeo modular de interfaces •M E M B E R
kambrica.com/congo
Características desarrollo de código
HTML, CSS, JavaScript
• Poco modular por diseño (no existe “HTML include”) o
implementación (IE toma sólo los primeros 31 STYLEs y SCRIPTs)
• Capas geológicas, hacks, ofuscación
• Múltiples formas de lograr un resultado similar, muchas erróneas
• HTML: código no funcional
• No podemos aplicar herramientas de testing de código
funcional
• Sobre el HTML debemos montar el código JavaScript, que pasa
a heredar sus problemas estructurales
11
Desarrollo y testeo modular de interfaces •M E M B E R
kambrica.com/congo
Propuesta:
12
Desarrollo y testeo modular
Congo framework
Desarrollo y testeo modular de interfaces •M E M B E R
kambrica.com/congo
HTML no tiene estructura: hay que dársela
• Estructuras, convenciones, mejores prácticas
• Desarrollar herramientas transparentes y portables para:
• brindar estructuras de soporte (scaffolding) no restrictivas
• realizar pruebas sistemáticas
• generar documentación y código para implementación de forma automática
• Proceso eficiente y flexible a iteraciones
• Productos:
• código front-end modular, mantenible, testeable, reusable
• documentación para implementación y mantenimiento de la interfaz
13
Desarrollo y testeo modular de interfaces •M E M B E R
kambrica.com/congo
Estructura: desarrollo modular
Nathan Curtis: Modularity & Design Hierarchy
14
Desarrollo y testeo modular de interfaces •M E M B E R
kambrica.com/congo
Herramienta: Congo
15
• Para probar código funcional,
podemos usar un mono loco
• Para probar código no funcional
(diseño), podemos usar…
un mono pintor
Desarrollo y testeo modular de interfaces •M E M B E R
kambrica.com/congo
Desarrollo modular de la interfaz
16
• Separación del HTML en componentes independientes
• Variables del componente permiten generar instancias de
información, presentación y operación
• Cada componente establece un contexto local para
HTML/DOM, CSS y JavaScript
• Paralelo funcional: objeto en OOP
Desarrollo y testeo modular de interfaces •M E M B E R
kambrica.com/congo
Componentes
componente_full
HTML template
archivos JS
archivos CSS
variables y valores
imagenes
img1, img2…
componente_minimo
(todo es opcional)
_componente_oculto
HTML template
17
Desarrollo y testeo modular de interfaces •M E M B E R
kambrica.com/congo
Un componente simple…
components/button/html.php
<span class="button
<?= $this->buttonType ?>">
<input type="submit"
value="<?= $this->buttonText ?>" />
</span>
components/button/variables.yml
buttonType: [ action, confirm, decline ]
buttonText: text
components/button/styles.css
.button INPUT { background-color:grey;
color:white; }
.button.action INPUT { background-
color:blue; }
.button.confirm INPUT { background-
color:green; }
.button.decline INPUT { background-color:red; }
components/button/scripts.js
$('.button A').click(function() {
// Do something...
});
18
Desarrollo y testeo modular de interfaces •M E M B E R
kambrica.com/congo
Componentes, componentes, componentes
components/formFoot/html.php
<div class="formFoot">
<?php component(
'button',
array('buttonText' => 'Submit')
); ?>
or
<a href="#">cancel</a>
</div>
19
Desarrollo y testeo modular de interfaces •M E M B E R
kambrica.com/congo
Convenciones HTML, CSS y JS
• El HTML siempre se abre y cierra por cada nivel.
• Todo componente está contenido en un wrapper:
SPAN (inline) o DIV (block) class="nombreDelComponente".
• Evitar declaraciones CSS afectando elementos no contiguos
• Cuanta más distancia haya entre un elemento y la regla de CSS
que lo afecta, más difícil será seguirle el rastro.
• Definimos globales sólo los tags principales (BODY, A, P…). Todas
las demás declaraciones descenderán de .nombreDelComponente.
• JavaScript no intrusivo, jQuery
20
Desarrollo y testeo modular de interfaces •M E M B E R
kambrica.com/congo
Componentes » Layouts
components/_layouts/index/html.php
<div class="layout-index">
<form>
<div class="formBody"> Say hello to the world! </div>
<?php component( 'formFoot' ); ?>
</form>
</div>
21
Desarrollo y testeo modular de interfaces •M E M B E R
kambrica.com/congo
Componente _html
components/_html/html.php
<!DOCTYPE HTML>
<html>
<head>
<meta charset="utf-8" />
<title>Hello world</title>
<?php $this->resources('css'); ?>
</head>
<body>
<?php $this->layout() ?>
<?php $this->resources('js'); ?>
</body>
</html>
• Incluye layout que le pasa el motor
• Compila los recursos CSS y JS de
todos los componentes
• Recomendaciones Yahoo!
Exceptional Performance:
• Make JavaScript and CSS
External
• Put Stylesheets at Top
• Put Scripts at Bottom
• Minify JavaScript and CSS
22
Desarrollo y testeo modular de interfaces •M E M B E R
kambrica.com/congo
Hello World!
23
Desarrollo y testeo modular de interfaces •M E M B E R
kambrica.com/congo
Template tags
24
Evaluar una variable:
<?= $this->variableName ?>
Variables del motor:
<?= $this->imgsPath ?>
<?= $this->rsrcPath ?>
TBD: root resources
Incluir componente:
<?php
component( 'componentName' ); ?>
<?php
component( 'componentName',
array('variableName' => 'value') ); ?>
Para _html (se provee placeholder)
<?php $this->layout() ?>
<?php $this->resources('css'); ?>
<?php $this->resources('js'); ?>
Desarrollo y testeo modular de interfaces •M E M B E R
kambrica.com/congo
Testeo del componente:
combinatoria de variables
• Se definen para cada componente grupos de valores de prueba
para cada variable.
• Al probar la combinatoria de variables y valores, se observan
sistemáticamente todos los estados posibles del componente.
• Paralelo funcional: unit testing
25
Desarrollo y testeo modular de interfaces •M E M B E R
kambrica.com/congo
Testeo del componente button
26
buttonType: [ action, confirm, decline ]
buttonText: text
Desarrollo y testeo modular de interfaces •M E M B E R
kambrica.com/congo
Explosión combinatoria
27
buttonTag: ['a', 'input']
buttonText: [ Submit, Very very long buttonText ]
buttonAHref: [ '#' ]
buttonSize: [ '' , small, big ]
buttonType: [ '', action, decline ]
Desarrollo y testeo modular de interfaces •M E M B E R
kambrica.com/congo
Pairwise: combinación de pares
28
Test Destination Class Seat Preference
1 Canada Coach Aisle
2 Mexico Coach Aisle
3 (defect!) USA Coach Aisle
4 Canada Business Class Aisle
5 Mexico Business Class Aisle
6 USA Business Class Aisle
7 Canada First Class Aisle
8 Mexico First Class Aisle
9 USA First Class Aisle
10 Canada Coach Window
11 Mexico Coach Window
12 (defect!) USA Coach Window
13 Canada Business Class Window
14 Mexico Business Class Window
15 USA Business Class Window
16 Canada First Class Window
17 Mexico First Class Window
18 USA First Class Window
Test Destination Class Seat Preference
1 Canada Coach Aisle
3 (defect!) USA Coach Aisle
5 Mexico Business Class Aisle
8 Mexico First Class Aisle
9 USA First Class Aisle
11 Mexico Coach Window
13 Canada Business Class Window
15 USA Business Class Window
16 Canada First Class Window
Michael Bolton: Pairwise Testing
Desarrollo y testeo modular de interfaces •M E M B E R
kambrica.com/congo
Pairwise testing
29
buttonTag: ['a', 'input']
buttonText: [ Submit, Very very long buttonText ]
buttonAHref: [ '#' ]
buttonSize: [ '' , small, big ]
buttonType: [ '', action, decline ]
Desarrollo y testeo modular de interfaces •M E M B E R
kambrica.com/congo
Testeo de un layout
30
Desarrollo y testeo modular de interfaces •M E M B E R
kambrica.com/congo
Indice del proyecto
31
Desarrollo y testeo modular de interfaces •M E M B E R
kambrica.com/congo
Views
32
• Instancias de los layouts para
documentación y prototipo
navegable (TBD: variables)
• Helper para generar layouts
• Al generar un nivel en
_sitetree.yml, se genera en
_layouts un directorio con
html.php placeholder
• Genera estructura archivos para
entregables finales
components/_layouts/_sitetree.yml
index
login
products:
index
detail
Desarrollo y testeo modular de interfaces •M E M B E R
kambrica.com/congo
Desarrollo vs. Entregables
input
config.php
variables.yml
components
_html
_layouts
componente1
componente2
output
documentation
documentation index
components (TBD)
test comp1
test comp2
public_html
rsrc
images
33
Desarrollo y testeo modular de interfaces •M E M B E R
kambrica.com/congo
Platforms: Eat Your Own Dogfood
34
Desarrollo y testeo modular de interfaces •M E M B E R
kambrica.com/congo
Platforms: Eat Your Own Dogfood
35
Desarrollo y testeo modular de interfaces •M E M B E R
kambrica.com/congo
Platforms: Eat Your Own Dogfood
36
Desarrollo y testeo modular de interfaces •M E M B E R
kambrica.com/congo
Now, eat our dogfood!
kambrica.com/congo
37
• Interfaces más robustas
• Diseñadores y desarrolladores
más saludables
• Sitios de cachorro a adulto
en mucho menos tiempo

Más contenido relacionado

PDF
Diseño centrado en el usuario - Festival cmd 29 oct 2011
PPT
IxDA BA Mobile 20 julio 2010
PDF
Agile UX
KEY
Presentacion cw2012
PPTX
Taller UX: Tests de usabilidad
PDF
Introducción a Experiencia de usuario y Usabilidad
PDF
Cómo prototipar y reclutar para un test a bajo costo
PDF
Agile UX / Ágiles 2015
Diseño centrado en el usuario - Festival cmd 29 oct 2011
IxDA BA Mobile 20 julio 2010
Agile UX
Presentacion cw2012
Taller UX: Tests de usabilidad
Introducción a Experiencia de usuario y Usabilidad
Cómo prototipar y reclutar para un test a bajo costo
Agile UX / Ágiles 2015

La actualidad más candente (18)

ODP
Front End & Responsive Web Design | DevFest Merida
PDF
Construyendo y publicando nuestra primera app multi plataforma (II)
PDF
Documentos de UX
PDF
Wireframes & Prototipos ¿Sólo una cuestión de organización? / Día de la Usabi...
PDF
User Experience Research: los métodos más usados en Mercado Libre
PPTX
¿Diseñar para los usuarios o diseñar con los usuarios?
PPT
Fundamentos DiseñO Web
PPTX
Desarrollo Web Avanzado II
PDF
¿Por qué UX?
PDF
Equipos de una sola persona
PPTX
Experiencia de Usuario en un contexto de desarrollo de software, lecciones ap...
PDF
Simple Steps to UX/UI Web Design- Español
PPTX
Cómo hacer una presentación en prezi
DOCX
Wix y yola
PPTX
Prototipado y testing de usabilidad rápido - @ThinkLeanEdu / Universidad de P...
PDF
Introducción al Diseño web
PPTX
PPTX
Javascript para principiantes -Introducción
Front End & Responsive Web Design | DevFest Merida
Construyendo y publicando nuestra primera app multi plataforma (II)
Documentos de UX
Wireframes & Prototipos ¿Sólo una cuestión de organización? / Día de la Usabi...
User Experience Research: los métodos más usados en Mercado Libre
¿Diseñar para los usuarios o diseñar con los usuarios?
Fundamentos DiseñO Web
Desarrollo Web Avanzado II
¿Por qué UX?
Equipos de una sola persona
Experiencia de Usuario en un contexto de desarrollo de software, lecciones ap...
Simple Steps to UX/UI Web Design- Español
Cómo hacer una presentación en prezi
Wix y yola
Prototipado y testing de usabilidad rápido - @ThinkLeanEdu / Universidad de P...
Introducción al Diseño web
Javascript para principiantes -Introducción
Publicidad

Destacado (6)

PPTX
Patron de Desarrollo Modelo Vista Controlador
PDF
PHP MVC Tutorial
PDF
Un exemple élémentaire d'application MVC en PHP
DOCX
Mini projet individuel php
Patron de Desarrollo Modelo Vista Controlador
PHP MVC Tutorial
Un exemple élémentaire d'application MVC en PHP
Mini projet individuel php
Publicidad

Similar a Desarrollo y testeo modular de interfaces HTML5 / MVC - Congo framework (20)

PDF
¿Cómo poner software de calidad en manos del usuario de forma rápida?
PPTX
PPTX
PPTX
Desarrollo de proyectos
PPTX
PPTX
Building Ria Applications With Silverlight 2
PPTX
Metodo watch y lps
PPTX
Metodo watch y lps
PPTX
Webinar como modernizar aplicaciones legacy y abandonar tecnologías obsoletas
PPTX
Herramientas y entornos de implementacion de software
PPTX
Watch, lps
PPT
Rosalie On-Line
PPT
Metodo watch
PPT
Metodo watch
PPTX
Watch, lps
PDF
Commit 2018 - Integrando Microservicios y Machine Learning
PPTX
Procesos de Software EGEL-UNITEC
PPTX
ASP.NET MVC
PPT
Visual Studio2005
PDF
Meetup TestingUy 2019 - Plataforma de integración y testing continuo
¿Cómo poner software de calidad en manos del usuario de forma rápida?
Desarrollo de proyectos
Building Ria Applications With Silverlight 2
Metodo watch y lps
Metodo watch y lps
Webinar como modernizar aplicaciones legacy y abandonar tecnologías obsoletas
Herramientas y entornos de implementacion de software
Watch, lps
Rosalie On-Line
Metodo watch
Metodo watch
Watch, lps
Commit 2018 - Integrando Microservicios y Machine Learning
Procesos de Software EGEL-UNITEC
ASP.NET MVC
Visual Studio2005
Meetup TestingUy 2019 - Plataforma de integración y testing continuo

Más de Santiago Bustelo (20)

PDF
Nuestros entregables son nuestra moneda: Luchando contra 
la devaluación de UX
PDF
Metodología y Herramientas para diseñar sistemas 
de alta performance - XII J...
PDF
Diseño de Información Interactivo: Principios, Fundamentos y Casos - DG3 R...
PDF
Práctica profesional UX: ¿Qué podemos aprender de los errores del Marketing?
PDF
UX professionalism: What can we learn from marketing's mistakes?
PDF
Core Design: Incorporando UX en la educación formal de diseño
PDF
Core Design: Taller de definición de roles, trabajo en equipo, ideación.
PDF
Core Design: Design Research - Cómo realizar las preguntas correctas para el ...
PDF
Core Design: Taller de definición de roles, trabajo en equipo, ideación.
PDF
Las metodologías ágiles como problema de diseño
PDF
Principios, procesos y herramientas UX para la enseñanza del Diseño
PDF
Experiencia de Usuario: Diseñar más allá de las pantallas - GoogleLaunchPadBA
PDF
Design Research: How to frame the right questions for your design process
PDF
Experiencia de Usuario y Política Pública: Incorporando UX a Ingeniería de s...
PDF
¿Cómo ser un líder innovador en el mundo digital?
PDF
Design Research: cómo realizar las preguntas correctas para el proceso de diseño
PDF
¿Cuál es la relación entre Tecnología y Diseño? XI Encuentro Latinoamericano ...
PDF
UX Touch vs. Ouch! User Experience para dispositivos móviles - XI Encuentro...
PDF
El futuro del Diseño y UX: los 15 años que se vienen (Tendencias de diseño UX...
PDF
devconchile 2015 - Introducción a UX para desarrolladores: Caso software de ...
Nuestros entregables son nuestra moneda: Luchando contra 
la devaluación de UX
Metodología y Herramientas para diseñar sistemas 
de alta performance - XII J...
Diseño de Información Interactivo: Principios, Fundamentos y Casos - DG3 R...
Práctica profesional UX: ¿Qué podemos aprender de los errores del Marketing?
UX professionalism: What can we learn from marketing's mistakes?
Core Design: Incorporando UX en la educación formal de diseño
Core Design: Taller de definición de roles, trabajo en equipo, ideación.
Core Design: Design Research - Cómo realizar las preguntas correctas para el ...
Core Design: Taller de definición de roles, trabajo en equipo, ideación.
Las metodologías ágiles como problema de diseño
Principios, procesos y herramientas UX para la enseñanza del Diseño
Experiencia de Usuario: Diseñar más allá de las pantallas - GoogleLaunchPadBA
Design Research: How to frame the right questions for your design process
Experiencia de Usuario y Política Pública: Incorporando UX a Ingeniería de s...
¿Cómo ser un líder innovador en el mundo digital?
Design Research: cómo realizar las preguntas correctas para el proceso de diseño
¿Cuál es la relación entre Tecnología y Diseño? XI Encuentro Latinoamericano ...
UX Touch vs. Ouch! User Experience para dispositivos móviles - XI Encuentro...
El futuro del Diseño y UX: los 15 años que se vienen (Tendencias de diseño UX...
devconchile 2015 - Introducción a UX para desarrolladores: Caso software de ...

Último (20)

PDF
MÓDULO DE CALOR DE GRADO DE MEDIO DE FORMACIÓN PROFESIONAL
PPTX
Sesion 1 de microsoft power point - Clase 1
PDF
programa-de-estudios-2011-guc3ada-para-el-maestro-secundarias-tecnicas-tecnol...
PDF
Maste clas de estructura metálica y arquitectura
PPTX
historia_web de la creacion de un navegador_presentacion.pptx
PPTX
COMO AYUDAN LAS TIC EN LA EDUCACION SUPERIOR.pptx
PDF
MANUAL TECNOLOGÍA SER MINISTERIO EDUCACIÓN
PPTX
sa-cs-82-powerpoint-hardware-y-software_ver_4.pptx
PDF
clase auditoria informatica 2025.........
PPTX
Presentación PASANTIAS AuditorioOO..pptx
PDF
CyberOps Associate - Cisco Networking Academy
PPT
introduccion a las_web en el 2025_mejoras.ppt
PDF
Instrucciones simples, respuestas poderosas. La fórmula del prompt perfecto.
PPTX
Presentación de Redes de Datos modelo osi
PPTX
RAP02 - TECNICO SISTEMAS TELEINFORMATICOS.pptx
PDF
5.1 Pinch y Bijker en libro Actos, actores y artefactos de Bunch Thomas (coor...
PPTX
Propuesta BKP servidores con Acronis1.pptx
PPT
Que son las redes de computadores y sus partes
PDF
SAP Transportation Management para LSP, TM140 Col18
PDF
Diapositiva proyecto de vida, materia catedra
MÓDULO DE CALOR DE GRADO DE MEDIO DE FORMACIÓN PROFESIONAL
Sesion 1 de microsoft power point - Clase 1
programa-de-estudios-2011-guc3ada-para-el-maestro-secundarias-tecnicas-tecnol...
Maste clas de estructura metálica y arquitectura
historia_web de la creacion de un navegador_presentacion.pptx
COMO AYUDAN LAS TIC EN LA EDUCACION SUPERIOR.pptx
MANUAL TECNOLOGÍA SER MINISTERIO EDUCACIÓN
sa-cs-82-powerpoint-hardware-y-software_ver_4.pptx
clase auditoria informatica 2025.........
Presentación PASANTIAS AuditorioOO..pptx
CyberOps Associate - Cisco Networking Academy
introduccion a las_web en el 2025_mejoras.ppt
Instrucciones simples, respuestas poderosas. La fórmula del prompt perfecto.
Presentación de Redes de Datos modelo osi
RAP02 - TECNICO SISTEMAS TELEINFORMATICOS.pptx
5.1 Pinch y Bijker en libro Actos, actores y artefactos de Bunch Thomas (coor...
Propuesta BKP servidores con Acronis1.pptx
Que son las redes de computadores y sus partes
SAP Transportation Management para LSP, TM140 Col18
Diapositiva proyecto de vida, materia catedra

Desarrollo y testeo modular de interfaces HTML5 / MVC - Congo framework

  • 1. M E M B E R Desarrollo y testeo modular de interfaces HTML5 / MVC Santiago Bustelo CodeCamp Buenos Aires • 15 de octubre, 2011 @sbustelo Presentación bajo licencia Creative Commons Atribución 2.5 Argentina http://creativecommons.org/licenses/by/2.5/ar
  • 2. Desarrollo y testeo modular de interfaces •M E M B E R kambrica.com/congo ¿De qué tipo de desarrollo de interfaces estamos hablando? • Aplicaciones web complejas, escalando a sistemas de múltiples aplicaciones y sitios web con diferentes tecnologías back-end • Requerimientos de la interfaz: • Consistencia • Múltiples navegadores / dispositivos • Usabilidad, accesibilidad, SEO • No es aceptable generar la interfaz desde el código back-end • Es necesario construir HTML, CSS, JavaScript a nivel de producción 2
  • 3. Desarrollo y testeo modular de interfaces •M E M B E R kambrica.com/congo ¿Qué vamos a ver? • Contexto • Vista general del proceso de diseño y desarrollo front-end • Problemáticas específicas del desarrollo de interfaces HTML • Propuesta • Conjunto de prácticas y herramientas desarrolladas y probadas en proyectos reales para reducir desperdicios y asegurar calidad (¡y salud!) • Congo, nuestro framework open source para desarrollo y testeo modular HTML/CSS/JavaScript 3
  • 4. Desarrollo y testeo modular de interfaces •M E M B E R kambrica.com/congo Contexto: Diseño y desarrollo de interfaces en sistemas de aplicaciones web complejas, usables y accesibles 4
  • 5. Desarrollo y testeo modular de interfaces •M E M B E R kambrica.com/congo Aplicaciones y Sistemas de aplicaciones 5
  • 6. Desarrollo y testeo modular de interfaces •M E M B E R kambrica.com/congo 6 Aplicaciones y Sistemas de aplicaciones
  • 7. Desarrollo y testeo modular de interfaces •M E M B E R kambrica.com/congo Proceso de diseño y desarrollo front-end 7 • IxD / AI / UX • Análisis, Wireframes • Validación: negocio / usuarios • Diseño de interfaces • Diseño a nivel de detalle • Validación: negocio / usuarios • Desarrollo de interfaces • Maquetado HTML/CSS/JavaScript • Validación: dispositivos • Prototipo navegable • Validación: negocio / usuarios
  • 8. Desarrollo y testeo modular de interfaces •M E M B E R kambrica.com/congo Entregables de diseño y desarrollo de la interfaz para implementación • Documentación de procesos del usuario, elementos de la interfaz, operación y funcionamiento • HTML validado con negocio, usuario y dispositivos a ser generado por el back-end (“modelo terminado”) • El desarrollo front-end no se realiza sobre el framework de implementación, debido a que ello: • no permite trabajar la interfaz en el contexto correcto • no permite iteraciones económicas • genera apego a funcionalidades aunque no pasen validación UX 8
  • 9. Desarrollo y testeo modular de interfaces •M E M B E R kambrica.com/congo Patrones de arquitectura de software Integración front/back end • MVC: Model-View- Controller • MVP: Model-View-Presenter • MVVM: Model-View- ViewModel • BBM: estándar de facto de arquitectura de software Desarrollo front-end • BBM 9
  • 10. Desarrollo y testeo modular de interfaces •M E M B E R kambrica.com/congo 10 • Trabajo reactivo sobre lo evidente e inmediato, poco o ningún planeamiento e infraestructura • Cada cambio “local” tiene consecuencias globales, obliga a repasar desarrollo previo (Shlemiel the painter) • Se acumulan incertidumbres que explotan tardíamente • Cada vez más difícil lograr escalabilidad, performance, mantenibilidad BBM: Big Ball of Mud (aka Shantytowns)
  • 11. Desarrollo y testeo modular de interfaces •M E M B E R kambrica.com/congo Características desarrollo de código HTML, CSS, JavaScript • Poco modular por diseño (no existe “HTML include”) o implementación (IE toma sólo los primeros 31 STYLEs y SCRIPTs) • Capas geológicas, hacks, ofuscación • Múltiples formas de lograr un resultado similar, muchas erróneas • HTML: código no funcional • No podemos aplicar herramientas de testing de código funcional • Sobre el HTML debemos montar el código JavaScript, que pasa a heredar sus problemas estructurales 11
  • 12. Desarrollo y testeo modular de interfaces •M E M B E R kambrica.com/congo Propuesta: 12 Desarrollo y testeo modular Congo framework
  • 13. Desarrollo y testeo modular de interfaces •M E M B E R kambrica.com/congo HTML no tiene estructura: hay que dársela • Estructuras, convenciones, mejores prácticas • Desarrollar herramientas transparentes y portables para: • brindar estructuras de soporte (scaffolding) no restrictivas • realizar pruebas sistemáticas • generar documentación y código para implementación de forma automática • Proceso eficiente y flexible a iteraciones • Productos: • código front-end modular, mantenible, testeable, reusable • documentación para implementación y mantenimiento de la interfaz 13
  • 14. Desarrollo y testeo modular de interfaces •M E M B E R kambrica.com/congo Estructura: desarrollo modular Nathan Curtis: Modularity & Design Hierarchy 14
  • 15. Desarrollo y testeo modular de interfaces •M E M B E R kambrica.com/congo Herramienta: Congo 15 • Para probar código funcional, podemos usar un mono loco • Para probar código no funcional (diseño), podemos usar… un mono pintor
  • 16. Desarrollo y testeo modular de interfaces •M E M B E R kambrica.com/congo Desarrollo modular de la interfaz 16 • Separación del HTML en componentes independientes • Variables del componente permiten generar instancias de información, presentación y operación • Cada componente establece un contexto local para HTML/DOM, CSS y JavaScript • Paralelo funcional: objeto en OOP
  • 17. Desarrollo y testeo modular de interfaces •M E M B E R kambrica.com/congo Componentes componente_full HTML template archivos JS archivos CSS variables y valores imagenes img1, img2… componente_minimo (todo es opcional) _componente_oculto HTML template 17
  • 18. Desarrollo y testeo modular de interfaces •M E M B E R kambrica.com/congo Un componente simple… components/button/html.php <span class="button <?= $this->buttonType ?>"> <input type="submit" value="<?= $this->buttonText ?>" /> </span> components/button/variables.yml buttonType: [ action, confirm, decline ] buttonText: text components/button/styles.css .button INPUT { background-color:grey; color:white; } .button.action INPUT { background- color:blue; } .button.confirm INPUT { background- color:green; } .button.decline INPUT { background-color:red; } components/button/scripts.js $('.button A').click(function() { // Do something... }); 18
  • 19. Desarrollo y testeo modular de interfaces •M E M B E R kambrica.com/congo Componentes, componentes, componentes components/formFoot/html.php <div class="formFoot"> <?php component( 'button', array('buttonText' => 'Submit') ); ?> or <a href="#">cancel</a> </div> 19
  • 20. Desarrollo y testeo modular de interfaces •M E M B E R kambrica.com/congo Convenciones HTML, CSS y JS • El HTML siempre se abre y cierra por cada nivel. • Todo componente está contenido en un wrapper: SPAN (inline) o DIV (block) class="nombreDelComponente". • Evitar declaraciones CSS afectando elementos no contiguos • Cuanta más distancia haya entre un elemento y la regla de CSS que lo afecta, más difícil será seguirle el rastro. • Definimos globales sólo los tags principales (BODY, A, P…). Todas las demás declaraciones descenderán de .nombreDelComponente. • JavaScript no intrusivo, jQuery 20
  • 21. Desarrollo y testeo modular de interfaces •M E M B E R kambrica.com/congo Componentes » Layouts components/_layouts/index/html.php <div class="layout-index"> <form> <div class="formBody"> Say hello to the world! </div> <?php component( 'formFoot' ); ?> </form> </div> 21
  • 22. Desarrollo y testeo modular de interfaces •M E M B E R kambrica.com/congo Componente _html components/_html/html.php <!DOCTYPE HTML> <html> <head> <meta charset="utf-8" /> <title>Hello world</title> <?php $this->resources('css'); ?> </head> <body> <?php $this->layout() ?> <?php $this->resources('js'); ?> </body> </html> • Incluye layout que le pasa el motor • Compila los recursos CSS y JS de todos los componentes • Recomendaciones Yahoo! Exceptional Performance: • Make JavaScript and CSS External • Put Stylesheets at Top • Put Scripts at Bottom • Minify JavaScript and CSS 22
  • 23. Desarrollo y testeo modular de interfaces •M E M B E R kambrica.com/congo Hello World! 23
  • 24. Desarrollo y testeo modular de interfaces •M E M B E R kambrica.com/congo Template tags 24 Evaluar una variable: <?= $this->variableName ?> Variables del motor: <?= $this->imgsPath ?> <?= $this->rsrcPath ?> TBD: root resources Incluir componente: <?php component( 'componentName' ); ?> <?php component( 'componentName', array('variableName' => 'value') ); ?> Para _html (se provee placeholder) <?php $this->layout() ?> <?php $this->resources('css'); ?> <?php $this->resources('js'); ?>
  • 25. Desarrollo y testeo modular de interfaces •M E M B E R kambrica.com/congo Testeo del componente: combinatoria de variables • Se definen para cada componente grupos de valores de prueba para cada variable. • Al probar la combinatoria de variables y valores, se observan sistemáticamente todos los estados posibles del componente. • Paralelo funcional: unit testing 25
  • 26. Desarrollo y testeo modular de interfaces •M E M B E R kambrica.com/congo Testeo del componente button 26 buttonType: [ action, confirm, decline ] buttonText: text
  • 27. Desarrollo y testeo modular de interfaces •M E M B E R kambrica.com/congo Explosión combinatoria 27 buttonTag: ['a', 'input'] buttonText: [ Submit, Very very long buttonText ] buttonAHref: [ '#' ] buttonSize: [ '' , small, big ] buttonType: [ '', action, decline ]
  • 28. Desarrollo y testeo modular de interfaces •M E M B E R kambrica.com/congo Pairwise: combinación de pares 28 Test Destination Class Seat Preference 1 Canada Coach Aisle 2 Mexico Coach Aisle 3 (defect!) USA Coach Aisle 4 Canada Business Class Aisle 5 Mexico Business Class Aisle 6 USA Business Class Aisle 7 Canada First Class Aisle 8 Mexico First Class Aisle 9 USA First Class Aisle 10 Canada Coach Window 11 Mexico Coach Window 12 (defect!) USA Coach Window 13 Canada Business Class Window 14 Mexico Business Class Window 15 USA Business Class Window 16 Canada First Class Window 17 Mexico First Class Window 18 USA First Class Window Test Destination Class Seat Preference 1 Canada Coach Aisle 3 (defect!) USA Coach Aisle 5 Mexico Business Class Aisle 8 Mexico First Class Aisle 9 USA First Class Aisle 11 Mexico Coach Window 13 Canada Business Class Window 15 USA Business Class Window 16 Canada First Class Window Michael Bolton: Pairwise Testing
  • 29. Desarrollo y testeo modular de interfaces •M E M B E R kambrica.com/congo Pairwise testing 29 buttonTag: ['a', 'input'] buttonText: [ Submit, Very very long buttonText ] buttonAHref: [ '#' ] buttonSize: [ '' , small, big ] buttonType: [ '', action, decline ]
  • 30. Desarrollo y testeo modular de interfaces •M E M B E R kambrica.com/congo Testeo de un layout 30
  • 31. Desarrollo y testeo modular de interfaces •M E M B E R kambrica.com/congo Indice del proyecto 31
  • 32. Desarrollo y testeo modular de interfaces •M E M B E R kambrica.com/congo Views 32 • Instancias de los layouts para documentación y prototipo navegable (TBD: variables) • Helper para generar layouts • Al generar un nivel en _sitetree.yml, se genera en _layouts un directorio con html.php placeholder • Genera estructura archivos para entregables finales components/_layouts/_sitetree.yml index login products: index detail
  • 33. Desarrollo y testeo modular de interfaces •M E M B E R kambrica.com/congo Desarrollo vs. Entregables input config.php variables.yml components _html _layouts componente1 componente2 output documentation documentation index components (TBD) test comp1 test comp2 public_html rsrc images 33
  • 34. Desarrollo y testeo modular de interfaces •M E M B E R kambrica.com/congo Platforms: Eat Your Own Dogfood 34
  • 35. Desarrollo y testeo modular de interfaces •M E M B E R kambrica.com/congo Platforms: Eat Your Own Dogfood 35
  • 36. Desarrollo y testeo modular de interfaces •M E M B E R kambrica.com/congo Platforms: Eat Your Own Dogfood 36
  • 37. Desarrollo y testeo modular de interfaces •M E M B E R kambrica.com/congo Now, eat our dogfood! kambrica.com/congo 37 • Interfaces más robustas • Diseñadores y desarrolladores más saludables • Sitios de cachorro a adulto en mucho menos tiempo