El portal que comparte sus ingresos

Software development process

Software de procesos
Resumen:

Un proceso de desarrollo de software es una estructura impuesta sobre el desarrollo de un producto de software. Esta sesión presenta varios modelos para esos procesos, cada uno de los enfoques para describir una variedad de tareas o actividades que tienen lugar durante el proceso.

Un proceso de desarrollo de software es una estructura impuesta sobre el desarrollo de un producto de software. Sinónimos incluyen el ciclo de vida del software y de proceso del software.

Existen varios modelos para esos procesos, cada uno de los enfoques para describir una variedad de tareas o actividades que tienen lugar durante el proceso.

Procesos y los procesos meta;

Un número cada vez mayor de organizaciones de desarrollo de software de la aplicación de metodologías de proceso. Muchos de ellos están en la industria de defensa, que en los EE.UU. requiere de una clasificación basada en "modelos de procesos" para obtener contratos. La norma internacional para la descripción del método de selección, aplicación y seguimiento del ciclo de vida de software es la norma ISO 12207. El Capability Maturity Model (CMM) es uno de los principales modelos. Evaluaciones independientes sobre cómo las organizaciones de grado y que siguen sus procesos definidos, y no en la calidad de los procesos o el software producido. CMM se sustituye gradualmente por CMMI. ISO 9000, describe las normas para la organización formal de los procesos de documentación.

ISO 15504, también conocido como Software Process Improvement Determinación Capacidad (SPICE), es un "marco para la evaluación de procesos de software". Esta norma tiene por objeto establecer un claro modelo de proceso de comparación. SPICE se utiliza mucho como CMM y CMMI. Modelos de procesos que para gestionar, controlar, orientar y supervisar el desarrollo de software. Este modelo se utiliza para medir lo que una organización de desarrollo o del equipo de proyecto realmente hace durante el desarrollo de software. Esta información es analizada para identificar las debilidades y la unidad mejora. También identifica las fortalezas que puede mantenerse o integrarse en una práctica común para esa organización o equipo.

Proceso de actividades y medidas DesignOperation andMaintenanceRequirementImplementationFeasibility andPlanningTesting

1. Análisis de requisitos

La tarea más importante en la creación de un producto de software es la extracción de los requisitos. Los clientes suelen saber lo que quieren, pero no lo que debe hacer el software, mientras que incompletos, ambiguos o contradictorios requisitos son reconocidos por cualificados y experimentados ingenieros de software. Demostrando con frecuencia viven código puede ayudar a reducir el riesgo de que los requisitos son incorrectos.

El sistema de servicios, las limitaciones y los objetivos se establecen mediante consultas con los usuarios del sistema. Luego se define de una manera que sea comprensible por los usuarios y el desarrollo personal.

Esta fase se puede dividir en: Estudio de viabilidad (a menudo llevadas a cabo por separado) Análisis de requisitos La definición de los requisitos Especificación de los requisitos

2. Diseñar
Diseño del sistema: la partición de los requisitos para los sistemas de hardware o software.

Establece un sistema general de la arquitectura. La arquitectura de un sistema de software se refiere a una representación abstracta de dicho sistema. La arquitectura tiene que ver con asegurarse de que el software de sistema de cumplir los requisitos del producto, así como garantizar que las necesidades futuras se pueden abordar. La arquitectura de paso también se ocupa de las interfaces entre el sistema de software y otros productos de software, así como las de hardware o el sistema operativo anfitrión. Diseño de software: el software Representar las funciones del sistema en una forma que puede transformarse en uno o más programas ejecutables. Especificación es precisamente la tarea de describir el software para ser escrito, en su caso en una forma rigurosa. En la práctica, con más éxito las especificaciones están escritas para entender y afinar aplicaciones que ya estaban bien desarrollados, aunque esenciales para la seguridad de sistemas de software son a menudo cuidadosamente especificados antes de que el desarrollo de aplicaciones. Las especificaciones son más importantes para las interfaces que deben permanecer estables.

3. Aplicación (o codificación)

Reducción de un diseño a código puede ser la parte más evidente de la ingeniería de software de empleo, pero no es necesariamente la mayor parte. Una importante (y con frecuencia pasada por alto) está documentando la tarea interna de diseño de software con el propósito de futuro mantenimiento y mejora. La documentación es más importante para los interfaces externas.

4. Pruebas

Prueba de piezas de software, especialmente cuando el código de dos ingenieros deben trabajar juntos, corresponde al ingeniero de software.

6. Operación y mantenimiento

