lunes, 18 de junio de 2012

CICLO DE VIDA DEL SOFTWARE




El término ciclo de vida del software describe el desarrollo de software, desde la fase inicial hasta la fase final. El propósito de este programa es definir las distintas fases intermedias que se requieren para validar el desarrollo de la aplicación, es decir, para garantizar que el software cumpla los requisitos para la aplicación y verificación de los procedimientos de desarrollo: se asegura de que los métodos utilizados son apropiados.

El ciclo de vida básico de un software consta de los siguientes procedimientos:

· Definición de objetivos: definir el resultado del proyecto y su papel en la estrategia global.
· Análisis de los requisitos y su viabilidad: recopilar, examinar y formular los requisitos del cliente y examinar cualquier restricción que se pueda aplicar.
· Diseño general: requisitos generales de la arquitectura de la aplicación.
· Diseño en detalle: definición precisa de cada subconjunto de la aplicación.
· Programación (programación e implementación): es la implementación de un lenguaje de programación para crear las funciones definidas durante la etapa de diseño.
· Prueba de unidad: prueba individual de cada subconjunto de la aplicación para garantizar que se implementaron de acuerdo con las especificaciones.
· Integración: para garantizar que los diferentes módulos se integren con la aplicación. Éste es el propósito de la prueba de integración que está cuidadosamente documentada.
· Prueba beta (o validación), para garantizar que el software cumple con las especificaciones originales.
· Documentación: sirve para documentar información necesaria para los usuarios del software y para desarrollos futuros.
· Implementación
· Mantenimiento: para todos los procedimientos correctivos (mantenimiento correctivo) y las actualizaciones secundarias del software (mantenimiento continuo).

El orden y la presencia de cada uno de estos procedimientos en el ciclo de vida de una aplicación dependen del tipo de modelo de ciclo de vida acordado entre el cliente y el equipo de desarrolladores.

ETAPAS DEL CICLO DE VIDA DEL SOFTWARE

El ciclo de vida clásico del software siendo uno de los más utilizados tal como lo plantean diferentes autores, está conformado en su versión ampliada por siete etapas que se pueden representar mediante un modelo en cascada así:


INGENIERÍA DE SISTEMAS: En esta etapa el analista luego de un minucioso y detallado estudio de los sistemas de una organización, detecta un problema o una necesidad que para su solución y/o satisfacción es necesario realizar un desarrollo de software.

ANÁLISIS: En esta etapa se debe entender y comprender de forma detallada cual es la problemática a resolver, verificando el entorno en el cual se encuentra dicho problema, de tal manera que se obtenga la información necesaria y suficiente para afrontar su respectiva solución. Esta etapa es conocida como la del QUÉ se va a solucionar.

DISEÑO: Una vez que se tiene la suficiente información del problema a solucionar, es importante determinar la estrategia que se va a utilizar para resolver el problema. Esta etapa es conocida bajo el CÓMO se va a solucionar.

IMPLEMENTACIÓN: partiendo del análisis y diseño de la solución, en esta etapa se procede a desarrollar el correspondiente programa que solucione el problema mediante el uso de una herramienta computacional determinada.

PRUEBAS: Los errores humanos dentro de la programación de los computadores son muchos y aumentan considerablemente con la complejidad del problema.

Cuando se termina de escribir un programa de computador, es necesario realizar las debidas pruebas que garanticen el correcto funcionamiento de dicho programa bajo el mayor número de situaciones posibles a las que se pueda enfrentar.

DOCUMENTACIÓN: Es la guía o comunicación escrita en sus diferentes formas, ya sea en enunciados, procedimientos, dibujos o diagramas que se hace sobre el desarrollo de un programa. La importancia de la documentación radica en que a menudo un programa escrito por una persona, es modificado por otra. Por ello la documentación sirve para ayudar a comprender o usar un programa o para facilitar futuras modificaciones (mantenimiento).

La documentación se compone de tres partes:

a.    Documentación Interna: Son los comentarios o mensajes que se añaden al código fuente para hacer más claro el entendimiento de los procesos que lo conforman, incluyendo las precondiciones y las pos condiciones de cada función.

b. Documentación Externa: Se define en un documento escrito con los siguientes puntos:

Descripción del Problema

Datos del Autor

Algoritmo (diagrama de flujo o Pseudocódigo)

Diccionario de Datos

Código Fuente (programa)

c. Manual de Usuario: Describe paso a paso la manera cómo funciona el programa, con el fin de que el usuario lo pueda manejar para que obtenga el resultado deseado.

MANTENIMIENTO: una vez instalado un programa y puesto en marcha para realizar la solución del problema previamente planteado o satisfacer una determinada necesidad, es importante mantener una estructura de actualización, verificación y validación que permitan a dicho programa ser útil y mantenerse actualizado según las necesidades o requerimientos planteados durante su vida útil. Para realizar un adecuado mantenimiento, es necesario contar con una buena documentación del mismo.

Para terminar de entender la problemática en la cual se desarrolla este libro es importante tener unos conceptos claros y precisos de lo que es el Análisis y el Diseño de Algoritmos.

SOFTWARE EDUCATIVO

Ingeniería del Software Educativo

Se denomina software educativo al destinado a la enseñanza y el aprendizaje autónomo y que, además, permite el desarrollo de ciertas habilidades cognitivas.

Así como existen profundas diferencias entre las filosofías pedagógicas, así también existe una amplia gama de enfoques para la creación de software educativo, atendiendo a los diferentes tipos de interacción que debería existir entre los actores del proceso de enseñanza-aprendizaje: educador, aprendiz, conocimiento, computadora.

Existen muchos programas para trabajar en la computadora para afianzar el aprendizaje. El trabajo en equipo de profesionales de la informática, ha permitido crear programas para computadoras, que no solo facilitan el trabajo, sino que también sirven para entretener y educar.
Estos programas forman parte del software educativo, denominada en algunos casos como Instrucción Asistida por Computadora o Multimedia Educativa, utilizada como una herramienta instruccional o de enseñanza, que acompañada con un material adecuado que permite guiar a estudiantes a alcanzar un nivel educativo adaptado a sus necesidades.

Clasificación de los diferentes tipos de software educativo

Bajo este nombre (abreviado MEC “MATERIAL EDUCATIVO COMPUTARIZADO”) se agrupan diversos tipos de aplicaciones encaminados a apoyar el aprendizaje.

