La interfaz de usuario es presumiblemente el elemento más importante de un
sistema o producto basado en computadora. Si la interfaz estuviera mal diseñada, afectaría mucho la capacidad del usuario de aprovechar el poder computacional y el contenido de información de una aplicación. En realidad, una interfaz defectuosa haría que fallara incluso una aplicación bien diseñada y con buena implementación. Son tres los principios importantes que guían el diseño de interfaces eficaces: 1) dar el control al usuario, 2) reducir la memorización del usuario y 3) hacer que la interfaz sea consistente. Para lograr que una interfaz cumpla estos principios, debe llevarse a cabo un proceso de diseño bien organizado. El desarrollo de una interfaz de usuario comienza con una serie de tareas de análisis. El análisis del usuario define los perfiles de distintos usuarios finales y proviene de varias fuentes comerciales y técnicas. El análisis de la tarea define las tareas y acciones del usuario por medio de un enfoque de elaboración o bien otro orientado a objetos, la aplicación de casos de uso, elaboración de tareas y objetos, análisis del flujo de trabajo y representaciones jerárquicas de la tarea para entender bien la interacción humano-computadora. El análisis ambiental identifica las estructuras físicas y sociales en las que debe operar la interfaz. Una vez definidas las tareas, se crean y analizan escenarios de usuario para definir un conjunto de objetos y acciones de la interfaz. Esto da una base para la creación de la distribución de la pantalla que ilustre el diseño gráfico y la colocación de los iconos, la definición de un texto descriptivo en la pantalla, la especificación y apilamiento de las ventanas y la especificación de los temas principales y secundarios del menú. A medida que se refina el modelo del diseño, se consideran aspectos tales como tiempo de respuesta, estructura de comandos y acciones, manejo de errores y herramientas de ayuda. Para construir un prototipo a fin de que lo evalúe el usuario, se utilizan varias herramientas de implementación. Igual que el diseño de la interfaz para el software convencional, el correspondiente a webapps describe la estructura y organización de la interfaz de usuario e incluye una representación de la distribución de la pantalla, la definición de los modos de interacción y la descripción de mecanismos de navegación. Un conjunto de principios de diseño de la interfaz y del flujo de los trabajos respectivos guía al diseñador de webapp cuando hace la distribución y cuando diseña los mecanismos de control de la interfaz. La interfaz de usuario es la ventana hacia el software. En muchos casos, moldea la percepción del usuario respecto de la calidad del sistema. Si la “ventana” está manchada, ondulante o rota, el usuario puede rechazar un sistema basado en computadora que, en lo demás, sería poderoso. RESUMEN – DISEÑO EN EL NIVEL DE COMPONENTES
El proceso de diseño en el nivel de componentes incluye una secuencia de
actividades que reduce poco a poco el nivel de abstracción con el que se representa el software.
El diseño en el nivel de componentes ilustra en definitiva al software en un nivel de
abstracción cercano al código. Es posible adoptar tres puntos de vista diferentes en el nivel de diseño, en función de la naturaleza del software que se va a desarrollar.
El enfoque orientado a objetos se centra en la elaboración de clases de diseño
que provienen tanto del dominio del problema como de la infraestructura. El punto de vista tradicional mejora tres tipos diferentes de componentes o módulos: los de control, los del dominio del problema y los de la infraestructura. En ambos casos se aplican los principios y conceptos básicos del diseño que llevan a un software de alta calidad. Cuando se considera al diseño en el nivel de componentes desde un punto de vista del proceso, se llega a componentes de software reutilizables y a patrones de diseño que son elementos cruciales de la ingeniería de software basada en componentes. Conforme se elaboran las clases, varios principios y conceptos importantes guían al diseñador.
Las ideas agrupadas en el Principio Abierto-Cerrado y en el Principio de Inversión
de la Dependencia, así como conceptos tales como el acoplamiento y la cohesión, guían al ingeniero de software en la construcción de componentes de software susceptibles de someterse a prueba, implantarse y recibir mantenimiento.
Para hacer el diseño en el nivel de componentes en este contexto, se elaboran las
clases especificando detalles de la mensajería, identificando las interfaces apropiadas, elaborando atributos y definiendo estructuras de datos que las implementen, describiendo el flujo del procesamiento dentro de cada operación y representando el comportamiento en el nivel de clase o componente. Una actividad esencial en cada caso es el diseño iterativo (rediseñar).
El diseño tradicional en el nivel de componentes requiere la representación de
estructuras de datos, interfaces y algoritmos para un módulo de programa con detalle suficiente para guiar la generación del código fuente del lenguaje de programación. A fin de lograr esto, el diseñador usa una de varias notaciones de diseño que representan los detalles en el nivel de componente en un formato gráfico, tabular o basado en texto. El diseño en el nivel de componentes para webapps considera tanto el contenido como la funcionalidad tal como es entregada por un sistema basado en web. El diseño del contenido en el nivel de componentes se centra en objetos de contenido y en la manera en la que se empacan para su presentación en una webapp al usuario final. El diseño funcional para las webapps se centra en funciones de procesamiento que manipulan contenido, realizan cálculos, consultan y acceden a una base de datos y establecen interfaces con otros sistemas. Se aplican todos los principios y lineamientos del diseño en el nivel de componentes. La programación estructurada es una filosofía de diseño orientado al procedimiento que limita el número y tipo de construcciones lógicas usadas para representar los detalles algorítmicos. El objetivo de la programación estructurada es auxiliar al diseñador en la definición de algoritmos que sean menos complejos y por ello más fáciles de leer, probar y mantener. La ingeniería de software basada en componentes identifica, construye, cataloga y disemina un conjunto de componentes de software en un dominio particular de aplicación. Después, estos componentes se califican, adaptan e integran para usarlos en un sistema nuevo.
Los componentes reutilizables deben diseñarse dentro de un ambiente que
establezca para cada dominio de aplicación estructuras de datos estándar, protocolos de interfaz y arquitecturas de programa.