Un gran porcentaje de proyectos de software fracasan porque los desarrolladores no se dan cuenta de que no importa cuánto tiempo y la planificación de un equipo de desarrollo lleva a la creación de software si nadie en una organización que acaba de usarla. La gente a veces se resiste al cambio y evitar aventurarse en una zona desconocida, por lo que como parte de la fase de despliegue, su muy importante contar con clases de formación para los más entusiastas usuarios de software (construcción de la emoción y la confianza), desplazamiento de la formación hacia la neutralidad usuarios entremezclarse con los ávidos seguidores y, por último, incorporar el resto de la organización en la adopción del nuevo software. Los usuarios tendrán muchas preguntas y problemas de software que lleva a la siguiente fase de los programas informáticos. Mantener y mejorar el software para hacer frente a los problemas recientemente descubiertos o nuevos requisitos puede tomar mucho más tiempo que el desarrollo inicial del software. No sólo puede ser necesario añadir el código que no encaja en el diseño original, sino sólo la determinación de cómo funciona el software en algún momento después de que se completa puede requerir un esfuerzo significativo por ingeniero de software. Acerca de ⅔ de todos los trabajos de ingeniería de software es el mantenimiento, pero esta estadística puede ser engañosa. Una pequeña parte de ello es la fijación de los errores. La mayoría de los sistemas de mantenimiento se está extendiendo a hacer cosas nuevas, que en muchos aspectos se puede considerar un nuevo trabajo. En comparación, sobre todo ⅔ de la ingeniería civil, arquitectura, construcción y mantenimiento en el trabajo es una manera similar.

Modelos de procesos

A lo largo de décadas ha sido objetivo de encontrar repetible, predecible procesos o metodologías que mejoren la productividad y la calidad. Algunos tratan de sistematizar y formalizar el aparentemente ingobernable tarea de software de escritura. Otros se aplican técnicas de gestión de proyectos de software de escritura. Sin la gestión de proyectos, proyectos de software pueden ser entregados con retraso o por presupuesto. Con un gran número de proyectos de software que no se ajusten a sus expectativas en términos de funcionalidad, costo, o calendario de entrega, la gestión eficaz de los proyectos está resultando difícil.

Cascada de Proceso

Royce en 1970, lo que se propone actualmente denominado modelo de la cascada como un concepto inicial, un modelo que sostuvo era defectuoso (Royce 1970). Su papel entonces explorar la forma en que el modelo inicial podría convertirse en un modelo iterativo, con retroalimentación de cada una de las fases que influyen en las fases posteriores, de forma similar a muchos métodos utilizados ampliamente y muy considerado por muchos el día de hoy. Es sólo el modelo inicial que recibió el aviso, su propia crítica de este primer modelo ha sido ampliamente ignorados. El "modelo de cascada" rápidamente llegó a referirse no a la final Royce, iterativo de diseño, sino más bien a su carácter puramente secuencial ordenado modelo. En este artículo utilizaremos esta popular significado de la frase modelo de cascada. Iterativo para un modelo similar al del final Royce visión, ver el modelo en espiral. Royce, a pesar de las intenciones de la cascada de modelo a ser modificados en un modelo iterativo, el uso del "modelo de cascada" como un mero proceso secuencial sigue siendo popular, y, para algunos, la expresión "modelo de cascada" desde entonces ha venido a referirse a cualquier enfoque a la creación de software que se considera inflexible y no reiterativos. Aquellos que usan la frase cascada modelo peyorativamente para no iterativo modelos que normalmente no les gusta ver el modelo de cascada como ingenua e inadecuada para un "mundo real" proceso.

El más conocido y más antiguo es el modelo de cascada, donde los desarrolladores (aproximadamente), siga estos pasos en orden:














Figura 1: Proceso de actividades o medidas

Para seguir el modelo de cascada, un producto de una fase a la siguiente en un punto de vista puramente de forma secuencial. Por ejemplo, primero se completa una "especificación de los requisitos" - grabados en piedra que los requisitos del software. Si las condiciones son totalmente, un producto de diseño. El software en cuestión y se ha diseñado un "plan" se establece para los ejecutores (codificadores) a seguir - este diseño debe ser un plan para la aplicación de los requisitos indicados. Cuando el diseño es totalmente, una aplicación de diseño que se haga por los codificadores. Hacia las últimas etapas de esta fase de aplicación, la existencia de componentes de software producidas por diferentes equipos están integrados. Después de la aplicación y la integración fases estén completas, es el producto de software probado y depurado; cualquier defecto presentó en fases anteriores se eliminan aquí. A continuación, el producto de software está instalado, y luego mantenerse a introducir nuevas funcionalidades y eliminar errores.

Así, el modelo de cascada sostiene que se debe pasar a una fase sólo cuando su anterior etapa se ha completado y perfeccionado. Fases de desarrollo en el modelo de cascada, por lo tanto discreto, y no hay saltos hacia adelante y hacia atrás o se superponen entre ellos.