Una referencia bastante apropiada es "Ingeniería de Software Educativo" de Álvaro Galvis (Galvis, 94), de donde se ha tomado la clasificación que se presenta. Una primera clasificación de herramientas y materiales para asistir el aprendizaje los divide en algorítmicos y heurísticos. En los materiales algorítmicos predomina el aprendizaje vía transmisión de conocimiento desde quien sabe hacia quien lo desea aprender; quien diseña la herramienta planea secuencias de actividades  para conducir al estudiante; el rol de alumno es asimilar el máximo de lo que se le transmite. Por otra parte en los materiales heurísticos predomina el aprendizaje por experimentación y descubrimiento; el diseñador crea ambientes ricos en situaciones que el alumno debe explorar; el alumno debe llegar al conocimiento a partir de la experiencia, creando sus propios modelos de pensamiento, sus propias interpretaciones del mundo, las cuales puede someter a prueba con la herramienta. Tal clasificación puede refinarse aún más:

TIPO ALGORÍTMICO

Predomina el aprendizaje vía transmisión de conocimiento, desde quien sabe, hacia quien lo desea aprender y donde el diseñador se encarga de encapsular secuencias bien diseñadas de actividades de aprendizaje que conducen al interesado desde donde está hasta donde se desea llegar; el papel del usuario es asimilar al máximo de lo que se transmite. Dentro de este tipo se encuentran:

SISTEMAS TUTORIALES

Incluye cuatro fases que deben formar parte de todo proceso de enseñanza-aprendizaje:

La fase Introductoria, en la que se genera la motivación, se centra la atención y se favorece la percepción selectiva de lo que se desea que el usuario aprenda. La fase de orientación inicial en la que se da la codificación, almacenaje y retención de lo aprendido. La fase de aplicación en la que hay evocación y transferencia de lo aprendido. La fase de Retroalimentación en la que se de muestra lo aprendido, ofrece retroinformación y esfuerzo o refuerzo.

SISTEMAS DE EJERCITACIÓN Y PRÁCTICA

Refuerzan las dos fases finales del proceso de instrucción: aplicación y retroalimentación. Se parte de la base que el usuario tiene un conocimiento previo del tema relacionado con el software final. Donde el software le servirá para probar sus destrezas y conocimientos adquiridos previamente. Estos sistemas sirven como motivación y refuerzo para el usuario.

TIPO HEURÍSTICO

Predomina el aprendizaje experimental y por descubrimiento, donde el diseñador crea ambientes ricos en situaciones que el usuario debe explorar conjeturablemente. El usuario debe llegar al conocimiento a partir de experiencias, creando sus propios modelos de pensamiento, sus propias interpretaciones del mundo. Pertenecen a este grupo:

SIMULADORES Y JUEGOS EDUCATIVOS

Ambos poseen la cualidad de apoyar el aprendizaje de tipo experimental conjetural, como base para lograr aprendizaje por descubrimiento. La Interacción con un micromundo, en forma semejante a la que se tendría en una situación real, es la fuente del conocimiento; el usuario resuelve problemas, aprende procedimientos, llega a entender las características de los fenómenos y cómo controlarlos, o aprende qué acciones tomar en diferentes circunstancias. Lo esencial en ambos casos es que el usuario es un agente necesariamente activo que, además de participar en la situación debe continuamente procesar la información que el micromundo le proporciona en forma de situación problemática, condiciones de ejecución y resultado.

MICROMUNDOS EXPLORATORIOS Y LENGUAJE SINTÓNICO

Una forma particular de interactuar con micromundos es haciéndolos con ayuda de un lenguaje de computación, en particular si es de tipo sinfónico con sus instrucciones y que se puede usar naturalmente para interactuar con un micromundo en el que los comandos sean aplicables.

SISTEMAS EXPERTOS

Capaces de representar y razonar acerca de algún dominio rico en conocimientos, con el ánimo de resolver problemas y dar consejos a quienes no son expertos en la materia. Además, de demostrar gran capacidad de desempeño en términos de velocidad, precisión y exactitud, tiene como contenido un dominio de conocimientos que requiere gran cantidad de experiencia humana, no solo principios o reglas de alto nivel, y que es capaz de hallar o juzgar la solución de algo, explicando o justificando lo que haya o lo que juzgue; de modo que es capaz de convencer al usuario que su racionamiento es correcto.

· Los sistemas tutoriales pueden presentar las cuatro fases del aprendizaje, y resultan particularmente útiles cuando se requiere alta motivación, retroalimentación inmediata, ritmo propio y secuencia controlable por el usuario parcial o totalmente.
· Los sistemas de ejercitación y práctica permiten reforzar las dos fases finales del proceso de instrucción: aplicación y retroalimentación por medio de ejercicios tradicionales.
· Los simuladores pretenden apoyar el aprendizaje por medio de experimentos, de forma que el estudiante descubra conceptos en un micromundo semejante a una situación real. En este tipo de MEC, que puede emplearse en cualquier de las cuatro fases, el alumno es agente activo.
· Los juegos educativos, al igual que los simuladores apoyan el aprendizaje semejando situaciones, sin embargo, en la simulación se trata de situaciones reales mientras que esto no se da necesariamente en los juegos, además en éstos se dan situaciones excitantes o entretenidas.

Los micromundos exploratorios, emplean un lenguaje de programación sintónico, es decir no hay que aprenderlo, simplemente se está sintonizado con sus instrucciones y se emplea para interactuar en un micromundo. La diferencia básica con los simuladores es que además de exigir la solución de problemas, la exige de forma estructurada (es decir, una que conlleve división de problemas en subproblemas). Por esta razón, los lenguajes sintónicos permiten el desarrollo de estrategias para solución de problemas.

Los sistemas expertos son sistemas capaces de representar y razonar acerca de algún dominio rico en conocimientos, con el ánimo de resolver problemas y dar consejo a quienes no son expertos en la materia. Estos sistemas además de demostrar gran capacidad de desempeño en términos de velocidad, precisión y exactitud, cuentan con una base de conocimientos construida a partir de experiencia humana. Con la base de conocimientos y con reglas de alto nivel es capaz de hallar o juzgar la solución a algo, explicando o justificando lo que halla o lo que juzga, de modo que es capaz de convencer al usuario de que su razonamiento es correcto.

· Un sistema Tutorial Inteligente presenta un comportamiento "inteligentemente" adaptativo, es decir, adapta el tratamiento educativo en función de aquello que se desea aprender y de las características y desempeño del aprendiz. Además de tener los componentes típicos de un sistema experto (base de conocimiento, motor de inferencia, hechos e interfaz con usuario) hay un "modelo de estudiantes" donde se plasman sus conocimientos, habilidades y destrezas y un "módulo de interfaz" capaz de ofrecer distintos tipos de ambiente de aprendizaje a partir de las cuales se puede llegar al conocimiento buscado.

Metodología para la evaluación y desarrollo del software educativo.

En esencia se conservan los grandes pasos o etapas de un proceso sistemático para desarrollo de materiales (análisis, diseño, desarrollo, prueba y ajuste, implementación). Sin embargo, en este caso se da particular énfasis a los siguientes aspectos: la solidez del análisis, como punto de partida; el dominio de teorías sustantivas sobre el aprendizaje y la comunicación humanas, como fundamento para el diseño de los ambientes educativos computarizados; la evaluación permanente y bajo criterios predefinidos, a lo largo de todas las etapas del proceso, como medio de perfeccionamiento continuo del material; la documentación adecuada y suficiente de lo que se realiza en cada etapa, como base para el mantenimiento que requerirá el material a lo largo de su vida útil.

La anterior explicación permite entender la razón de ser del doble ciclo, para selección o desarrollo de MECs, que ha propuesto Galvis como metodología básica de trabajo y que se ilustra en la siguiente Figura.


El punto de partida de ambos ciclos es la identificación de necesidades educativas reales que conviene atender con material educativo computarizado. Dependiendo del resultado final de esta etapa, se procede en el sentido contrario al avance de las manecillas del reloj, cuando se trata de seleccionar un MEC; pero en el mismo sentido del avance de las manecillas, si conviene efectuar su desarrollo.

En cualquiera de los dos ciclos, una vez que se dispone de un MEC, se requiere evaluarlo con un grupo piloto de alumnos que pertenezca a la población objeto, bajo las condiciones para las cuales está diseñado. Esta es la base para decidir si el MEC debe llevarse a la práctica en gran escala, o para echar pie atrás, rediseñarlo, ajustarlo o desecharlo. Durante su implementación también es importante que se evalúe el MEC, de modo que se pueda establecer la efectividad real del material, éste es el sentido de la prueba de campo.

Las metodologías persiguen tres necesidades principales:

· Mejores aplicaciones, conducentes a una mejor calidad.
· Un proceso de desarrollo controlado.
· Un proceso normalizado en una organización, no dependiente del personal.

1.      Los procesos se descomponen hasta el nivel de tareas o actividades elementales, donde cada tarea está identificada por un procedimiento que define la forma de llevarla a cabo. Para aplicar un procedimiento se pueden usar una o más técnicas, pudiendo ser gráficos con textos.


1. CARACTERÍSTICAS Y CLASIFICACIÓN DE LAS METODOLOGÍAS

Se pueden enumerar una serie de características [Piattini, 1996] que debe tener la metodología y que influirán en el entorno de desarrollo:

· Reglas predefinidas
· Determinación de los pasos del ciclo de vida
· Verificaciones en cada etapa
· Planificación y control
· Comunicación efectiva entre desarrolladores y usuarios.
· Flexibilidad: aplicación en un amplio espectro de casos
· De fácil comprensión
· Soporte de herramientas automatizadas.
· Que permita definir mediciones que indiquen mejoras
· Que permita modificaciones
· Que soporte reusabilidad del software

3. El ciclo de vida y los procesos del software educativo.

Todo proyecto tiene asociado, por más pequeño que éste sea, pasos que se deben seguir tales como: planificación, estimación de recursos, seguimiento y control, y evaluación del proyecto. La selección de un modelo de ciclo de vida está asociada a un orden en la realización de las actividades a desarrollar. La red de actividades, es la que permitirá establecer a partir de la matriz de precedencia el camino crítico, como la secuencia de tareas más larga de principio al fin. El diagrama de Gantt, o los diagramas calendario permitirán establecer el estado del proyecto en un determinado momento a partir de su inicio, en cuanto a recursos se refiere. Para estimar el tamaño del producto o del programa a desarrollar, definido como la cantidad de código fuente, especificaciones, casos de prueba, documentación del usuario y otros productos, que han de ser desarrollados, se debe recurrir a datos estadísticos propios o no. La estimación consiste en la predicción del personal, el esfuerzo y el costo asociado para llevar a cabo todas las actividades del mismo.

1.    ¿CUÁLES SON LOS ELEMENTOS QUE INTERVIENEN EN EL CICLO DE VIDA DE UN SISTEMA?



2. La planificación de la gestión proyecto

Se la puede describir en términos de, las actividades a realizar, los documentos de salida y de las técnicas a utilizar.


Planificación de la gestión del proyecto


    Actividades a realizar
Confeccionar el mapa de actividades para el modelo
elegido del ciclo de vida, asignar de los recursos,
definir el proyecto, planificar la gestión
    Documentos de salida
Plan de gestión, plan de retiro

       Técnicas a utilizar
CPM, PERT, diagrama de Gantt, estadísticas,
simulación (Montecarlo), puntos funcionales, Modelos
de estimación (COCOMO), Técnicas de
descomposición para estimación.

La identificación de la necesidad

La identificación de una necesidad, enunciada en términos concretos, es el punto de partida para la puesta en marcha de un proyecto y la evaluación de las posibles soluciones dará la viabilidad del mismo.


Identificación de la necesidad


 Actividades a realizar
Identificar necesidades, formular posibles soluciones y estudiar su viabilidad.

    Documentos de salida
Informe de necesidades. Alternativas de solución.
Soluciones factibles

       Técnicas a utilizar
De adquisición de conocimientos, análisis costo beneficio,
modelización, diagramas de flujos de datos, prototipado
.


El proceso de especificación de los requisitos
Consiste en establecer de un modo conciso, claro y preciso el conjunto de requisitos que deben ser satisfechos por el software a desarrollar. El objetivo es  determinar en forma total y consistente los requisitos de software. El análisis se realiza sobre la salida resultante, la descomposición de los datos, el procesamiento de los mismos, las bases de datos y las interfaces de usuario. (J. Juzgado, 1996). (ver Tabla 3.7). Se debe considerar que un requisito es una condición o característica que debe tener el programa para satisfacer un documento formal.

Estos requisitos pueden ser funcionales, de rendimiento o de interfaces. Los primeros especifican la función que el programa debe realizar, los segundos especifican una característica numérica y los últimos determinan las características de las interfaces, usuario-software, software-hardware y software- software. (Juzgado, 1996).


Especificación de requisito


 Actividades a realizar
Definir y desarrollar los requisitos del software y de las
interfaces
    Documentos de salida
Especificación de los requisitos del software, requisitos de interfaces de usuario, de interfaces con otro software y con hardware. Requisitos de interfaces con el medio.

     


 Técnicas a utilizar
Técnicas orientadas a los procesos: Análisis estructurado: diagramas de flujo de datos (DFD), diccionario de datos (DD), especificación de procesos.
Diagramas de actividades. Técnicas orientadas a los datos: Diagramas entidad relación y diagramas de datos.
Técnicas orientadas a los objetos. Diagramas de
clases/objetos Jerarquía de clases/objetos

Técnicas formales de especificación: Técnicas relacionales: ecuaciones implícitas, relaciones recurrentes, axiomas algebraicos. Técnicas orientadas al estado: tablas de decisión, de eventos, de transición, mecanismos de estado finitos, etc. Técnicas de prototipación

El proceso de diseño

El proceso de diseño es la piedra angular para la obtención de un producto coherente que satisfaga los requisitos de software. El diseño desde el punto de vista técnico comprende cuatro tipos de actividades: diseño de datos, arquitectónico, procedimental y diseño de interfaces y desde el punto de vista del proyecto evoluciona desde un diseño preliminar al diseño detallado.

El diseño de datos, modela las estructuras de datos necesarias para el desarrollo, el arquitectónico define las relaciones entre las estructuras del programa, considerando el desarrollo de módulos que se relacionan, mezcla la estructura de programas y de datos, y define las interfaces. El diseño procedimental transforma estructuras en descripción procedimental del software y por último el diseño de interface establece los mecanismos de interacción humano-computadora.

Este proceso de diseño, es la correcta traducción de los requisitos de software en un producto. (ver Tabla 3.8).

Se deben aplicar algunos principios conducentes a un software de calidad, tales como:
− Abstracción.
− Refinamiento sucesivo.
− Modularidad (consiste en la división en forma lógica de elementos en funciones y subfunciones).
− Estructura jerárquica en módulos con control entre componentes.
− Estructura de los datos.
− Procedimientos por capas funcionales.
− Ocultamiento de la información, etc., aplicación de métodos sistemáticos y una revisión constante.

Proceso de diseño


 Actividades a realizar
Realizar el diseño arquitectónico, analizar el flujo de información, diseñar la base de datos, diseñar las interfaces, desarrollar los algoritmos, realizar el diseño detallado.
   
Documentos de salida
Descripción del diseño del software de la arquitectura del software, del flujo de información, descripción de la base de datos, de las interfaces, de los algoritmos.

      






Técnicas a utilizar
Descripción del diseño del software de la arquitectura del software, del flujo de información, descripción de la base de datos, de las interfaces, de los algoritmos.

Técnicas orientadas a los procesos: diseño estructurado, diálogo de las interfaces, diseño lógico, HIPO (Hierarchy Input Process Output).

Técnicas orientadas a los datos. Modelo lógico y físico de datos. Jackson, etc.

Técnicas orientadas a los objetos: Modelo clase/objeto, diagrama de módulos.
Técnicas de bajo nivel:
Programación estructurada: diagramas de árbol
Programación orientada a objetos: diagrama de
procesos
Técnicas de prototipación,
Técnicas de refinamiento,


El proceso de implementación

Este proceso (ver Tabla 3.9), produce código fuente, código de la base de datos y documentación, de base de acuerdo a los estándares utilizados. La salida de este proceso  conduce a las pruebas de validación y verificación.

Proceso de implementación


 Actividades a realizar
Crear los datos de prueba, crear código fuente, generar el código fuente, crear la documentación, planificar y realizar la integración de módulos.
   
Documentos de salida
Datos de prueba, documentación del sistema y del usuario. Plan de integración.
Técnicas a utilizar
Lenguajes de programación. Jackson

El proceso de instalación
Este proceso se centra en la verificación de la implementación adecuada del software y en la conformidad del cliente, previa prueba de aceptación (Tabla 3.10).

Proceso de instalación


 Actividades a realizar
Planificar la instalación, instalar el software, cargar la base de datos, realizar las prueba de aceptación..
   
Documentos de salida
Plan de instalación del software e informe de
instalación

Los procesos de mantenimiento y retiro

El proceso de mantenimiento se centra en el cambio asociado a los errores detectados, fallas, mejoras solicitadas y cambios. Se lo considera como una vuelta a la aplicación del ciclo de vida pero con un software existente como iteraciones de desarrollo.

Los tipos de mantenimiento pueden ser: correctivos, ante defectos encontrados, adaptativos, o sea, cambios del software de acuerdo al cambio en el entorno y de mejoras, con agregado de funciones adicionales.

Procesos de
Mantenimiento
Retiro

Actividades a realizar

Reaplicar el ciclo de vida.

Notificar al usuario, realizar las operaciones en paralelo y retirar el sistema.

Documentos de salida
Orden de mantenimiento Y recomendaciones de mantenimiento

Plan de retiro


El proceso de verificación y validación

Las tareas que abarca son las siguientes: pruebas de verificación, revisiones y auditoría e incluye las tareas de validación y pruebas de validación que se realizan durante el ciclo de vida del software para asegurar la satisfacción con los requisitos.

Para la verificación y validación del software, cuando ya exista código ejecutable, se pueden realizar las pruebas del mismo que consisten en ejecutar el software con determinados datos de entrada y producir resultados que luego serán comparados con los teóricos.

Un proceso asociado a las pruebas, es la depuración que consiste en tratar de deducir dónde están localizados los defectos en el software que hacen que este no funcione correctamente. (ver Tabla 3.12).
Procesos de verificación y de validación


 Actividades a realizar
Planificar y ejecutar las tareas de verificación y validación.
Recoger y analizar los datos de las métricas, planificar las pruebas, desarrollar las especificaciones de las pruebas y ejecutarlas.
   
Documentos de salida
Plan de verificación y validación. Informes de evaluación. Plan de pruebas.
Especificación de las pruebas. Resultados de las pruebas.
Técnicas a utilizar
Técnicas de prueba de caja blanca:
Técnicas de prueba de caja negra:
Revisiones formales.
Auditorías.


Los procesos de desarrollo de la documentación y de formación

Este proceso permite planificar, diseñar, implementar, editar, producir, distribuir y mantener los documentos para los desarrolladores y los usuarios.

Para una utilización efectiva del sistema se debe proporcionar al usuario las instrucciones y guías necesarias acerca del uso del software y de sus limitaciones.

Es un punto fundamental la formación del usuario en el sistema. También es importante la formación de los desarrolladores y soporte técnico.

Procesos de
Mantenimiento
Retiro


Actividades a realizar


Planificar e implementar
La documentación, producir y distribuirla documentación
Planificar el programa de formación.
Desarrollar materiales de formación.
Validar e implementar el programa.

Documentos de salida


Plan de documentación

Plan de formación









EL SOFTWARE


1.1.        

El software no es sólo código, sino también las especificaciones del diseño, los datos tratados y la documentación que permite el desarrollo, instalación y mantenimiento. Estrictamente, se puede definir como Instrucciones que, cuando se ejecutan, proporcionan la funcionalidad deseada. Estructuras de datos que facilitan a las instrucciones manipular adecuadamente la información. Documentos que describen el desarrollo, uso, instalación y mantenimiento de los programas.

1.2. DEFINICIONES

Definición 1: Ingeniería del Software es el estudio de los principios y metodologías para desarrollo y mantenimiento de sistemas de software [Zelkovits, 1978].

Definición 2: Ingeniería del Software es la aplicación práctica del conocimiento científico en el diseño y construcción de programas de computadora y la documentación necesaria requerida para desarrollar, operar(funcionar) y mantenerlos [Bohem, 1976].

Definición 3: Ingeniería del Software trata del establecimiento de los principios y métodos de la Ingeniería a fin de obtener software de modo rentable que sea fiable y trabaje en máquinas reales [Bauer, 1972].

Definición 4: La aplicación de un enfoque sistemático, disciplinado y cuantificable al desarrollo, operación (funcionamiento) y mantenimiento del software; es decir, la aplicación de Ingeniería al software [IEEE, 1993].

1.3. CARACTERÍSTICAS DEL SOFTWARE

v El software presenta varias características.
v Es un elemento lógico, no físico, en contraposición con el hardware.
v Se desarrolla, no se fabrica. La fabricación consiste fundamentalmente en ensamblar componentes, punto al que no se ha llegado ni siquiera con la programación orientada a objetos.
v No se estropea, se deteriora. Con el tiempo, el hardware se va estropeando por la presencia de componentes físicos. El software, al carecer de ellos, se deteriora, no estropea, aumentando el mantenimiento que necesita. Es el caso, por ejemplo, del llamado _código heredado_.
v El número de fallos sigue una curva teórica en la que, en la denominada fase inicial inmediatamente posterior a la implantación, se detectan muchos fallos que, con el tiempo, se van corrigiendo, de forma que cada vez se detectan menos. Aun así, sigue siendo necesario un mantenimiento para corregirlos, especialmente cuando existe un gran volumen de cambios, como sucede en el software de gestión.
v Pero en la realidad, cada vez que se resuelven un número determinado de errores se publica una nueva versión sobre la que se detectan más, y, después de aparecer varias, la curva real supera bastante a la teórica, necesitando cada vez más mantenimiento.
v La mayoría se construye a medida en vez de ensamblar componentes existentes.

1.4. LA INGENIERÍA DEL SOFTWARE: DEFINICIONES, ELEMENTOS Y OBJETIVOS GENERALES

La Ingeniería del Software estudia dicho métodos, técnicas, etc., para resolver el problema del desarrollo del software, y se puede definir de la siguiente forma: La Ingeniería del Software es una disciplina que integra métodos, técnicas y herramientas para el desarrollo de software de computadora.

Sus elementos son:

· Métodos: Conjunto de tareas ordenadas para conseguir un _n. Los métodos se desarrollaron para cada una de las fases del desarrollo (análisis, diseño, implementación, etc.), y un conjunto de varios con una filosofía común componen una metodología.
· Técnicas: Ayudan con las dificultades para llevar a cabo lo que se indica en los métodos.
· Herramientas: Programas que mecanizan los métodos y las técnicas.

Y sus objetivos fundamentales son desarrollar software de calidad y de forma productiva.

1.5. VISIÓN GENERAL DEL PROCESO DE LA INGENIERÍA DEL SOFTWARE

El ciclo de vida del software se divide en varias fases desde que nace hasta que muere:
Planificación: Se identifica el proyecto, se le da nombre y se define el alcance.

Desarrollo: Se desarrolla e implanta.
Mantenimiento: Desde que se implanta hasta que se abandona.

1.5.1. Fase de planificación

Se realiza un inventario de todas las actividades que se realizan en una empresa y se agrupan por proyectos estableciendo una correspondencia entre éstos y las áreas organizativas.

También se discute la arquitectura hardware, la topología de red, el lenguaje de programación, etc., y se da una prioridad a cada proyecto.

Se concluye con un documento denominado _Plan de Sistemas de Información_. Como anotación, se puede comentar que no se encuentra entre las normas ISO debido a que se realiza una vez cada período muy grande de tiempo (una vez cada década o incluso más).

1.5.2. Fase de desarrollo

Se llevan a cabo las tareas hasta tener el proyecto funcionando. Conlleva varias actividades, análisis, diseño, construcción, pruebas e implantación.

1.5.3. Fase de mantenimiento

Su objetivo es la obtención de una nueva versión de un sistema debido a peticiones de cambio que los usuarios realizan por un problema detectado, o por la necesidad de una mejora del mismo, para acomodarlo a los cambios de su entorno externo o para conseguir una mayor adecuación a los requisitos, mayor eficiencia, o simplemente recoger nuevas funcionalidades no expresadas en la fase de definición del sistema.

Comprende el mantenimiento:

Correctivo: Cambia el software para corregir los defectos.
Evolutivo: Introduce mejoras en el software.
Adaptativo: Modifica el software para acomodarlo a los cambios de su entorno externo.
Perfectivo: Lleva al software más allá de sus requisitos funcionales originales.

1.6. SITUACIÓN ACTUAL DE LA INGENIERÍA DEL SOFTWARE

A principios del siglo XXI, se plantean tres problemas esenciales:

v El reto de lo heredado

Existe demasiado software antiguo que es fundamental para empresas de hoy y que, al deteriorarse, posee un mayor índice de fallos y necesita un mantenimiento muy alto.

