Desarrollo de software de código abierto
Es difícil llevar un proyecto de código abierto siguiendo un método de desarrollo de "software" más tradicional como el modelo en cascada, porque en estos métodos tradicionales no se permite volver atrás a una fase anterior. En el desarrollo de "software" de código abierto, los requisitos raramente se reúnen antes de empezar el proyecto, en vez de eso estos se basan versiones previas de productos de "software", como describe Robbins . Más allá de los requisitos, personal voluntario a menudo se ve atraído para ayudar a desarrollar el producto de "software" basado en las versiones anteriores del "software". Este efecto de red es esencial de acuerdo con Abrahamsson et al.:" si el prototipo reúne suficiente atención, gradualmente empezará a atraer a más y más desarrolladores" Abrahamsson et al también apunta que la comunidad es muy dura, tanto como en el mundo empresarial del "software" de código cerrado: "si encuentras cliente sobrevives, pero sin ellos mueres".
Systems Development Life Cycle
Las actividades del proceso de desarrollo de software representados en el modelo de cascada. Hay varios otros modelos para representar a este proceso. La tarea importante en la creación de un producto de software es la extracción de las exigencias o requisitos de análisis. Los clientes suelen tener una idea abstracta de lo que quieren como resultado final, pero no lo que el software debe hacer. Incompleta, ambigua o, incluso, exigencias contradictorias son reconocidos por los ingenieros de software especializados y experimentados en este punto. Con frecuencia viven demostrando código puede ayudar a reducir el riesgo de que los requisitos son incorrectos. Una vez que los requisitos generales que se deducen de la cliente, un análisis del alcance del desarrollo debe ser determinada y claramente. Esto es a menudo llamado un documento de alcance. Algunas funciones pueden estar fuera del alcance del proyecto en función del costo o como resultado de los requisitos de claro en el inicio del desarrollo. Si el desarrollo se realiza en el exterior, este documento puede ser considerado un documento legal de manera que si cada vez hay controversias, ninguna ambigüedad de lo que se comprometió a que el cliente pueda ser aclarado. La implementación es la parte del proceso en el que los ingenieros de software en realidad el programa de código para el proyecto. Pruebas de software es una parte integral e importante del proceso de desarrollo de software. Esta parte del proceso asegura que los defectos son reconocidos tan pronto como sea posible. Documentar el diseño interno de software con el propósito de mantenimiento futuro y la mejora se realiza durante todo el desarrollo. Esto también puede incluir la autoría de una API, ya sea externa o interna. Despliegue comienza después de que el código es prueba de forma adecuada, es aprobado para su liberación y vendidos o distribuidos en un entorno de producción. Software de capacitación y apoyo es muy importante y una gran cantidad de desarrolladores no se dan cuenta de que. No sería por mucho 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 usarlo. La gente a menudo se resisten al cambio y evitar adentrarse en una zona desconocida, así como una parte de la fase de despliegue, es muy importante contar con clases de formación para nuevos clientes de su software. Mantener y mejorar el software para hacer frente a los problemas recién descubiertos o nuevos requisitos puede tomar mucho más tiempo que el desarrollo inicial del software. Puede ser necesario agregar código que no se ajusta al diseño original para corregir un problema imprevisto o puede ser que un cliente solicita una mayor funcionalidad y el código se puede añadir a sus peticiones. Si el costo laboral de la fase de mantenimiento supera el 25% del coste de las fases anteriores "mano de obra, entonces es probable que la calidad general, de al menos una fase previa, es pobre. En ese caso, la administración debería considerar la opción de la reconstrucción del sistema (o partes) antes de costes de mantenimiento está fuera de control. Sistema de seguimiento de fallos de herramientas que frecuentemente se utilizan en esta fase del proceso para permitir que los equipos de desarrollo de interfaz con los clientes, equipos de campo de pruebas del software para identificar cualquier problema real o percibida. Estas herramientas de software, tanto de código abierto y con licencia comercial, ofrecer un proceso personalizable para adquirir, revisar, reconocer y responder a los problemas reportados. Existen varios modelos para agilizar el proceso de desarrollo. Cada uno tiene sus pros y sus contras, y es hasta el equipo de desarrollo a adoptar la más adecuada para el proyecto. A veces una combinación de los modelos pueden ser más adecuados. El modelo muestra un proceso de cascada, donde los desarrolladores deben seguir estas fases a fin de: 1. Especificación de Requisitos (Análisis de requerimientos) 2. Diseñar 3. Aplicación (o codificación) 4. Integración 5. Pruebas (o de validación) 6. Implementación (o instalación) 7. Mantenimiento En un modelo de cascada estricta, después de finalizar cada fase, se procede a la siguiente. Las revisiones pueden ocurrir antes de pasar a la siguiente fase que permite la posibilidad de cambios (que puede implicar un proceso formal de control de cambios). Sin embargo, se desaconseja volver a examinar y revisar cualquier fase anterior una vez que esté completo. Esta "rigidez" en un modelo en cascada pura ha sido una fuente de críticas por otras más "flexible" modelos. La principal característica de un modelo en espiral es la gestión del riesgo en las etapas regulares en el ciclo de desarrollo. En 1988, Barry Boehm publicó un sistema formal para el desarrollo de software "modelo en espiral", corresponde modelos y los modelos de prototipos rápidos combinar el énfasis ha sido descuidado por otros modelos de análisis de riesgos, especialmente adaptadas a gran escala de sistemas complejos. Un modelo de espiral de caracol a un número de iteración, los cuatro representante diagrama de cuadrante de las siguientes actividades: (1) formular planes a identificar blancos de software seleccionado para implementar el programa, aclarar las restricciones proyecto de desarrollo, (2) Análisis de riesgos: un análisis y evaluación de los programas seleccionados, para estudiar la manera de identificar y eliminar el riesgo, (3) la ejecución del proyecto: la aplicación de desarrollo de software y de verificación; (4) Evaluación de los clientes: la evaluación de la labor de desarrollo, la propuesta de enmiendas, los planes de formular el siguiente paso. Riesgo modelo basado en espiral, haciendo hincapié en las condiciones de las opciones y limitaciones a fin de apoyar la reutilización de software, la calidad del software puede ayudar como un objetivo especial de la integración en el desarrollo de productos. Sin embargo, el modelo en espiral que tiene algunas condiciones restrictivas, como sigue: (1) el modelo en espiral hincapié en el análisis de riesgos, sino que requieren los clientes a aceptar y creer que gran parte de este análisis, y dar la respuesta pertinente no es fácil, por lo tanto, este modelo es a menudo adaptado a interno en gran escala de desarrollo de software. (2) Si la aplicación de análisis de riesgo afectará en gran medida los beneficios del proyecto, a continuación, el análisis de riesgo no tiene sentido, por lo tanto, el modelo en espiral es solo apto para grandes proyectos de software a gran escala. (3) Buenas a los desarrolladores de software debe buscar los posibles riesgos, un análisis preciso de los riesgos, de lo contrario, dará lugar a un mayor riesgo de Primera etapa es determinar la etapa de la meta de lograr estos objetivos, las opciones y limitaciones y, a continuación, desde la perspectiva del programa de análisis de riesgos, la estrategia de desarrollo, y esforzarse por eliminar todos los riesgos potenciales y, a veces necesaria para lograr a través de la construcción de la prototipo. Si algún riesgo no puede descartarse, el programa para poner fin de inmediato, o bien iniciar el desarrollo de los próximos pasos. Por último, los resultados de la evaluación de la etapa, y el diseño de la próxima fase. Iterativo Desarrollo1 prescribe la construcción de porciones inicialmente pequeño pero cada vez mayor de un proyecto de software para ayudar a todos los participantes a descubrir aspectos importantes principios antes que los problemas o suposiciones erróneas pueden llevar al desastre. Los procesos iterativos son preferidas por los desarrolladores comerciales, ya que permite un potencial de alcanzar los objetivos de diseño de un cliente que no sabe cómo definir lo que quieren. Ágiles de desarrollo de software de desarrollo iterativo utiliza como base, pero los defensores de un pueblo más ligero y más centrada en el punto de vista que los enfoques tradicionales. Los procesos ágiles de votos utilizar, en lugar de planificación, como su principal mecanismo de control. La respuesta es impulsado por las pruebas regulares y las liberaciones de los programas en constante evolución. Hay muchas variaciones de los procesos ágiles. XP (Extreme Programming) En XP, las fases se lleven a cabo en muy pequeña (o "continuo") las medidas frente a la antigua, "lote" los procesos. La (intencionalmente incompleta) de primer paso a través de los pasos que podría tomar un día o una semana, en vez de los meses o años de cada paso completo en el modelo de cascada. En primer lugar, se escribe pruebas automatizadas, para proporcionar metas concretas para el desarrollo. Lo siguiente es la codificación (por un par de programadores), que se completa cuando todas las pruebas pasan, y los programadores no pueden pensar en más pruebas que se necesitan. Diseño y arquitectura emergen de refactorización, y viene en pos de codificación. El diseño es realizado por las mismas personas que hacen la codificación. (El último rasgo - la fusión de diseño y código - es común a todos los demás procesos ágiles.) La incompleta pero funcional sistema se instala, ni ha demostrado para subconjunto (algunos de) los usuarios (al menos uno de los cuales está en el equipo de desarrollo). En este punto, los profesionales de empezar de nuevo a escribir ensayos para la parte más importante del sistema. Rational Unified Process Scrum Capability Maturity Model Integration Modelo de Madurez de la Capacidad de Integración (CMMI) es uno de los principales modelos y basado en las mejores prácticas. Evaluaciones independientes de las organizaciones de grado de lo bien que siguen sus procesos definidos, no en la calidad de los procesos o el software producido. CMMI ha sustituido a la CMM. ISO 9000 ISO 9000 describe las normas para un proceso formalmente organizados para la fabricación de un producto y los métodos de gestión y seguimiento de los progresos realizados. Aunque la norma fue creada originalmente para el sector manufacturero, las normas ISO 9000 se han aplicado al desarrollo de software. Como CMMI, la certificación ISO 9000 no garantiza la calidad del resultado final, solo que los procesos de negocio formalizado se han seguido. ISO 15504 ISO 15504, también conocida como Proceso de Determinación de Software Mejora de las Capacidades (SPICE), es un "marco para la evaluación de los procesos de software". Esta norma está destinada a establecer un modelo claro para la comparación de procesos. SPICE se utiliza mucho como CMMI. Que los modelos de los procesos para administrar, controlar, orientar y supervisar el desarrollo de software. Este modelo se utiliza para medir lo que una organización de desarrollo o el equipo de proyecto en realidad lo hace durante el desarrollo de software. Esta información es analizada para identificar las debilidades y la mejora de la unidad. También identifica los puntos fuertes que puede mantenerse o integrarse en una práctica común para esa organización o equipo. Los métodos formales son métodos matemáticos para la solución de software (y hardware) los problemas en los requisitos, especificaciones y los niveles de diseño. Ejemplos de los métodos formales son el B-Método, redes de Petri, lo que prueba automática de teoremas, plantear y VDM. Varios anotaciones especificación formal están disponibles, tales como la notación Z. Más en general, la teoría de autómatas se puede utilizar para construir y validar el comportamiento de la aplicación mediante el diseño de un sistema de máquinas de estados finitos. Máquina de estados finitos (FSM), metodologías basadas en la especificación de software permiten ejecutable y por paso de la codificación convencional (véase el virtual máquina de estados finitos o un evento impulsado por máquina de estados finitos). Los métodos formales son más susceptibles de ser aplicadas en el software de aviónica, en particular cuando el software es indispensable para la seguridad. Normas de garantía de software de seguridad, tales como los métodos de la demanda DO178B formal al más alto nivel de categorización (Nivel A). Formalización de desarrollo de software se infiltra en él, en otros lugares, con la aplicación de Object Constraint Language especializaciones (y como Java Modeling Language) y, especialmente, con el modelo impulsado por la arquitectura permite la ejecución de diseños, si no las especificaciones. Otra de las tendencias emergentes en el desarrollo de software es escribir una especificación en algún tipo de lógica (por lo general una variación de FOL), y luego de ejecutar directamente la lógica, como si se tratara de un programa. El lenguaje OWL, basados en la descripción lógica, es un ejemplo. También se está trabajando sobre la cartografía de alguna versión de inglés (u otro lenguaje natural) y de forma automática a partir de la lógica, y la ejecución de la lógica directamente. Ejemplos de ello son Attempto Inglés controlada, y la lógica de negocios de Internet, que no tratan de controlar el vocabulario o la sintaxis. Una característica de los sistemas que apoyan bidireccional Inglés-mapping lógica y la ejecución directa de la lógica es que pueden hacerse para explicar sus resultados, en inglés, en el negocio o nivel científico. La Oficina de Responsabilidad Gubernamental, en un informe de 2003 sobre una de tráfico de la Administración Federal de Aviación de los programas de modernización del control aéreo, 2 recomienda seguir las orientaciones de la agencia para la gestión de sistemas de adquisición de los principales • establecer, mantener y controlar una forma precisa, válida y actual base de referencia de medición del desempeño, que incluiría la negociación de todos los autorizados, el trabajo sin precio a menos de 3 meses; • la realización de un examen integrado de base de cualquier modificación importante contrato dentro de 6 meses, y • preparación de una vida rigurosa estimación del coste del ciclo, incluyendo una evaluación del riesgo, de conformidad con la orientación del conjunto de herramientas de Sistema de Adquisición y de identificar el nivel de incertidumbre inherente a la estimación.