Resumen 1° Parcial Ingenieria de software PDF

Title Resumen 1° Parcial Ingenieria de software
Author Rodrigo Bainer
Course Ingeniería de Software I
Institution Universidad de Buenos Aires
Pages 24
File Size 1.3 MB
File Type PDF
Total Downloads 103
Total Views 741

Summary

UNIDAD 1: SOFTWARE E INGENIERIA DE SOFTWARELos desarrollos de software, que por aquel entonces muchas veces provenían en un grupo de programadores entusiastas y autodidactas, que avanzaban a prueba y error, debían comenzar a estandarizarse y profesionalizarse.Los sistemas no podían tener resultados ...


Description

UNIDAD 1: SOFTWARE E INGENIERIA DE SOFTWARE Los desarrollos de software, que por aquel entonces muchas veces provenían en un grupo de programadores entusiastas y autodidactas, que avanzaban a prueba y error, debían comenzar a estandarizarse y profesionalizarse. Los sistemas no podían tener resultados azarosos o depender de la pericia de un programador. Se necesitaban establecer procesos formales como los tenían otras disciplinas. Era necesario empezar a formar profesionales especializados, que fueran capaces de lidiar con la creciente complejidad de los nuevos sistemas. La ingeniería de software es una disciplina de la ingeniería que se interesa por todos los aspectos de la producción de software. Sus actividades fundamentales son la especificación, desarrollo, validación y evolución del software. Existen dos tipos de productos de software:  

Productos genéricos: sistemas independientes que se producen por una organización de desarrollo y se venden en el mercado abierto a cualquier cliente. Productos personalizados o a la medida: son sistemas destinados para un cliente particular. Un contratista de software desarrollo el programa especialmente para dicho cliente.

Las características que debe poseer el producto son: -

-

-

Mantenimiento: el software debe escribirse de forma tal que pueda evolucionar para satisfacer las necesidades cambiantes de los clientes. Confiabilidad y seguridad: rango de características que abarcan fiabilidad, seguridad y protección. No tiene que causar daño físico ni económico, en caso de falla del sistema. Usuarios malintencionados no deben poder acceder al sistema. Eficiencia: el software no tiene que desperdiciar recursos del sistema, como la memoria y ciclos del procesador. La eficiencia incluye la capacidad de respuesta, tiempo de procesamiento, utilización de memoria, etc. Aceptabilidad: el software debe ser aceptable para los usuarios para quien se diseña. Comprensible, utilizable y compatible con otros sistemas que ellos usan.

Los problemas que afectan a diversos tipos de software: -

-

-

Heterogeneidad: El reto es desarrollar técnicas para construir software confiable que sea suficientemente flexible para enfrentar la diversidad de tipos de computadoras y dispositivos, y la integración de software viejo y nuevo. Cambio empresarial y social: negocios y sociedad cambian de manera rápida, ambos necesitan tener la posibilidad de cambiar su software existente y desarrollar rápidamente uno nuevo. Seguridad y confianza: asegurarse de que usuarios malintencionados no pueden atacar el software y que se conserve la seguridad de la información.

El software es un producto ubicuo: está presente en todas partes. Permite la creación de nuevos modelos de negocios (Uber, ventas por internet, etc.), Reemplaza algunas tecnologías antiguas (CD de música, impresiones), permite la creación de nuevas tecnologías (ingeniería genética), etc. Y en este punto cabe entonces afirmar que el desarrollo de software es una actividad crítica. Entregar software con fallas puede poner en riesgo y de modo directo, la salud, la seguridad, los derechos o los bienes de las personas.

Los modos de producción tradicional no siempre pueden adaptarse al desarrollo de software porque:



El software se desarrolla o modifica con intelecto; no se manufactura en el sentido clásico. La fase de manufactura tradicional introduce problemas de calidad que no existen en el software: Por ejemplo, un componente defectuoso puede originar que el producto final deba ser desechado. En cambio, en el software, los defectos o errores encontrados en la etapa de producción pueden ser corregidos y el producto final no verse afectado.



El calculo de costos es distinto y no sigue un esquema tradicional En el desarrollo de software los costos principales se concentran en los recursos que se emplean para desarrollarlo y el tiempo durante el cual son utilizados. Los principales recursos que utiliza la industria del software son los recursos humanos. Además, en un esquema productivo tradicional, los gastos de fabricación se prorratean entre todas las unidades producidas. En cambio, en el desarrollo del software todo el costo se lo lleva la primera unidad. El resto de las copias son a costo cero. El costo total se proporcionará para obtener el costo de cada copia. Si después se venden más copias de las estimadas, será todo ganancia. Si se venden menos, tendrán perdidas.