v El reto de la heterogeneidad

El software debe correr en muchas arquitecturas y sobre sistemas operativos distintos. Esto afecta a la fiabilidad del software, es más fácil que falle.

v El reto de la entrega

Se necesitan aprender técnicas, herramientas, etc., para ser más productivos y entregarlos proyectos a tiempo. Sin embargo, este aprendizaje reduce el tiempo que se puede dedicar al desarrollo.

1.7. APLICACIONES DEL SOFTWARE

Las siguientes áreas del software indican la amplitud de las aplicaciones potenciales:

Software de Sistemas: El software de sistemas es un conjunto de programas que han sido escritos para servir a otros programas y se caracteriza por una fuerte interacción con el hardware de la computadora; una gran utilización por múltiples usuarios; una operación concurrente que requiere una planificación, una compartición de recursos y una sofisticada gestión de procesos.

Software de Tiempo Real: El software que mide/analiza/controla sucesos del mundo real conforme ocurren, se denomina de tiempo real. Entre los elementos del software de tiempo real se incluyen: un componente de adquisición de datos que recolecta y da formato a la información recibida del entorno externo, un componente de análisis que transforma la información recibida del entorno externo, un componente de análisis que transforma la información según lo requiera la aplicación, un componente de control/salida que responda al entorno externo y un componente de monitorización que coordina todos los demás componentes, de forma tal que pueda mantenerse la respuesta en tiempo real.

Software de Ingeniería y Científico: El software de Ingeniería y Científico está caracterizado por los algoritmos de manejo de números. Las aplicaciones van desde la astronomía a la vulcanología, desde el análisis de la presión de los automotores a la dinámica orbital de los lanzadores espaciales y desde la biología molecular a la fabricación automática.

Software Empotrado: El software Empotrado reside en memoria de solo lectura y se utiliza para controlar productos y sistemas de los mercados industriales y de consumo. El software empotrado puede ejecutar funciones muy limitadas y curiosas (p. Ej.: el control de las teclas de un horno de microondas).

Software de Computadoras Personales: El mercado del software de computadoras personales ha germinado en la pasada década. El procesamiento de textos, las hojas de cálculo, los gráficos por computadora, multimedia, entretenimientos, gestión de bases de datos, aplicaciones financieras de negocios y personales, y redes o acceso a bases de datos externas son algunas de los cientos de aplicaciones.

El software se ha convertido en el elemento clave de la evolución de los sistemas y  productos informáticos. En las pasadas cuatro décadas, el software ha pasado de ser una resolución de problemas especializadas y una herramienta de análisis de información, a ser una industria por si misma. Pero la temprana cultura e historia de la programación ha creado un conjunto de problemas que persisten todavía. El software se ha convertido en un factor que limita la evolución de los sistemas informáticos. El software se compone de programas, datos y documentos. Cada uno de estos elementos compone una configuración que se crea como parte del proceso de la Ingeniería del Software. El intento de la Ingeniería del Software es proporcionar un marco de trabajo para construir software con mayor calidad.

1.8. ¿CÓMO INTERVIENE LA INGENIERÍA DEL SOFTWARE?

1.8.1. Ingeniería de software. Es una disciplina que integra métodos, herramientas y procedimientos para el desarrollo de programas con la intención de brindar el apoyo en la toma de decisiones.

Modelo de control básico

Entradas Sistema Salidas

Nota: aquí se debe utilizar una experiencia previa.

2. METODOLOGÍAS DE DESARROLLO DE SOFTWARE

Las Metodologías de Desarrollo de Software surgen ante la necesidad de utilizar una serie de procedimientos, técnicas, herramientas y soporte documental a la hora de desarrollar un producto software.

2.1. MÉTODO CASCADA

La versión original del modelo en cascada, fue presentada por Royce en 1970, aunque son más conocidos los refinamientos realizados por Boehm [1981], Sommerville [1985] y Sigwart y col. [1990]. En este modelo, el producto evoluciona a través de una secuencia de fases ordenadas en forma lineal y permitiendo iteraciones al estado anterior.

· En un modelo en cascada, un proyecto progresa, a través de una secuencia ordenada de pasos partiendo de la especificación de requerimientos.

 · El método realiza una revisión al final de cada etapa para determinar si está preparado para pasar a la siguiente etapa, por ejemplo, desde el análisis de requerimientos hasta el diseño.

· Cuando la revisión determina que el proyecto no está listo para pasar a la siguiente, permanece en la etapa actual hasta que esté preparado.

· Ayuda a localizar errores en las primeras etapas del proyecto.




· Para un proyecto de desarrollo rápido, el modelo en cascada puede suponer una cantidad excesiva de documentación cantidad.


El número de etapas suele variar, pero en general suelen ser:

DOCUMENTACIÓN

· Análisis de requisitos del sistema
· Análisis de requisitos del software
· Diseño preliminar
· Diseño detallado
· Codificación y pruebas
· Explotación (u operación) y mantenimiento

Las características de este modelo son:

· Cada fase empieza cuando se ha terminado la anterior.
· Para pasar a la fase posterior es necesario haber logrado los objetivos de la fase anterior
· Es útil como control de fechas de entregas.
· Al final de cada fase el personal técnico y los usuarios tienen la oportunidad de revisar el progreso del proyecto.

2.2. MÉTODO CODIFICAR Y CORREGIR

· El modelo Codificar y Corregir (Code- and-fix) es un modelo poco útil, pero sin embargo bastante común.

· Cuando se utiliza éste método.- se empieza con una idea general de lo que se necesita construir.

· Se utiliza cualquier combinación de diseño, código, depuración y métodos de prueba no formales que sirven hasta que se tiene el producto listo para entregarlo.

Ventajas

· No conlleva ninguna gestión; no se pierde tiempo en la planificación, en la documentación, en el control de calidad, en el cumplimiento de los estándares, o en cualquier otra actividad que no sea codificación pura.
· Requiere poca experiencia cualquier persona que haya escrito alguna vez un programa está
Familiarizada con éste modelo. Calidad, ni identificación de riesgos

Desventajas

· El modelo resulta peligroso para otro tipo de proyectos que no sean pequeños.
· No proporciona medios de evaluación de la sea codificación pura..
· Si al llevar tres cuartas partes de la codificación descubre que el diseño es incorrecto, no hay otra, solución que desechar el trabajo y comenzar de nuevo.

