lunes, 18 de junio de 2012

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



No hay comentarios:

Publicar un comentario