Introducción a las Pruebas No Funcionales
Mientras que las pruebas funcionales responden “¿Funciona?”, las pruebas no funcionales responden preguntas igualmente críticas: “¿Funciona bien? ¿Es usable? ¿Es accesible? ¿Funciona en todos lados?”
Las pruebas no funcionales validan atributos de calidad que determinan la satisfacción del usuario, el alcance de mercado y el éxito a largo plazo. Una aplicación perfectamente funcional que es lenta, difícil de usar, inaccesible para usuarios con discapacidades, o incompatible con ciertos navegadores puede fracasar en el mercado a pesar de tener cero bugs funcionales.
En esta guía completa, exploraremos los pilares clave de las pruebas no funcionales: usabilidad, compatibilidad, localización/internacionalización y accesibilidad. Aprenderás técnicas prácticas, herramientas y mejores prácticas para asegurar que tu software no solo funcione correctamente, sino que ofrezca una experiencia excepcional a todos los usuarios.
Entendiendo las Pruebas No Funcionales
¿Qué son las Pruebas No Funcionales?
Las pruebas no funcionales evalúan cómo funciona un sistema en lugar de qué hace (a diferencia de las pruebas funcionales que se enfocan en lo que el sistema hace). Se enfocan en atributos de calidad incluyendo:
- Usabilidad: ¿Qué tan fácil y agradable es usar el sistema?
- Rendimiento: ¿Qué tan rápido y responsivo es?
- Confiabilidad: ¿Qué tan estable y confiable?
- Compatibilidad: ¿Funciona en diferentes entornos?
- Seguridad: ¿Qué tan bien está protegido?
- Accesibilidad: ¿Pueden todos los usuarios, incluidos aquellos con discapacidades, usarlo?
- Localización: ¿Se adapta a diferentes idiomas y culturas?
Por qué Importan las Pruebas No Funcionales
Impacto en el negocio:
- Retención de usuarios: 88% de usuarios no regresarán después de una mala experiencia
- Cumplimiento legal: Fallos de accesibilidad pueden resultar en demandas
- Alcance de mercado: Mala localización limita expansión global
- Reputación de marca: Problemas de compatibilidad dañan credibilidad
- Ventaja competitiva: UX superior diferencia productos
Consecuencias del mundo real de descuidar pruebas no funcionales:
Ejemplo 1: Sitio e-commerce
- 1 segundo de retraso en carga = 7% reducción en conversiones
- Mala compatibilidad móvil = 50% de clientes potenciales perdidos
- Checkout inaccesible = Violación de regulaciones ADA
Ejemplo 2: Aplicación SaaS
- UI compleja = Mayores costos de soporte y abandono de usuarios
- Sin soporte RTL = Mercado de Medio Oriente inaccesible
- Incompatibilidad de navegadores = Contratos empresariales perdidos
Ejemplo 3: App móvil
- Alto uso de memoria = Reviews de 1 estrella y desinstalaciones
- Mala localización = Malas calificaciones en mercados internacionales
- Fallos de accesibilidad = Exclusión del 15% de usuarios potenciales
Usability Testing: Aseguramiento de Calidad Centrado en el Humano
Entendiendo Usabilidad
Definición: Usabilidad mide qué tan efectiva, eficiente y satisfactoriamente los usuarios pueden lograr sus objetivos usando un sistema.
Los cinco componentes de calidad de usabilidad (Jakob Nielsen):
- Aprendizaje: ¿Qué tan fácil es para nuevos usuarios lograr tareas?
- Eficiencia: ¿Qué tan rápido pueden usuarios experimentados realizar tareas?
- Memorabilidad: ¿Pueden los usuarios recordar cómo usarlo después de un descanso?
- Errores: ¿Cuántos errores cometen los usuarios y pueden recuperarse?
- Satisfacción: ¿Qué tan agradable es la experiencia?
Métodos de Usability Testing
1. Usability Testing Moderado
Qué: Un facilitador guía usuarios a través de tareas mientras observa y hace preguntas.
Cuándo usar:
- Validación de diseño temprano
- Flujos de trabajo complejos
- Cuando necesitas insights profundos
- Sistemas médicos, financieros o críticos
Proceso:
1. Preparación:
- Definir objetivos
- Crear escenarios de prueba
- Reclutar participantes (5-8 usuarios por ronda)
- Preparar entorno de prueba
- Crear script del facilitador
2. Ejecución:
- Bienvenida y consentimiento
- Explicar protocolo de pensar en voz alta
- Presentar escenarios
- Observar y tomar notas
- Hacer preguntas de seguimiento
- Cuestionario post-prueba
3. Análisis:
- Identificar patrones entre usuarios
- Categorizar issues por severidad
- Calcular tasas de éxito y tiempo en tarea
- Documentar insights y recomendaciones
Mejores prácticas:
- Usar escenarios realistas, no “Haz clic en el botón de login”
- Evitar preguntas dirigidas
- Permanecer neutral—no ayudar a menos que sea necesario
- Grabar sesiones (con permiso)
- Probar con usuarios representativos
- Enfocarse en tareas, no características
Escenario de muestra (bueno):
"Acabas de terminar un entrenamiento y quieres registrarlo en la app.
Registra tu carrera de 30 minutos de esta mañana."
Escenario de muestra (malo):
"Haz clic en el botón 'Agregar Entrenamiento' y llena el formulario."
2. Testing Remoto No Moderado
Qué: Usuarios completan tareas independientemente mientras sus interacciones son grabadas.
Cuándo usar:
- Se necesitan muestras grandes
- Base de usuarios distribuida
- Restricciones presupuestarias
- Feedback rápido necesario
Herramientas:
- UserTesting
- Lookback
- Maze
- UsabilityHub
Pros:
- Costo-efectivo
- Resultados más rápidos
- Entorno natural
- Tamaños de muestra más grandes
Contras:
- Sin aclaraciones en tiempo real
- No se pueden hacer preguntas de seguimiento
- Puede perder contexto
- Issues técnicos más difíciles de resolver
3. A/B Testing
Qué: Comparar dos versiones para determinar cuál funciona mejor.
Cuándo usar:
- Optimizar elementos específicos
- Decisiones de diseño basadas en datos
- Aplicaciones de alto tráfico
- Mejoras incrementales
Qué probar con A/B:
- Botones de call-to-action (color, texto, ubicación)
- Títulos y copy
- Estructura de navegación
- Layouts de formularios
- Presentación de precios
- Contenido de imagen vs video
Mejores prácticas:
✓ Probar una variable a la vez
✓ Asegurar significancia estadística
✓ Ejecutar pruebas suficientemente largas (típicamente 1-2 semanas mínimo)
✓ Segmentar resultados por tipo de usuario
✓ Considerar factores externos (estacionalidad, campañas)
✓ Documentar y compartir aprendizajes
Ejemplo de prueba A/B:
Hipótesis: Cambiar CTA de "Enviar" a "Obtener Mi Prueba Gratis"
aumentará conversiones
Métrica: Tasa de conversión (envíos de formulario / vistas de página)
Tamaño de muestra: Mínimo 1000 conversiones por variante
Duración: 2 semanas
Resultado: Versión B aumentó conversiones en 23%
4. Evaluación Heurística
Qué: Expertos evalúan la interfaz contra principios establecidos de usabilidad.
10 Heurísticas de Usabilidad de Nielsen:
Visibilidad del estado del sistema: Mantener a usuarios informados sobre lo que está pasando
- Ejemplo: Barras de progreso, indicadores de carga, mensajes de confirmación
Coincidencia entre sistema y mundo real: Usar lenguaje y conceptos familiares
- Ejemplo: Icono de basura para eliminar, icono de carrito para compras
Control y libertad del usuario: Proporcionar deshacer/rehacer
- Ejemplo: “Deshacer envío” en email, opciones de editar/eliminar
Consistencia y estándares: Seguir convenciones de plataforma
- Ejemplo: Logo arriba a la izquierda, búsqueda arriba a la derecha, estilos de botón consistentes
Prevención de errores: Mejor que buenos mensajes de error
- Ejemplo: Deshabilitar opciones inválidas, confirmación para acciones destructivas
Reconocimiento en lugar de recordar: Minimizar carga de memoria
- Ejemplo: Menús desplegables, elementos usados recientemente, autocompletar
Flexibilidad y eficiencia: Atajos para usuarios expertos
- Ejemplo: Atajos de teclado, plantillas, acciones en lote
Diseño estético y minimalista: Sin información irrelevante
- Ejemplo: Divulgación progresiva, layouts limpios, jerarquía clara
Ayudar a usuarios a reconocer, diagnosticar y recuperarse de errores: Mensajes de error claros
- Ejemplo: “La contraseña debe tener 8+ caracteres” en lugar de “Entrada inválida”
Ayuda y documentación: Buscable, enfocada en tareas, concisa
- Ejemplo: Ayuda contextual, tooltips, base de conocimiento buscable
Realizando evaluación heurística:
1. Preparación:
- Seleccionar 3-5 evaluadores
- Definir alcance (app completa o características específicas)
- Proporcionar checklist de heurísticas
2. Evaluación:
- Cada evaluador revisa independientemente la interfaz
- Documentar violaciones con:
* Qué heurística violada
* Severidad (cosmética, menor, mayor, catastrófica)
* Ubicación (screenshot, página, característica)
* Descripción del problema
* Corrección sugerida
3. Debriefing:
- Consolidar hallazgos
- Eliminar duplicados
- Priorizar issues
- Crear plan de acción
Métricas de Usabilidad
Métricas cuantitativas:
Tasa de éxito de tarea: % de usuarios que completan tarea correctamente
Fórmula: (Completaciones exitosas / Intentos totales) × 100 Bueno: >78%
Tiempo en tarea: Cuánto tiempo toma completar
Medida: Tiempo promedio, tiempo mediano Comparar: Contra benchmarks o versiones previas
Tasa de error: Errores cometidos durante tareas
Fórmula: (Número de errores / Intentos totales de tarea) × 100 Rastrear: Tipo de errores y recuperación
Clics/toques para completar: Medida de eficiencia
Mejor práctica: Minimizar pasos al objetivo Regla de 3 clics: Info crítica accesible en 3 clics
Métricas cualitativas:
System Usability Scale (SUS): Encuesta estandarizada de 10 preguntas
Rango de puntuación: 0-100 Por encima de 68: Por encima del promedio Por encima de 80: Excelente
Net Promoter Score (NPS): “¿Qué tan probable es recomendar?”
Escala: 0-10 Promotores: 9-10 Pasivos: 7-8 Detractores: 0-6 NPS = % Promotores - % Detractores
Satisfacción del Cliente (CSAT): “¿Qué tan satisfecho estuviste?”
Escala: 1-5 o 1-7 Bueno: >80% satisfecho (4-5 en escala de 5 puntos)
Checklist de Usability Testing
Navegación y Arquitectura de Información:
- Usuarios pueden encontrar lo que buscan rápidamente
- Navegación es consistente entre páginas
- Breadcrumbs ayudan a usuarios entender ubicación
- Funcionalidad de búsqueda funciona bien
- Etiquetas de menú son claras y descriptivas
Formularios e Entrada:
- Formularios son lo más cortos posible
- Etiquetas son claras y posicionadas apropiadamente
- Campos requeridos están claramente marcados
- Validación de entrada es útil, no frustrante
- Mensajes de error son específicos y accionables
- Formulario recuerda datos ingresados en error
Contenido y Legibilidad:
- Texto es escaneable (encabezados, viñetas, párrafos cortos)
- Tamaño de fuente es legible (mínimo 16px para texto de cuerpo)
- Relación de contraste cumple estándares (mínimo 4.5:1)
- Acciones importantes son visualmente prominentes
- Contenido usa lenguaje simple
Usabilidad Móvil:
- Objetivos táctiles son al menos 44×44px
- Texto es legible sin zoom
- Scroll horizontal no requerido
- Formularios están optimizados para móvil
- Navegación es amigable para pulgar
Rendimiento y Feedback:
- Carga de página se siente rápida (<3 segundos)
- Acciones proporcionan feedback inmediato
- Estados de carga previenen confusión
- Errores se previenen donde es posible
- Confirmaciones de éxito son claras
Compatibility Testing: Asegurando Acceso Universal
Entendiendo Compatibility Testing
Definición: Compatibility testing verifica que el software funcione correctamente en diferentes entornos, incluyendo navegadores, dispositivos, sistemas operativos y redes.
Tipos de compatibilidad:
- Compatibilidad de navegador: Chrome, Firefox, Safari, Edge, etc.
- Compatibilidad de dispositivo: Desktop, tablet, móvil, diferentes tamaños de pantalla
- Compatibilidad de sistema operativo: Windows, macOS, Linux, iOS, Android
- Compatibilidad de red: Diferentes velocidades, escenarios offline
- Compatibilidad de base de datos: Diferentes sistemas de bases de datos
- Compatibilidad retroactiva: Funciona con versiones anteriores
Browser Compatibility Testing
La cuota de mercado impulsa prioridades (a partir de 2025):
Desktop:
- Chrome: ~65% (Prioridad 1)
- Safari: ~15% (Prioridad 1)
- Edge: ~10% (Prioridad 2)
- Firefox: ~7% (Prioridad 2)
- Otros: ~3% (Prioridad 3 o omitir)
Móvil:
- Chrome Mobile: ~65% (Prioridad 1)
- Safari iOS: ~25% (Prioridad 1)
- Samsung Internet: ~6% (Prioridad 2)
- Otros: ~4% (Prioridad 3 o omitir)
Enfoque de testing:
1. Identificar navegadores objetivo:
Analizar tus analytics:
- ¿Qué navegadores usan tus usuarios?
- ¿Qué versiones?
- ¿Qué porcentaje de tráfico?
Definir niveles de soporte:
Tier 1: Totalmente soportado, todas las características funcionan (90% de usuarios)
Tier 2: Soportado, características críticas funcionan (9% de usuarios)
Tier 3: Mejor esfuerzo, contenido accesible (1% de usuarios)
2. Crear matriz de prueba:
Navegador | Versiones | Sistemas Operativos | Prioridad
-----------|---------------|---------------------|----------
Chrome | Latest, N-1 | Windows, Mac | P0
Safari | Latest, N-1 | Mac, iOS | P0
Edge | Latest | Windows | P1
Firefox | Latest | Windows, Mac | P1
Samsung | Latest | Android | P2
3. Issues comunes de compatibilidad:
Issues CSS:
/* Soporte Flexbox */
.container {
display: -webkit-box; /* Safari antiguo */
display: -webkit-flex; /* Safari 6.1+ */
display: -ms-flexbox; /* IE 10 */
display: flex; /* Navegadores modernos */
}
/* Soporte Grid - verificar caniuse.com */
@supports (display: grid) {
.grid-container {
display: grid;
}
}
/* Prefijos de vendor */
.element {
-webkit-transform: rotate(45deg);
-ms-transform: rotate(45deg);
transform: rotate(45deg);
}
Issues JavaScript:
// Características ES6 pueden necesitar polyfills para navegadores antiguos
// Verificar compatibilidad: caniuse.com
// Arrow functions
const multiply = (a, b) => a * b; // Puede necesitar Babel
// Promises
fetch('/api/data') // Puede necesitar polyfill para IE11
.then(response => response.json())
.then(data => console.log(data));
// Usar detección de características
if ('IntersectionObserver' in window) {
// Usar IntersectionObserver
} else {
// Enfoque de fallback
}
4. Herramientas de testing:
Plataformas de testing cross-browser:
- BrowserStack: Dispositivos y navegadores reales en la nube
- Sauce Labs: Testing automatizado y manual
- LambdaTest: Testing en vivo y automatizado
- CrossBrowserTesting: Testing de navegadores reales
Testing local:
- BrowserStack Local: Probar localhost en navegadores reales
- Máquinas virtuales: Probar en diferentes OS
- Device lab: Dispositivos físicos para testing
Testing automatizado:
// Selenium WebDriver - automatización cross-browser
const { Builder, By, Key, until } = require('selenium-webdriver');
async function testCrossBrowser(browserName) {
let driver = await new Builder()
.forBrowser(browserName)
.build();
try {
await driver.get('http://yoursite.com');
await driver.findElement(By.name('q')).sendKeys('webdriver', Key.RETURN);
await driver.wait(until.titleIs('webdriver - Google Search'), 1000);
} finally {
await driver.quit();
}
}
// Probar en navegadores
testCrossBrowser('chrome');
testCrossBrowser('firefox');
testCrossBrowser('safari');
Testing de Dispositivos y Responsive
Estrategia de testing:
1. Definir matriz de dispositivos:
Categoría | Dispositivos | Prioridad
----------------|-----------------------------------|----------
Móvil - Pequeño | iPhone SE (375×667) | P0
Móvil - Mediano | iPhone 14 (390×844) | P0
Móvil - Grande | iPhone 14 Pro Max (430×932) | P1
Tablet | iPad (810×1080) | P1
Desktop - Pequeño| 1366×768 | P0
Desktop - Mediano| 1920×1080 | P0
Desktop - Grande | 2560×1440 | P2
2. Breakpoints responsive:
/* Enfoque mobile first */
/* Estilos base: Móvil (320px+) */
.container {
padding: 1rem;
}
/* Tablet (768px+) */
@media (min-width: 768px) {
.container {
padding: 2rem;
max-width: 720px;
}
}
/* Desktop (1024px+) */
@media (min-width: 1024px) {
.container {
padding: 3rem;
max-width: 960px;
}
}
/* Desktop grande (1280px+) */
@media (min-width: 1280px) {
.container {
max-width: 1200px;
}
}
3. Checklist de testing:
Layout:
- Sin scroll horizontal en ningún viewport
- Contenido es legible sin zoom
- Imágenes escalan apropiadamente
- Texto no desborda contenedores
- Layouts grid/flex funcionan correctamente
Interacciones táctiles:
- Objetivos táctiles son mínimo 44×44px
- Botones tienen espaciado adecuado
- Gestos de swipe funcionan (si implementado)
- Menús desplegables son táctil-amigables
- Estados hover tienen equivalentes táctiles
Rendimiento:
- Imágenes están optimizadas para móvil
- Lazy loading implementado
- JavaScript mínimo en móvil
- Carga inicial de página rápida
4. Herramientas de testing:
- Chrome DevTools: Simulación de dispositivos
- Firefox Responsive Design Mode: Múltiples viewports
- Dispositivos reales: Testing de dispositivo físico
- BrowserStack: Nube de dispositivos reales
- Responsively App: Todos los viewports a la vez
Compatibilidad de Sistema Operativo
Consideraciones de testing:
Diferencias de Desktop OS:
Windows vs macOS:
- Renderizado de fuentes (Windows: ClearType, Mac: más suave)
- Atajos de teclado (Ctrl vs Cmd)
- Rutas de archivo (barra invertida vs barra inclinada)
- Disponibilidad de fuentes por defecto
- Estilización de controles de formulario
Linux:
- Varias distribuciones (Ubuntu, Fedora, etc.)
- Diferentes entornos de escritorio (GNOME, KDE)
- Disponibilidad de fuentes varía
Diferencias de Mobile OS:
iOS vs Android:
- Safari vs Chrome navegador por defecto
- Diferentes selectores de fecha/hora
- Diferentes comportamientos de entrada de formulario
- Manejo de eventos táctiles
- Diferencias de notificaciones push
- APIs de acceso a cámara/archivos
Mejores Prácticas de Compatibility Testing
1. Priorizar basado en datos:
✓ Usar analytics para identificar navegadores/dispositivos de usuarios
✓ Probar configuraciones más comunes primero
✓ Definir versiones mínimas soportadas
✓ Documentar política de soporte de navegadores
2. Automatizar donde sea posible:
✓ Tests cross-browser automatizados en CI/CD
✓ Testing de regresión visual
✓ Tests de diseño responsive
✓ Automatización de accesibilidad
3. Usar mejora progresiva:
✓ Funcionalidad core funciona en todos lados
✓ Características mejoradas para navegadores modernos
✓ Degradación elegante para navegadores antiguos
✓ Detección de características sobre detección de navegador
4. Documentar compatibilidad:
✓ Mantener matriz de soporte de navegadores
✓ Documentar issues conocidos
✓ Proporcionar workarounds si están disponibles
✓ Actualizar regularmente
Localización e Internacionalización Testing
Entendiendo L10n e I18n
Internacionalización (i18n): Diseñar software para que pueda adaptarse a varios idiomas y regiones sin cambios de código.
Localización (l10n): Adaptar software internacionalizado para una región o idioma específico.
Piénsalo como:
- i18n = Hacerlo posible
- l10n = Realmente hacerlo
Internacionalización: Construyendo para Alcance Global
Requisitos clave de i18n:
1. Manejo de texto:
// NO: Texto hardcodeado
<button>Submit</button>
// SÍ: Strings externalizadas
<button>{t('common.submit')}</button>
// Archivos de idioma
en.json: { "common": { "submit": "Submit" } }
es.json: { "common": { "submit": "Enviar" } }
fr.json: { "common": { "submit": "Soumettre" } }
2. Soporte Unicode:
✓ Usar codificación UTF-8 en todos lados
✓ Soportar caracteres de cualquier idioma
✓ Manejar emojis y caracteres especiales
✓ Cálculo adecuado de longitud de string (clusters de grafemas, no bytes)
Ejemplo de issues:
"Café" en UTF-8: é puede ser 1 o 2 caracteres dependiendo de normalización
"👨👩👧👦" (emoji familia): Parece 1 carácter, pero es en realidad varios
3. Fecha y hora:
// NO: Formato hardcodeado
const date = "12/01/2025"; // Ambiguo: ¿Dic 1 o Ene 12?
// SÍ: Usar formateo consciente de locale
const date = new Date('2025-01-12');
const formatted = new Intl.DateTimeFormat('en-US').format(date);
// Salida: 1/12/2025 (US)
const formattedUK = new Intl.DateTimeFormat('en-GB').format(date);
// Salida: 12/01/2025 (UK)
const formattedJP = new Intl.DateTimeFormat('ja-JP').format(date);
// Salida: 2025/1/12 (Japón)
// Zonas horarias
const options = {
timeZone: 'America/New_York',
hour: '2-digit',
minute: '2-digit'
};
4. Números y moneda:
// Formateo de números
const number = 1234567.89;
new Intl.NumberFormat('en-US').format(number);
// Salida: 1,234,567.89
new Intl.NumberFormat('de-DE').format(number);
// Salida: 1.234.567,89
new Intl.NumberFormat('fr-FR').format(number);
// Salida: 1 234 567,89
// Moneda
const amount = 99.99;
new Intl.NumberFormat('en-US', {
style: 'currency',
currency: 'USD'
}).format(amount);
// Salida: $99.99
new Intl.NumberFormat('de-DE', {
style: 'currency',
currency: 'EUR'
}).format(amount);
// Salida: 99,99 €
new Intl.NumberFormat('ja-JP', {
style: 'currency',
currency: 'JPY'
}).format(amount);
// Salida: ¥100 (JPY no usa decimales)
5. Dirección de texto:
/* Soportar idiomas RTL (Right-to-Left) como árabe, hebreo */
/* NO: Dirección fija */
.container {
text-align: left;
padding-left: 20px;
}
/* SÍ: Propiedades lógicas */
.container {
text-align: start; /* Se adapta a dirección de texto */
padding-inline-start: 20px; /* Izquierda en LTR, derecha en RTL */
}
/* Atributo de dirección HTML */
<html dir="rtl" lang="ar">
/* Estilos específicos RTL */
[dir="rtl"] .icon {
transform: scaleX(-1); /* Reflejar iconos si es necesario */
}
6. Expansión de texto:
La longitud del texto de traducción varía:
Inglés "Account" (7 caracteres)
→ Alemán "Benutzerkonto" (14 caracteres) - 100% más largo
→ Francés "Compte d'utilisateur" (20 caracteres) - 185% más largo
Consideraciones de diseño:
✓ No establecer anchos fijos para texto
✓ Permitir que texto se ajuste
✓ Probar con idioma más largo
✓ Usar layouts flexibles (flexbox, grid)
✓ Agregar 30-40% de espacio extra en diseños
Factores de expansión comunes:
Inglés → Alemán: +30%
Inglés → Francés: +15-20%
Inglés → Español: +20-30%
Localización Testing
Qué probar:
1. Calidad de traducción:
Checklist:
- [ ] Todo el texto está traducido (sin inglés en versión española)
- [ ] Las traducciones son contextualmente correctas
- [ ] Sin texto truncado
- [ ] Sin desbordamiento de texto
- [ ] Consistencia de terminología
- [ ] Apropiación cultural
- [ ] Sin artefactos de traducción automática
2. Testing lingüístico:
Gramática y ortografía:
- [ ] Gramática correcta
- [ ] Puntuación apropiada
- [ ] Nivel de formalidad apropiado (formal vs informal)
- [ ] Concordancia de género (idiomas con sustantivos de género)
- [ ] Formas plurales (algunos idiomas tienen múltiples formas plurales)
Ejemplo: Plurales en ruso
1 файл (1 archivo)
2 файла (2 archivos)
5 файлов (5 archivos)
Diferentes terminaciones para 1, 2-4, y 5+ artículos
3. Formateo:
- [ ] Formatos de fecha correctos para locale
- [ ] Formatos de tiempo (12 vs 24 horas)
- [ ] Formatos de números (separador decimal)
- [ ] Símbolos de moneda y ubicación
- [ ] Formatos de número telefónico
- [ ] Formatos de dirección
- [ ] Orden de nombre (nombre dado primero vs apellido primero)
4. Adaptación cultural:
- [ ] Imágenes apropiadas para cultura
- [ ] Colores tienen significado cultural correcto
- [ ] Iconos entendidos en cultura objetivo
- [ ] Ejemplos relevantes a región
- [ ] Sin contenido ofensivo
- [ ] Festividades y celebraciones localizadas
Ejemplos:
- ❌ Emoji de pulgar arriba: Ofensivo en algunos países de Medio Oriente
- ❌ Rojo: Suerte en China, peligro en países occidentales
- ❌ Búho: Sabiduría en Occidente, mala suerte en algunas culturas asiáticas
- ❌ Direcciones de ejemplo: Usar formato local y nombres de ciudad reales
5. Funcionalidad específica de locale:
- [ ] Métodos de pago locales soportados
- [ ] Opciones de envío locales disponibles
- [ ] Cálculo de impuestos locales
- [ ] Cumplimiento legal local (GDPR, CCPA, etc.)
- [ ] Información de contacto local
- [ ] Horas de soporte al cliente local
6. Testing RTL (Right-to-Left):
Para árabe, hebreo, persa:
- [ ] Texto fluye de derecha a izquierda
- [ ] Layout se refleja correctamente
- [ ] Iconos se reflejan donde sea apropiado
- [ ] Formularios se alinean correctamente
- [ ] Tablas se leen de derecha a izquierda
- [ ] Barras de scroll en lado correcto
- [ ] Menú de navegación invertido
Herramientas de testing:
Pseudolocalización: Probar i18n sin traducciones reales
Inglés: "Save Changes" Pseudo: "[§Śàvè Çĥàñĝèś Ţèśţ Éẋţŕà Çĥàŕś§]" Beneficios: - Muestra strings no traducidas - Prueba expansión de texto - Encuentra issues de codificación - No necesidad de conocer idioma objetivo
Gestión de traducción: Crowdin, Lokalise, Phrase
Testing automatizado: Verificar traducciones faltantes, consistencia de claves
Hablantes nativos: Siempre involucrar para validación final
Mejores Prácticas de Localización
✓ Planificar para i18n desde el día uno
✓ Externalizar todos los strings
✓ Usar ICU MessageFormat para strings complejos
✓ Probar con hablantes nativos reales
✓ Evitar texto en imágenes
✓ Usar bibliotecas conscientes de locale
✓ Documentar contexto de traducción
✓ Implementar localización continua
✓ Probar temprano y frecuentemente
✓ Considerar diferencias culturales más allá del idioma
Accessibility Testing: Diseño Inclusivo
Entendiendo Accesibilidad
Definición: Accesibilidad asegura que personas con discapacidades puedan percibir, entender, navegar e interactuar con el software.
Quién se beneficia de la accesibilidad:
- 15% de la población global tiene alguna forma de discapacidad
- Discapacidades permanentes: Ceguera, sordera, impedimentos motores
- Discapacidades temporales: Brazo roto, infección ocular
- Limitaciones situacionales: Luz solar brillante, ambiente ruidoso, manos ocupadas
Caso legal y de negocio:
Requisitos legales:
- ADA (Americans with Disabilities Act)
- Sección 508 (gobierno US)
- EN 301 549 (UE)
- Posibles demandas por incumplimiento
Beneficios de negocio:
- Mayor alcance de mercado
- Mejor SEO (accesibilidad se superpone con SEO)
- Usabilidad mejorada para todos los usuarios
- Responsabilidad social corporativa
- Motor de innovación
Guías WCAG 2.1
Web Content Accessibility Guidelines (WCAG) 2.1 organizadas alrededor de cuatro principios:
1. Perceptible
La información debe ser presentable a usuarios de formas que puedan percibir.
1.1 Alternativas de texto:
<!-- Imágenes -->
<img src="chart.png" alt="Ventas aumentaron 25% en Q4">
<!-- Imágenes decorativas -->
<img src="decorative-line.png" alt="">
<!-- Imágenes complejas -->
<img src="complex-chart.png"
alt="Gráfico de barras mostrando ventas trimestrales"
longdesc="sales-data.html">
<!-- Iconos con texto -->
<button>
<svg aria-hidden="true">...</svg>
<span>Eliminar</span>
</button>
<!-- Iconos sin texto -->
<button aria-label="Eliminar artículo">
<svg aria-hidden="true">...</svg>
</button>
1.2 Medios basados en tiempo:
Contenido de video:
- [ ] Subtítulos para usuarios sordos
- [ ] Descripciones de audio para usuarios ciegos
- [ ] Transcripción disponible
Contenido de audio:
- [ ] Transcripción disponible
1.3 Adaptable:
<!-- Estructura de encabezado apropiada -->
<h1>Título Principal</h1>
<h2>Sección 1</h2>
<h3>Subsección 1.1</h3>
<h2>Sección 2</h2>
<!-- HTML semántico -->
<nav>...</nav>
<main>...</main>
<aside>...</aside>
<footer>...</footer>
<!-- Listas -->
<ul><!-- Lista no ordenada --></ul>
<ol><!-- Lista ordenada --></ol>
<!-- Tablas -->
<table>
<thead>
<tr>
<th scope="col">Nombre</th>
<th scope="col">Edad</th>
</tr>
</thead>
<tbody>
<tr>
<td>Juan</td>
<td>30</td>
</tr>
</tbody>
</table>
1.4 Distinguible:
Contraste de color:
- Texto normal: Relación mínima 4.5:1
- Texto grande (18pt+): Relación mínima 3:1
- Componentes UI: Relación mínima 3:1
Probar contraste:
- Chrome DevTools
- WebAIM Contrast Checker
- Plugin Stark para Figma
No usar solo color:
❌ "Campos requeridos están en rojo"
✓ "Campos requeridos están marcados con asterisco (*)"
Redimensionar texto:
- [ ] Texto puede redimensionarse al 200% sin pérdida de funcionalidad
- [ ] Usar unidades relativas (rem, em) no píxeles fijos
2. Operable
Los componentes de interfaz de usuario deben ser operables.
2.1 Accesible por teclado:
<!-- Todos los elementos interactivos deben ser accesibles por teclado -->
<!-- Elementos nativos son accesibles por teclado por defecto -->
<button>Haz clic</button>
<a href="/page">Enlace</a>
<input type="text">
<!-- Elementos personalizados necesitan tabindex -->
<div role="button" tabindex="0" onKeyPress={handleKey}>
Botón personalizado
</div>
<!-- Enlace de saltar al contenido principal -->
<a href="#main-content" class="skip-link">
Saltar al contenido principal
</a>
<main id="main-content">
...
</main>
<!-- Prevención de trampa de teclado -->
<!-- Usuarios deben poder navegar lejos de cualquier componente -->
Probar navegación por teclado:
- [ ] Tab a través de todos los elementos interactivos
- [ ] Shift+Tab navega hacia atrás
- [ ] Enter activa botones/enlaces
- [ ] Espacio activa botones/checkboxes
- [ ] Teclas de flecha funcionan en dropdowns/grupos de radio
- [ ] Escape cierra modales/dropdowns
- [ ] Foco visible en todos los elementos
- [ ] Orden de tabulación lógico
- [ ] Sin trampas de teclado
2.2 Tiempo suficiente:
Tiempo ajustable:
- [ ] Usuario puede extender límites de tiempo
- [ ] Usuario puede desactivar límites de tiempo (donde sea posible)
- [ ] Usuario advertido antes de timeout
- [ ] Al menos 20 segundos para extender
Contenido auto-reproducible:
- [ ] Usuario puede pausar/detener/ocultar contenido auto-actualizable
- [ ] Sin auto-reproducción a menos que usuario pueda controlar
2.3 Convulsiones:
- [ ] Nada parpadea más de 3 veces por segundo
- [ ] Sin áreas grandes de parpadeo
- [ ] Efectos parallax pueden deshabilitarse
2.4 Navegable:
<!-- Títulos de página -->
<title>Nombre de Página - Nombre de Sitio</title>
<!-- Landmarks -->
<header role="banner">...</header>
<nav role="navigation" aria-label="Principal">...</nav>
<main role="main">...</main>
<aside role="complementary">...</aside>
<footer role="contentinfo">...</footer>
<!-- Orden de foco -->
<!-- Orden visual debe coincidir con orden DOM -->
<!-- Propósito de enlace -->
❌ <a href="/products">Haz clic aquí</a>
✓ <a href="/products">Ver nuestros productos</a>
<!-- Múltiples formas de encontrar páginas -->
- Búsqueda
- Mapa del sitio
- Menú de navegación
- Breadcrumbs
3. Comprensible
La información y operación deben ser comprensibles.
3.1 Legible:
<!-- Idioma de página -->
<html lang="es">
<!-- Idioma de partes -->
<p>La palabra francesa <span lang="fr">bonjour</span> significa hola.</p>
<!-- Lenguaje claro -->
- Usar lenguaje simple
- Definir jerga
- Expandir abreviaciones
- Proporcionar contenido de nivel de lectura apropiado
3.2 Predecible:
Navegación consistente:
- [ ] Navegación en mismo lugar en cada página
- [ ] Mismos componentes tienen mismas etiquetas
Identificación consistente:
- [ ] Iconos tienen significados consistentes
- [ ] Misma funcionalidad = mismas etiquetas
Al enfocar:
- [ ] Foco no dispara cambios inesperados
- [ ] Modal no se abre al enfocar
Al introducir:
- [ ] Envío de formulario requiere acción explícita
- [ ] Sin navegación automática al seleccionar
3.3 Asistencia de entrada:
<!-- Identificación de error -->
<label for="email">Email *</label>
<input
type="email"
id="email"
aria-invalid="true"
aria-describedby="email-error"
>
<span id="email-error" role="alert">
Por favor ingresa una dirección de email válida
</span>
<!-- Etiquetas e instrucciones -->
<label for="password">
Contraseña (mínimo 8 caracteres)
</label>
<input type="password" id="password">
<!-- Prevención de errores -->
- Confirmación para acciones destructivas
- Capacidad de revisar antes de enviar
- Capacidad de deshacer envíos
4. Robusto
El contenido debe ser lo suficientemente robusto para funcionar con tecnologías asistivas.
4.1 Compatible:
<!-- HTML válido -->
- Sin IDs duplicados
- Anidamiento apropiado
- Etiquetas cerradas
<!-- ARIA (Accessible Rich Internet Applications) -->
<!-- Nombre, Rol, Valor deben determinarse programáticamente -->
<button
role="button"
aria-label="Cerrar diálogo"
aria-pressed="false"
>
×
</button>
<div
role="progressbar"
aria-valuenow="25"
aria-valuemin="0"
aria-valuemax="100"
aria-label="Progreso de carga"
>
25% completo
</div>
Métodos de Accessibility Testing
1. Testing automatizado:
Herramientas:
- axe DevTools (extensión de navegador)
- Lighthouse (Chrome DevTools)
- WAVE (WebAIM)
- Pa11y (línea de comandos)
Captura ~30-40% de issues:
✓ Falta de texto alt
✓ Contraste de color
✓ Etiquetas faltantes
✓ ARIA inválido
✓ Estructura de encabezados
No captura:
✗ Calidad de orden de foco
✗ Calidad de texto alt
✗ Flujo de navegación por teclado
✗ Experiencia de lector de pantalla
✗ Contexto y significado
2. Testing manual:
Navegación por teclado:
1. Desconectar mouse
2. Navegar usando solo teclado
3. Verificar toda funcionalidad accesible
4. Verificar indicadores de foco
5. Probar orden lógico de tabulación
Testing de lector de pantalla:
- NVDA (Windows, gratis)
- JAWS (Windows, de pago)
- VoiceOver (Mac/iOS, integrado)
- TalkBack (Android, integrado)
Prueba básica de lector de pantalla:
1. Activar lector de pantalla
2. Navegar con atajos de lector de pantalla
3. Verificar todo el contenido anunciado
4. Probar formularios e interacciones
5. Verificar calidad de texto alternativo
3. User testing:
Probar con usuarios reales con discapacidades:
- Usuarios ciegos (lectores de pantalla)
- Usuarios con baja visión (magnificación)
- Usuarios con impedimento motor (solo teclado)
- Usuarios sordos (subtítulos)
- Discapacidades cognitivas (lenguaje claro)
Beneficios:
- Patrones de uso del mundo real
- Descubrir issues que herramientas pierden
- Construcción de empatía
- Insights de innovación
Checklist de Accesibilidad
Fundación:
- HTML válido y semántico
- Estructura de encabezado lógica
- Regiones landmark definidas
- Skip links proporcionados
- Título de página describe contenido
Imágenes y Media:
- Todas las imágenes tienen texto alt
- Imágenes decorativas tienen alt vacío
- Imágenes complejas tienen descripciones largas
- Videos tienen subtítulos
- Audio tiene transcripciones
Formularios:
- Todos los inputs tienen etiquetas
- Campos requeridos indicados
- Mensajes de error claros y específicos
- Errores asociados con inputs
- Fieldsets agrupan inputs relacionados
Teclado:
- Toda funcionalidad accesible por teclado
- Indicadores de foco visibles
- Orden de tabulación lógico
- Sin trampas de teclado
- Enlaces de saltar navegación
Color y Contraste:
- Contraste 4.5:1 para texto normal
- Contraste 3:1 para texto grande
- Color no es único indicador
- Funciona en modo de alto contraste
Tecnología Asistiva:
- Funciona con lectores de pantalla
- ARIA usado apropiadamente
- Regiones live para contenido dinámico
- Mensajes de estado anunciados
Contenido:
- Lenguaje simple usado
- Texto de enlace descriptivo
- Idioma de página establecido
- Instrucciones no dependen de forma/tamaño/ubicación
Conclusión
Las pruebas no funcionales no son opcionales—son esenciales para crear software que los usuarios amen y que alcance la audiencia más amplia posible. Cada dimensión que hemos cubierto contribuye a la calidad general del producto:
- Usability testing asegura que tu software sea intuitivo y agradable de usar
- Compatibility testing garantiza acceso a través de navegadores, dispositivos y plataformas
- Localización testing abre mercados globales y muestra respeto cultural
- Accessibility testing incluye a todos y frecuentemente mejora la experiencia para todos los usuarios
El mejor enfoque es integrar pruebas no funcionales a lo largo del desarrollo, no como una reflexión tardía. Construye accesibilidad en diseños, prueba usabilidad con prototipos, verifica compatibilidad temprano y planifica para localización desde el inicio.
Recuerda: La corrección funcional atrae usuarios, pero la excelencia no funcional los mantiene. En el panorama competitivo del software actual, la experiencia de usuario superior, la accesibilidad universal y el alcance global son los diferenciadores que impulsan el éxito.
Recursos
Usabilidad:
- Nielsen Norman Group: https://www.nngroup.com/
- Usability.gov
- “Don’t Make Me Think” de Steve Krug
- “The Design of Everyday Things” de Don Norman
Compatibilidad:
- Can I Use: https://caniuse.com/
- MDN Web Docs Browser Compatibility
- BrowserStack, LambdaTest (plataformas de testing)
Localización:
- Unicode CLDR (Common Locale Data Repository)
- ICU (International Components for Unicode)
- Crowdin, Lokalise (plataformas de traducción)
Accesibilidad:
- WCAG 2.1 Guidelines: https://www.w3.org/WAI/WCAG21/quickref/
- WebAIM: https://webaim.org/
- A11y Project: https://www.a11yproject.com/
- “Inclusive Design Patterns” de Heydon Pickering