La mayor parte del software se construye para un uso individualizado, aunque la industria se mueve hacia la construcción basada en componentes. Los componentes reutilizables han sido creados para que el ingeniero pueda concentrarse en los elementos verdaderamente innovadores de un diseño. A pesar de facilidades de reutilizar el mismo componente para otro desarrollo, frecuentemente para cada nuevo desarrollo se construye todo desde cero, en parte porque la rápida evolución que tiene la industria que hace que muchas veces los programas queden obsoletos rápidamente. Permite que el ingeniero de software cree nuevas aplicaciones a partir de partes susceptibles de volverse a usar.



El software no se “desgasta”. El hardware comienza a desgastarse con el paso del tiempo, no el software. Si reemplazamos el hardware por uno nuevo, el software seguirá funcionando igual que antes (o mejor).

Problemática       

Se demora mucho tiempo en desarrollar software Las estimaciones de costos y plazos de entrega no son sencillas Es difícil medir el avance del proyecto Los costos de desarrollo son altos, frecuentemente mucho mayores a los estimados inicialmente. Es imposible encontrar todos los errores Se gasta mucho tiempo y esfuerzo en mantenimiento. Los tiempos del cliente son cada vez mas cortos.

El software como ventaja competitiva

Un sistema requiere de tres componentes básicos que interactúan entre si (4 considerando al usuario). El software que va a administrarlo, el hardware para soportar el software y las redes de comunicación ya que no puede funcionar en un entorno aislado. Las estrategias para crear y mantener una ventaja competitiva pueden basarse en obtener un producto a un precio inferior a la de los competidores (reducción de costos) o bien un producto diferenciado. El desarrollo de un software a medida que agregue valor diferencial es propio y no podrán tenerlo nuestros competidores. Y aun cuando contratemos software ya desarrollado, SAP por ejemplo, las personalizaciones y diferentes implementaciones que hagamos nos darán ventajas por sobre el resto. Tener un mejor software que un competidor permitirá dar un mejor servicio, reducir costos y/o aportarle al producto un valor agregado, que lo hará más atractivo para el que lo compra. No caben dudas que, hoy en día, un buen software también permite generar ventajas competitivas y alimenta la cadena de valor de la empresa.

UNIDAD 2: EL PROCESO DE SOFTWARE Un proceso de software es una secuencia de actividades que conducen a la elaboración de un producto de software. Pueden mejorarse con la estandarización de los procesos, donde se reduce la diversidad y se mejora la comunicación. Sus actividades fundamentales son:

1. Especificación del software: comprender y definir qué servicios se requieren del sistema. Define tanto la funcionalidad como las restricciones de operación y desarrollo del software. Los errores en esta etapa conducen a problemas posteriores. Tiene 4 actividades: a. Estudio de factibilidad: se hace una estimación sobre si las necesidades del usuario se pueden desarrollar con las actuales tecnologías y dentro de las restricciones presupuestarias. b. Obtención de análisis y requerimientos: se derivan los requerimientos del sistema mediante la observación de los sistemas existentes, discusiones con usuarios y proveedores potenciales, análisis de tareas, etc. Puede incluir el desarrollos de uno o más modelos de sistemas y prototipos, lo que ayuda a entender el sistema que se va a especificar. c. Especificación de requerimientos: transcribir la información recopilada en requerimientos. d. Validación de requerimientos: verifica que los requerimientos sean realistas, coherentes y completos. 2. Diseño e implementación de software: Se desarrolla el software para cumplir con las especificaciones del cliente. Las etapas son secuenciales, las actividades están vinculadas y tienen retroalimentación. Tiene cuatro actividades: a. Diseño arquitectónico: Se identifica la estructura global del sistema, los principales componentes y sus relaciones. b. Diseño de interfaz: Se definen las interfaces entre los componentes del sistema. c. Diseño de componentes: Se toma cada componente y se diseña como funcionara. d. Diseño de base de datos: Se diseñan las estructuras del sistema de datos. 3. Validación del software: Se verifica el software para asegurar que sea lo que el cliente requiere. Las etapas del proceso son: a. Prueba de desarrollo: Las personas que desarrollan el sistema ponen a prueba los componentes que constituyen el sistema. Cada componente se prueba de manera independiente. b. Pruebas del sistema: los componentes del sistema se integran para crear un sistema completo. Tiene como finalidad descubrir errores que resulten de interacciones entre componentes y problema de interfaz de componentes. c. Pruebas de aceptación: etapa final en el proceso de pruebas, antes que el sistema se acepte para su uso operacional. El sistema se pone a prueba con datos suministrados por el cliente, en vez de datos simulados. Revelan los errores y omisiones en la definición de requerimientos. d. Evolución del software: Debe evolucionar para satisfacer las necesidades cambiantes del cliente.

