Definición de Ingeniería de Software

 

Es el enfoque sistemático para el desarrollo, operación, mantenimiento y eliminación de software.


 

Puntos Clave:

Los procedimientos definen la secuencia en que se aplican los métodos, los documentos que se requieren, los controles que permiten asegurar la calidad y las directrices que permiten a los gestores evaluar los progresos

Objetivo de las organizaciones fabricantes de software

Producir software de buena calidad de una manera sistemática y predecible.

    Producto de software:

Es el conjunto de programas (fuentes y ejecutables), procedimientos, reglas y documentación posible asociada, así como los datos pertenecientes a la operación del sistema

    Proceso de software:

Es el conjunto de actividades técnicas y administrativas necesarias para la fabricación de un producto de software

    Disciplinas auxiliares:

Ciencias de la computación (Fundamentos científicos),Administración (Fundamentos para administración de proyectos), Economía (Fundamentos para estima de recursos y control de costos), Psicología y técnica de comunicación (Fundamentos de trabajo).

 

INTERDISIPLINARIO Y BUENA COMUNICACIÓN INTERPERSONAL ENTRE EL GRUPO Y CLIENTE

    La ingeniería de software combina:

.Métodos completos para todas las faces del desarrollo de software

.Mejores herramientas para automatizar estos métodos.

.Bloques de construcción más potentes para la implementación de software

.Mejores técnicas para la garantía de calidad de software

Factores que influyen en la actividad y productividad del software:

Capacidad individual, Entendimiento del problema, Comunicación del grupo, Complejidad del producto, Facilidades y recursos, Metas adecuadas, Nivel tecnológico, Tiempo disponible.

 

Categorías de acuerdo al tamaño:

Proyectos triviales

Comprende un programador dedicado medio tiempo durante algunos días o quizás semanas, surgiendo un programa de aproximadamente 500 proposiciones, utilizando entre 10 y 20 subrutinas.

Productos Pequeños

Necesita un programador dedicado de 1 a 6 meses, resultando un producto de entre 1000 y 2000 líneas de código fuente, con 25 a 50 rutinas. Aplicaciones para resolver problemas numéricos, generación de informes, proyectos estudiantiles, etc

Proyectos medianos

De 2 a 5 programadores durante 1-2 años de trabajo, un código de 250 a 1000 rutinas. Ensambladores, compiladores, sistemas pequeños de manejo de información, inventarios y control de procesos

Proyectos grandes:

Necesita de 5 a 20 programadores que trabajen de 1-3 años, generen un producto de entre 50 mil y 100 mil líneas de código, mediante varios subsistemas. Compiladores de gran tamaño, sistemas pequeños de tiempo compartido, paquetes de bases de datos, sistemas gráficos y proyectos para control en tiempo real.

Proyectos muy grandes:

Se realiza entre 100 y 1000 programadores por tiempo de 4 a 5 años, resultando cerca de 1000000 de líneas de código, y normalmente con varios subsistemas de los cuales algunos son considerados como proyectos grandes. Sistemas de procesamiento en tiempo real, sistemas de telecomunicaciones, grandes sistemas operativos, etc.

Proyectos extremadamente grandes:

Un producto de esta magnitud incluye de 2000 a 5000 programadores por un periodo de 10 años, para llegar a generar  entre 1000000 a 10000000 de líneas de código.

 

CONCEPTOS DE ADMINISTRACION

 

Comprenden los métodos para ordenar y seguir el caso de un proyecto, Estimación de datos, Políticas y asignación de recursos, Control de presupuesto, Definición de logros del proyecto, Re-asignacion de recursos y ajustes al calendario de trabajo, etc.

 

Problemas importantes en la administración del  software.

La planeación es pobre, los procedimientos para seleccionar gerentes son malos, la contabilidad en proyectos es pobre, la capacidad para estimar correctamente los recursos para un proyecto es casi nula, y así muchos más eerres.

 

Posibles Soluciones

Usar estándares, analiza resultados de proyectos anteriores, establecer prioridades del éxito, desarrollar estimaciones de costos, selección basándose en sus capacidades y habilidad técnica, etc.

Mitos de Gestión

Si fallamos en la planificación, añadimos mas programadores para recuperar el tiempo perdido.

Mitos del Cliente

Una declaración general de los objetivos es suficiente para empezar los programas, los detalles luego.

Mitos de los Programadores

Apenas escribimos el programa y hacemos que funcione, nuestro  trabajo ha terminado, lo único  que se entrega al terminar el proyecto es el programa funcionando.

Problemas del Software

Insatisfacción de cliente por falta de una buena definición de datos requeridos, no se pueden evaluar con eficiencia las herramientas técnicas estándares a utilizar

Métodos de la Ingeniería de Software

Mejorar la calidad de los procesos de fabricación de software, al igual que la calidad de productos de software.

 

Planeación del Proyecto

Desarrollar el enunciado definitivo del problema a resolver, Describir la situación actual, restricciones del problema y las metas que se logran, Justificar una estrategia de solución computarizada para el problema, Identificar las funciones a realizar, restricciones, el subsistema de equipo de computo, el subsistema del producto de programación y el personal.

 

Para el desarrollo de una estrategia de solución es deseable:

Esbozar varias estrategias de solución, sin considerar restricciones, Realizar un estudio de factibilidad para cada estrategia, Desarrollar una lista de prioridades para las características del producto.

 

En la planeación del proceso de desarrollo será adecuado:

 

Definir el modelo de ciclo de vida de una estructura organizacional del proyecto.

Planear las actividades de administración de configuración, control de calidad y validación.

Determinar las herramientas por fase, técnicas y notación a utilizar.

Establecer estímulos preliminares del costo para el desarrollo del sistema.

Estimados personales de recursos de computo necesarios para operar y mantener el sistema.

Preparar glosario de términos

 

El desarrollo del software esta formado por:

Los principios: Consideraciones generales y abstractas aplicables al proceso de construcción y manejo de software. Ejemplo, la Norma ISO 9000-3.

El modelo de ciclo de vida de desarrollo de software: Conjunto de etapas que describen el desarrollo de software desde su nacimiento hasta su reemplazo o eliminación y  se compone de tres grandes faces:

·  Definición

·  Desarrollo

·  Mantenimiento

 

Método: Formas explícitas para realizar una o varias actividades requeridas. Los métodos nos especifican cómo construir técnicamente el software mediante un proceso disciplinado, sistemático y riguroso  para generar un conjunto de modelos o abstracciones que describen varios aspectos de un sistema de software en desarrollo, utilizando una notación bien definida

      Un método debe tener:

·  Notación + semántica

·  Algoritmo para aplicar la notación

·  Mecanismo para medir el avance y decidir cuándo se termina

·  Herramienta de apoyo

Metodología: Son una colección de métodos aplicados a lo largo del ciclo de vida de desarrollo de software.

Concepto de ciclo de vida.

Se entiende la sucesión de etapas por las que pasa el software desde que un nuevo proyecto es concebido hasta que se deja de usar.

Cada una de estas etapas lleva asociada una serie de tareas que deben realizarse, y una serie de documentos (en sentido amplio: software) que serán la salida de cada una de estas fases y servirán de entrada en la fase siguiente. Entre los modelos existentes están:

Codificar/Corregir

·  Codificar primero.

·  Análisis, especificaciones, pruebas para después.

·  Hay muchos errores de codificación que deben corregirse.

·  Falta de planificación.

·  Falsa sensación de productividad.

·  Después de varias correcciones el programa se queda sin estructura.

·  No se produce documentación.

Aspectos formativos y psicológicos  que fluyen para aceptar el modelo Codificar/Corregir:

·  Necesidad del reto, medido en líneas  de código. 

·  Preferencia por trabajar solo.

·  Formación en solución de problemas deterministicos.

·  Aparente facilidad de las tareas que debe desarrollar el software.

·  Creencia de que con una vaga idea del sistema, se puede codificar.