2.3. MÉTODO DESARROLLO EN ESPIRAL


El modelo de desarrollo en espiral es actualmente uno de los más conocidos y fue propuesto por Boehm. El ciclo de desarrollo se representa como una espiral, en lugar de una serie de actividades sucesivas con retrospectiva de una actividad a otra.

Cada ciclo de desarrollo se divide en cuatro fases:

1. Definición de objetivos: Se definen los objetivos. Se definen las restricciones del proceso y del producto. Se realiza un diseño detallado del plan administrativo. Se identifican los riesgos y se elaboran estrategias alternativas dependiendo de estos.

2. Evaluación y reducción de riesgos: Se realiza un análisis detallado de cada riesgo identificado. Pueden desarrollarse prototipos para disminuir el riesgo de requisitos dudosos. Se llevan a cabo los pasos para reducir los riesgos.

3. Desarrollo y validación: Se escoge el modelo de desarrollo después de la evaluación del riesgo. El modelo que se utilizará depende del riesgo identificado para esa fase.

4. Planificación: Se determina si continuar con otro ciclo. Se planea la siguiente fase del proyecto.

Este modelo a diferencia de los otros toma en consideración explícitamente el riesgo, esta es una actividad importante en la administración del proyecto.

El ciclo de vida inicia con la definición de los objetivos. De acuerdo a las restricciones se determinan distintas alternativas. Se identifican los riesgos al sopesar los objetivos contra las alternativas. Se evalúan los riesgos con actividades como análisis detallado, simulación, prototipos, etc. Se desarrolla un poco el sistema. Se planifica la siguiente fase.



En cada Cuadrante del Método Espiral se realiza las siguientes actividades:

· Planificación: Determinación de objetivos, alternativas, restricciones, y elaboración del plan de desarrollo para el ciclo actual.

· Análisis de Riesgos: Evaluación de las alternativas, identificación y resolución de riesgos. Se decide si se sigue o no con el proyecto.

· Ingeniería: Desarrollo del producto siguiendo un modelo del ciclo de vida o cascada, prototipo, etc.

· Evaluación por el cliente: valoración de resultados.

2.4. MÉTODO PROTOTIPO DE SISTEMAS

El uso de prototipos se centra en la idea de ayudar a comprender los requisitos que plantea el usuario, sobre todo si este no tiene una idea muy acabada de lo que desea. También pueden utilizarse cuando el ingeniero de software tiene dudas acerca de la viabilidad de la solución pensada.




 Se desarrolla prototipos cuando:

· Un prototipo en sistemas de información es un modelo operable, que tiene todas las características necesarias, pero que es ineficiente debido a que los programas fueron hechos a la carrera con el objetivo de ser funcionales, en vez de ser eficientes.

· La elaboración de prototipos de sistemas de información es una técnica valiosa para la recopilación rápida de información específica acerca de los requerimientos de información de los usuarios.

· La velocidad es esencial para la elaboración satisfactoria del prototipo en su sistema de información. El prototipo debe llevarse menos de una semana para ensamblarse y lo preferible son dos o tres días.

Al usar prototipos, las etapas del ciclo de vida clásico quedan modificadas de la siguiente manera:

· Análisis de requisitos del sistema
· Análisis de requisitos del software
· Diseño, desarrollo e implementación del prototipo
· Prueba del prototipo.
· Refinamiento iterativo del prototipo
· Refinamiento de las especificaciones del prototipo
· Diseño e implementación del sistema final
· Explotación (u operación) y mantenimiento de Software.

3. LA COMPLEJIDAD INHERENTE AL SOFTWARE

Como sugiere Brooks. “la complejidad del software es una propiedad esencial, no accidental”. La complejidad de los sistemas informáticos hace a veces necesario el desarrollo de proyectos software de decenas de miles de líneas de código. Esto no puede ser abordado directamente, empezando a programar sin más. Es necesario analizar qué es lo que tenemos que hacer, cómo lo vamos a hacer, cómo se van a coordinar todas las personas que van a intervenir en el proyecto y cómo vamos a controlar el desarrollo del mismo de forma que al final obtengamos los resultados esperados. Las metodologías convencionales de Ingeniería de Software tienen mecanismos robustos para hacer un análisis de necesidades y diseño de los sistemas, poco han evolucionado con la tecnología en lo relacionado con el diseño computacional.

Este trabajo propone la inclusión de la tecnología orientada a objetos, en todas las etapas del ciclo de desarrollo del sistema, para disminuir la complejidad. Al llegar a la implementación, los resultados obtenidos se transcriben al lenguaje de programación elegido, cambiando la sintaxis en que se expresa el modelo, más no la semántica.

3.1. COMPLEJIDAD DEL DOMINIO DEL PROBLEMA

Cuando los problemas del mundo real se desean resolver con modelos de sistemas computacionales, trae consigo una cantidad indefinida de requisitos que compiten entre sí y algunas veces se contradicen. Dar funcionalidad a un sistema es difícil e incluso comprender los requerimientos como: facilidad de uso, rendimiento, costo, capacidad de supervivencia, fiabilidad, son parte de la complejidad externa que infiere determinantemente en la complejidad interna del sistema.

Bajo este contexto nace la importancia de la relación entre desarrolladores y usuarios del sistema. Habitualmente los usuarios suelen tener dificultades en expresar sus necesidades e ideas. Esto se da en ocasiones por falta de conocimiento del ámbito de cada uno de los grupos. Los usuarios y los desarrolladores tienen perspectivas diferentes sobre la naturaleza del problema.

Contar con herramientas que permitan plasmar estos requisitos de forma clara para ambos grupos es uno de los retos de la Ingeniería de Software.

3.2. DIFICULTAD DE ADMINISTRAR EL PROCESO DE DESARROLLO

Es difícil contar con un sistema donde su característica sea la simplicidad en el desarrollo del software.

La mayoría de los grandes sistemas contienen un alto número de código que impide dar un mantenimiento óptimo a los programas. Cuando los equipos de desarrollo son grandes y heterogéneos la administración de las actividades se hace complicada debido a que se desarrollan por muchos equipos de trabajo.

Hoy en día, tanto el hardware como el software, deben ser capaces de contar con una arquitectura abierta, reusabilidad, facilidad de reconfiguración, aplicación de estándares y diseño modular. Estas características permiten escribir menos códigos y poder reutilizar el software, en un software diferente al que fue diseñado originalmente. La adición debe ser transparente para el sistema receptor.

