1.1 Ingeniería, ingeniería y ciencias de la ingeniería, el SW como artefacto tecnológico.
Actualmente la ingeniería de SW se trata desde la perspectiva de grupos de ingenieros (programadores y diseñadores fundamentalmente, pero también otros roles profesionales como gestores del proceso de desarrollo, analistas, etc.) y no desde la perspectiva de un programador aislado.
DEFINICIÓN DE INGENIERÍA:
Es la aplicación de un enfoque sistemático y cuantificable al desarrollo, la operación y el mantenimiento de una actividad a desarrollar.
De acuerdo a esta definición podemos mencionar que un ingeniero de SW es un desarrollador en sentido amplio, que desempeña un rol como profesional en la producción de SW. Por su parte la definición implica investigación y estudio de las actividades de la ingeniería del SW por lo tanto un ingeniero de SW tiene que tener el perfil de un investigador.
La ingeniería es la ciencia de la producción, la cual junto con la reproducción es la más fundamental en las actividades humanas (Auyang 2004).
La asociación de la ingeniería con la producción es fácilmente identificable en muchas ramas de la ingeniería moderna. Un ingeniero civil, por ejemplo, se especializa en diseñar y construir obras publicas tales como puentes o carreteras, mientras que un ingeniero químico se especializa en la aplicación industrial de la química.
Hoy día además se denomina ingeniería a ciertas sub disciplinas o aspectos muy concretos de disciplinas existentes. Así por ejemplo dentro de las ciencias de la computación se han hecho populares la ingeniería de la usabilidad, cuyo objeto es diseñar y construir interfaces persona-computadora, y la ingeniería de conocimiento cuyo objeto es producir representaciones del conocimiento para un dominio o propósito dado. En los mismos textos de ingeniería de SW suelen encontrarse referencias a la ingeniería de requisitos como una sub disciplina.
Ya entonces nos damos cuenta que en todo momento esta implícito la palabra disciplina que será la herramienta fundamental que nos ayudará a la construcción o producción de SW. En el terreno del conocimiento, la transición de la artesanía a la ingeniería es fundamentalmente un paso del pensamiento practico desde su intuición hasta el método científico y de la tutela de aprendices a la educación formal universitaria.
Ya entonces podemos enfocar a la ingeniería como el diseño y manufactura de productos complejos.
INGENIERÍA Y CIENCIAS DE LA INGENIERÍA
Las diferentes ramas o disciplinas de la ingeniería difieren en el objeto de la producción, pro todas ellas tienen en común 3 aspectos fundamentales:
a) La ciencia de la ingeniería, que se ocupa de los principios y mecanismos subyacentes de la disciplina.
b) Procesos de diseño, se ocupa en lo general de la fase de conceptualización y una fase de diseño detallado.
c) Aspectos de gestión y organización, pues como tecnología que se produce implica tanto a personas como a las organizaciones. Además, las propias personas que crean tecnología no suelen trabajar aisladas si no en equipos y organizaciones.
En el caso de la ingeniería de SW las actividades de diseño serian asimilables a lo que normalmente conocemos como desarrollo. Evidentemente la ciencia de la computación está asociada a esta ingeniería pues abarca principios matemáticos y físicos en el sentido más amplio de los sistemas basados en pc. Mas sin en cambio es importante distinguir entre ciencia de la computación e ingeniería de SW, ya que lo especifico de esta última es lo concerniente al diseño y uso del SW, utilizando el conocimiento que es objeto de la ciencia de la computación. Dentro de la ciencia de la Ing. del SW hay que separar los conocimientos científicos que se aplican en la misma y por tal motivo se practican, como son:
a) Las ciencias que se aplican en la Ing. del SW son la ciencia de la computación y otras ciencias que son de utilidad para aspectos determinados como los relativos a las organizaciones, la economía, la psicología y por supuesto las matemáticas en general. Así como estas ciencias también se requiere de conocimientos de física mientras que por ejemplo para el desarrollo de un SAW para biotecnología serán necesarios ciertos conocimientos de biología.
b) La ingeniería de SW como ciencia es la aplicación del método científico relacionado con la teoría y la creación del conocimiento. Está dedicada al conocimiento de actividades y centrada en generar teorías, modelos explicativos o enunciados descriptivos sobre la práctica de la ingeniería. “las leyes de evolución del SW (lehman, Ramil 2003) son enunciados teóricos sobre el mantenimiento del SW. Uno de estos enunciados puede ser “a medida que un programa evoluciona, su complejidad aumenta a menos que se dedique un esfuerzo especifico a reducir o mantener constante dicha complejidad”. En realidad, los ingenieros en SW desconocen estas leyes, aunque en su vida diaria las practiquen y ejecuten.
EL SOFTWARE COMO ARTEFACTO TECNOLOGICO
El SW es la tecnología o producto resultante de las actividades de ingeniería del SW. Se tiene que tener en cuenta que el SW como tal tienen una naturaleza que lo diferencia de otros productos, lo que hace que tenga una problemática en especial. En años atrás se ha venido manejando el termino (crisis del SW) haciendo referencia a ciertos problemas específicos y persistentes de la ingeniería del SW.
Podemos clasificar estos problemas como problemas asociados al desarrollo tales como:
a) Retrasos en los plazos de los proyectos o la baja productividad de los desarrolladores.
b) Problemas de uso de los productos finales, como por ejemplo la calidad deficiente. A parte del evidente problema de carácter económico que provocan los retrasos y las diferencias en la estructura que se planteó al inicio del proyecto. Existen además consecuencias de carácter social, el cual implica la resistencia a la adopción del SW. Es un hecho que la ingeniería del SW es una actividad compleja y difícil de gestionar esto debido a la misma naturaleza del SW.
¿QUE ES EL SOFTWARE?
El termino SW puede atribuirse a (John W. Tukey) quien, en su artículo publicado en 1957, introdujo por primera vez el termino SW quien era un sinónimo de programa de computadora es decir un artefacto que proporciona las instrucciones necesarias para que una computadora lleve a cabo una tarea. Esta definición en la actualidad es demasiado especifica pro nos sirve como base para definir al SW como un conjunto completo de programas, procedimientos y documentación relacionada que se asocia con el sistema y especialmente con un sistema de cómputo. En un sentido especifico, un SW lo podemos ubicar como un programa de computadora, pero lo más importante es tener en cuenta que un programa de computadora por muy sencillo que sea debe contener la documentación necesaria que lo describe (los manuales de usuario), los procedimientos para su instalación o modificación e incluso los datos necesarios para su operación. Un aspecto adicional es que un software siempre va a estar destinado a evolucionar.
Otros productos de ingeniería como los aviones o los automóviles no cambian tan fácilmente durante su tiempo de vida, punto importante que diferencia a un desarrollador de SW.
1.2 SISTEMATIZIDAD DISCIPLINA Y CUANTIFICACIÓN
Ya se ha mencionado que la ingeniería como disciplina profesional y de carácter industrial, hace referencia a la forma de cómo se va a estructurar un SW. Se menciona 3 calificativos que pueden aplicarse a la ingeniería: sistematización, disciplina y cuantificación.
El termino sistemático es cuando “sigue un sistema” así diremos que una actividad es sistemática cuando es metódica en cuanto al procedimiento o al plan por otra parte una actividad es disciplinada cuando está sujeta a un control con respecto a ciertos estándares, entendiendo el termino estándar como una norma o patrón y no como una especificación formal respaldad por un organismo de estandarización.
Decimo que una actividad es cuantificable si tanto su relación como sus resultados pueden medirse. Tanto el producto final del desarrollo, como el propio proceso de desarrollo del SW normalmente pueden ser sometidos a medición con diferentes fines.
Reafirma lo anterior que la programación como actividad casual o esporádica no puede ser considerada ingeniería de SW, esto no quiere decir que dicha actividad no tiene valor o que no pueda producir resultados interesantes. En el caso de que la sistematicidad y la disciplina se consideren desde la perspectiva individual, solo hay ingeniería cuando exista un plan y una referencia ce como se deben hacer las cosas.
Un ejemplo de esta perspectiva individual es denominado proceso de SW personal (psp) un conjunto de buenas prácticas para el desarrollo de SW que se encuentra como disciplina individual en los ingenieros dedicados al desarrollo de SW.
Entre las recomendaciones del PSP, se menciona el control del tiempo que se materializa a nivel personal en el registro de los tiempos que se resumen semanalmente durante el desarrollo de un SW.
El PSP enfatiza la medición detallada del trabajo individual y su uso para valorar el proceso y la eficiencia en el desarrollo. Su interés radica en que reproduce a escala personal los problemas más importantes de la gestión de la ingeniería de SW (estimación, planificación, seguimiento) los cuales fortalecen el desarrollo de un proyecto.
La metodología, es decir la búsqueda de marcos normativos para las actividades de la ingeniería del software, ha sido un elemento central en el desarrollo de la disciplina. Es importante resaltar que desde los inicios de la disciplina del software existen recomendaciones curriculares internacionales para estudios de grado que diferencian la ingeniería del software con otras disciplinas relacionadas con la computación, como los sistemas de información, las ciencias de la computación y otras. En las recomendaciones ampliamente aceptadas se encuentra la ingeniería del software es más que codificación, pues incluye calidad, planeación y aspectos económicos, así como el conocimiento y aplicación del principios y disciplinas.
Elementos de la ingeniería del software como disciplina profesional
En muchas disciplinas de ingeniería, la acreditación de los profesionales y la existencia de directrices comunes para la elaboración de currículos y planes de estudio son asuntos a los que se presenta una especial dedicación.
En una conferencia de desarrolladores de software un ponente lanza una pregunta a los asistentes “si estuviesen ustedes subiendo a un avión y les dijeran que el software de control del aparato fue desarrollado por el equipo de programadores de su empresa, quién de los presentes desembarcaría de inmediato”. Todos los esfuerzos mencionados en la ingeniería del diseño de software han servido para que poco a poco la profesión valla teniendo reconocimiento y para que la industria demandé este tiempo de expertos.
Como toda ingeniería dónde se crean objetivo como una cierta función, la ingeniería del software trata fundamentalmente de actividades llevadas a cabo por personas que producen, usan o modifican artefactos. Esas actividades no son espontáneas sino que responden a planes parciales o totalmente escritos. Es por ello que hay que considerar también elementos como métodos, especificaciones y modelos entre otros.
Actividades y artefactos
Una actividad es un proceso que tiene lugar en el tiempo y espacio, y en el cual un agente actúa como uno de los objetivos determinados. Las actividades en la ingeniería del software abarcan cualquier acción con el propósito claro de la ingeniería, lo que incluye actividades de gestión, producción, comunicación y documentación.
Artefacto
Un artefacto es algo tangible creado con un propósito práctico. Son artefactos de ingeniería de software todos aquellos elementos creados en actividades propias de la disciplina, tales como los documentos o diagramas entre otros.
Todos los artefactos tienen un carácter de “elementos de información” ya que todos son susceptibles de proporcionar información en el proceso de ingeniería.
Por tanto la realidad de la ingeniería del software se materializa en términos de actividades, de sus participantes y de los artefactos que producen, transforman o utilizan.
No obstante esta caracterización no tiene en cuenta las actividades que no se producen de manera casual sino que siguen un guion establecido ya que debe de haber un enfoque sistémico y disciplinado.
METODOS, ESPECIFICACIONES Y MODELOS.
Las actividades que tienen lugar y los artefactos que se crean en la ingeniería de SW tienen una serie de prescripciones, es decir están sujetos a normas que dictan como deben hacerse. Estas normas provienen de la necesidad de crear conocimiento o de hacer pruebas de una manera determinada o bien de experiencias y hasta de la intuición o el sentido comun de una persona o grupo. Sin importar de donde vengan, es claro que la actividad de ingeniería esta sujeta a ciertas prescripciones; el termino método es uno de los mas utilizados para referirse a ellas. Los métodos imponen estructura la actividad de ingeniería de SW con el objetivo de hacerlas mas sistemáticas y finalmente mas exitosas.
DEFINICIÓN: un método en sentido gral es la especificación de una secuencia de acciones orientadas a un propósito determinado. En el área de la ingeniería de SW, los métodos determinan el orden y la forma de llevar acabo las actividades.
El termino metodología hace referencia al estudio de los métodos, aunque también pueden utilizarse para hacer referencia a un conjunto coherente de métodos.
DEFINICIÓN: metodología se define como un conjunto de métodos coherentes y relacionados por principios comunes. En sentido gral se define como la ciencia del método o el estudio de los métodos de una disciplina o actividad. En la ingeniería de SW se habla de metodologías estructuradas o metodologías orientadas a objetos haciendo referencia a términos que originan el desarrollo de un SW.
DEFINICIÓN: una especificación es una descripción detallada y precisa de algo que existe o de una cierta situación presente o futura. En la ingeniería del SW una especificación de SW que se desea construir da lugar a especificaciones ejecutables denominadas programas de computadora.
Las especificaciones como elemento de información, es una parte fundamental de toda disciplina de ingeniería. Para elaborarlas se emplean lenguajes o notaciones de diferente tipo. En muchas ocasiones se utiliza el lenguaje natural para crear lo que se denomina algoritmo esto por la finalidad de crear o simular una comunicación entre el programador y los objetos a desarrollar. Por ello hay lenguajes visuales que permiten o que emplean diagramas e iconos para facilitar la comunicación. También existen lenguajes formales en los que se utilizan notación matemática para alcanzar un grado mayor de precisión y eliminar errores.
PROCESOS Y CICLO DE VIDA
El termino actividad proporciona una descripción muy general de lo que se hace en ingeniería de SW. Aunque finalmente todo se reduce a actividades, métodos y modelos para desarrollar y ejecutar un SW que permita una experiencia al programador. Un concepto muy utilizado es el llamado ciclo de vida de un SW, el cual trata del periodo del tiempo, que comienza cuando se desarrolla un SW y se ejecuta por primera vez y termina cuando el producto deja de usarse.
DEFINICIÓN: el ciclo de vida de un producto o proyecto es la evolución del mismo desde el momento de su concepción hasta el momento en que deja de usarse, y puede describirse en función de las actividades que se realizan dentro de él. El ciclo de vida de un SW también abarca su evolución y mantenimiento.
Debe quedar claro que en estos casos no se esta haciendo referencia al ciclo de vida de un SW determinado, sino a una especificación de las que deben ser las fases o el curso general de la ingeniería del SW. En realidad seria mas conveniente emplear un modelo de ciclo de vida de SW que se amolde o que cumpla con las características de las actividades a realizar.
1.4 Métodos, especificaciones y modelos
Las actividades que tienen lugar y los artefactos que se crean en la ingeniería de software tienen una serie de prescripciones, es decir están sujetos a normas que dictan como deben hacerse. Estas normas provienen de la necesidad de crear conocimiento o de hacer pruebas de una manera determinada o bien de experiencias y hasta de la intuición o el sentido común de una persona o un grupo. Sin importar de donde vengan, es claro que la activad de ingeniería está sujeta a ciertas prescripciones; el termino método es uno de los más utilizados para referirse a ellas. Los métodos imponen estructura a la actividad de ingeniería de software con el objetivo de hacerlas más sistemáticas y finalmente más exitosas.
Definición: Un método en sentido general es la especificación de una secuencia de acciones orientadas a un propósito determinado. En el área de la ingeniería de software los métodos determinan el orden y la forma de llevar a cabo las actividades.
El termino metodología hace referencia al estudio de los métodos, aunque también pueden utilizarse para hacer referencia a un conjunto coherente de métodos.
Definición: Metodología se define como un conjunto de métodos coherentes y relacionados por principios comunes. En sentido general se define como la ciencia del método o el estudio de los métodos de una disciplina o actividad.
En la ingeniería de software se habla de metodologías estructuradas o metodologías orientadas a objetos haciendo referencia a términos que originan el desarrollo de un software.
Definición: Una especificación es una descripción detallada y precisa de algo que existe o de una cierta situación presente o futura. En la ingeniería del software una especificación del software que se desea construir da lugar a especificaciones ejecutables denominadas programas de computadora.
Las especificaciones como elemento de información, es una parte fundamental de toda disciplina de ingeniería. Para elaborarlas se emplean lenguajes o notaciones de diferente tipo. En muchas ocasiones se utiliza el lenguaje natural para crear lo que se denomina algoritmo esto por la finalidad de crear o simular una comunicación entre el programador y los objetos a desarrollar. Por ello hay lenguajes visuales que permiten o que emplean diagramas e iconos para facilitar la comunicación. También existen lenguajes formales en los que se utiliza notación matemática para alcanzar un grado mayor de precisión y eliminar errores.
Procesos y ciclos de vida
El termino actividad proporciona una descripción muy general de lo que se hace en ingeniería de software. Aunque finalmente todo se reduce a actividades, métodos y modelos para desarrollar y ejecutar un software que permita una experiencia al programador. Un concepto muy utilizado es el llamado ciclo de vida de un software, el cual trata del periodo de tiempo, que comienza cuando se desarrolla un software y se ejecuta por primera vez y termina cuando el producto deja de usarse.
Definición: El ciclo de vida de un producto o proyecto es la evolución del mismo desde el momento de su concepción hasta el momento de que deja de usarse, y puede describirse en función de las actividades que se realizan dentro de él. El ciclo de vida de un software también abarca su evolución y mantenimiento.
Debe quedar claro que en estos casos no se está haciendo referencia al ciclo de vida de in software determinado, sino a una especificación de las que deben ser las fases o el curso general de la ingeniería del software. En realidad, sería más conveniente emplear un modelo de ciclo de vida de software que se amolde o que cumpla con las características de las actividades a realizar.
Un término relacionado también con un software es el llamado proceso que se puede entender como una secuencia de pasos a cabo para un propósito específico o también una secuencia de actividades que comparten un propósito.
Definición: Un proceso dentro de la ingeniería del software es un conjunto coherente de políticas, estructuras organizativas, tecnologías, procedimientos y artefactos que se necesitan para desarrollar, implementar y mantener un producto llamado software.
En realidad, puede afirmarse que un modelo de proceso es equivalente a una metodología en términos de ingeniería de software. Es por ello que los modelos de ciclo de vida no son otra cosa que modelos de procesos pues un modelo de ciclo de vida describe las fases fundamentales o los pasos a seguir para la solución de un problema.
Es importante resaltar que no existe un único proceso correcto para la ingeniería de software, pero si un cierto número de procesos concretos.
Con lo anterior se ha situado a la ingeniería del software como parte de las disciplinas de la ingeniería, resaltando aquellos aspectos que tiene su origen en el desarrollo de software.
La disciplina como ya se ha mencionado puede verse como un conjunto de actividades de propósito específico, que proporciona como resultado un artefacto. Estas actividades no se desarrollan de manera casual, sino que siguen ciertos métodos que describen la forma de hacer las cosas más efectivas según las circunstancias particulares de cada situación en la que nos encontremos. Pero además de todo esto se estudia los fundamentos de carácter científico de la ingeniería de software que hacen de ella una ciencia.
Análisis de la ingeniería de software
La crisis del software no es un evento histórico concreto, sino un fenómeno asociado la disciplina en sí misma. Dicho fenómeno se identificó en la década de los 60s, pero persiste en nuestros días.
La ingeniería de software es una disciplina que estudia como desarrollar software de manera metódica de acuerdo a ciertas restricciones. En este sentido, el conocimiento sobre como optimizar el rendimiento de un sistema informático es útil, pero no es el aspecto central de la disciplina.
El uso de técnicas formales en ingeniería de software s útil especialmente en casos en los que se refiere a una alta fiabilidad del diseño. No obstante, los métodos matemáticos son conocimiento y técnicas auxiliares a la ingeniería de software.
Si se presupone que el software es un producto inherente o complejo, no puede existir un método que elimine totalmente el esfuerzo necesario para tratar cierta complejidad. Posiblemente aparecerían técnicas novedosas que proporcionen resultados mejores, pero la complejidad inherente al software seguiría haciendo de la ingeniería de software una actividad con características especiales.
Los roles profesionales en una organización de desarrollo de software es un aspecto de la ingeniería del software no solamente en los aspectos técnicos del desarrollo sino también a los organizativos.
Esencialmente una métrica es la interpretación de una o varias mediciones de un cito atributo de software (producto) o delas actividades de ingeniería de software (proceso). Esa interpretación habitualmente se basa en estudios estadísticos que relacionan las medidas con el atributo observado.
Por otra parte, la sistematicidad, disciplina y cuantificación son las tres características fundamentales de la ingeniería de software.
Se puede decir que un método es la forma de realizar una actividad de ingeniería de software de manera sistemática y siguiendo pasos establecidos, mientras que un proceso se aplica a todo el ciclo del software o al conjunto de actividades del mismo, esto sería la diferencia entre un método y un proceso.
Se puede considerar que el registro de las horas de trabajo en cada módulo de los programadores en un proyecto es un artefacto de ingeniería de software ya que es un producto tangible de una actividad. Además, ese tipo de información es útil para la ingeniería por varios motivos por ejemplo para medir cuantitativamente el esfuerzo con el fin de conocer más sobre la productividad de las organizaciones.
El tamaño del software es importante en el contexto de ingeniería de software como medición de la complejidad y el esfuerzo de desarrollo. El tamaño en bites de los ficheros no es una medida que interese ya que depende mucho del estilo de codificación y también de la cantidad de comentarios, por ejemplo, la cuenta de las líneas de código, consideradas simplemente como líneas de un fichero fuente disminuye el costo de un software. La cuenta de las sentencias es más significativa ya que es una medida independiente de los comentarios y la longitud de los indicadores.
El proceso de software personal (PSP) es una definición de proceso de ingeniería de software orientada a un uso individual, que se utiliza en ocasiones para aprender conceptos de procesos de software. Una de las guías que proporciona es la de desarrollo.
Entradas necesarias para el desarrollo de un software:
Actividades del diseño de software.
Actividades de compilación del software
Actividades de prueba de software
Criterios de salida
El registro de defectos es una política de control útil para el seguimiento de estado del código. Las pruebas son un artefacto, aunque no se especifican como salida ya que son un elemento de uso interno en el tipo de actividad descrito.
1.5 La naturaleza del software
En la actualidad el software juega un papel muy importante en los dispositivos digitales. Es un producto y al mismo tiempo es una forma de entregar un producto. Brinda el potencial de computo incorporado al hardware que hace de forma individual o en red.
Dominios de aplicación del software
Actualmente hay 7 grandes categorías del software que plantea retos para los ingenieros en software; esto serian:
Computación en un mundo abierto
El rápido crecimiento de las redes inalámbricas nos lleva a la computación ubicua y distribuida. El reto pata los ingenieros en software será desarrollar software de sistemas y aplicación que permita a dispositivos móviles, computadoras personales y sistemas empresariales, comunicarse a redes a gran escala.
Construcción de redes
La red mundial (www) se está convirtiendo tanto en un motor de la computación como en un proveedor de contenidos. El reto para los ingenieros de software es diseñar arquitecturas sencillas. Por ejemplo, planeaciones financieras personales y aplicaciones que proporcionen un beneficio en los mercados en los que el usuario se vincule en la adquisición de productos y servicios.
Fuente abierta
Tendencia creciente que da como resultado la distribución de código fuente para aplicaciones de sistemas. Por ejemplo, sistemas operativos, bases de datos y ambientes de desarrollo de tal forma que la gente pueda contribuir en el desarrollo. Esto permitirá a los desarrolladores de software, desarrollar técnicas que permitan saber cuáles son los cambios hechos y como se visualizan dentro de un software.
1.6 Modelado de los requerimientos en el diseño de software
El modelado de los requerimientos utiliza una combinación de texto y diagramas para ilustrarlos de forma que sea relativamente de entender y corregir, complementar y hacer congruencias.
El modelado de requerimientos esta a cargo del ingeniero de software(analista) el cual construye el modelado con base a los requerimientos del cliente.
Un modelado de requerimientos es importante al validar el contenido del software y necesita ser estudiado desde diferentes puntos de vista
El modelado basado en escenarios es una representación del sistema desde el punto de vista del usuario y de las actividades que se realizan y se pretenden automatizar.
El modelado basado en datos recrea el espacio de información e ilustra los objetos de datos que manipulará el software y las relaciones entre ellos.
El modelado orientado en clases, define objetos, atributos y relaciones. Una vez que se crean los modelos preliminares, se mejoran y se analizan para evaluar si están claros y completos.
Para construir el modelo de requerimientos se escoge una amplia variedad de representaciones basadas en texto y en diagramas, cada una de estas da una perspectiva de uno o mas de los elementos del modelo.
Los productos del trabajo para modelar los requerimientos deben revisarse para saber si son correctos. Deben reflejar las necesidades del cliente y establecer el fundamento para realizar el diseño del software.
Existen otros modelos de requerimientos que pueden implementarse de acuerdo a las necesidades del cliente, tales como: