Uploaded by Omar Zamora

unidad 4

advertisement
Qué es el proceso de desarrollo de software
El proceso de desarrollo de software es el método que usamos para crear aplicaciones informáticas de
cualquier tipo, que indica qué etapas tendrá que hacer el equipo de desarrollo, qué disciplinas del
desarrollo se realizarán en cada etapa y cómo se organizará el mantenimiento, una vez se haya
desarrollado el software.
A la vista de las aplicaciones existentes hoy en día... puedes pensar en juegos, procesadores de texto,
programas de diseño... entenderás que los procesos de desarrollo pueden ser algo amplio y complejo, ya
que incluye todo el flujo y actividades necesarias para crear el software, gestionar a los equipos de
desarrolladores y las numerosas disciplinas que deben realizarse. Claro que todas las aplicaciones que se
realizan no tienen la misma complejidad, pero lo cierto es que incluso en proyectos pequeños o
medianos es importante el beneficio que se puede obtener al aplicar un proceso de desarrollo, ya que
nos ayudará a aumentar sus posibilidades de éxito.
Existen diversos procesos de desarrollo que se usan en la actualidad y otros procesos de desarrollo que
se utilizaron en su época y que ya están un poco en desuso. Dentro de los procesos de desarrollo
actuales encontramos RUP y el Desarrollo Ágil, siendo éste último usado mayoritariamente en la
industria del software. Ambos procesos son iterativos y pensados para aplicaciones de tamaño mediano
o grande. Pero existen otros procesos como "La Cascada", más usado hace décadas, pero que puede ser
útil todavía en la actualidad para aplicaciones pequeñas.
La complejidad de los sistemas de software
Según Grady Booch, la complejidad de los sistemas de software se deriva de cuatro elementos:
1.- La complejidad del dominio del problema.
Los problemas que se intentan resolver son inherentemente complejos, con una gran cantidad de
requisitos que compiten entre sí.
2.- La dificultad de gestionar el proceso de desarrollo.
Los desarrolladores de software enfrentan el reto de dar a los usuarios la impresión de simplicidad, esto
es reducir al mínimo la complejidad externa. Este reto les obliga a incrementar el tamaño de los
sistemas, a inventar mecanismos ingeniosos, o a reutilizar diseños y código ya
existentes.
3.- La flexibilidad que se puede alcanzar a través del software.
La elaboración de software es una actividad muy laboriosa porque empuja al desarrollador a construir
por sí mismo prácticamente todos los bloques fundamentales sobre los que se apoyan las
abstraccicones de más alto nivel. Esto es propiciado, en gran medida, por la existencia de pocos
estándares para el control de calidad.
4.- Los problemas de caracterizar el comportamiento de sistemas discretos.
Los comportamientos de la mayoría de los objetos se representan por sistemas analógicos en los que, a
través de funciones contínuas, pequeños cambios en las entradas siempre producen pequeños cambios
en las salidas.
Por el contrario, puesto que el software se ejecuta en computadoras digitales, se tienen sistemas con un
número finito de estados discretos. En sistemas grandes, este número puede crecer a cantidades
enormes. Como no existen herramientas matemáticas para modelar el comportamiento completo de los
grandes sistemas discretos, se debe aceptar la pérdida de cierto grado de confianza en cuanto a que las
salidas sean correctas.
EL PAPEL DE LOS RECURSOS SOFTWARE EN SISTEMAS COMPLEJOS
Blanchard define un sistema como: una combinación de recursos (como seres humanos, materiales,
equipos, software, instalaciones, datos, etc.) integrados de forma tal que cumplan una función
específica en respuesta a una necesidad designada de un usuario
Desde una perspectiva más amplia, un sistema se considerará como sistema de software cuando sus
recursos software constituyan su elemento básico y la fuente de su funcionalidad básica. Dicho de otro
modo, cuando en el proceso de desarrollo sean los recursos software los que determinan el proceso
general de desarrollo de todo el sistema y cuando su ejecución pueda realizarse sobre una plataforma
hardware genérica. Un sistema de software Implica una interacción con el contexto al que sirve que
constituye el referente básico de su utilidad. Un sistema de software posee programas ejecutables pero
también otros tipos de recursos (ficheros de datos, de documentación, etc.).
Debemos tener claro lo que son recursos software y la definición de programas ya que estos están
inmersos en lo sistemas de software. Llamamos recurso software a un programa o conjunto de
programas ejecutables que proporcione algunas de las funciones requeridas por el sistema. Como
definición de programa tenemos que un programa es un algoritmo codificado junto con unas
estructuras de datos. Algunas veces se emplea el término paquete ejecutable para referirse a un
conjunto de programas que se necesitan mutuamente durante la ejecución del sistema y que deben
distribuirse conjuntamente al usuario final.
La complejidad de un sistema depende no sólo de las múltiples interacciones entre los recursos de que
consta sino también de la forma en la que puede evolucionar en respuesta a las necesidades del entorno.
Pues bien, el control de la complejidad de un sistema depende generalmente de las funciones
dependientes de sus recursos software y de como éstas se adapten al mundo externo.
La ingeniería de sistemas de software pretende, justamente, incrementar la seguridad absoluta de que
se han implementado fielmente los requisitos exigidos por el usuario y de que el sistema se ejecuta
correctamente, esta seguridad debe existir durante el proceso de desarrollo hasta alcanzar un nivel de
confianza similar al existente en otras ingenierías.
Desde el punto de vista del diseñador y operador humano se conjugan, por tanto, dos propiedades que
actúan como una espada de Damocles durante toda su vida útil: la incertidumbre de lo que realmente
harán y la ignorancia en cómo lo consiguen. Reducirlas y dominarlas ha constituido la directriz básica en
la evolución de la Ingeniería Software durante el último cuarto de siglo.
Características del Software
El software tiene tres características principales:
1) Características operativas
2) Características de transición
3) Características de revisión
Características operativas del Software
Son factores de funcionalidad, es como se presenta el software, es la “parte exterior” del mismo. Incluye
aspectos como:
Corrección: El software que estamos haciendo debe satisfacer todas las especificaciones establecidas
por el cliente.
Usabilidad / Facilidad de aprendizaje: Debe ser sencillo de aprender.
Integridad: Un software de calidad no debe tener efectos secundarios.
Fiabilidad: El producto de software no debería tener ningún defecto. No sólo esto, no debe fallar
mientras la ejecución.
Eficiencia: Forma en que el software utiliza los recursos disponibles. El software debe hacer un uso
eficaz del espacio de almacenamiento y el comando ejecutar según los requisitos de tiempo deseados.
Seguridad: Se deben tomar medidas apropiadas para mantener los datos a salvo de las amenazas
externas
Características de transición del Software
Interoperabilidad: Es la capacidad para el intercambio de información con otras aplicaciones.
Reutilización: Es poder utilizar el código de software con algunas modificaciones para diferentes
propósitos.
Portabilidad: Capacidad para llevar a cabo las mismas funciones en todos los entornos y plataformas.
Características de revisión de Software
Son los factores de ingeniería, la “calidad interior ‘del software como la eficiencia, la documentación y la
estructura. Incluye aspectos como:
Capacidad de mantenimiento: El mantenimiento del software debe ser fácil para cualquier tipo de
usuario.
Flexibilidad: Los cambios en el software debe ser fácil de hacer.
Extensibilidad: Debe ser fácil de aumentar nuevas funciones.
Escalabilidad: Debe ser muy fácil de actualizar para más trabajo.
Capacidad de prueba: Prueba del software debe ser fácil.
Modularidad: Debe estar compuesto por unidades y módulos independientes entre sí.
INGENIERÍA DE SISTEMAS DE SOFTWARE
La ingeniería de sistemas se define en Blanchard como la aplicación efectiva de esfuerzos científicos y de
ingeniería para transformar una necesidad operativa en una configuración definida de un sistema
mediante el proceso iterativo de análisis de requisitos, la selección del concepto, y asignación, síntesis,
soluciones de compromiso y optimización del diseño, prueba y evaluación [1]. Entre sus características
se incluye su estructura de arriba-abajo que ve el sistema como un todo; una orientación del ciclo de
vida que considera todas las fases desde el diseño conceptual hasta la retirada del sistema; un enfoque
interdisciplinar «en equipo>> que incluya todas las disciplinas adecuadas de diseño de forma oportuna y
concurrente;
Modelos del ciclo de vida del software
Los modelos de ciclo de vida de software es una lista de actividades que ocurren durante el desarrollo
de software, en el cual se intenta determinar el orden de las etapas involucradas y los criterios de
transición asociadas entre estas etapas
Un modelo de ciclo de vida define el estado de las fases a través de las cuales se mueve un proyecto de
desarrollo de software
Es la forma mediante la cual se describen los diferentes pasos que se deben seguir para el desarrollo de
un software, partiendo desde la necesidad hasta llegar a la puesta en marcha de una solución y su
apropiado mantenimiento. El ciclo de vida para un software comienza cuando se tiene la necesidad de
resolver un problema, y termina cuando el programa que se desarrollo para cumplir con los
requerimientos, deja de ser utilizados.
Existen varias versiones del ciclo de vida del software entre las cuales se destacan: el ciclo de vida clásico
o en cascada, el modelo en espiral, el desarrollo de prototipos, el modelo por incrementos y el modelo
extremo.
·
Modelo en cascada
Las actividades de desarrollo se completan una tras otra. Las actividades de prueba solo ocurren
después de que todas las actividades de desarrollo han sido completadas.
Elementos:
1. Requisitos
Si por algo se caracterizan las metodologías de desarrollo tradicionales, es por su robusto análisis de
requisitos. El modelo de desarrollo en cascada no es la excepción a la regla. Si los requerimientos del
proyecto no están bien definidos, las probabilidades de que este resulte en fracaso son bastante
elevadas.
Para definir los requerimientos, se toman en consideración diferentes aspectos. Las necesidades del
cliente son sin duda los más relevantes. Así mismo, se toman en cuenta las expectativas, recursos,
equipo, riesgos y limitaciones del proyecto
2. Diseño
Con los requerimientos definidos en su totalidad, se procede con el diseño del proyecto. En esta etapa
se definen elementos fundamentales como la arquitectura del software, la estructura de los datos, y por
supuesto, las características de la interfaz que se desarrollará (1).
3. Implementación
También conocida como etapa de codificación. Dentro de esta, se toman como base tanto el diseño,
como los requisitos previamente trabajados. Con el propósito de generar el código del proyecto. No
existe mucha ciencia tras esta etapa. Si el diseño o los requerimientos lo dicta, el código simplemente lo
hace.
4. Verificación
Para la etapa de verificación, se requiere de la participación de los expertos en el área de control de
calidad. De manera que pueden probar todas y cada una de las instancias del proyecto. Con el objetivo
de identificar potenciales incongruencias.
5. Mantenimiento
Tras haber entregado el producto final al cliente, es posible que surjan nuevas peticiones por parte de
este último. De forma que el equipo deberá de volver a reunirse para atender dichas solicitudes. Ya sea
que se trate de una gestión estándar del sistema, o implementar alguna nueva característica.
Para ser más específicos, la etapa de mantenimiento le garantiza al cliente una supervisión constante del
proyecto. Pudiéndose actualizar, modificar, mejorar, corregir, o refinar el software como mejor le
convenga al cliente (6).
Características
Especificación de requerimientos: Robusta e inalterable
Flexibilidad a los cambios: Nula
Vulnerabilidad a los riesgos: Alta
Participación del cliente: Limitada
Costo de implementación: Bajo
Mantenimiento y retroalimentación: Tardío
Documentacion: robusta
·
Modelo V
En cada fase de desarrollo se incluye niveles de pruebas asociados. En este modelo las pruebas
comienzan lo más pronto posible, para descubrir rápidamente los posibles errores y no esperar al final
para mejorarlo
·
Modelo iterativo
Consiste en la iteración de varios ciclos de vida entregando al cliente una versión mejorada al final de
cada iteración.
·
Modelo de desarrollo incremental
Está basado en la filosofía de construir incrementando las funcionalidades del programa. Los requisitos
tienen asignada una prioridad y son entregados según el orden de prioridad en el incremento
correspondiente.
Modelos basados en Prototipos desechables e incremental
El Modelo Incremental combina elementos del MLS con la filosofía interactiva de construcción de
prototipos.
En una visión genérica, el proceso se divide en 4 partes: Análisis, Diseño, Código y Prueba. Sin embargo,
para la producción del Software, se usa el principio de trabajo en cadena o “Pipeline”, utilizado en
muchas otras formas de programación. Con esto se mantiene al cliente en constante contacto con los
resultados obtenidos en cada incremento.
Es el mismo cliente el que incluye o desecha elementos al final de cada incremento a fin de que el
software se adapte mejor a sus necesidades reales. El proceso se repite hasta que se elabore el producto
completo.
De esta forma el tiempo de entrega se reduce considerablemente.
Al igual que los otros métodos de modelado, el Modelo Incremental es de naturaleza interactiva pero se
diferencia de aquellos en que al final de cada incremento se entrega un producto completamente
operacional.
El Modelo Incremental es particularmente útil cuando no se cuenta con una dotación de personal
suficiente. Los primeros pasos los pueden realizar un grupo reducido de personas y en cada incremento
se añadir• personal, de ser necesario. Por otro lado los incrementos se pueden planear para gestionar
riesgos técnicos.
El Modelo Incremental se puede ver aquí en forma gráfica:
*Se evitan proyectos largos y se entrega algo de valor a los usuarios con cierta frecuencia.
*El usuario se involucra más.
*Difícil de evaluar el coste total.
*Difícil de aplicar a los sistemas transaccionales que tienden a ser integrados y a operar como un todo.
*Requiere gestores experimentados.
*Los errores en los requisitos se detectan tarde.
*El resultado puede ser muy positivo.
Modelo automatizado
La automatización es un sistema donde se trasfieren tareas de producción, realizadas habitualmente por
operadores humanos a un conjunto de elementos tecnológicos.
Un sistema automatizado consta de dos partes principales:
Parte de Mando
Parte Operativa
La Parte Operativa es la parte que actúa directamente sobre la máquina. Son los elementos que hacen
que la máquina se mueva y realice la operación deseada. Los elementos que forman la parte operativa
son los accionadores de las máquinas como motores, cilindros, compresores ..y los captadores como
fotodiodos, finales de carrera ...
La Parte de Mando suele ser un autómata programable (tecnología programada), aunque hasta hace
bien poco se utilizaban relés electromagnéticos, tarjetas electrónicas o módulos lógicos neumáticos
(tecnología cableada) . En un sistema de fabricación automatizado el autómata programable esta en el
centro del sistema. Este debe ser capaz de comunicarse con todos los constituyentes de sistema
automatizado.
Objetivos de la automatización
Mejorar la productividad de la empresa, reduciendo los costes de la producción y mejorando la
calidad de la misma.
Mejorar las condiciones de trabajo del personal, suprimiendo los trabajos penosos e
incrementando la seguridad.
Realizar las operaciones imposibles de controlar intelectual o manualmente.
Mejorar la disponibilidad de los productos, pudiendo proveer las cantidades necesarias en el
momento preciso.
Simplificar el mantenimiento de forma que el operario no requiera grandes conocimientos para
la manipulación del proceso productivo.
Integrar la gestión y producción.
·
Modelo en espiral
Se conforman en una espiral, en la que cada bucle o iteración representa un conjunto de actividades. Las
actividades no están fijadas se eligen en función del análisis de riesgo, comenzando por el bucle interior.
·
Modelo de prototipos
El prototipo debe ser construido en poco tiempo y el diseño rápido que se centra en una representación
de aquellos aspectos del software que serán visibles para el cliente o el usuario final
4.2 Tecnología de Software:
Concepto de Tecnología del software
Es un conjunto integrado de notaciones, herramientas y métodos, basados en unos sólidos fundamentos,
que permiten el desarrollo de un producto software en un contexto organizativo dado.
Una tecnología de software puede considerarse constituida por los siguientes componentes
Métodos de desarrollo
Un método aporta una forma sistemática de refinar las especificaciones de un sistema haciendo que en
cada paso se obtenga cierto nivel de confianza en que el refinamiento efectuado sea correcto. Es este
incremento en el nivel de confianza, tanto a nivel individual como a nivel organizativo.
La forma que un método tiene para lograr el objetivo de permitir incrementar la confianza del diseñador
es imponer una disciplina en el proceso de desarrollo conjugando la utilización de una o varias
notaciones y formas de razonar sobre el sistema en desarrollo con un conjunto de directrices que guían
al diseñador en el proceso y generalmente apoyados por unas herramientas que soportan el método.
Sus objetivos concretos son:
Proponer un procedimiento para capturar los requisitos del usuario y relacionarlos entre sí para facilitar
la comprobación de su consistencia.
Distribuir el desarrollo entre un equipo de trabajo mediante la adecuada agrupación de funciones en
estructuras de diseño (objetos, módulos multifuncionales, entre otros.).
Identificar interfaces claras entre los componentes del sistema a diseñar (objetos, módulos, entre otros.)
Proponer una serie de heurísticos para guiar el refinamiento en varias etapas asegurando la consistencia
en cada uno de los pasos de refinamiento basados en la experiencia de los proponentes del método en
diseñar sistemas reales con el mismo.
Herramientas de soporte: entornos de desarrollo
Un sistema de software cuya finalidad es la de ayudar a construir otros sistemas. Desde este punto de
vista lo que permite es mejorar la capacidad del ingeniero de software en diversas fases del desarrollo.
Las herramientas requeridas a lo largo del desarrollo son muy dispares. Históricamente, las primeras que
aparecen son editores para generar las descripciones de los sistemas en algún lenguaje, compiladores
para generar código, depuradores para analizar las posibles fuentes de error, entre otros. Todas ellas
dedicadas a soportar la fase de implementación. Recientemente, han surgido otras para soportar las
fases iniciales del ciclo de vida.
Componentes reutilizables
Son módulos genéricos que pueden componerse para construir un sistema. Un diseño basado en
componentes de un catálogo conlleva, además, un problema de confianza en la corrección de los
módulos a utilizar; de ellos dependerá la corrección del sistema final.
Es interesante comentar en este caso la aparición en la ingeniería de sistemas de software de un
fenómeno bien conocido en la ingeniería de sistemas: el control de calidad de las piezas es básico para
obtener un producto de calidad. Cada vez será más importante disponer de bibliotecas de calidad
porque de ellas se derivará la calidad del producto final.
Algunos ejemplos de software:
Microsoft Windows. Probablemente el más popular de los sistemas operativos empleados actualmente,
es típico de los computadores IBM. Permite al usuario manejar y e interactuar con los distintos
segmentos de un computador, mediante un entorno de usuario amigable, basado en ventanas y
representación visual.
Mozilla Firefox. Un navegador de Internet sumamente popular, disponible para descarga sin pago.
Conecta al usuario con la World Wide Web, para realizar búsquedas de datos y otros tipos de
operaciones virtuales.
Microsoft Word. Parte del paquete de Microsoft Office, se trata de un procesador de texto de los más
reconocidos que hay, e incluye herramientas para negocios, gestión de bases de datos, elaboración de
presentaciones, entre otros.
Google Chrome. Otro navegador de Internet, ofrecido por la empresa Google, cuya ligereza y velocidad
lo hizo rápidamente popular entre los usuarios de Internet. Además, abrió la puerta a proyectos de un
sistema operativo de Google.
Adobe Photoshop. Una conocida aplicación de edición de imágenes y elaboración de contenido visual,
útil para el diseño gráfico y el retocado fotográfico, producto de la empresa Adobe Inc.
Fuente: https://concepto.de/hardware-y-software/#ixzz83y6PYsrX
Desarrollo estructurado
La programación estructurada se trata en lo que se requiere que haga el sistema o la aplicación, por la
general se diferencia ya que se maneja de forma ordenada y que tenga lógica, se trata que permite que
las personas observen los elementos lógicos (lo que hará el sistema) el analista puede desarrollar el
sistema para la situación donde será utilizado.
Los programas son más fáciles de entender. Un programa estructurado puede ser leído en secuencia, de
arriba hacia abajo, sin necesidad de estar saltando de un sitio a otro en la lógica, lo cual es típico de
otros estilos de programación. La estructura del programa es más clara puesto que las instrucciones
están más relacionadas entre sí, por lo que es más fácil comprender lo que hace cada función
Programación orientada a objeto.
La programación orientada a objetos no es un concepto nuevo, sus inicios y técnicas de programación se
iniciaron a principios de los años 70. se puede definir programación orientada a objetos (oops) como
una técnica de programación que utiliza objetos como bloque esencial de construcción. la oops, es un
tipo de programación más cercana al razonamiento humano. La oops surge como una solución a la
programación de grandes programas, y para solventar el mantenimiento de dichas aplicaciones, ya que
en la programación estructura el más mínimo cambio supone la modificación de muchas funciones
relacionadas, en cambio con la oops solo es cuestión de añadir o modificar métodos de una clase o
mejor, crear una nueva clase a partir de otra (herencia).
La programación Orientada a objetos (POO) es una forma especial de programar, más cercana a como
expresariamos las cosas en la vida real que otros tipos de programación. Con la POO tenemos que
aprender a pensar las cosas de una manera distinta, para escribir nuestros programas en términos de
objetos, propiedades, métodos y otras cosas que veremos rápidamente para aclarar conceptos y dar
una pequeña base que permita soltarnos un poco con este tipo de programación.
Download