Un desarrollo de software requiere cumplir, en forma encadenada, las siguientes etapas: 1. Definición inicial: Se define globalmente el proyecto y los resultados esperados y se hacen los acuerdos básicos, incluso un primer presupuesto inicial. 2. análisis de los requerimientos y su viabilidad: En base a los requerimientos del cliente debo establecer si el proyecto es viable de desarrollar o queda fuera del alcance y debe desestimarse.

3. Diseño general y detallado: Se diseña la aplicación informática que dará respuesta a las necesidades del cliente. 4. codificación: se programa en lenguaje. 5. Pruebas: Testing para ver si tiene errores. 6. Implementación: Se instala el software y capacita. 7. Evolución: corregir errores no detectados e incorporar nuevas funcionalidades. Para asegurar la calidad del software el responsable tendrá que realizar una serie de actividades que protejan la calidad. Podemos identificar 8 actividades sombrillas:       

Seguimiento y control del proyecto de software: Permite que el equipo evalúe el progreso, comparándolo con el plan de proyecto. gestión del riesgo: Permanente evaluación de los riesgos que puedan afectar el resultado. Aseguramiento de la calidad del software: Establecer normas, protocolos y estándares a cumplir. Mediciones y métricas: define y reúne mediciones para ayudar a conocer el estado del proyecto. gestión de la configuración del software: Efectos del cambio a largo plazo Administración de la reutilización: criterios para volver a usar el producto. Preparación y producción del producto de trabajo: modelos, documentos, registros, formatos y listas.

Propuesta Integral Enfoque clásico: Serie de actividades para el desarrollo desde sus comienzos en todos los modelos. Algunos autores incluyen otras etapas pero la esencia es similar en todos: un modelo de etapas secuenciales las cuales deben ser desarrolladas una tras otra hasta el final. Solo cuando se finaliza una etapa puede pasarse a la siguiente.

Es necesario aclarar que este modelo clásico tampoco abarca todas las etapas existentes en un proyecto de construcción de una aplicación informática. Este modelo podría mejorarse, agregando algunas etapas y reformulando otras:

1. Comunicación inicial: Primer contacto entre desarrollador y cliente. Lineamientos básicos del proyecto y se presentan los problemas, las necesidades y las restricciones existentes. 2. Estudio de factibilidad: No todos los problemas pueden resolverse mediante un sistema informático o un desarrollo tradicional de software. Es necesario estudiar la factibilidad o no de seguir adelante con el proyecto. 3. Plan y presupuesto: Planificar el proyecto en su totalidad, estimando recursos humanos, de software y de entorno. También, y en función al tipo de software a desarrollar, deberá definirse cual será el modelo de desarrollo de software que se utilizará. Por último, elaborar un primer presupuesto económico para el cliente. 4. Construcción de la aplicación usando un modelo: El modelo abarca las etapas principales. 5. Garantía: Compromiso de quien desarrolla un software es que funcione tal como fue especificado. Se contempla una etapa donde se solucionan errores, contemplándose dentro de los costos. 6. Mantenimiento: Es posible necesitar cambios o mejoras.

PROBLEMAS El desarrollo de software implica encarar un proyecto con diversas complicaciones. Existen varios factores que pueden afectarlo y desviarlo de sus estimaciones iniciales:  



El tamaño del software La complejidad para obtener requerimientos: La comunicación entre analistas y cliente no suele ser del todo clara y pueden no entenderse. Es importante asegurar que los requerimientos sean bien comprendidos y que coincidan con las necesidades reales de la organización La complejidad técnica: Desafíos técnicos que puede presentar. Nuevos lenguajes de programación, nuevo sistema operativo, el equipo de hardware.

MODELOS: 1. Modelo en cascada / lineal secuencial / ciclo de vida Etapas:  ingeniería de requerimientos: coincide con análisis. No solo debe relevarse usuarios y analizar la informacion proporcionada, sino también, buscar todos los problemas y tratar de obtener todos los requerimientos de manera mas completa y exacta posible.  Diseño: Primer actividad técnica. Se diseña una solución a los problemas encontrados, contemplando los requerimientos proporcionando un modelo de lo que se construirá más adelante  codificación: Se construye el software.  Prueba: búsqueda de errores, forzarlos.  Despliegue: es la implementación del software ya probado e instalado en el entorno del cliente.

