2.1 DISEÑO DE SITIOS WEB En su autorizado libro sobre diseño web, Jakob Nielsen, afirma lo siguiente: "En esencia, hay dos enfoques fundamentales del diseño: el ideal artístico de expresarse así mismo y el ideal de la ingeniería de resolver un problema para un cliente." En la primera década del desarrollo de la web, el enfoque que elegían muchos diseñadores era el ideal artístico. El diseño se desarrollaba de manera adhoc y por lo general se efectuaba a medida que se generaba HTML. Después evolucionó a partir de la visión artística que surgió de la construcción de webapps (en la ingeniería de software se denomina webapps es igual a aplicación web, aquellas aplicaciones que los usuarios pueden utilizar accediendo a un servidor web a través de Internet o de una intranet mediante un navegador. En otras palabras, es una aplicación software que se codifica en un lenguaje soportado por los navegadores web en la que se confía la ejecución al navegador(1)). Incluso hoy, muchos desarrolladores web utilizan webapps como cartel infantil para un "diseño limitado". Afirman que la inmediatez y volatilidad de una webapp palidecen ante el diseño formal, que éste evoluciona conforme se elabora (se codifica) una aplicación y que debe dedicarse relativamente poco tiempo a crear un modelo detallado del diseño. Este argumento tiene algo de verdad, pero sólo para webapps relativamente sencillas. Cuando el contenido y las funciones son complejos o cuando el tamaño de la webapp incluye cientos o miles de objetos de contenido, funciones y clases de análisis y cuando el éxito de la webapp tenga influencia directa en el éxito del negocio, el diseño no puede ni debe tomarse a la ligera. Esta realidad conduce al segundo enfoque de Nielsen: "el ideal de la ingeniería es resolver un problema para un cliente". La ingeniería web1 adopta esta filosofía, y un enfoque más riguroso del diseño de webapps permite que los desarrolladores la hagan realidad(2). 2.1.1 ELEMENTOS Y ATRIBUTOS DE CALIDAD En 2005, Computer World, se quejaba de que "el mal software es una plaga en casi todas las organizaciones que emplean computadoras, lo que ocasiona horas de trabajo perdidas por el tiempo que están fuera de uso las máquinas, por datos perdidos o corrompidos, oportunidades de venta perdidas, costos elevados de apoyo y mantenimiento, y poca satisfacción del cliente. Un año después, InfoWorld, escribió acerca del "lamentable estado de la calidad del software" e informaba que el problema de la calidad no había mejorado.
1
Actualmente, la calidad del software es preocupante, pero, ¿de quién es la culpa? Los clientes culpan a los desarrolladores, pues afirman que sus prácticas descuidadas producen software de mala calidad. Los desarrolladores culpan a los clientes (y a otros participantes) con la afirmación de que las fechas de entrega irracionales y un flujo continuo de cambios los obligan a entregar software antes de haber sido validado por completo. ¿Quién tiene la razón? Ambos, y ése es el problema. Aquí se analiza el concepto de calidad del software y por qué es útil estudiarlo con seriedad siempre que se apliquen prácticas de ingeniería de software. ¿QUE ES CALIDAD? En su libro místico, El zen y el arte del mantenimiento de la motocicleta, Robert Persig, comenta lo siguiente acerca de lo que llamamos calidad: Calidad... sabes lo que es, pero no sabes lo que es. Pero eso es una contradicción. Algunas cosas son mejores que otras; es decir, tienen más calidad. Pero cuando tratas de decir lo que es la calidad, además de las cosas que la tienen, todo se desvanece... No hay nada de qué hablar. Pero si no puede decirse qué es Calidad, ¿cómo saber lo que es, o incluso saber que existe?. Si nadie sabe lo que es, entonces, para todos los propósitos prácticos, no existe en absoluto. Pero para todos los propósitos prácticos, en realidad sí existe. ¿En qué otra cosa se basan las calificaciones?, ¿por qué paga fortunas la gente por algunos artículos y tira otros a la basura?, es obvio que algunas cosas son mejores que otras... pero, ¿en qué son mejores?, y así damos vueltas y más vueltas, ruedas de metal que patinan sin nada en lo que hagan tracción. ¿Qué demonios es la Calidad?, ¿qué es?, es cierto: ¿qué es?. En un nivel algo pragmático, David Garvin, de Harvard Business School, sugiere que la calidad es un concepto complejo y de facetas múltiples" que puede describirse desde cinco diferentes puntos de vista. El punto de vista trascendental dice (como Persig) que la calidad es algo que se reconoce de inmediato, pero que no es posible definir explícitamente. El punto de insta del usuario concibe la calidad en términos de las metas específicas del usuario final. Si un producto las satisface, tiene calidad. El punto de vista del fabricante la define en términos de las especificaciones originales del producto. Si éste las cumple, tiene calidad. El punto de vista del producto sugiere que la calidad tiene que ver con las características inherentes (funciones y características) de un producto. Por último, el punto de vista basado en el valor la mide de acuerdo con lo que un cliente está dispuesto a pagar por un producto. En realidad, la calidad incluye todo esto y más.
2
La calidad del diseño se refiere a las características que los diseñadores especifican para un producto. El tipo de materiales, tolerancias y especificaciones del desempeño, todo contribuye a la calidad del diseño. Si se utilizan mejores materiales, tolerancias más estrictas y se especifican mayores niveles de desempeño, la calidad del diseño de un producto se incrementa si se fabrica de acuerdo con las especificaciones. En el desarrollo del software, la calidad del diseño incluye el grado en el que el diseño cumple las funciones y características especificadas en el modelo de requerimientos. La calidad de la conformidad se centra en el grado en el que la implementación se apega al diseño y en el que el sistema resultante cumple sus metas de requerimientos y desempeño. Pero, ¿son la calidad del diseño y de la conformidad los únicos aspectos que deben considerar los ingenieros de software? Robert Glass, afirma que es mejor plantear una relación más intuitiva: Satisfacción del Usuario = Producto que Funciona + Buena Calidad + Entrega dentro del Presupuesto y Plazo. En última instancia, Glass, sostiene que la calidad es importante, pero que si el usuario está satisfecho, nada de lo demás importa. DeMarco, refuerza esta opinión al decir que la calidad de un producto está en función de cuánto cambia al mundo para bien". Este punto de vista de la calidad afirma que si un producto de software beneficia mucho a los usuarios finales, éstos se mostrarán dispuestos a tolerar problemas ocasionales de confiabilidad o desempeño. Incluso los desarrolladores de software más experimentados estarán de acuerdo en que obtener software de alta calidad es una meta importante. Pero, ¿cómo se define la calidad del software?. En el sentido más general se define como: Proceso eficaz de software que se aplica de manera que crea un producto útil que proporciona valor medible a quienes lo producen y a quienes lo utilizan. Hay pocas dudas acerca de que la definición anterior podría modificarse o ampliarse en un debate sin fin. Para propósitos de estas notas, la misma sirve a fin de enfatizar tres puntos importantes: 1. Un proceso eficaz de software establece la infraestructura que da apoyo a cualquier esfuerzo de elaboración de un producto de software de alta calidad.
3
Los aspectos de administración del proceso generan las verificaciones y equilibrios que ayudan a evitar que el proyecto caiga en el caos, contribuyente clave de la mala calidad. Las prácticas de ingeniería de software permiten al desarrollador analizar el problema y diseñar una solución sólida, ambas actividades críticas de la construcción de software de alta calidad. Por último, las actividades sombrilla, tales como administración del cambio y revisiones técnicas, tienen tanto que ver con la calidad como cualquier otra parte de la práctica de la ingeniería de software. 2. Un producto útil entrega contenido, funciones y características que el usuario final desea; sin embargo, de igual importancia es que entrega estos activos en forma confiable y libre de errores. Un producto útil siempre satisface los requerimientos establecidos en forma explícita por los participantes. Además, satisface el conjunto de requerimientos (por ejemplo, la facilidad de uso) con los que se espera que cuente el software de alta calidad. 3. Al agregar valor para el productor y para el usuario de un producto, el software de alta calidad proporciona beneficios a la organización que lo produce y a la comunidad de usuarios finales. La organización que elabora el software obtiene valor agregado porque el software de alta calidad requiere un menor esfuerzo de mantenimiento, menos errores que corregir y poca asistencia al cliente. Esto permite que los ingenieros de software dediquen más tiempo a crear nuevas aplicaciones y menos a repetir trabajos malhechos. La comunidad de usuarios obtiene valor agregado porque la aplicación provee una capacidad útil en forma tal que agiliza algún proceso de negocios. El resultado final es 1) mayores utilidades por el producto de software, 2) más rentabilidad cuando una aplicación apoya un proceso de negocios y 3) mejor disponibilidad de información que es crucial para el negocio. LINEAMIENTOS Y ATRIBUTOS DE LA CALIDAD DEL SOFTWARE A través del proceso de diseño se evalúa la calidad de éste de acuerdo con la serie de revisiones técnicas, se sugieren tres características que funcionan como guía para evaluar un buen diseño: • Debe implementar todos los requerimientos explícitos contenidos en el modelo de requerimientos y dar cabida a todos los requerimientos implícitos que desean los participantes. • Debe ser una guía legible y comprensible para quienes generan el código y para los que lo prueban y dan el apoyo posterior.
4
• Debe proporcionar el panorama completo del software, y abordar los dominios de los datos, las funciones y el comportamiento desde el punto de vista de la implementación. En realidad, cada una de estas características es una meta del proceso de diseño. Pero, ¿coma se logran? Lineamientos de la calidad. A fin de evaluar la calidad de una representación del diseño, usted y otros miembros del equipo de software deben establecer los criterios técnicos de un buen diseño. En este momento, considere los siguientes lineamientos para el diseño: 1. Debe tener una arquitectura que: 1) se haya creado con el empleo de estilos o patrones arquitectónicos reconocibles, 2) esté compuesta de componentes con buenas características de diseño, y 3) se implementen en forma evolutiva, de modo que faciliten la implementación y las pruebas. 2. Debe ser modular, es decir, el software debe estar dividido de manera lógica en elementos o subsistemas. 3. Debe contener distintas representaciones de datos, arquitectura, interfaces y componentes. 4. Debe conducir a estructuras de datos apropiadas para las clases que se van a implementar y que surjan de patrones reconocibles de datos. 5. Debe llevar independientes.
a
componentes
que
tengan
características
funcionales
6. Debe conducir a interfaces que reduzcan la complejidad de las conexiones entre los componentes y el ambiente externo. 7. Debe obtenerse con el empleo de un método repetible motivado por la información obtenida durante el análisis de los requerimientos del software. 8. Debe representarse con una notación que comunique con eficacia su significado. Estos lineamientos de diseño no se logran por azar. Se consiguen con la aplicación de los principios de diseño fundamentales, una metodología sistemática y con revisión.
5
EVALUACIÓN DE LA CALIDAD DEL DISEÑO • La funcionalidad se califica de acuerdo con el conjunto de características y capacidades del programa, la generalidad de las funciones que se entregan y la seguridad general del sistema. • La usabilidad se evalúa tomando en cuenta factores humanos, la estética general, la consistencia y la documentación. • La confiabilidad se evalúa con la medición de la frecuencia y gravedad de las fallas, la exactitud de los resultados que salen, el tiempo medio para que ocurra una falla (TMPF), la capacidad de recuperación ante ésta y lo predecible del programa. • El rendimiento se mide con base en la velocidad de procesamiento, el tiempo de respuesta, el uso de recursos, el conjunto y la eficiencia. • La mantenibilidad combina la capacidad del programa para ser ampliable (extensibilidad), adaptable y servicial (estos tres atributos se denotan con un término más común: mantenibilidad), y además que pueda probarse, ser compatible y configurable (capacidad de organizar y controlar los elementos de la configuración del software, y que cuente con la facilidad para instalarse en el sistema y para que se detecten los problemas. No todo atributo de la calidad del software se pondera por igual al diseñarlo. Una aplicación tal vez se aboque a lo funcional con énfasis en la seguridad. Otra quizá busque rendimiento con la mira puesta en la velocidad de procesamiento. En una tercera se persigue la confiabilidad. Sin importar la ponderación, es importante observar que estos atributos de la calidad deben tomarse en cuenta cuando comienza el diseño, no cuando haya terminado éste y la construcción se encuentre en marcha(2). 2.1.2 NORMA ISO 9126 E ISO/IEC 12207 El estándar ISO-9126 se desarrolló con la intención de identificar los atributos clave del software de cómputo. Este sistema identifica seis atributos clave de la calidad: Funcionalidad. Grado en el que el software satisface las necesidades planteadas según las establecen los atributos siguientes: adaptabilidad, exactitud, interoperabilidad, cumplimiento y seguridad.
6
Confiabilidad. Cantidad de tiempo que el software se encuentra disponible para su uso, según lo indican los siguientes atributos: madurez, tolerancia a fallas y recuperación. Usabilidad. Grado en el que el software es fácil de usar, según lo indican los siguientes subatributos: entendible, aprendible y operable. Eficiencia. Grado en el que el software emplea óptimamente los recursos del sistema, según lo indican los subatributos siguientes: comportamiento del tiempo y de los recursos. Facilidad de recibir mantenimiento. Facilidad con la que pueden efectuarse reparaciones al software, según lo indican los atributos que siguen: analizable, cambiable, estable, susceptible de someterse a pruebas. Portabilidad. Facilidad con la que el software puede llevarse de un ambiente a otro según lo indican los siguientes atributos: adaptable, instalable, conformidad y sustituible. Igual que otros factores de la calidad del software estudiados en las subsecciones anteriores, los factores ISO-9126 no necesariamente conducen a una medición directa. Sin embargo, proporcionan una base útil para hacer mediciones indirectas y una lista de comprobación excelente para evaluar la calidad del sistema(2).
(1) http://es.wikipedia.org/wiki/Webapp
(2) .Un enfoque práctico. INGENIERIÍA DEL SOFTWARE. PRESSMAN. DECIMA EDICIÓN 2010.
7
2.1.3 NORMAS INSTITUCIONALES SEGURIDAD DEL SOFTWARE La seguridad del software es una actividad del aseguramiento del software que se centra en la identificación y evaluación de los peligros potenciales que podrían afectarlo negativamente y que podrían ocasionar que falle todo el sistema. Si los peligros se identifican al principio del proceso del software, las características de su diseño se especifican de modo que los eliminen o controlen. Como parte de la seguridad del software, se lleva a cabo un proceso de modelado y análisis. Inicialmente se identifican los peligros y se clasifican según su riesgo. Por ejemplo, algunos de los peligros asociados con un control de crucero basado en computadora para un automóvil podrían ser los siguientes: 1) ocasionar una aceleración in controlada que no pudiera detenerse. 2) no responder a la presión en el pedal de frenado (porque se apague). 3) no encender cuando se active el interruptor. 4) perder o ganar velocidad poco a poco. Una vez identificados estos peligros en el nivel del sistema, se utilizan técnicas de análisis para asignar severidad y probabilidad de ocurrencia a cada uno. Para ser eficaz, el software debe analizarse en el contexto de todo el sistema. Por ejemplo, un error sutil en la entrada de un usuario (las personas son componentes del sistema) podría ampliarse por una falla del software y producir datos de control que situaran equivocadamente un dispositivo mecánico. Si y sólo si se encontrara un único conjunto de condiciones ambientales externas, la posición falsa del dispositivo mecánico ocasionaría una falla desastrosa. Podrían usarse técnicas de análisis, tales como árbol de fallas, lógica en tiempo real y modelos de red de Petri, para predecir la cadena de eventos que ocasionarían los peligros, así como la probabilidad de ocurrir que tendría cada uno de los eventos para generar la cadena. Una vez identificados y analizados los peligros, pueden especificarse requerimientos relacionados con la seguridad para el software. Es decir, la especificación contendría una lista de eventos indeseables y las respuestas deseadas del sistema ante ellos. Después se indicaría el papel del software en la administración indeseable de los mismos.
8
Aunque la confiabilidad y la seguridad del software están muy relacionadas, es importante entender la sutil diferencia entre ellas. La primera utiliza técnicas de análisis estadístico para determinar la probabilidad de que ocurra una falla del software. Sin embargo, la ocurrencia de una falla no necesariamente da como resultado un peligro o riesgo. La seguridad del software examina las formas en las que las fallas generan condiciones que llevan a un peligro. Es decir, las fallas no se consideran en el vacío, sino que se evalúan en el contexto de la totalidad del sistema basado en computadora y de su ambiente. El estudio exhaustivo de la seguridad del software está más allá del alcance de estas notas. LAS NORMAS DE CALIDAD DE ISO-9000 Un sistema de aseguramiento de la calidad se define como la estructura organizacional, responsabilidades, procedimientos, procesos y recursos necesarios para implementar la administración de la calidad. Los sistemas de aseguramiento de la calidad se crean para ayudar a las organizaciones a asegurar que sus productos y servicios satisfagan las expectativas del consumidor gracias a que cumplan con sus especificaciones. Estos sistemas cubren una amplia variedad de actividades, que contemplan todo el ciclo de vida del producto, incluidos planeación, control, medición, pruebas e informes, así como la mejora de los niveles de calidad en todo el proceso de desarrollo y manufactura. La norma ISO-9000 describe en términos generales los elementos de aseguramiento de la calidad que se aplican a cualquier negocio, sin importar los productos o servicios ofrecidos. Para registrarse en alguno de los modelos del sistema de aseguramiento de la calidad contenidos en la ISO-9000, por medio de auditores externos se revisan en detalle el sistema y las operaciones de calidad de una compañia, respecto del cumplimiento del estándar y de la operación eficaz. Después de un registro exitoso, el grupo de registro representado por los auditores emite un certificado para la compañía. Auditorias semestrales de supervisión aseguran el cumplimiento continuo de la norma. Los requerimientos esbozados por la norma ISO-9001:2000 se dirigen a temas tales como responsabilidad de la administración, sistema de calidad, revisión del contrato, control del diseño, documentación y control de datos, identificación del producto y su seguimiento, control del proceso, inspección y pruebas, acciones correctivas y preventivas, registros del control de calidad, auditorías internas de calidad, capacitación, servicio y técnicas estadísticas. A fin de que una organización de software se registre en la ISO-9001:2000, debe establecer políticas y
9
procedimientos que cumplan cada uno de los requerimientos mencionados (y otros más), y después demostrar que sigue dichas políticas y procedimientos. LA NORMA ISO 9001:2000 La descripción siguiente define los elementos básicos de la norma ISO 9001:2000. Información completa sobre la misma se obtiene en la Organización Internacional de Normas (www.iso.ch) y en otras fuentes de internet (como en www. praxiom.com). Establecer los elementos de un sistema de administración de la calidad. • Desarrollar, implementar y mejorar el sistema. • Definir una política que ponga el énfasis en la importancia del sistema. Documentar el sistema de calidad. • Describir el proceso. • Producir un manual de operación. • Desarrollar métodos para controlar (actualizar) documentos. • Establecer métodos de registro. Apoyar el control y aseguramiento de la calidad. • Promover la importancia de la calidad entre todos los participantes. • Centrarse en la satisfacción del cliente. • Definir un plan de calidad que se aboque a los objetivos, responsabilidades y autoridad. • Definir mecanismos de comunicación entre los participantes. Establecer mecanismos de revisión para el sistema de administración de la calidad. • Identificar métodos de revisión y mecanismos de retroalimentación. • Definir procedimientos para dar seguimiento. Identificar recursos para la calidad, incluidos personal, capacitación y elementos de la infraestructura. • Establecer mecanismos de control. • Para la planeación. • Para los requerimientos del cliente. • Para las actividades técnicas (tales como análisis, diseño y pruebas). • Para la vigilancia y administración del proyecto. Definir métodos de corrección. • Evaluar datos y métricas de la calidad. • Definir el enfoque para la mejora continua del proceso y la calidad.
10
EL PLAN DE ACS El Plan de ACS proporciona un mapa de ruta para instituir el aseguramiento de la calidad del software. Desarrollado por el grupo de ACS (o por el equipo del software si no existe un grupo de ACS), el plan funciona como plantilla para las actividades de ACS que se instituyen para cada proyecto de software. La IEEE ha publicado una norma para el ACS. Ésta recomienda una estructura que identifica lo siguiente: 1) Propósito y alcance del plan. 2) Descripción de todos los productos del trabajo de ingeniería de software (tales como modelos, documentos, código fuente, etc.) que se ubiquen dentro del ámbito del ACS. 3) Todas las normas y prácticas aplicables que se utilicen durante el proceso del software. 4) Acciones y tareas del ACS (incluidas revisiones y auditorías) y su ubicación en el proceso del software. 5) Herramientas y métodos que den apoyo a las acciones y tareas de ACS. 6) Procedimientos para la administración de la configuración del software. 7) Métodos para unificar las salvaguardas y para mantener todos los registros relacionados con el ACS. 8) Roles y responsabilidades relacionados con la calidad del producto. ADMINISTRACIÓN DE LA CALIDAD DEL SOFTWARE Objetivos: El objetivo de las herramientas del ACS es ayudar al equipo del proyecto a evaluar y mejorar la calidad del producto del trabajo de software. Mecánica: La mecánica de las herramientas varía. En general, el objetivo consiste en evaluar la calidad de un producto específico. Nota: Es frecuente que dentro de la categoría de herramientas para el ACS, se incluya una amplia variedad de herramientas para someter a prueba al software.
11
2.1.4 DISEÑO DE LA INTERFAZ DE LA WEBAPP
Pirámide del diseño de las webapps
tecnologí
Figura No. 2.1. Pirámide del Diseño de las webapps(2).
Aunque las webapps plantean algunas dificultades especiales en el diseño de la interfaz de usuario, los principios y lineamientos básicos son aplicables. Uno de los retos del diseño de la interfaz de las webapps es la naturaleza indeterminada del punto en el que entra el usuario. Es decir, éste puede ingresar por una ubicación "inicial de la webapp (la página de arranque, por ejemplo) o por algún vínculo en cierto nivel inferior de la arquitectura de aquélla. En algunos casos, la webapp se diseña de modo que redirija al usuario a una ubicación inicial, pero si esto es algo indeseable, entonces el diseño debe dar características de navegación en la interfaz que acompañen a todos los objetos de contenido y de las cuales se disponga sin importar el modo en el que el usuario ingrese al sistema. Los objetivos de la interfaz de una webapp son los siguientes: 1) establecer una ventana congruente en el contenido y las funciones que brinda, 2) guiar al usuario a través de una serie de interacciones con la webapp y 3) organizar las opciones de navegación y contenido disponibles para el usuario. Para lograr una interfaz
12
consistente, primero debe usarse un diseño estético, a fin de establecer un "aspecto" coherente. Esto incluye muchas características, pero debe ponerse énfasis en la distribución y la forma de los mecanismos de navegación. Para guiar la interacción del usuario, debe establecerse una metáfora apropiada que permita al usuario tener una comprensión intuitiva de la interfaz. A fin de implementar las opciones de navegación, puede seleccionarse alguno de los siguientes mecanismos: • Menús de navegación: contienen palabras clave (organizadas en forma vertical u horizontal) que enlistan contenido o funciones clave. Estos menús se implementan de modo, que el usuario pueda elegir entre una jerarquía de subtemas que se despliegan al seleccionar la opción principal en el menú. • Iconos gráficos-, botones, interruptores y otras imágenes similares que permiten que el usuario seleccione alguna propiedad o que especifique una decisión. • Imágenes: cierta representación gráfica que el usuario selecciona para establecer un vínculo hacia un objeto de contenido o función de la webapp. Es importante observar que en cada nivel de la jerarquía del contenido debe proporcionarse uno o varios de estos mecanismos de control. 2.1.5 Diseño de la Estética El diseño estético, también llamado diseño gráfico, es una actividad artística que complementa los aspectos técnicos del diseño de las webapps. Sin estética, una webapp tal vez sea funcional pero no atractiva. Con estética, una webapp lleva a sus usuarios a un mundo que los sitúa en un nivel tanto visceral como intelectual. Pero, ¿qué es la estética? Hay un viejo refrán que dice que "la belleza está en los ojos del espectador". Esto es particularmente cierto cuando se trata del diseño estético de las webapps. Para llevar a cabo éste con eficacia, hay que volver a la jerarquía del usuario desarrollada como parte del modelo de requerimientos y preguntar: ¿quiénes son los usuarios de la webapp y qué "vista" desean tener? Aspectos de la distribución Toda página web tiene una cantidad limitada de "superficie" que se utiliza para dar apoyo a la estética no funcional, características de navegación, contenido de información y funciones dirigidas al usuario. El desarrollo de dicha superficie se planea durante el diseño estético.
13
Igual que todos los temas de la estética, cuando se diseña la distribución de la pantalla no hay reglas absolutas. Sin embargo, es útil considerar varios lineamientos de la distribución general: No tema al espacio en blanco. No es aconsejable ocupar con información cada centímetro cuadrado de una página web. El amasijo resultante hará difícil que el usuario identifique la información o las características que necesita y creará un caos visual que no será agradable a los ojos. Hacer énfasis en el contenido. Después de todo, ésta es la razón de que el usuario esté ahí. Nielsen, sugiere que la página web común debe tener 80 por ciento de contenido y destinar el resto a la navegación y otras características. Organizar los elementos con una distribución que vaya desde arriba a la izquierda hacia abajo a la derecha. La gran mayoría de usuarios de una página web la recorrerán en forma muy parecida a como lo hacen con las hojas de un libro: desde arriba a la izquierda hacia abajo a la derecha. Si los elementos de la distribución tienen prioridades específicas, aquellos que sean prioritarios deben colocarse en la parte superior izquierda de la superficie de la página. Agrupar la navegación, el contenido y la función en forma geográfica dentro de la página. Los humanos buscamos patrones virtualmente en todas las cosas. Si en una página web no hay patrones discernibles, es probable que la frustración del usuario aumente (debido a la búsqueda innecesaria de la información requerida). No aumente la superficie con la barra de desplazamiento. Aunque es frecuente que se necesite el desplazamiento, la mayor parte de estudios indican que los usuarios preferirían no hacerlo. Es mejor reducir el contenido de la página o presentar en varias páginas el que sea necesario. Cuando se diseñe la distribución hay que considerar la resolución y tamaño de la ventana del navegador. En vez de definir tamaños fijos dentro de una plantilla, el diseño debe especificar todos los parámetros en términos de porcentaje del espacio disponible. Aspectos del diseño gráfico El diseño gráfico toma en cuenta cada aspecto de la vista y sensación de la webapp. El; de diseño gráfico comienza con la distribución y avanza hacia la sideración de los esquemas de color globales; tipos, tamaños y estilos del texto; uso de J complementarios (audio, video y animación) y todos los demás elementos estéticos de aplicación.
14
El análisis exhaustivo de los temas del diseño gráfico de webapps está más allá de estas notas. El lector puede obtener recomendaciones y lineamientos en muchos sitios web dedicados a dicha materia (como www.graphic-design.com, www.grantasticdesign.com y www.wpdfd.com) o en uno o más documentos impresos.
Sitios web bien diseñados A veces, la mejor manera de entender lo que es un buen diseño de webapps es ver algunos ejemplos. En su artículo "Las veinte mejores recomendaciones para el diseño web", Marcelle Toor (www.graphic-design.com/Web/feature/tips.html) recomienda los siguientes sitios como ejemplos de lo que constituye un buen diseño gráfico: www.creativepro.com/designresource/home/787.html: empresa de diseño dirigida por Primo Angeli www.workbook.com: este sitio presenta los portafolios de varios ilustradores y diseñadores www.pbs.org/riverofsong: serie de televisión y radio acerca de la música estadounidense www.RKDINC.com: empresa de diseño con un portafolio arl y buenas recomendaciones de diseño www.creativehotlist.com/index.html: buena fuente acal bien diseñados desarrollados por agencias, empresas úe r-eigráficas y otros especialistas de la comunicación www.btdnyc.com: compañía de diseño encabezada por MI Toudreau 2.1.6 Diseño del Contenido cita: "Los buenos diseñadores generan la regularidad a partir del caos; comunican sus ideas con claridad, organizando y manipulando palabras e imágenes." Jeffery Veen.
15
El diseño del contenido se centra en dos tareas diferentes del diseño, cada una de las z dirigida por individuos que poseen habilidades distintas. En primer lugar, se desarrolla presentación del diseño para los objetos del contenido y los mecanismos requeridos para establecer una relación entre ellos. Además, se crea la información dentro de un objeto de contenido específico. El trabajo posterior es llevado a cabo por escritores, diseñadores gráficos y otros actores que generan el contenido que se usará en la webapp. Objetos de contenido La relación entre los objetos de contenido definidos como parte del modelo de requerimientos para la webapp y los objetos de diseño que representan el contenido es análoga a la relación existe entre las clases de análisis y los componentes del diseño que se describió en capítulos anteriores. En el contexto del diseño de la webapp, un objeto de contenido se parece más a un objeto de datos del software tradicional. Un objeto de contenido tiene atributos que incluyen información de contenido específico (normalmente definido durante el modelado de los requerimientos de la webapp) y atributos de implementación específica que se establecen, como parte del diseño. Por ejemplo, piense en una clase de análisis, Componente del Producto, desarrollada para el sistema de comercio electrónico de Casa Segura. El atributo de la clase de análisis, descripción se representa como clase de análisis llamada DescripcióndeComponente y está compuesta por cinco objetos de contenido: DescripcióndelMercado, Fotografía, DescripciónTécnica, Esquema, Video, que se (2) muestran como objetos sombreados en la siguiente Figura No. 2.1
16
Figura No. 2.1
(2)
La información contenida dentro del objeto de contenido se etiqueta como atributos. Por ejemplo, Fotografía (imagen de tipo .jpg) tiene los atributos dimensión horizontal, dimensión vertical y estilo de bordes. Puede usarse una asociación UML (Lenguaje Unificado de Modeladohttp://es.wikipedia.org/wiki/UML) y un agregado para representar relaciones entre los objetos de contenido. Por ejemplo, la asociación UML que se ilustra en la Figura No. 2.1 indica que se usa una Descripción de Componente para cada instancia de la clase Componente del Producto. La Descripción de Componente está integrada sobre los cinco objetos de contenido ilustrados. Sin embargo, la notación de multiplicidad que se aprecia indica qué Esquema y Video son opcionales (son posibles 0 ocurrencias), que se requiere una DescripcióndelMercado y una DescripciónTécnica, y que se emplean una o varias instancias de Fotografía.
17
Aspectos de diseño del contenido Una vez modelados los objetos del contenido, la información que va a entregar cada objeto debe registrar al autor y después editarse para que satisfaga del mejor modo posible las necesidades del consumidor. La autoría del contenido es trabajo de especialistas en el área relevante de quien diseña el objeto de contenido, dando un bosquejo de la información que se va a entregar y una indicación de los tipos de objetos de contenido general (por ejemplo, texto descriptivo, imágenes, fotografías, etc.) que se usarán para entregar la información. El diseño estético también puede aplicarse para representar la vista y sensación apropiadas para el contenido. Los objetos se "cortan" a medida que se diseñan para formar las páginas de la webapp. El número de objetos de contenido incorporado en una página individual está en función de las necesidades del usuario, de las restricciones impuestas por la velocidad de descarga de la conexión de internet y de las restricciones impuestas por la cantidad de desplazamiento vertical que el usuario tolerará. 2.1.7 Diseño Arquitectónico Cita: .. .la estructura arquitectónica; un sitio bien diseñado no siempre es visible para el usuario: no debe serlo." Powell El diseño arquitectónico está ligado con las metas establecidas para una webapp, con el contenido que se va a presentar, con los usuarios que la visitarán y con la filosofía de navegación adoptada. Como diseñador de la arquitectura, el lector debe identificar la arquitectura del contenido y la de la webapp. La arquitectura del contenido se centra en la manera en la que objetos de contenido (o compuestos, como páginas web) se estructuran para la presentación y la navegación. La arquitectura de la webapp se aboca a la forma en la que la aplicación queda estructurada para administrar la interacción con el usuario, manejar tareas de procesamiento interno, navegar con eficacia y presentar el contenido. En la mayoría de los casos, el diseño arquitectónico se lleva a cabo en paralelo con el de la interfaz, el estético y el del contenido. Como la arquitectura de la webapp tal vez es muy influida por la navegación, las decisiones que se tomen durante esta acción del diseño influirán en el trabajo realizado durante el diseño de aquélla.
18
Arquitectura del contenido El diseño del contenido se centra en la definición de la estructura general de los hipermedios de la webapp. Aunque en ocasiones se crean arquitecturas personalizadas, siempre se tiene la opción de elegir entre cuatro distintas estructuras de contenido: Las estructuras lineales se encuentran cuando es común en una secuencia predecible de interacciones (con cierta variación o diferencia). Un ejemplo clásico es la presentación de tutoriales en los que se despliegan páginas de información junto con imágenes relacionadas, videos cortos o audio, sólo después de haber mostrado cierta información de prerrequisitos. La secuencia de la presentación del contenido es predefinida y por lo general es lineal. Otro ejemplo sería una secuencia de entrada para ordenar un producto en la que debe proporcionarse información específica en un orden determinado. En tales casos, resultan apropiadas las estructuras mostradas en la Figura No. 2.2. Estructuras lineales. A medida que el contenido y los procesamientos se hacen más complejos, el flujo exclusivamente lineal que se aprecia a la izquierda de la figura da origen a estructuras lineales más complejas en las que puede invocarse contenido alternativo o en la que sucede una
Figura No. 2.2. Estructuras Lineales.(2)
19
Figura No. 2.3. Estructuras de Maya.(2)
desviaciรณn para adquirir contenido complementario (estructura que aparece en el lado derecho de la Figura No. 2.2.).
20
Las estructuras de malla (véase la Figura No. 2.3) son una opción arquitectónica que se aplica cuando es posible organizar el contenido de una webapp en forma categórica en dos (o más) dimensiones. Por ejemplo, considere una situación en la que un sitio de comercio electrónico vende palos de golf. La dimensión horizontal de la malla representa el tipo de palo (madera, metal, cuña, mazo, etc.). La dimensión vertical representa las ofertas que hacen los distintos fabricantes de palos de golf. Entonces, un usuario podría navegar por la malla en forma horizontal a fin de encontrar la columna de mazos y después en forma vertical para examinar las ofertas de los fabricantes que los venden. Esta arquitectura de webapps es útil sólo cuando se encuentra contenido muy regular. Las estructuras jerárquicas (véase la Figura No. 2.4.) son sin duda la arquitectura más común de las webapps. A diferencia de las jerarquías de software divididas y que motivan a controlar el flujo sólo a lo largo de las ramas verticales de la jerarquía, la estructura jerárquica de las webapps se diseña en forma tal que permite (por medio de la ramificación del hipertexto) que el flujo del control sea en el sentido horizontal a través de las ramas verticales de la estructura. Así, el contenido presentado en la última rama del lado izquierdo de la jerarquía puede tener vínculos de hipertexto que llevan directamente al contenido que existe en la parte media de la rama del lado derecho de la estructura. Sin embargo, debe observarse que aunque dicha ramificación permite una navegación rápida por el contenido de las webapp genera confusión para el usuario.
Figura No. 2.4. Estructura Jerárquica.(2)
21
Una estructura de red o "telaraña pura" (véase la Figura No. 2.5.) es similar en muchos sentidos a la arquitectura que evoluciona a partir de sistemas orientados a objetos. Los componentes arquitectónicos (páginas web, en este caso) se diseñan de modo que pasan virtualmente el control (por medio de vínculos de hipertexto) a cada componente del sistema. Este enfoque permite una flexibilidad considerable de navegación, pero al mismo tiempo confunde al usuario.
Figura No. 2.5. Estructura de Red o “Telaraña Pura”.(2) Las estructuras arquitectónicas estudiadas en los párrafos anteriores se combinan para formar estructuras compuestas. La arquitectura general de una webapp puede ser jerárquica pero una parte de la estructura puede tener características lineales y otra, forma de red. La meta del diseñador arquitectónico es ajustar la estructura de la webapp con el contenido que va a presentarse y con el procesamiento que va a efectuarse. Arquitectura de las webapps La arquitectura de una webapp describe una infraestructura que permite que un sistema o aplicación basados en web alcance sus objetivos empresariales. Jacyntho describe las características básicas de esta infraestructura del modo siguiente:
22
Las aplicaciones deben construirse con el empleo de capas en las que se tomen en cuenta distintas preocupaciones; en particular, deben separarse los datos de la aplicación de los contenidos de esta (nodos de navegación), y éstos, a su vez, deben separarse con toda claridad del aspecto y la sensación de la interfaz (páginas). Los autores sugieren una arquitectura del diseño en tres capas que desacopla la interfaz de la navegación y del comportamiento de la aplicación. Plantean que mantener separadas la interfaz, la aplicación y la navegación, simplifica la implementación y mejora la reutilización. La arquitectura de controlador de la vista del modelo CVM (Módulo de Validación de Credenciales) es uno de varios modelos sugeridos para la infraestructura de webapps que desacoplan la interfaz de usuario de sus funciones y contenido informativo. El modelo (a veces denominado "objeto de modelo”) contiene todo el contenido y la lógica de procesamiento específicos de la aplicación, incluso objetos de contenido, acceso a fuentes de datos o información externos y todas las funciones de procesamiento que son específicas de la aplicación. La vista contiene todas las funciones específicas de la interfaz y permite la presentación de contenido y lógica de procesamiento incluidos todos los objetos de contenido, el acceso a fuentes de datos o información del exterior y todas las funciones de procesamiento que requiere el usuario final. El controlador administra el acceso al modelo y la vista, y coordina el flujo de datos entre ellos. En una webapp, "la vista es actualizada por el controlador con datos del modelo, basándose en las entradas que da el usuario" En la Figura No. 2.6 13.8 se muestra una representación de la arquitectura CVM.
Figura 2.6. Arquitectura CVM.
23
En relación con la Figura 2.6., el controlador maneja las solicitudes o datos del usuario. El controlador también selecciona el objeto de vista que sea aplicable con base en la solicitud del usuario. Una vez determinado el tipo de solicitud, se transmite al modelo un pedido de comportamiento, que implementa la funcionalidad o recupera el contenido requerido para dar acomodo a la solicitud. El objeto de modelo accede a los datos almacenados en una base de datos corporativa, como parte de un almacén de datos locales o como una colección de archivos independientes. El objeto de vista apropiado debe dar formato y organizar los datos desarrollados por el modelo para luego trasmitirlos desde el servidor de la aplicación hacia el navegador del cliente para que se desplieguen en la máquina de éste. En muchos casos, la arquitectura de la webapp se define en el contexto del ambiente de desarrollo en el que va a implementarse la aplicación. Si el lector está interesado, puede consultar el análisis de los ambientes de desarrollo y el papel que juegan en el diseño de arquitecturas de aplicaciones web. 2.1.8 Diseño de la Navegación Una vez que la arquitectura de la webapp ha sido establecida y se han identificado sus componentes (páginas, textos, subprogramas otras funciones de procesamiento), deben definirse las rutas de navegación que permitan a los usuarios acceder al contenido y a las funciones de la webapp. Para lograr esto, debe hacerse lo siguiente: 1) identificar la semántica de navegación para los distintos usuarios del sitio y 2) definir la mecánica (sintaxis) para efectuar la navegación. Semántica de la navegación Como muchas acciones del diseño de webapps, el diseño de la navegación comienza con la consideración de la jerarquía del usuario y los casos de uso relacionados, desarrollados para cada categoría de usuario (actor). Cada actor puede usar la webapp en algo diferente, por lo que tendrán distintos requerimientos de navegación. Además, los casos de uso desarrollados por cada actor definirán un conjunto de clases que incluirán uno o más objetos de contenido o funciones de la webapp. A medida que cada usuario interactúe con la webapp, encuentra una serie de unidades semánticas de navegación (USN): "conjunto de estructuras de información y navegación relacionadas que colaboran para el cumplimiento de un subconjunto de requerimientos del usuario relacionados". Una USN está compuesta por un conjunto de elementos de navegación llamados
24
formas de navegar (FdN). Una FdN representa la mejor ruta de navegación a fin de logran una meta para un tipo de usuario específico. Cada FdN está organizada como un conjunto de nodos de navegación (NN) conectados por vínculos. En ciertos casos, un vínculo navegable es otra USN. Entonces, la estructura de navegación general de una webapp está organizada como Jerarquía de USN. Para ilustrar el desarrollo de una USN, considere el caso de uso Seleccionar Componentes de Casa Segura: Caso de uso: Seleccionar Componentes de Casa Segura. La webapp recomendará componentes del producto (como paneles de control, sensores, cámaras, etc.) y otras características (como funciones con base en PC implementadas en el software) para cada habitación y entrada exterior. Si se piden alternativas, la webapp las dará, en caso de que existan. Podré obtener información descriptiva y de precios de cada componente del producto. La webapp creará y mostrará una cuenta de los materiales conforme seleccione distintos componentes. Pondré un nombre a la cuenta de los materiales y guardarla para futuras referencias (véase el caso de Guardar Configuración). Los conceptos subrayados en la descripción del caso de uso representan clases y objetos de contenido que se incorporarán en una o más USN que permitirán que un cliente experimente el escenario descrito en el caso de uso Seleccionar Componentes de CasaSegura. La Figura No. 2.7. Semántica de Navegación. Ilustra un análisis parcial de la semántica de la navegación que implica el caso de uso Seleccionar Componentes de CasaSegura. Con el empleo de la terminología ya mencionada, la figura también representa una forma de navegación (FdeN) para la CasaSeguraAsegurada.com . Las clases importantes de dominio del problema se muestran junto con objetos seleccionados de contenido (en este caso, el paquete de objetos de o llamado DescripcióndeComponentes, atributo de la clase ComponentedelProducto). Estos conceptos son nodos de navegación. Cada flecha representa un vínculo de navegación y tiene la leyenda con la acción iniciada por el usuario que hace que el vínculo tenga lugar. Es posible crear una USN para cada caso de uso asociado con cada rol de usuario. Por ejemplo, un cliente nuevo de CasaSeguraAsegurada.com puede tener tres diferentes casos de uso (http://www.infor.iva.es/ ~chernan/Ingenieria/Teoria/Tema3D .pdf), los cuales dan como resultado el acceso a distintas funciones de información y de webapp. Se crea entonces una USN para cada meta.
25
Durante las etapas iníciales del diseño de la navegación, se evalúa la arquitectura del contenido de la webapp a fin de determinar una o más FdN para cada caso de uso. Como ya se dijo una FdN identifica los nodos de navegación (por ejemplo, contenido) y después los vínculos que permiten navegar entre ellos. Entonces, las FdN están organizadas en USN. Sintaxis de navegación Al avanzar en el diseño, la tarea siguiente es definir la mecánica de la navegación. Se dispone de varias opciones para desarrollar un enfoque de implementación para cada USN:
Figura No. 2.7. Semántica de Navegación.
• Vínculo de navegación individual: incluye vínculos basados en texto, iconos, botones e interruptores, así como metáforas gráficas. Deben elegirse vínculos que sean apropiados para el contenido y consistentes con la heurística que conduzca al diseño de una interfaz de alta calidad. • Barra de navegación horizontal: enlista las categorías principales de contenido o de funciones en una barra que contiene vínculos apropiados. En general, se enlistan de cuatro a siete categorías. • Columna de navegación vertical: 1) enlista las principales categorías de contenido o funciones o 2) enlista virtualmente todos los principales objetos de contenido que hay dentro de la webapp. Si se elige la segunda opción, las columnas
26
de navegación pueden "expandirse" para que presenten objetos de contenido como parte de una jerarquía (seleccionar una entrada en la columna original ocasiona una expansión que enlista una segunda capa de objetos de contenido relacionados). • Pestañas: metáfora que no es más que una variación de la barra o columna de navegación y representa categorías de contenido o funciones como pestañas que se seleccionan cuando se requiere un vínculo. • Mapas del sitio: dan una tabla de contenido que incluye todo el contenido a fin de navegar hacia todos los objetos y funciones contenidas dentro de la webapp. Además de elegir la mecánica de navegación, también deben establecerse las convenciones y ayudas apropiadas para navegar. Por ejemplo, los iconos y vínculos gráficos deben invitar a hacer "clic" en ellos, desvaneciendo las aristas a fin de darles una apariencia tridimensional. Debe diseñarse retroalimentación auditiva o visual con objeto de dar al usuario una indicación de que se ha escogido cierta opción de navegación. Para la navegación basada en texto debe utilizarse color que indique los vínculos de navegación y que señale aquéllos ya recorridos. Éstas son unas cuantas convenciones entre las decenas que hay para el diseño y que hacen que la navegación sea amigable para el usuario. 2.1.9 Método de Diseño de Hipermedios Orientados a Objetos En la última década, se han propuesto varios métodos de diseño para aplicaciones web. Hasta hoy, ninguno de ellos es el dominante. En esta sección se presenta un panorama breve de los métodos de diseño de webapps más estudiado. Daniel Schwabe propusieron por primera vez el Método de diseño de Hipermedios Orientado a Objetos (MDHOO - http://www.portaleducativo.hn/pdf/AplicandoModelos ProcesosSoftwareHipermedia.pdf), que está compuesto de cuatro distintas actividades de diseño: diseño conceptual, diseño de navegación, diseño abstracto de la interfaz e implementación. Diseño conceptual del MDHOO El diseño conceptual del MDHOO genera una representación de los subsistemas, clases y relaciones que definen el dominio de aplicación para la webapp. Se puede utilizar UML12 para crear diagramas de clase apropiados, agregaciones y representaciones compuestas de clase más de colaboración y otra clase de información que describa el dominio de la aplicación es ejemplo sencillo del diseño
27
conceptual del MDHOO, piense en la aplicación de comercio electrónico CasaSeguraAsegurada.com. Durante el diseño conceptual se reutilizan los diagramas de clase, agregaciones e información desarrollada como parte del análisis de la webapp, con objeto de representar las relaciones entre clases. Diseño de la navegación para el MDHOO El diseño de la navegación identifica un conjunto de "objetos" que se derivan de las clases definidas en el diseño conceptual. Para incluir éstos, se define una serie de "clases de navegación" o "nodos". Se utiliza UML para crear casos de uso, tablas de estado y diagramas de secuencia apropiados; todas éstas son representaciones que ayudan a entender mejor los requerimientos de la navegación. Además, conforme se desarrolla el diseño, se utilizan patrones para el diseño de la navegación. El MDHOO emplea un conjunto predefinido de clases de navegación: nodos, vínculos, anclas y estructuras de acceso. Estas últimas son más elaboradas e incluyen mecanismos tales como un índice de la webapp, mapa del sitio o recorrido guiado. Una vez definidas las clases de navegación, el MDHOO "estructura el espacio de navegación, agrupando los objetos de navegación en conjuntos llamados contextos". Un contexto incluye la descripción de la estructura de navegación local, la restricción impuesta al acceso de los objetos de contenido y los métodos (operaciones) requeridos para acceder a los objetos de contenido. Se desarrolla una plantilla contextual (análoga a las tarjetas CRC http://es.wikipedia.org/wiki/Tarjetas_CRC) que se emplea para dar seguimiento a los requerimientos de navegación de cada categoría de usuario a través de los distintos contextos definidos en el MDHOO. Al hacer esto, surgen trayectorias específicas de navegación (que llamamos FdN). Diseño abstracto de la interfaz y su implementación La acción de diseño abstracto de la interfaz especifica los objetos de la interfaz que el usuario ve cuando ocurre una interacción con la webapp. Se emplea un modelo formal de objetos de interfaz, llamado vista de datos abstractos (VDA http://es.wikipedia.org/wiki/Tipo_de_dato_abstracto), para representar la relación entre objetos de interfaz y de navegación, así como las características de comportamiento de los objetos de interfaz El modelo VDA define una "plantilla estática" que representa la metáfora de la interfaz e incluye una representación de los objetos de navegación dentro de la
28
interfaz y la especificación de los objetos de ésta (como menús, botones e iconos) que ayudan a la navega a la interacción. Además, el modelo VDA contiene un componente de comportamiento (diagrama de estado UML) que indica la forma en la que los eventos "disparan la navegación y cuáles son las transformaciones de la interfaz que ocurren cuando el usuario interactúa la aplicación". La actividad de implementación MDHOO del diseño especifica del ambiente en el que opera la webapp. Las clases, navegación e interfaz se caracterizan cada una en forma tal que pueden construirse para el ambiente cliente-servidor, sistemas operativos software de apoyo, lenguajes de programación, y otras características ambientales que son relevantes para el problema. (2)
29