La ingeniería de software

Conceptos básicos de ingeniería de software

Que es la Ingeniería de Software

La Ingeniería de Software es una diciplina de la
Ingeniería que concierne a todos los aspectos de la
producción de software

Los Ingenieros de Software adoptan un enfoque
sistematico para llevar a cabo su trabajo y utilizan las
herramientas y tecnicas necesarias para resolver el
problema planteado, de acuerdo a las restricciones de
desarrollo y recursos disponibles.

Diferencia entre Ingenieria de Software y Computacion

La computación concierne a la teoría y fundamentos de
cualquier sistema de computo, sea de hardware o de
software.

La Ingeniería de software concierne solo al desarrollo de
sistemas o productos de software

La Ingeniería de Software todavía esta lejos de ser una
ciencia como los son la Química, la Ingeniería Civil o la
Electrónica.

Ingenieria de Sistemas e Ingenieria de Software

La Ingeniería de Sistemas concierne a todos los
aspectos del desarrollo de sistemas basados en
cómputo, que incluyen hardware, software y el
proceso de Ingeniería. La Ingeniería de Software es
solo parte de este proceso.

Que es el Software ?

Programas de cómputo y su documentacion asociada

Sistemas o Productos de software grandes y complejos.

Que tipos de software hay ?

Como saber si un software tiene calidad.

Cual es el costo del software.

Que contiene el software

Como se desarrolla el software ?

Productos de Software

La mayor parte del gasto del software es en productos
genéricos, pero hay más esfuerzo en el desarrollo de los
sistemas hechos a medida.

Productos genéricos.
Productos que son producidos por una organización para ser vendidos al
mercado.

Productos hechos a medida.
Sistemas que son desarrollados bajo pedido a un desarrollador específico.

Importancia de la ingeniería de software

¿Por qué es importante la ingeniería del software?

seguro que mucha gente a la que le gusta programar se preguntará y ¿por qué tengo que perder el tiempo haciendo diagramas de clases y diseñando la arquitectura del sistema (ya veremos todo lo que es eso en otros artículos) si yo programo de lujo y mis programas funcionan perfectamente? Seguro que estaremos de acuerdo en que cualquier persona con tiempo y que le guste programar puede hacer software que funcione y sin haber estudiado nada.

Fases de la ingeniería del software

Para finalizar esta introducción a la ingeniería del software, explicaré un poco por encima las fases principales para la construcción de software medianamente complejo (más adelante explicaré todos estos conceptos).

capturar y analizar los requisitos

Puede que sea un cliente el que nos haya mandado construir un programa. Pues entonces tendremos que cumplir sus condiciones y expectativas. Sin embargo, si lo que pretendemos es desarrollar un programa para el público en general, tendremos que tener en cuenta que aspectos son necesarios para que la gente use nuestro programa en vez de otro.

diseñar la arquitectura

No será igual un programa que tenga que usar datos de una base de datos a uno que todos los datos que necesita están en el propio ordenador donde se instala. Es muy importante en esta fase diseñar una arquitectura capaz de adaptarse a la tecnología que se esté usando actualmente así como a nuevas tecnologías. Por ejemplo si estamos usando un fichero XML para recoger los datos, es importante que nuestra arquitectura nos permita cambiar el XML por una base de datos.

mantenimiento

Aunque parezca que aquí acaba todo, existe otra pase que se prolonga durante toda la vida del programa que es el mantenimiento. Añadir nueva funcionalidad o modificar aspectos del programa son tareas que se realizan en la fase de mantenimiento. Las actualizaciones de Windows son un ejemplo del mantenimiento. Si la gente de Microsoft no realizará mantenimiento a Windows, nuestro sistema operativo se quedaría desfasado y sería menos funcional y menos seguro que otros.

diseñar la lógica y las relaciones entre todas las partes de nuestro sistema

Una vez que tengamos la arquitectura diseñada, debemos profundizar más y diseñar la lógica y las relaciones entre todas las partes de nuestro sistema, para finalmente comenzar a codificar.