3.3. LA FLEXIBILIDAD QUE SE PUEDE ALCANZAR A TRAVÉS DEL SOFTWARE.

El software ofrece la flexibilidad al desarrollador para expresar y representar procesos triviales y complejos del conocimiento humano en un sistema computacional. Esta propiedad no debe producir cambios en los procedimientos y prácticas de las entidades.

El sistema debe ser suficientemente flexible para incorporarse a las actividades de las entidades y hacerlas más eficientes, sin causar gastos que eleven el precio de los sistemas.

Por ejemplo, una organización puede tener una diversidad de sistemas de comunicación en su estructura organizacional, el sistema computacional de apoyo a la administración debe ser lo suficientemente flexible para trabajar y/o compatibilizar con cualquier sistema de comunicaciones (transmisión de datos) existente.

Por lo tanto, el software no debe forzar al cliente a comprar sistemas de comunicaciones adicionales para poder operar sin problemas.

3.4. LOS PROBLEMAS DE CARACTERIZAR EL COMPORTAMIENTO DE SISTEMAS DISCRETOS

En una aplicación de gran tamaño puede haber cientos o hasta miles de variables, así como más de un flujo de control. El conjunto de todas estas variables, sus valores actuales, y la administración del sistema son procesos que constituyen el estado actual de la aplicación. Al ejecutarse el software en computadoras digitales, se tiene un sistema con estados discretos.

En contraste, a los sistemas analógicos (vgr. El movimiento de una pelota lanzada al aire) son sistemas continuos.

Pequeños cambios en las entradas siempre producirán cambios consecuentemente pequeños en las salidas”. Por el contrario, los sistemas discretos por su propia naturaleza tienen un número finito de estados posibles. Todos los eventos externos a un sistema de software tienen la posibilidad de llevar a ese sistema a un nuevo estado, y más aún, la transición de estado a estado no siempre es determinista. En las peores circunstancias, un evento externo puede corromper el estado del sistema, porque sus diseñadores olvidaron tener en cuenta ciertas interacciones entre eventos.

4. FACTORES EN LA CALIDAD DEL SOFTWARE

4.1. Definición de Calidad

“La calidad es la suma de todos aquellos aspectos o características de un producto o servicio que influyen en su capacidad para satisfacer las necesidades, expresadas o implícitas” (ISO 8402)
Terminología (ISO 8402) Definición de Calidad “El conjunto de características de una entidad que le confieren su aptitud para satisfacer las necesidades expresadas y las implícitas” ISO 8402

4.2. Control de la calidad del software.

Son las técnicas y actividades de carácter operativo, utilizadas para satisfacer los requisitos relativos a la calidad, centradas en dos objetivos fundamentales: mantener bajo control un proceso – eliminar las causas de los defectos en las diferentes fases del ciclo de vida

En general son las actividades para evaluar la calidad de los productos desarrollados

4.3. Garantía de calidad:

El aseguramiento de calidad del software es el conjunto de actividades planificadas y sistemáticas necesarias para aportar la confianza en que el producto (software) satisfará los requisitos dados de calidad.

4.4. Factores que determinan la calidad del software

Se clasifican en tres grupos:

4.4.1. Operaciones del producto: características operativas

– Corrección (¿Hace lo que se le pide?)
• El grado en que una aplicación satisface sus especificaciones y consigue los objetivos encomendados por el cliente.
– Fiabilidad (¿Lo hace de forma fiable todo el tiempo?)
• El grado que se puede esperar de una aplicación lleve a cabo las operaciones especificadas y con la precisión requerida.
– Eficiencia (¿Qué recursos hardware y software necesito?).
• La cantidad de recursos hardware y software que necesita una aplicación para realizar las operaciones con los tiempos de respuesta adecuados
– Integridad (¿Puedo controlar su uso?)
– Facilidad de uso (¿Es fácil y cómodo de manejar?)
• El esfuerzo requerido para aprender el manejo de una aplicación, trabajar con ella, introducir datos y conseguir resultados.

4.4.2. Revisión del producto: capacidad para soportar cambios

– Facilidad de mantenimiento (¿Puedo localizar los fallos?)
• El esfuerzo requerido para localizar y reparar errores
– Flexibilidad (¿Puedo añadir nuevas opciones?)
• El esfuerzo requerido para modificar una aplicación en funcionamiento
– Facilidad de prueba (¿Puedo probar todas las opciones?)
• El esfuerzo requerido para probar una aplicación de forma que cumpla con lo especificado en los requisitos.

4.4.3. Transición del producto: adaptabilidad a nuevos entornos

– Portabilidad (¿Podré usarlo en otra máquina?).
• El esfuerzo requerido para transferir la aplicación a otro hardware o sistema operativo.
– Reusabilidad (¿Podré utilizar alguna parte del software en otra aplicación?)
• Grado en que partes de una aplicación pueden utilizarse en otras aplicaciones
– Interoperabilidad (¿Podrá comunicarse con otras aplicaciones o sistemas informáticos?
• El esfuerzo necesario para comunicar la aplicación con otras aplicaciones o nsistemas Informáticos.

Factores de calidad del Software (McCall).

• Organiza los Factores en tres ejes o puntos de vista desde los cuales el usuario puede contemplar la calidad de un producto.

Ø Operación del producto
Ø Revisión del producto
Ø Transición del producto

5. REQUERIMIENTOS Y ESPECIFICACIÓN DEL SOFTWARE

5.1. Propósito

Permitir establecer las bases de acuerdo entre usuarios en lo que al proyecto de software se refiere.

· Ayudar a los usuarios finales del software a entender exactamente qué es lo que el cliente de software desea.

5.2. Determinación de los requerimientos

Aquí se debe hacer lo siguiente:

· Recopilación de información
· El analista debe comprender las funciones del negocio.
· Tener informe sobre personas, objetivos y procedimientos.
· Investigar datos relevantes.
· El Analista comprende que información necesitan los usuarios para trabajar.

Por ello intervienen:

· Herramientas:
· Entrevista.
· Cuestionario.
· Comportamiento de los tomadores de decisión.
· Prototipos.

Involucrados:

· Analista.
· Usuarios.
· Administradores de las operaciones.

El analista necesita:

Los detalles de las funciones actuales del sistema.
· ¿Quién? Personas
· ¿Qué? Actividad del negocio, etc.
· ¿Dónde? Ambiente
· ¿Cuándo? En qué momento