Hay una idea errónea de que el proceso no tiene ninguna disposición para corregir errores en los primeros pasos (por ejemplo, en los requisitos). De hecho, aquí es donde el dominio de las necesidades de gestión en el que se incluye el control de cambios.

Este enfoque se utiliza en proyectos de alto riesgo, en especial las grandes contratos de defensa. Los problemas en cascada que no surgen de "inmaduro prácticas de ingeniería, especialmente en el análisis de las necesidades y requisitos de gestión." Estudios de la tasa de fracaso de la especificación, que forzada cascada, han demostrado que más de cerca el proyecto sigue su proceso, específicamente en los requisitos iniciales de la recolección, más probable es que el proyecto de liberación características que no se utilizan en su forma actual.

Más a menudo demasiado la supuesta etapas forman parte del examen conjunto entre cliente y proveedor, el proveedor puede, de hecho, en situación de riesgo y desarrollar el diseño evolucionar, pero debe vender el diseño de un hito clave en la llamada revisión de diseño crítico (CDR). Esto desplaza la carga de la ingeniería a los ingenieros a los clientes que pueden tener otras habilidades.

El modelo de cascada, sin embargo, se sostuvo por muchos como una mala idea en la práctica, principalmente a causa de su creencia de que es imposible obtener una fase de un ciclo de vida del producto de software "perfeccionado" antes de pasar a las siguientes fases y el aprendizaje de los mismos (o , al menos, la creencia de que esto es imposible para cualquier programa no trivial). Por ejemplo, los clientes pueden no ser conscientes de lo requisitos antes de que ellos quieren ver un prototipo de trabajo y puede comentar sobre ella, ya que sus necesidades pueden cambiar constantemente, y los diseñadores y ejecutores del programa puede tener poco control sobre esto. Si los clientes cambiar sus necesidades después de un diseño está terminado, que el diseño debe ser modificado para dar cabida a los nuevos requisitos, invalida toda una buena dosis de esfuerzo demasiado grandes cantidades de tiempo se han invertido en "Gran Diseño Hasta Frente". (Por lo tanto, los métodos frente a la cascada modelo ingenuo -, como las utilizadas en el desarrollo de software ágil - defensor menos dependencia de un fijo, estático documento de requisitos de diseño o documento). Diseñadores no pueden (o, más probablemente, no puede) ser conscientes de las futuras dificultades de aplicación en la redacción de un diseño para un producto de software sin aplicarse. Es decir, que puede llegar a ser claro en la fase de ejecución que un área particular de la funcionalidad del programa es extraordinariamente difícil de aplicar. Si este es el caso, es mejor revisar el diseño que persisten en la utilización de un diseño que se hizo sobre la base de predicciones defectuoso y que no tiene en cuenta la recientemente descubierta problemas.

La idea detrás del modelo de cascada puede ser "medida dos veces, cortar una vez", y quienes se oponen al modelo de cascada sostienen que esta idea tiende a desintegrarse cuando el problema que se mide cambia constantemente debido a la exigencia de modificaciones y nuevas realizaciones sobre el problema en sí . La idea detrás de los que se oponen al modelo de cascada puede ser "el tiempo pasado en el reconocimiento pocas veces se desperdicia".

En resumen, las críticas de un país no iterativo de desarrollo (como el modelo de cascada) son las siguientes: Muchos proyectos de software debe ser abierto al cambio debido a factores externos, la mayoría de software se escribe como parte de un contrato con un cliente, y los clientes son conocidas por cambiar sus exigencias. Así, el proyecto de software deben ser adaptables, y el gasto considerable esfuerzo en el diseño y aplicación basada en la idea de que los requisitos no cambiará nunca es ni realista ni adaptables en estos casos.

A menos que los que especificarán los requisitos y las personas que diseñan el software del sistema en cuestión son muy competentes, es difícil saber exactamente lo que se necesita en cada fase del proceso del software antes de algún tiempo se gasta en la fase "después de" la misma. Es decir, información de las fases siguientes que se necesita para completar "anterior" fases satisfactoriamente. Por ejemplo, la fase de diseño pueden necesitar los comentarios de la fase de aplicación para identificar las áreas problema de diseño. El argumento de la cascada modelo es que los diseñadores pueden tener experiencia trabajando en sistemas similares antes, y así pueden ser capaces de predecir con precisión las áreas problemáticas, sin tiempo de prototipos y aplicación.