2. Modelo Incremental Puede ocurrir que, por razones de tamaño, tiempo u operativas, sea conveniente construir y entregar el sistema en partes. De este modo puede construirse una primera versión con algunas funcionalidades. Una vez implementada esta versión, se vuelve a emplear el modelo lineal secuencial para producir una nueva versión más completa. Mismas etapas que el modelo en cascada, prácticamente es lo mismo con la diferencia que se va entregando por partes. Tampoco debe confundirse con Desarrollo Ágil. En este modelo los componentes de la primera versión están todos planeados y definidos al comienzo. Las sucesivas versiones también siguen igual premisa, se planifica al comienzo cuales van a ser el contenido completo de la nueva versión. En desarrollo ágil, las pequeñas mejoras se van incorporando en forma periódica (habitualmente cada 2 o 3 semanas). No existe una planificación inicial sino, conforme van surgiendo requerimientos, estos se priorizan y se van desarrollando. Como ejemplo puede mencionarse un sistema para un comercio minorista. Una primera versión podría contener solamente funciones para emitir las facturas y controlar la caja. Una segunda vuelta podría permitir registrar clientes y manejar la cuenta corriente de los mismos. Un tercer incremento habilitaría la posibilidad de registrar las compras y los proveedores y finalmente una última versión podría permitir un control de stock automatizado.

3. Modelo de prototipos Así como al construir una casa los arquitectos construyen maquetas y diseños simulados para que el cliente pueda tener una mejor idea de cómo será la futura construcción, los ingenieros de software pueden construir un prototipo de lo que será el producto final. Este prototipo es

una versión acotada del software, construida solamente a los fines de poder interactuar con el cliente y poder tener una mejor visión de que es lo que se está planificando hacer. Aunque es lo más habitual, un prototipo no necesariamente tiene que ser un software. Un diseño de pantallas o imágenes gráficas del producto también podrían utilizarse. Es importante destacar que una vez que el prototipo es aprobado y que los requerimientos han quedado finalmente claros, este debe desecharse para iniciar la construcción del software real. Para ello, podrá utilizarse cualquiera de los modelos de desarrollo, según las necesidades específicas del proyecto. Etapas: 

    

Relevamiento rápido: Relevamiento general con algunos detalles para incluir en prototipo. No se le da tanta importancia ya que no se busca todos los requerimientos ya que sirve para obtenerlos justamente. Diseño del prototipo: cual será el alcance y como será Generación del prototipo: se construye usando el lenguaje u otras herramientas. Prueba: buscar errores Despliegue y retroalimentación: no se entrega, se analiza con el cliente. A partir de este análisis se puede modificar, construirse uno nuevo o comenzar con la aplicación. Construcción de la aplicación: una vez definidos los requerimientos o funciones se procede a desarrollar con alguno de los modelos de desarrollo.

4. Modelo en Espiral Marco de proceso de software dirigido por el riesgo. Se representa gráficamente en espiral, donde cada ciclo, representa una fase de desarrollo.

Las primeras iteraciones podrían corresponder a una primera versión o un prototipo. Luego, similar al modelo línea secuencial iterativo, diferentes versiones y mas completas del software hasta que se complete. Lo distintivo consiste en que agrega una etapa de análisis de riesgo. En cada iteración se evalúan los riesgos del proyecto, a partir de esto puede ser modificado, acotado, pausado o abortado. 





  

ingeniería de requerimientos: Se relevan los requerimientos y necesidades generales de la organización. Luego se enfoca en las funcionalidades que serán entregadas en la primer etapa. Se buscan los posibles riesgos. Diseño: Se diseña una solución a los problemas encontrados, contemplando las necesidades de los usuarios. Produce un modelo de lo que se construirá mas adelante. Detalla estructura de datos, arquitecturas, interfaces y componentes del software. análisis de riesgo. Es la etapa distintiva. Se analizan los riesgos que pueden afectar la continuidad del proyecto y se evalúa si se sigue o no. actúa como vía de escape para no seguir gastando recursos en proyectos inviables. Como por ej resultado adverso en elecciones o la venta de la compañía. Codificación: Se general código, se construye el software. Prueba: Se debe buscar que falle. Despliegue: Entregado e instalado en el cliente. Se contemplan tareas adicionales necesarias para que el sistema este operativo.

5. Modelo de Desarrollo Rápido de aplicaciones Para agilizar los tiempos de desarrollo el software debe dividirse en partes, para que puedan ser desarrolladas por varios equipos que trabajan en forma concurrente. Esta división, más la reutilización de componentes y las herramientas RAD permiten construir piezas de software de calidad en tiempos que van de 30 a 90 días. La permanente comunicación con el cliente y entre los equipos de trabajo se vuelve imprescindible para el éxito final

ELECCION DE UN MODELO ADECUADO No existe un mejor modelo para todo tipo de desarrollo ni se puede hacer una recomendación certera. Esto depende de muchos factores como el tipo de cliente, la experiencia, forma de trabajo, etc.

Tampoco hay que tomarlos al pie de la letra ya que dependiendo del contexto se pueden requerir herramientas o pasos de otros modelos. Por ejemplo, herramientas RAD, prototipos, análisis de riesgo, etc. Incluso es factible que la org...


Similar Free PDFs