Cuando es programa esté acabado debemos probarlo para comprobar que cumple todos los requisitos y funciona como es previsto.

El proceso del software

Planificación

Antes de empezar un proyecto de desarrollo de un sistema de información, es necesario hacer ciertas tareas que influirán decisivamente en el éxito del mismo. Dichas tareas son conocidas como el fuzzy front-end del proyecto, puesto que no están sujetas a plazos.

Algunas de las tareas de esta fase incluyen actividades como la determinación del ámbito del proyecto, la realización de un estudio de viabilidad, el análisis de los riesgos asociados, la estimación del coste del proyecto, su planificación temporal y la asignación de recursos a las diferentes etapas del proyecto.

Análisis

Por supuesto, hay que averiguar qué es exactamente lo que tiene que hacer el software. Por eso, la etapa de análisis en el ciclo de vida del software corresponde al proceso a través del cual se intenta descubrir qué es lo que realmente se necesita y se llega a una comprensión adecuada de los requerimientos del sistema (las características que el sistema debe poseer).

Diseño

En esta fase se estudian posibles opciones de implementación para el software que hay que construir, así como decidir la estructura general del mismo. El diseño es una etapa compleja y su proceso debe realizarse de manera iterativa.

Es posible que la solución inicial no sea la más adecuada, por lo que en tal caso hay que refinarla. No obstante, hay catálogos de patrones de diseño muy útiles que recogen errores que otros han cometido para no caer en la misma trampa.

Implementación

En esta fase hay que elegir las herramientas adecuadas, un entorno de desarrollo que facilite el trabajo y un lenguaje de programación apropiado para el tipo de software a construir. Esta elección dependerá tanto de las decisiones de diseño tomadas como del entorno en el que el software deba funcionar.

Al programar, hay que intentar que el código no sea indescifrable siguiendo distintas pautas como las siguientes:

Evitar bloques de control no estructurados.
Identificar correctamente las variables y su alcance.
Elegir algoritmos y estructuras de datos adecuadas para el problema.

Mantener la lógica de la aplicación lo más sencilla posible.

Documentar y comentar adecuadamente el código de los programas.

Facilitar la interpretación visual del código utilizando reglas de formato de código previamente consensuadas en el equipo de desarrollo.

También hay que tener en cuenta la adquisición de recursos necesarios para que el software funcione, además de desarrollar casos de prueba para comprobar el funcionamiento del mismo según se vaya programando.

Forces from buyers

Pruebas

Como errar es humano, la fase de pruebas del ciclo de vida del software busca detectar los fallos cometidos en las etapas anteriores para corregirlos. Por supuesto, lo ideal es hacerlo antes de que el usuario final se los encuentre. Se dice que una prueba es un éxito si se detecta algún error.

Instalación o despliegue

La siguiente fase es poner el software en funcionamiento, por lo que hay que planificar el entorno teniendo en cuenta las dependencias existentes entre los diferentes componentes del mismo.

Es posible que haya componentes que funcionen correctamente por separado, pero que al combinarlos provoquen problemas. Por ello, hay que usar combinaciones conocidas que no causen problemas de compatibilidad.

Uso y mantenimiento

Esta es una de las fases más importantes del ciclo de vida de desarrollo del software. Puesto que el software ni se rompe ni se desgasta con el uso, su mantenimiento incluye tres puntos diferenciados:

Eliminar los defectos detectados durante su vida útil (mantenimiento correctivo).

Adaptarlo a nuevas necesidades (mantenimiento adaptativo).

Añadirle nuevas funcionalidades (mantenimiento perfectivo).

Practica y principios de la ingeniería de software

Comunicaion

Principios que se centran en la necesidad de mantener una buena relación y conversaciones productivas entre el desarrollador y el cliente

Planeacion

Principios que permiten elaborar el mejor mapa del proceso hacia un sistema o producto terminado.

Modelado

Principios que dan fundamento a los métodos y notación que se utiliza para crear representaciones del software. Su principal finalidad es asegurarse que se comprenda que se va a hacer y proporcionar una guía técnica a quienes implementarán el proyecto.

Codificacion

Son aquellos principios que definen las acciones que se deben de desarrollar antes de escribir código, mientras se escribe y una vez terminado.

Despliegue

Éstos principios nos permiten lograr la administración de las expectativas del cliente y brindarle información adecuada sobre el software.

Nivel de la práctica

En este nivel éstos principios establecen un conjunto de valores y reglas que sirven como guía al analizar el diseño de un problema y su solución.

Nivel de proceso

En este nivel los principios fundamentales establecen un fundamento filosófico que guía al equipo de software.

Cinco

Número de actividades estructurales que se encuentran dentro de un proceso de de desarrollo de software

LINEA DEL TIEMPO DEL SOFTWARE

1930

1929 – 1945

El nacimiento de la computadora electrónica

Las ideas de Frederick Taylor y los Gilbreth promocionaron el concepto de diagramas de proceso.
En 1940, Wallace Eckert desarrollara la 1ra metodología de computación. Nace el concepto de un ordenador electrónico programable, surge ENIAC
Grace Hooper: Se percato de que se podría crear un lenguaje más cercano a los humanos (alto nivel), esto marca el inicio del primer compilador.

En plena Segunda Guerra Mundial, Alan Touring, daría las bases de la computación moderna

1940

1945 – 1965

Auge de la informática y nacimiento de la ingeniería de software.

Después de la segunda guerra mundial hubo un auge en la informática.
Herman Goldstine junto a John von Neumann, desarrollarían los diagramas de flujo.
Maurice Wilkes, David Wheeler y Stanley Gill crerían el concepto de subrutinas, descomponer algoritmos.

John Backus desarrollaría el famoso lenguaje de alto nivel Fortran.

John Pinkerton tenía la idea de que el software podía tratarse como un componente en sí mismo.

Grace Hopper, Robert Bemer, Jean Sammet y otro crearon Cobol

1947-1948

1947 – 1948

Madurez de la computación y el nacimiento de la ingeniería de software

a Guerra Fría generó otro conjunto de fuerzas que llevaron a la ingeniería de software a la madurez.
Se desarrollo el sistema SAGE que era una programación en tiempo real. Se desarrollo de interfaces humano-computador

1960

1960

La Crisis Del Software

Margaret Hamilton acuñó el término "ingeniería de software" y en el que la OTAN declaró que había una "crisis de software".
-La mayoria de proyectos de software fallaban por la mala organización y costos elevados.
-El software era ineficiente y surgieron varios problemas

1963

Margaret Hamilton

Fue la primera persona en usar el término de "Ingeniería en Software", este echo no fue documentado pero se sabe mediante una relato oral que ella comenzó a usar el término en algún momento de 1963-1964 para distinguir su trabajo de la ingeniería de hardware mientras trabajaba en el programa espacial Estadounidense.

1965

Anuncio Clasificado en "Computers and Automation

Apareció un anuncio de trabajo buscando un "ingeniero de sistemas de software".

1966

Anthony Oettinger

Utilizó el término "ingeniería de software" para hacer la distinción entre informática y la construcción de sistemas intensivos en software

1970

Friedrich Bauer - Conferencia OTAN

Muchas personas sugieren que fue Friedrich Bauer quien acuño este termino en la conferencia de ingeniería de software de la OTAN

1980

1980 – 1981

Ingeniería de software vs Ciencias de la computación

Grace Hopper: sugirió que la programación es un arte práctico Edsger Dijkstra: llamó al arte de programar el arte de organizar la complejidad Donald Knuth: se refirió a la programación como arte porque producía objetos de belleza David Parnas: existe una distinción entre la "informática" y las otras cosas que hacemos.

1990

La actualidad

Where to next?