Constante de pruebas, desde el diseño, ejecución y verificación de las etapas se requiere la validación de las fases que preceden a ellos. Constante "prototipo de diseño" es necesario seguir trabajando para garantizar que los requisitos no son contradictorias y posibles de cumplir; constante aplicación es necesaria para encontrar problemas e informar el proceso de diseño, integración y verificación constante de la implementación de código es necesario para garantizar que la aplicación sigue siendo en el buen camino. El argumento para el modelo de cascada es que la aplicación constante y la realización de pruebas para validar el diseño y las necesidades sólo es necesario si la introducción de errores es probable que sea un problema. Los usuarios del modelo de cascada puede argumentar que si los diseñadores (etcétera) siguen un proceso disciplinado y no cometer errores que no hay necesidad de constante trabajo en las fases posteriores a la validación de las fases anteriores.

Frecuentes incrementales construye (a raíz de la "liberación temprana, la liberación a menudo" la filosofía) a menudo son necesarios para construir la confianza para un equipo de producción de software y su cliente.


Es difícil estimar el tiempo y coste de cada fase del proceso de desarrollo sin hacer algo de "reconstruir" el trabajo en esa fase, a menos que la estimación de tiempo y los costos son muy experimentados con el tipo de producto de software en cuestión.

La cascada no trae modelo formal de los medios de ejercer control sobre la gestión de un proyecto y de control de la planificación y la gestión de riesgos no están cubiertos en el propio modelo.

Sólo un cierto número de los miembros del equipo será calificado para cada fase, por lo que tienen "código de monos" que sólo son útiles para la labor de aplicación, mientras que los diseñadores no hacen nada "perfecto" el diseño es un desperdicio de recursos. Una contrapropuesta a este argumento es que "polivalente" ingenieros de software se debe contratar más "especializados" del personal.

Proceso iterativo;

Figura 2: proceso iterativo

Desarrollo iterativo prescribe inicialmente la construcción de pequeñas pero cada vez más porciones de un proyecto de software para ayudar a todos los participantes a descubrir principios de cuestiones importantes antes de que los problemas o defectos en los supuestos pueden conducir al desastre. Procesos iterativos que son preferidas por los desarrolladores, ya que permite un potencial de alcanzar los objetivos de diseño de un cliente que no sabe cómo definir lo que quieren.

Si bien los enfoques de desarrollo iterativos tienen sus ventajas, los arquitectos de software son aún enfrenta el desafío de crear una base fiable sobre la que desarrollar. Esa fundación a menudo requiere una gran cantidad de análisis y prototipos iniciales para construir un modelo de desarrollo. El modelo de desarrollo a menudo se basa en patrones de diseño específico y los diagramas de entidad relación (ERD). Sin esta base inicial, Iterative desarrollo puede crear problemas a largo plazo que sean significativas en términos de costo y calidad.

Los críticos de los enfoques de desarrollo iterativo señalan que estos procesos a cabo lo que puede ser una expectativa razonable a los beneficiarios de los programas informáticos, que deberán poseer los conocimientos y la experiencia de un experimentado desarrollador de software. El enfoque también puede ser muy costosa si no se iteraciones lo suficientemente pequeña como para mitigar el riesgo, similar a ... "Si no sabe qué tipo de casa que desea, dejar que yo le construya una y ver si le gusta. Si no, vamos a arrancar todo y empezar de nuevo." Por analogía, el crítico sostiene que desde el principio de diseño es tan necesaria para el desarrollo de software como lo es para la arquitectura. El problema con esta crítica es que el punto de programación iterativo, es que usted no tiene que construir toda la casa antes de recibir comentarios del beneficiario. De hecho, en un sentido convencional de programación de los lugares más de esta carga a los beneficiarios, como los requisitos y las fases de planificación se llevan a cabo enteramente antes de que el desarrollo comienza, y las pruebas sólo se produce cuando el desarrollo está oficialmente terminado.

Estos enfoques han sido desarrollados junto con las tecnologías basadas en web. Como tales, son en realidad más parecidos a los ciclos de vida de mantenimiento dado que la mayoría de la arquitectura y la capacidad de las soluciones que se plasma en la tecnología seleccionada como la parte posterior del hueso de la aplicación.

Referencias:

http://en.wikipedia.org/wiki/Software_development_process
http://ocw.mit.edu/OcwWeb/Electrical-Engineering-and-Computer-Science/6-171Fall2003/CourseHome/
http://www.cs.cornell.edu/courses/cs501/2008sp/
http://www.comp.lancs.ac.uk/computing/resources/IanS/SE7/
http://www.ee.unb.ca/kengleha/courses/CMPE3213/IntroToSoftwareEng.htm
http://www.d.umn.edu/~gshute/softeng/process.html
http://www.sei.cmu.edu/community/easel/demos/SWprocess.html

0 comentarios:

Publicar un comentario