República Bolivariana de Venezuela
Ministerio del Poder Popular para la Educación Universitaria
Universidad Politécnica Territorial “José Antonio Anzoátegui”
El Tigre, Estado Anzoátegui
Fundamentos
de la
Ingeniería del Software.
Informática IF03
Campero, A.
López, K.
Marcano, N.
Tineo, S.
Conceptos y definiciones
Es el conjunto de instrucciones que una computadora debe seguir,es decir, todas aquellas indicaciones sobre lo que tiene que hacer y cómo.
El concepto de software engloba todo aquello que es intangible en la computadora, lo que no se puede tocar, como, por ejemplo, los programas y los sistemas operativos.
Esta definición contrasta con hardware, que se refiere a los componentes físicos de la computadora, aquellos dispositivos, aparatos y equipos que pueden ser tocados, vistos y manipulados. Sin el software, no importa lo grande o costoso que sea el hardware, este no funcionará.
De hecho, la palabra software proviene del inglés; significa "mercancía suave", en contraposición con hardware, que significa "mercancía dura". Hoy en día, la palabra software se ha globalizado como sinónimo de las instrucciones de las computadoras.
Si comparamos una computadora con un ser humano, el software vendrían a ser como las señales del sistema nervioso que controlan el funcionamiento del cuerpo.
En la actualidad, se usan softwares para controlar prácticamente cualquier aparato electrónico. Se encuentran en los sistemas de control de aviones, transportes y plantas de energía. También en los aparatos electrónicos que usamos frecuentemente, como hornos, microondas, televisión y refrigeradores.
El software forma parte de lo que denominamos un Sistema informático (SI), que son los sistemas usados para elaborar, almacenar y procesar información; donde el software es la parte lógica de estos sistemas (también denominados programas) en contraposición a la parte física, el hardware.
Buscan solucionar los problemas planteados por el usuario final; motivo por el cual la amplia mayoría de ellos están diseñados para que la comunicación e interacción con dicho usuario sea posible de forma sencilla.
Es una parte crucial del funcionamiento de tu equipo y aparece en él en diversas formas y funciones; no sólo nos ayuda a resolver los problemas que planteamos a nuestros dispositivos, si no que toman parte más allá, en acciones que el usuario medio no es consciente.
Cualidades del Software
Las características deseables en un producto de software son:
- ·
Corrección. Que cumpla con
su objetivo.
- ·
Usabilidad. Que sea fácil
de aprender.
- ·
Seguridad. Que sea
resistente a ataques externo.
- ·
Flexibilidad. Que pueda
ser modificado por los desarrolladores.
- ·
Portabilidad. Que pueda
ser utilizado en diversos equipos.
Sin embargo, no todos los productos de
software cumplen con estos requisitos, ya que priorizan uno u otro dependiendo
del uso que se le dará.
Factores de calidad del software
La obtención de un software con calidad implica la utilización de metodologías o procedimientos estándares para el análisis, diseño, programación y prueba del software que permitan uniformar la filosofía de trabajo, en aras de lograr una mayor confiabilidad, mantenibilidad y facilidad de prueba, a la vez que eleven la productividad, tanto para la labor de desarrollo como para el control de la calidad del software.Los factores de calidad sirven para descomponer el concepto genérico de “calidad” en otros más sencillos, para facilitar su control y su medición.
Funcionalidad: capacidad de un producto software para proporcionar funciones que cubran las necesidades explícitas e implícitas cuando el software es utilizado bajo las condiciones especificadas.
- Fiabilidad: capacidad del producto software para mantener un nivel especificado de rendimiento cuando es usado bajo las condiciones especificadas.
- Usabilidad: capacidad de un producto software para ser entendido, aprendido, usado y atractivo para el usuario, cuando es usado bajo las condiciones especificadas.
- Eficiencia: capacidad de un producto software para proporcionar un rendimiento adecuado, relativo a la cantidad d recursos utilizados, bajo unas condiciones establecidas.
- Mantenibilidad: capacidad de un producto software para ser modificado. Las modificaciones pueden incluir correcciones, mejoras o adaptaciones del software a cambios en el entorno, en los requerimientos o las especificaciones funcionales.
- Portabilidad: capacidad del producto software para ser transferido de un entorno a otro.
- Efectividad: capacidad para permitir al usuario alcanzar objetivos especificados con precisión e integridad en un contexto especificado de uso.
- Productividad: capacidad para permitir al usuario utilizar cantidades apropiadas de recursos en relación a la efectividad alcanzada en un contexto especificado de uso.
- Seguridad: capacidad para alcanzar niveles aceptables de riesgo de daño para las personas, software, equipos o entorno en un contexto especificado de uso.
- Satisfacción: capacidad para satisfacer a los usuarios en un contexto especificado de uso.
Ingeniería del software
La Ingeniería de Software es la rama de la ingeniería que estudia todo lo relacionado con la informática o sistemas de computación, con una orientación metódica, ordenada y cuantificable al incremento, ejecución y conservación del software.Incorpora el análisis precedente de la situación, el bosquejo del proyecto, el desarrollo del software, el ensayo necesario para comprobar su funcionamiento correcto y poner en funcionamiento el sistema.
Se debe señalar, que el desarrollo del software va unido a lo que se conoce en el campo del software “ciclo de vida del software” que consiste en cuatro etapas que se conocen como: concepción, elaboración, construcción y transición.
El término Ingeniería del Software, surge cuando se llevaba a cabo dos conferencias estructuradas por la OTAN en los años en 1967 y 1968.
Es para mediados de la década los 70, cuando los sistemas informáticos incrementaron la dificultad y dan pie a la creación de las redes de computadoras.
Visión general del proceso de desarrollo de software
-El papel del usuario dentro del proceso de desarrollo de software
Es una estructura aplicada al desarrollo de un producto de software. Hay varios modelos a seguir para el establecimiento de un proceso para el desarrollo de software, cada uno de los cuales describe un enfoque diferente para diferentes actividades que tienen lugar durante el proceso. Algunos autores consideran un modelo de ciclo de vida un término más general que un determinado proceso para el desarrollo de software. Por ejemplo, hay varios procesos de desarrollo de software específicos que se ajustan a un modelo de ciclo de vida de espiral.
Responsabilidad ética profesional de la Ing. del Software
En la profesión de un ingeniero en software se conocen unas normas de ética y responsabilidad que los identifica como verdaderos profesionales.“Los ISW deben aceptar que su trabajo comprende responsabilidades más amplias que simplemente la aplicación de habilidades técnicas.”
Cada ingeniero debe de conocer que su trabajo debe ser únicamente beneficioso para el bienestar social, claro esto es ética y nada te impide hacer lo contrario a menos que este marcado legalmente.
“Los ingenieros de software deberán comprometerse consigo mismos en convertir el análisis, especificación, diseño, desarrollo, prueba y mantenimiento de software en una profesión respetable y beneficiosa.”
De acuerdo con su compromiso con la salud, seguridad y bienestar del público, los Ingenieros de Software deberán apegarse a ocho principios:
- PÚBLICO - Los Ingenieros de Software deberán actuar consistentemente con el interés público.
- CLIENTE Y EMPLEADOR - Los Ingenieros de Software deberán actuar de una forma determinada que esté en los mejores intereses de su cliente y empleador consistente con el interés público.
- PRODUCTO- Los Ingenieros de Software deberán asegurar que sus productos y modificaciones relacionadas logren el más alto estándar profesional posible.
- JUICIO - Los Ingenieros de Software deberán mantener integridad e independencia al emitir su juicio profesional.
- GERENCIA - Los gerentes y líderes de Ingeniería de Software deberán suscribirse y promocionar un enfoque ético para la gerencia de desarrollo y mantenimiento de software.
- PROFESIÓN - Los Ingenieros de Software deberán fomentar la integridad y reputación de la profesión consistente con el interés público.
- COLEGAS - Los Ingenieros de Software deberán ser justos y comprensivos con sus colegas.
- INTERÉS PROPIO - Los Ingenieros de Software deberán participar en el aprendizaje de por vida del ejercicio de su profesión y deberán promover un enfoque ético para el ejercicio de la misma.
Ciclo de vida del software
Al igual que en otros sistemas de ingeniería, los sistemas de software requieren un tiempo y esfuerzo considerable para su desarrollo y deben permanecer en uso por un periodo mucho mayor. Durante este tiempo de desarrollo y uso, desde que se detecta la necesidad de construir un sistema de software hasta que este es retirado, se identifican varias etapas que en conjunto se denominan el ciclo de vida del software y en cada caso, en función de cuales sean las características del proyecto, se configurará el ciclo de vida de forma diferente. Usualmente se consideran las etapas: especificación y análisis de requisitos, diseño del sistema, implementación del software, aplicación y pruebas, entrega y mantenimiento. Un aspecto esencial dentro de las tareas del desarrollo del software es la documentación de todos los elementos y especificaciones en cada fase. Dado que esta tarea siempre estará influida por la fase del desarrollo en curso, se explicará de forma distribuida a lo largo de las diferentes fases como un apartado especial para recalcar su importancia en el conjunto del desarrollo del software.Tal como ya hemos mencionado, las etapas principales a realizar en cualquier ciclo de vida son:
- Análisis: Construye un modelo de los requisitos
- Diseño: A partir del modelo de análisis se deducen las estructuras de datos, la estructura en la que descompone el sistema y la interfaz de usuario.
- Codificación: Construye el sistema. La salida de esta fase es código ejecutable.
- Pruebas: Se comprueba que se cumplen criterios de corrección y calidad.
- Validación: es el proceso de comprobar que lo que se ha especificado es lo que el usuario realmente quería.
- Mantenimiento: En esta fase, que tiene lugar después de la entrega se asegura que el sistema siga funcionando y adaptándose a nuevos requisitos.
Principios, modelos, métodos, metodologías técnicas, actividades y herramientas en el proceso de desarrollo de software
- PrincipiosExisten una serie de principios que todo desarrollador debe conocer si quiere ser eficiente y productivo:
KISS: Keep It Simple, stupid(Mantenlo simple)
DRY: Don’t repeat yourself (No trabajes doble)
YAGNI: You aren’t gonna need it(SI no lo necesitas no lo uses)
Principios SOLID: Para programación orientada a Objeto.
El primero que notamos en la lista con un nombre un poco chocante, también conocido como ley de parsimonia.(Puede ser aplicado a distintas aréas)
El principio KISS establece que la mayoría de sistemas funcionan mejor si se mantienen simples que si se hacen complejos; por ello, la simplicidad debe ser mantenida como un objetivo clave del diseño, y cualquier complejidad innecesaria debe ser evitada.
En resumidas cuentas, nos advierte del riesgo de escribir código de forma muy general, debemos escribir código de una manera directa, concentrando nuestras energías en una solución particular que resuelve el problema en cuestión.
Don’t repeat yourself (DRY), a menudo en trabajos colaborativos ocurre la redundancia y repetición de código, debido a la falta de comunicación y carencia de especificaciones de diseño. Esto puede causar ciertos problemas sútiles y otros no tanto, que luego dificultaran los cambios y mantener la consistencia. Si seguimos este principio en todas las etapas del desarrollo mantendremos la consistencia y evitaremos esfuerzos adicionales.
You aren’t gonna need it (YAGNI), este principio va de la mano con el principio KISS, y nos advierte sobre escribir código de la forma más general, para «anticipar cambios futuros» , la intención es buena, pero en la mayoría de los casos suele ser código inútil.
- Modelos
Los estándares establecen los diferentes procesos implicados a la hora de desarrollar y mantener un sistema desde que surge la idea o necesidad de desarrollar las aplicaciones hasta que éstas se retiran de explotación. Sin embargo, ninguno impone un modelo de procesos concreto (modelo de ciclo de vida) ni cómo realizar las diferentes actividades incluidas en cada proceso, por lo que cada empresa deberá utilizar los métodos, técnicas y herramientas que considere oportuno.
Por su naturaleza, los modelos son simplificaciones; por lo tanto, un modelo de procesos del software es una simplificación o abstracción de un proceso real. Podemos definir un modelo de procesos del software como una representación abstracta de alto nivel de un proceso software.
Cada modelo es una descripción de un proceso software que se presenta desde una perspectiva particular. Alternativamente, a veces se usan los términos ciclo de vida y Modelo de ciclo de vida.
Cada modelo describe una sucesión de fases y un encadenamiento entre ellas. Según las fases y el modo en que se produzca este encadenamiento, tenemos diferentes modelos de proceso. Un modelo es más adecuado que otro para desarrollar un proyecto dependiendo de un conjunto de características de éste. Existe una gran variedad de modelos diferentes entre los que tenemos los que se describen a continuación.
Modelo en cascada o lineal secuencial
Características del modelo:
Primer modelo empleado (Royce, 1970), también denominado ciclo de vida clásico y modelo lineal secuencial. Consiste en la ejecución secuencial de una serie de fases que se suceden, lo que da nombre al modelo. Cada fase genera documentación para la siguiente. Esta documentación debe ser aprobada. Una fase no comienza hasta que la anterior ha terminado. Requiere disponer de unos requisitos completos y precisos al principio del desarrollo.
Modelo en cascada con prototipado desechable
Trata de resolver algunos de los inconvenientes que presenta el modelo en cascada, fundamentalmente el problema que representa disponer de unos requisitos completos y consistentes al principio del desarrollo y la detección de errores en la fase de integración provenientes de la fase de análisis. Características del modelo: Divide el ciclo de vida en dos partes. En la parte A, se construye un prototipo rápido o desechable, que ayudará a refinar y validar los requerimientos. En la parte B, el desarrollo posterior prosigue en cascada.
La metodología de desarrollo de software en ingeniería de software es un marco de trabajo usado para estructurar, planificar y controlar el proceso de desarrollo en sistemas de información.
Cada metodología de desarrollo de software tiene más o menos su propio enfoque para el desarrollo de software. Estos son los enfoques más generales, que se desarrollan en varias metodologías específicas. Estos enfoques son los siguientes:
- Modelo en cascada: Framework lineal.
- Prototipado: Framework iterativo.
- Incremental: Combinación de framework lineal e iterativo.
- Espiral: Combinación de framework lineal e iterativo.
- RAD: Rapid Application Development, framework iterativo.
El "desarrollo ágil de software" se refiere a un grupo de metodologías de desarrollo de software basadas en el desarrollo iterativo, donde los requisitos y las soluciones evolucionan a través de la colaboración entre equipos multifuncionales autoorganizados. El término fue acuñado en el año 2001 cuando se formuló el Manifesto Ágil.
El desarrollo ágil de software utiliza el desarrollo iterativo como base, pero aboga por un punto de vista más ligero y más centrado en las personas que los enfoques tradicionales. Los procesos ágiles incorporan fundamentalmente la iteración y la retroalimentación continua que proporciona para refinar y entregar sucesivamente un sistema de software.
Hay muchas metodologías ágiles, incluyendo:
-Método de desarrollo de sistemas dinámicos (DSDM)
-Kanban
-Scrum
Desarrollo en cascada
El modelo en cascada es un enfoque de desarrollo secuencial, en el que se considera que el desarrollo fluye constantemente hacia abajo (como una cascada) a través de varias fases, típicamente:
- Análisis de requisitos que resulta en una especificación de requisitos de software
- Diseño del software
- Implementación
- Testeo
- Integración, si hay múltiples subsistemas
- Despliegue (o Instalación)
- Mantenimiento
En 1988, Barry Boehm publicó un "modelo espiral" de desarrollo de software formal, que combina algunos aspectos clave del metodologías de creación rápida de prototipos, modelo de cascada y las metodologías de creación rápida de prototipos, en un esfuerzo por combinar las ventajas de los conceptos de arriba había abajo y de abajo hacia arriba. Proporcionó énfasis en un área clave que muchos consideraron que había sido descuidada por otras metodologías: análisis del riesgo iterativo deliberado, particularmente adecuado para sistemas complejos a gran escala.
Los principios básicos son:
- Se centra la atención en la evaluación de riesgos y en minimizar el riesgo del proyecto al dividir un proyecto en segmentos más pequeños y brindar mayor facilidad de cambio durante el proceso de desarrollo, así como brindar la oportunidad de evaluar los riesgos y evaluar la continuación del proyecto a lo largo del ciclo de vida.
- "Cada ciclo implica una progresión a través de la misma secuencia de pasos, para cada parte del producto y para cada uno de sus niveles de elaboración, desde un documento de concepto de operación general hasta la codificación de cada programa individual".8
- Cada viaje alrededor de la espiral pasa por cuatro cuadrantes básicos: determinar objetivos, alternativas, y limitaciones de la iteración; evaluar alternativas; Identificar y resolver riesgos; desarrollar y verificar entregables de la iteración; y planear la iteración próxima.
Planificación
La importante tarea a la hora de crear un producto de software es obtener los requisitos o el análisis de los requisitos. Los clientes suelen tener una idea más bien abstracta del resultado final, pero no sobre las funciones que debería cumplir el software.
Una vez que se hayan recopilado los requisitos del cliente, se debe realizar un análisis del ámbito del desarrollo. Este documento se conoce como especificación funcional.
Implementación, pruebas y documentación
La implementación es parte del proceso en el que los ingenieros de software programan el código para el proyecto de trabajo que está en relación de las demandas del software, en esta etapa se realizan las pruebas de caja blanca y caja negra.
Las pruebas de software son parte esencial del proceso de desarrollo del software. Esta parte del proceso tiene la función de detectar los errores de software lo antes posible.
La documentación del diseño interno del software con el objetivo de facilitar su mejora y su mantenimiento se realiza a lo largo del proyecto. Esto puede incluir la documentación de un API, tanto interior como exterior. Prácticamente es como una receta de cocina.
Despliegue y mantenimiento
El despliegue comienza cuando el código ha sido suficientemente probado, ha sido aprobado para su liberación y ha sido distribuido en el entorno de producción.
Entrenamiento y soporte para el software es de suma importancia y algo que muchos desarrolladores de software descuidan. Los usuarios, por naturaleza, se oponen al cambio porque conlleva una cierta inseguridad, es por ello que es fundamental instruir de forma adecuada a los futuros usuarios del software.
El mantenimiento o mejora de un software con problemas recientemente desplegado, puede requerir más tiempo que el desarrollo inicial del software. Es posible que haya que incorporar código que no se ajusta al diseño original con el objetivo de solucionar un problema o ampliar la funcionalidad para un cliente. Si los costes de mantenimiento son muy elevados puede que sea oportuno rediseñar el sistema para poder contener los costes de mantenimiento.
HERRAMIENTAS PARA EL DESARROLLO DE SOFTWARE
Las Herramientas de Ayuda al Desarrollo de Sistemas de Información, surgieron para intentar dar solución a los problemas inherentes a los proyectos de generación de aplicaciones informáticas: plazos y presupuestos incumplidos, insatisfacción del usuario, escasa productividad y baja calidad de los desarrollos. Algunas de estas herramientas se dirigen principalmente a mejorar la calidad, como es el caso de las herramientas CASE (Computer Aided Software Engineering-Ingeniería de Software Asistida por Ordenador). Otras van dirigidas a mejorar la productividad durante la fase de construcción, como es el caso de los lenguajes de cuarta generación (4GL-Fourth Generation Language).
Herramientas para diseñar software
• Existe al menos 20 herramientas libres para diseñar software totalmente libres.
• Todas utilizan la notación UML
• El nivel de avance entre una y otra es notable, casi todas ofrecen como funcionalidad:
Diagramas de caso de uso.
Diagramas de clases.
Diagramas de secuencia.
• Generación de código en java, c++, python y php.
• Algunas entidad-relación (pero ninguna lo suficientemente avanzada)
• Pocas herramientas permiten ingeniería reversa, y si lo hacen solo es de lenguajes tipo java o c++.
Selección del modelo apropiado según las características de los proyectos del software.
1) El personal de software no entiende las necesidades del los clientes.
2) El ámbito del producto está mal definido.
3) Los cambios se gestionan mal.
4) La tecnología elegida cambia.
5) Las necesidades comerciales cambian.
6) Los plazos de entrega no son realistas.
7) Los usuarios se resisten a la utilización del software.
8) Se pierde el patrocinio.
9) El equipo del proyecto carece de personal con las habilidades apropiadas.
10) Los gestores evitan las mejores prácticas y las lecciones aprendidas.
Para tener éxito en la consecución de un proyecto es necesario comenzar con pie derecho, esto se lo logra trabajando duro para entender el problema y dar una solución adecuada. Se debe rastrear el proyecto conforme se elabora el producto y se aprueba por parte del grupo de control de calidad. Es importante que el gestor del proyecto tome decisiones inteligentes para no poner en riesgo el desarrollo de la solución. Por último, se debe analizar los resultados obtenidos para obtener la experiencia necesaria en la construcción de otros proyectos.
Para el desarrollo de cualquier producto de software se realizan una serie de tareas entre la idea inicial y el producto final, un modelo de desarrollo establece el orden en el que se harán las cosas en el proyecto, provee de requisitos de entrada y de salida para cada una de las actividades, por ello es necesario el modelo de desarrollo.
Dado que cada proyecto es único, no existe un modelo que se aplique al 100% a todos los proyectos de una organización. Una organización puede contar con uno o más modelos de desarrollo para ser utilizados dependiendo del tipo de proyecto.
Los modelos de desarrollo de software son una representación abstracta de una manera en particular. Realmente no representa cómo se debe desarrollar el software, sino de un enfoque común. Puede ser modificado y adaptado de acuerdo a las necesidades del software en proceso de desarrollo. 1 Hay varios modelos para perfilar el proceso de desarrollo, cada uno de las cuales cuenta con pros y contras. El proyecto debería escoger el más apropiado para sus necesidades. En ocasiones puede que una combinación de varios modelos sea apropiado. Existen tres paradigmas de los modelos de desarrollo de software:
1. Paradigma Tradicional: Es uno de los paradigmas más antiguo, se inventó durante la creación del método estructurado. Si se elige un proyecto,el método varia en etapas. Como todo modelo, existen sus pros y contras al usar este paradigmas:
Si se aplica este paradigma, unos de los principales problemas , es que las etapas realizadas deben ser autónoma a la que le sigue, ya que con eso se atrasaría el proyecto. Se tiene que tener pautas bien definidas, y que no se incurra a modificación porque implicaría en que el software no cumpla con su ciclo de vida. Tener en cuenta que el cliente no se vea afectado por la impaciencia.
2. Paradigma Orientado a Objetos: Estos modelos se basan en la Programación orientada a objetos; por lo tanto, se refiere al concepto de clase, el análisis de requisitos y el diseño. El modelo o paradigma orientado a objetos posee dos características principales, las cuales son:
Permite la re-utilización de software.
Facilita el desarrollo de herramientas informáticas de apoyo al desarrollo, el cual es simple al implementarla en una notación orientado a objetos llamado UML.
3. Paradigma de Desarrollo Ágil: Es un paradigma de las Metodologías De Desarrollo basado en procesos ágiles. Estos intentan evitar los tediosos caminos de las metodologías tradicionales enfocándose en las personas y los resultados. Usa un enfoque basado en el Valor para construir software, colaborando con el cliente e incorporando los cambios continuamente.
La ingeniería de software tiene varios modelos o paradigmas para el desarrollo de aplicaciones.
Ejemplos:
- Modelo en cascada
- Modelo en espiral (modelo evolutivo)
- Modelo de prototipos
- Desarrollo iterativo e incremental
Conclusión
Como nos pudimos dar cuenta el software no es cualquier cosa y con el se puede lograr todo lo que queramos, pero sabiendolo manejar correctamente.Hay infinidades de programas pero a medida que las computadoras se vuelven más populares, los desarrolladores de software, constantemente están sacando programas para quitar las tediosas tareas personales y hacerlas mas divertidas. Estos programas pueden ser excelentes herramientas para la educación ya que si los niños disfrutan realizando las tareas jugando, sus habilidades aumentaran.
Todos los días desarrolladores perceptivos encuentran problemas para para ser solucionados con software, y es que la tecnología a avanzado tanto que una persona puede realizar operaciones bancarias desde su casa, enviar un correo electrónico a cualquier parte del mundo, etc.; todo esto por el computador. Y esto es bueno ya que cada día la competencia por crear un mejor software, fomenta a crearlos más imaginativos, mejores y a precios mas y mas baratos.
No hay comentarios.:
Publicar un comentario