Durante los primeros años de la era de la computadora, el software se contemplaba como un añadido. Desde entonces el campo se ha desarrollado tremendamente. La programación de computadoras era un “arte de andar por casa” para el que existían pocos métodos sistemáticos. El desarrollo del software se realizaba virtualmente sin ninguna planificación, hasta que los planes comenzaron a descalabrarse y los costos a correr. Los programadores trataban de hacer las cosas bien, y con un esfuerzo heroico, a menudo salían con éxito. Los problemas a ser resueltos eran principalmente de una naturaleza técnica, el énfasis estaba en expresar algoritmos conocidos eficazmente en algún lenguaje de programación.
SEGUNDA ERA
La segunda era en la evolución de los sistemas de computadora se extienden desde la mitad de la década de los sesenta hasta finales de los setenta. La multiprogramación y los sistemas multiusuario introdujeron nuevos conceptos de interacción hombre - máquina. Las técnicas interactivas abrieron un nuevo mundo de aplicaciones y nuevos niveles de sofisticación del hardware y del software. Los sistemas de tiempo real podían recoger, analizar y transformar datos de múltiples fuentes, controlando así los procesos y produciendo salidas en milisegundos en lugar de en minutos. Los avances en los dispositivos de almacenamiento en línea condujeron a la primera generación de sistemas de gestión de bases de datos.
La segunda era se caracterizó también por el establecimiento del software ya se desarrollaba para tener una amplia distribución en un mercado multidisciplinario. Los programas se distribuían para computadoras grandes y para minicomputadoras, a cientos e incluso a miles de usuarios. Los patronos de la industria, del gobierno y de la universidad se aprestaban a “desarrollar el mejor paquete de software” y ganar así mucho dinero.
TERCERA ERA
La tercera era en la evolución de los sistemas de computadora comenzó a mediados de los años setenta y continuó más allá de una década. El sistema distribuido, múltiples computadoras, cada una ejecutando funciones concurrentemente y comunicándose con alguna otra, incrementó notablemente la complejidad de los sistemas informáticos. Las redes de área local y de área global, las comunicaciones digitales de alto ancho de banda y creciente demanda de acceso “instantáneo” a los datos, supusieron una fuente presión sobre los desarrolladores del software. Aún más, los sistemas y el software que lo permitían continuaron residiendo dentro de la industria y de la academia. El uso personal era extraño.
CUARTA ERA
La cuarta era de la evolución de sistemas informáticos se aleja de los programas de control y de gestion, dirigiéndose al impacto colectivo de las computadoras individuales y del software. Potentes máquinas personales controladas por sistemas operativos sofisticados, en redes globales y locales, acompañadas por aplicaciones de software avanzadas se han convertido en la norma. Las arquitecturas informáticas están cambiando de entornos centralizados de grandes computadoras a entornos descentralizados cliente/servidor. Las redes de información en todo el mundo proporcionan una infraestructura que iguala a expertos y políticos en pensar sobre una “superautopista de información” y una “conexión del ciberespacio”. De hecho internet se puede observar como un “software” al que pueden acceder usuarios individuales.
APORTACIONES AL CAMPO
Durante el desarrollo del tema, nos hemos percatado del problema que existió en algún momento respecto a que no se llevaba una planificación para un buen desarrollo del software. Esto trajo consecuencias que repercutieron en las Organizaciones.
Muchas de estas consecuencias originaron pérdidas millonarias en diferentes Empresas como el caso de una Aerolínea Internacional de los Estados Unidos de América, que tuvo el problema de que al momento de que un pasajero pretendía hacer su reservación de vuelo, el Sistema de Información mostraba que los asientos se encontraban ocupados, mientras que físicamente el vuelo contaba con demasiados asientos libres. Esto origino una pérdida de $50 millones de dólares.
A la vez se presentaron casos en los cuales las pérdidas eran iguales o mayores materialmente hablando. Las transacciones financieras de aquél entonces se empezaron a llevar por medio de Software Especializado. Pero también tuvo errores, ya que al enviar facturas de pago, su total de pago presentaba $0.00, lo cual originó bastantes pérdidas.
Pero no sólo existieron pérdidas materiales en los malos desarrollos de Software de aquellos días. Una computadora que se usaba para el servicio militar de los Estados Unidos de América, reportó una alarma acerca de la Unión Soviética de Repúblicas Socialistas había iniciado un ataque de proyectiles nucleares en contra de ese país. Esto origino una gran movilización para contrarrestar el ataque, se alistaron a los bombarderos atómicos norteamericanos, pero al día siguiente a través de un periódico se daba la noticia que todo había sido un error en el Software de la computadora.
Otra de las consecuencias en donde si hubo pérdidas humanas, fue en un caso en Inglaterra, en donde se enjuiciaba a una mujer de 54 años de edad por asesinar a su hija. Esto fue debido a un mensaje de un sistema informatizado hizo de la compañía de Seguro Social, informaba a la mujer que ella estaba gravemente enferma, se le decía que padecía una forma incurable de sífilis, además de que había infectado a sus dos hijos. En pánico, ella estranguló a su hija de 15 años e intento matar a su hijo de 13, el muchacho escapó y consiguió ayuda para después impedir que su madre se suicidará. Finalmente el juez culpó el error de la computadora y no consideró a la mujer responsable de sus acciones.
Como nos podemos dar cuenta estas consecuencias fueron de gran gravedad. En los primeros dos casos se atacó hacia los recursos financieros de grandes empresas a nivel internacional. En los siguientes casos aparte de afectar materialmente a la Sociedad, se pierde una vida humana por un error en el Software acerca de un padecimiento. Es así como se observa los diferentes tipos de consecuencias que se originaban por un mal desarrollo de Software.
Con este tipo de casos nos hemos percatado de la importancia que tiene una planeación acerca del desarrollo del Software. En aquel entonces el programador no se adentraba hacia las repercusiones que pudiera tener el Software que estaba creando, y ante la falta de documentación para la enseñanza de la creación de Software, los programadores aprendían solamente practicando.
Actualmente, nosotros como desarrolladores de Software, al momento de diseñarlo debemos de darnos cuenta de varias cosas para no tener ese tipo de errores que existieron con anterioridad. Además de otras cosas creemos que entre lo más importante que debemos saber es:
¿Hacia quién va dirigido el SW?
¿Quienes serán los usuarios?
¿Qué tipo de información les será proporcionada?
La facilidad de acceso.
esto, entre muchas otras cosas más. Pero ante todo siempre debemos adoptar la postura de todos los tipos de usuarios que vayan a trabajar con el Software, ya que así podremos observar si los resultados que se obtienen son los que se requieren, es decir todo en base a una buena planeación.
Sin embargo, no es del todo satisfactorio dejar las cosas simplemente en las etapas de planeación. Después de que los programas estén terminados deben recibir mantenimiento, y los esfuerzos de mantenimiento normalmente sobrepasan el esfuerzo gastado en el diseño y programación original.
Parte importante de este aspecto es la documentación. Se deben documentar el Software y los procedimientos para que estén codificados en un formato que pueda ser fácilmente accesado. La documentación permite que los usuarios, programadores y analistas observen el sistema, Software y procedimientos sin tener que interactuar con él.
Después de ver todos los avances podemos observar que no sólo se cambia una manera de trabajar, sino que se cambia la forma de conceptualizar la vida, ¿Quién vive ya sin la ayuda de una computadora que agilice procesos?, y en caso drástico podemos ver que se cambian las costumbres y cultura de la Sociedad Actual.
Eras
ERA
AÑOS
CARACTERÍSTICAS
1ª
1950 - 1965
Se trabajaba con la idea de “Codificar y Corregir”.
No existía un planteamiento previo.
No existía documentación de ningún tipo.
Existencia de pocos métodos formales y pocos creyentes en ellos.
Desarrollo a base de prueba y error.
2ª
1965 - 1972
Se busca simplificar código.
Aparición de Multiprogramación y Sistemas Multiusuarios.
Sistemas de Tiempo Real apoyan la toma de decisiones.
Aparición de Software como producto. (Casas de Software).
INICIO DE LA CRISIS DEL SOFTWARE.
Se buscan procedimientos para el desarrollo del Software.
3ª
1972 - 1989
Nuevo Concepto: Sistemas Distribuidos.
Complejidad en los Sistemas de Información.
Aparecen: Redes de área local y global, y Comunicadores Digitales.
Amplio Uso de Microprocesadores.
4ª
1989 - ¿?
Impacto Colectivo de Software.
Aparecen: Redes de Información, Tecnologías Orientadas a Objetos.
Aparecen: Redes Neuronales, Sistemas Expertos y SW de Inteligencia Artificial.
La información como valor preponderante dentro de las Organizaciones.
Es de suma relevancia el mencionar algunas de los lenguajes de programación que fueron utilizados en sus respectivas eras. Esto nos ayudará a comprender mejor el objetivo que se perseguía en cada una de ellas.
ERA
LENGUAJES
CARACTERÍSTICAS
1ª
Fortran
Basic
Logo
Cobol
Fue el primer y principal lenguaje Científico.
Diseñado por IBM.
Utilizado también para aplicaciones comerciales.
Desarrollado como lenguaje de tiempo compartido.
Traza elementos gráficos estableciendo la geometría de lápiz.
Ampliamente usado en programación en minicomputadores.
2ª
Pascal
Prolog
Mumps
Lisp
Lenguaje Académico.
Sus características son copiadas por otros lenguajes.
Éxito comercial a través de Borland.
Desarrollado en Francia, 1973.
Aplicaciones en Inteligencia Artificial (IA).
Sistema de Multiprogramación.
Incluye su propia base de datos.
Utilizado en aplicaciones médicas.
Sintaxis muy diferente de los demás lenguajes.
Programa aplicaciones en IA.
3ª
C, C++
Modula-2
dBase
Desarrollado en los ochentas.
Se utiliza en aplicaciones comerciales.
C++, se utiliza para la tecnología orientada a objetos.
Versión mejorada de Pascal.
Desarrollada en 1979.
Lenguaje estándar para aplicaciones comerciales.
Ramas colaterales: Clipper, FoxBase.
4ª
Visual C++
Visual Basic
JAVA
Desarrollado por Microsoft.
Principalmente orientado a la tecnología de objetos.
Se utiliza para aplicaciones comerciales.
Principalmente para aplicaciones comerciales.
Versión cotizada, ya que permite interactuar con tablas de manejadores de bases de datos y lenguaje SQL.
La plataforma .NET, que permitirá a los desarrolladores crear aplicaciones extensas e incluso sistemas de componentes y servicios con gran capacidad para operar entre sí.
Este tipo de aplicaciones se pueden limitar a una organización, pero ésa no es la idea general, ya que los muchos analistas son de la opinión de que hay gran necesidad de aplicaciones que puedan existir en un ambiente distribuido basado en Internet.
A continuación se presenta una lista de algunas personas que hicieron contribuciones significativas en la creación y crecimiento de la industria de productos de software
Charles Bachman. Inventó la tecnología del banco de datos en los inicios de los sesentas.
John Backus. FORTRAN desarrollado para IBM (1954)
Bob Bemer. Uno de los diseñadores de COBOL y el ASCII normal para IBM (años sesenta); inventor de la sucesión del Escape, el mecanismo universal para toda la computadora.
Larry Constantine. Inventa los datos que fluyen en los diagramas, presentan primero en papel, los conceptos de un plan estructurado en 1968.
Peter Cunningham. Funda una de las primeras empresas de investigación de mercado para enfocar el software y comienza a comercializar los productos del software en 1974.
Tom DeMarco. El pionero en utilizar una metodología de caso, el autor, y consultor en los años setenta.
Wilfred J. Dixon. Empezó distribuyendo el software estadístico en 1962.
Frank Dodge. Co - fundó McCormack & el Regate qué vendió el primer software de contabilidad en 1969.
Larry Ellison. Dejó camino abierto para los DBMS.
Dave Ferguson. Logró vender el primer producto de software con éxito contra un programa de IBM.
Ken Orr. Crea la metodología de caso desarrollada en los años setenta.
BIBLIOGRAFIA
· Ingeniería de Software
Roger S. Pressman
McGraw-Hill.
· Software Engineering Principles and Practice
Hans van Vliet
Jhon Wiley and Sons.
· Software Engineering for Information Systems
Donald C. McDermid
Blackwell Scientific Publications.
· Diccionario de Computación
Freedman Alan
McGraw-Hill.
· Análisis y Diseño de Sistemas
Kendall & Kendall
Pearson Educación.
1.2 La descomposición funcional vs. la descomposición en objetos.
Varios métodos han sido propuestos para sistematizar el proceso de vida del software.
Y muchas metodologías de desarrollo de software
han sido propuestas, y éstas pueden clasificarse en tres categorías:
Descomposición funcional.
Enfásis en datos, más que en funciones.
Descomposición objeto
Enfácis en objetos más que en datos.
Clasificación de los metodos.
Descomposición funcional:
Diseño Estructural, Refinamiento por Pasos. Enfásis en datos, más que en funciones: Programación Estructurada, Modelo Entidad-Relación.
Descomposición de Objetos:
Análisis Estructural, Análisis de Sistemas Estructurados,
Análisis de Sistemas Estructurados y Metodología de Diseño por bloques y modulos.
1.3 Ingeniería de software.
La Ingeniería de Software.
Según la definición del IEEE, citada por [Lewis 1994] "software es la suma total de los programas de computadora, procedimientos, reglas, la documentación asociada y los datos que pertenecen a un sistema de cómputo". Según el mismo autor, "un producto de software es un producto diseñado para un usuario". En este contexto, la Ingeniería de Software (SE del inglés Software Engineering) es un enfoque sistemático del desarrollo, operación, mantenimiento y retiro del software", que en palabras más llanas, se considera que "la Ingeniería de Software es la rama de la ingeniería que aplica los principios de la ciencia de la computación y las matemáticas para lograr soluciones costo-efectivas (eficaces en costo o económicas) a los problemas de desarrollo de software", es decir, "permite elaborar consistentemente productos correctos, utilizables y costo-efectivos" [Cota 1994].
El proceso de ingeniería de software se define como "un conjunto de etapas parcialmente ordenadas con la intención de logra un objetivo, en este caso, la obtención de un producto de software de calidad" [Jacobson 1998].El proceso de desarrollo de software "es aquel en que las necesidades del usuario son traducidas en requerimientos de software, estos requerimientos transformados en diseño y el diseño implementado en código, el código es probado, documentado y certificado para su uso operativo". Concretamente "define quién está haciendo qué, cuándo hacerlo y cómo alcanzar un cierto objetivo" [Jacobson 1998].
El proceso de desarrollo de software requiere por un lado un conjunto de conceptos, una metodología y un lenguaje propio. A este proceso también se le llama el ciclo de vida del software que comprende cuatro grandes fases: concepción, elaboración, construcción y transición. La concepción define le alcance del proyecto y desarrolla un caso de negocio. La elaboración define un plan del proyecto, especifica las características y fundamenta la arquitectura. La construcción crea el producto y la transición transfiere el producto a los usuarios.
Actualmente se encuentra en una etapa de madurez el enfoque Orientado a Objetos (OO) como paradigma del desarrollo de sistemas de información. El Object Management Group (OMG) es un consorcio a nivel internacional que integra a los principales representantes de la industria de la tecnología de información OO. El OMG tiene como objetivo central la promoción, fortalecimiento e impulso de la industria OO. El OMG propone y adopta por consenso especificaciones entorno a la tecnología OO. Una de las especificaciones más importantes es la adopción en 1998 del Lenguaje de Modelado Unificado o UML (del inglés Unified Modeling Language) como un estándar, que junto con el Proceso Unificado están consolidando la tecnología OO.
1.4 Modelado y sus beneficios.
Principios de Modelado
En cualquier proyecto de ingeniería como la construcción de un gran edificio, un avión, una represa hidroeléctrica, la construcción de un procesador de textos o un software de comunicaciones para Internet, requieren de etapas de modelamiento que permitan experimentar y visualizar el sistema que se construirá. De la experiencia en ingeniería se extractan los siguientes principios de modelado:
a) La forma como vemos el problema tiene una profunda influencia en forma como acometemos el problema y le damos solución al mismo.
Si pensamos que el mundo esta compuesto de clases (Abstracciones de la realidad y de la solución del problema) y objetos (instancias de éstas abstracciones) que interactúan entre si para realizar una funcionalidad, así veremos el mundo. Este es precisamente al paradigma a que le apuesta UML: el modelo orientado a objetos. Si vemos la realidad como compuesta de procesos donde cada uno a su vez se puede descomponer en subprocesos entonces estamos concibiendo la realidad según el modelo estructurado y la arquitectura del sistema en desarrollo estará conformada de programas y subprogramas.
b) Para modelar un sistema complejo no es suficiente un único modelo se requieren múltiples modelos donde cada uno representa una vista (aspecto) del sistema; estos modelos se complementan entre si.
Esta es la razón de la existencia de varios diagramas en UML que modelan diferentes aspectos del sistema, desde las vistas lógicas y físicas del sistema hasta los aspectos dinámicos, estáticos y funcionales del mismo.
c) Cualquier modelo puede ser representado con diferentes grados de precisión.
La precisión se puede ver desde dos ópticas: La primera es el grado de detalle con que se representa un modelo; por ejemplo, si lo que se desea es razonar acerca de los requerimientos del sistema con un cliente o usuario final, se puede elaborar un diagrama de clases que muestra las clases, sus atributos y operaciones así como varios adornos(multiplicidad) en las relaciones; por otro lado, si lo que se desea es transmitir el diagrama de clases para que sea implementado en un DBMS (Data Base Management System, Sistema Administrador de Bases de Datos) por un programador, el diagrama con toda seguridad contendrá la visibilidad de las características (atributos y operaciones) de las clases, los tipos de datos de los atributos y las signaturas de las métodos de las clases.
La segunda forma de ver la precisión de un modelo se refiere al nivel de abstracción, ese decir, a los detalles y la vista (porción del sistema o realidad) que presenta un modelo al lector; por ejemplo, en un sistema Bancario que maneja los retiros que hacen los clientes ya sea en un cajero automático o humano, el diagrama de clases contiene decenas de éstas; sin embargo las personas encargadas de desarrollar la interfaz de un cajero electrónico estarían interesadas en las clases necesarias para realizar el comportamiento del cajero y omiten el resto de clases del sistema.
d) Los mejores Modelos están ligados a la realidad.
El símbolo de un actor en un diagrama de casos de uso representa, de hecho, un actor en el sistema real; así como un componente en un diagrama de componentes representa un componente físico del software. Cada elemento de UML como una clase, objeto, estado, componente o nodo tiene su correspondencia con algún elemento conceptual o físico del mundo real.
Hoy habia 8 visitantes (10 clics a subpáginas) ¡Aqui en esta página!