¿Cómo convertirse en un desarrollador de software?
Desarrollador de software
Nota: para que un programador se convierta en desarrollador, debe poseer experiencia y saber el manejo y la aplicación de metodologías de desarrollo; es sobre todo la experiencia y el conocimiento técnico, lo que ha impulsado la evolución del término 'programador' hacia el término 'desarrollador'. Desarrollador de software
En informática, un desarrollador (al que con frecuencia también se conoce como analista-programador), es un especialista en informática que es capaz de concebir y elaborar sistemas informáticos (paquetes de software), así como de implementarlos y ponerlos a punto, utilizando uno o varios lenguajes de programación. 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".
Relicencia de software
La relicencia de software se aplica en el desarrollo de software de código abierto cuando las licencias de software de los módulos de software son incompatibles y se requiere que sean compatibles para un trabajo combinado mayor. Las licencias aplicadas al software como trabajos sujetos a derechos de autor, en código fuente como forma binaria, pueden contener cláusulas contradictorias. Estos requisitos pueden hacer que sea imposible combinar el código fuente o el contenido de varios trabajos de software para crear uno nuevo combinado. Programa informático
La programación de computadoras es el proceso iterativo de escribir o editar código fuente. Dicha edición implica probar, analizar y perfeccionar, y, a veces, coordinar con otros programadores, en el caso de un programa desarrollado en conjunto. Una persona que practica esta técnica se le conoce como programador de computadoras, desarrollador de "software", o codificador. El proceso, a veces a largo plazo, de programación de computadoras normalmente se lo conoce como desarrollo de software. El término ingeniería de software se está convirtiendo en muy popular, ya que esta actividad es vista como una disciplina de ingeniería. Historia de la ingeniería del software
Desde sus inicios en la década de 1940, escribir "software" ha evolucionado hasta convertirse en una profesión que se ocupa de cómo crear software y maximizar su calidad. La calidad puede referirse a cómo de mantenible es el software, su estabilidad, velocidad, usabilidad, comprobabilidad, legibilidad, tamaño, coste, seguridad y número de fallos o "bugs", así como, entre muchos otros atributos, a cualidades menos medibles como elegancia, concisión y satisfacción del cliente. La mejor manera de crear "software" de alta calidad es un problema separado y controvertido cubriendo el diseño de "software", principios para escribir código, llamados "buenas prácticas", así como cuestiones más amplias de gestión como tamaño óptimo del equipo de trabajo, el proceso, la mejor manera de entregar el "software" a tiempo y tan rápidamente como sea posible, la "cultura" del lugar de trabajo, prácticas de contratación y así sucesivamente. Todo esto cae bajo la rúbrica general de ingeniería de software. Artesanía de software
En diciembre de 2008, un número de aspirantes a artesanos de software se reunieron en Libertyville, Illinois con la intención de establecer un conjunto de principios para la Artesanía de software. Programador
Los programadores también son denominados desarrolladores de software, aunque estrictamente forman parte de un equipo de personas de distintas especialidades (mayormente informáticas), y siendo que el equipo es propiamente el desarrollador. Software
Universo de Discurso (UdeD): es el contexto general en el cual el "software" deberá ser desarrollado y deberá operar. El UdeD incluye todas las fuentes de información y todas las personas relacionadas con el "software". Esas personas son conocidas también como actores de ese universo. El UdeD es la realidad circunstanciada por el conjunto de objetivos definidos por quienes demandaron el "software". Ingeniería de software
Para el desarrollo de un sistema de "software" es necesaria la colaboración de muchas personas con diversas competencias, capacidades e intereses. Al conjunto de personas involucradas en el proyecto se les conoce como participantes. Proceso para el desarrollo de software
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. Personal Software Process
El Software Engineering Institute ("SEI"), de la Universidad Carnegie Mellon ofrece una certificación en PSP. Los pasos para hacerse un desarrollador certificado en PSP son: aprender PSP, realizar el examen de certificación, mantener las credenciales. Systems Development Life Cycle
Un proceso de desarrollo de software es una estructura impuesta sobre el desarrollo de un producto de software. Los sinónimos son de ciclo de vida del software y el proceso de software. Existen varios modelos para estos procesos, cada uno de los enfoques para describir una variedad de tareas o actividades que tienen lugar durante el proceso. Contenidos ocultar • 1 Información general • 2 actividades de desarrollo de software 2,1 o Planificación o 2.2 La ejecución, pruebas y documentación de 2,3 o de implementación y mantenimiento • 3 modelos de desarrollo de software 3,1 o Cascada Modelo 3,2 o un modelo de espiral 3,3 o iterativo e incremental de desarrollo 3.4 Ágil o Desarrollo • 4 Proceso de Mejora de Modelos • 5 métodos formales • 6 Véase también • 7 Referencias • 8 Enlaces externos Ingeniería técnica en informática de gestión
Los Ingenieros Técnicos en Informática de Gestión empiezan su labor con el análisis de las necesidades de los usuarios y a continuación, diseñan, testean y desarrollan software para satisfacer esas necesidades. Durante este proceso se crean series de instrucciones detalladas, llamadas algoritmos, que le dicen a la computadora qué debe hacer. También pueden ser responsables de la conversión de estas instrucciones en un lenguaje de ordenador, un proceso llamado de programación o de codificación, pero esto generalmente es responsabilidad de los llamados programadores de computadoras. Los Ingenieros Técnicos en Informática de Gestión deben ser ingenieros expertos en las Tecnologías de la Información para garantizar que los sistemas funcionen correctamente. Proceso para el desarrollo de software
Algunas organizaciones crean un grupo propio ("Software Engineering Process Group", abreviado SEPG) encargado de mejorar los procesos para el desarrollo de software en la organización. Desarrollo ágil de software
El desarrollo ágil de software envuelve un enfoque para la toma de decisiones en los proyectos de software, que se refiere a métodos de ingeniería del software basados en el desarrollo iterativo e incremental, donde los requisitos y soluciones evolucionan con el tiempo según la necesidad del proyecto. Así el trabajo es realizado mediante la colaboración de equipos autoorganizados y multidisciplinarios, inmersos en un proceso compartido de toma de decisiones a corto plazo. Kit de desarrollo de software
Un kit de desarrollo de "software" ( o SDK) es generalmente un conjunto de herramientas de desarrollo de software que permite a un desarrollador de "software" crear una aplicación informática para un sistema concreto, por ejemplo ciertos paquetes de "software", entornos de trabajo, plataformas de "hardware", computadoras, videoconsolas, sistemas operativos, etcétera. Proceso para el desarrollo de software
Otra tendencia que está surgiendo en el desarrollo de software es la redacción de especificaciones en algún tipo de lógica (normalmente una variación de FOL), para acto seguido ejecutar esa lógica como si se tratase de un programa. El lenguaje OWL, basado en lógica descriptiva, es un buen ejemplo. También se está trabajando en enlazar un idioma natural de forma automática con lógica, lógica que puede ejecutarse. Ejemplo en este campo es el "Attempto Controlled English", una lógica de negocios de Internet, que no busca controlar el vocabulario o la sintaxis. Una características de los sistemas que apoyan el vínculo bidireccional inglés-lógica y ejecución directa de la lógica es que pueden explicar sus resultados en inglés en un nivel de negocios o científico. Professional Developers Conference
Microsoft's Professional Developers Conference ( Conferencia de Desarrolladores profesionales de Microsoft en castellano), o simplemente Microsoft PDC, es una conferencia para los desarrolladores de software, normalmente de Windows. En el 2011, fue unificada con la conferencia de Desarrollo web MIX y en su conjunto fueron renombradas como la conferencia Build. Lean software development
El desarrollo de software es un proceso de aprendizaje continuo, a ello se le suman los retos de los equipos de desarrollo y el tamaño del producto final. El mejor enfoque para encarar una mejora en el ambiente de desarrollo de software es amplificar el aprendizaje. La acumulación de defectos debe evitarse ejecutando las pruebas tan pronto como el código está escrito en lugar de añadir más documentación o planificación detallada. Las distintas ideas podrían ser probadas escribiendo código e integrándolo. El proceso de recopilación de requisitos de usuarios podría simplificarse mediante la presentación de las pantallas de los usuarios finales para que estos puedan hacer sus aportes. El proceso de aprendizaje es acelerado con el uso de iteraciones cortas cada una de ellas acompañada de refactorización y sus pruebas de integración. Systems Development Life Cycle
El ciclo de desarrollo de sistemas (SDC), o "ciclo de desarrollo de un software" en la ingeniería de sistemas e ingeniería de software, es el proceso de creación o modificación de los sistemas, modelos y metodologías que la gente usa para desarrollar estos sistemas de software. El concepto general se refiere a la computadora o sistemas de información. En ingeniería de software el concepto de SDLC sostiene muchos tipos de metodologías de desarrollo de software. Estas metodologías constituyen el marco para la planificación y el control de la creación de una información en el proceso de desarrollo de software. Software
Es común pensar que la etapa de programación o codificación (algunos la llaman implementación) es la que insume la mayor parte del trabajo de desarrollo del "software"; sin embargo, esto puede ser relativo (y generalmente aplicable a sistemas de pequeño porte) ya que las etapas previas son cruciales, críticas y pueden llevar bastante más tiempo. Se suele hacer estimaciones de un 30 % del tiempo total insumido en la programación, pero esta cifra no es consistente ya que depende en gran medida de las características del sistema, su criticidad y el lenguaje de programación elegido. En tanto menor es el nivel del lenguaje mayor será el tiempo de programación requerido, así por ejemplo se tardaría más tiempo en codificar un algoritmo en lenguaje ensamblador que el mismo programado en lenguaje C. Desarrollo de videojuegos
Los desarrolladores de videojuegos se clasifican en tres categorías: "desarrolladores terceros", "desarrolladores internos" y los más pequeños "independientes". Los desarrolladores generalmente contratan a un grupo de programadores, diseñadores de juegos, artistas, ingenieros de sonido, productores y probadores, a pesar de que algunos de estos roles pueden ser externos. De manera confusa, una persona individual dentro de cualquiera de estos roles puede ser llamada "desarrolladora de videojuegos". También pueden clasificarse de la siguiente manera: Licencia de software libre
Una licencia de software libre es un documento que otorga al software derechos extensivos para modificar y redistribuir ese software. Estas acciones normalmente se prohíben por las leyes de derechos de autor, pero el que posee los derechos, normalmente es el creador del software, puede eliminar esas restricciones acompañando al software con una licencia de software que otorgue al receptor de estos derechos. El software que usa tales licencias se denomina software libre y esas libertades las concede el propietario del copyright. Las licencias de software libre se aplican tanto al software en forma de código fuente o en código objeto binario, ya que las leyes de derechos de autor reconocen ambas formas. Distribuidora de software
Una distribuidora de "software" es una empresa que se dedica a mediar entre las de desarrollo de "software" y los minoristas. Una empresa de desarrollo de "software" puede acudir a una distribuidora para que ésta se encargue de difundir el producto. En el otro sentido, una distribuidora puede decidir publicar un producto y para ello encargar la elaboración a una empresa de desarrollo. También puede ocurrir que una empresa cumpla ambas funciones: desarrollar y distribuir el "software". Las distribuidoras habitualmente venden licencias de "software" bajo limitaciones temporales y geográficas, y retribuirle regalías a la desarrolladora. Programador
Un programador es aquella persona que elabora programas de computadora, es decir escribe, depura y mantiene el código fuente de un programa informático, que ejecuta el hardware de una computadora, para realizar una tarea determinada. Diseño electrónico
Un diseñador electrónico debe poseer conocimientos en estas áreas, que a su vez son parte de las anteriormente mencionadas y de las tres grandes áreas del diseño electrónico Hardware, Firmware y Software: Manejo de herramientas CAD/CAM, simuladores; protocolos de comunicaciones ( USB, RS232, RS485, RS422, Bluetooth, Wifi, MiWi, RF convencional, ZigBee/XBee, GSM, GPS, BacNet, HART, etc.); configuración y programación de sistemas embebidos de arquitecturas de 8, 16 y 32 bits; desarrollos de aplicaciones en lenguajes de programación como: C, C++ o C#, java, python, php y android entre los más relevantes. Además, Un diseñador electrónico debe estar al tanto de los estándares de la industria electrónica, como por ejemplo IPC en la fabricación de PCB o las nuevas versiones de los protocolos de comunicaciones. Software
Una posible lista, general y ordenada, de tareas recomendadas para obtener la definición de lo que se debe realizar, los productos a obtener y las técnicas a emplear durante la actividad de elicitación de requisitos, en fase de Especificación de requisitos "software" es:Algunos principios básicos a tener en cuenta:Se pueden identificar dos formas de requisitos:Es decir, ambos son lo mismo, pero con distinto nivel de detalle. Proceso para el desarrollo de 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.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. Historia de la construcción de los compiladores
En informática, un compilador es un programa informático que transforma código fuente escrito en un lenguaje de programación o lenguaje informático (el "lenguaje fuente"), en otro lenguaje informático (el "lenguaje objetivo", estando a menudo en formato binario conocido como código objeto). La razón más común para querer transformar código fuente es crear un programa ejecutable. Software comercial
Cuando el software se vende solo en forma binaria ("código cerrado") en el mercado, además se logra un control exclusivo sobre los derivados de software y un mayor desarrollo. El proceso de reconstrucción de ingeniería inversa de un software complejo desde su forma binaria a su forma de código fuente, requerido para la adaptación y el desarrollo no autorizados de terceros, es un proceso engorroso ya menudo imposible. Esto crea otra oportunidad de comercialización de software en forma de código fuente por un precio más alto, por ejemplo. otorgando la licencia del código fuente de un motor de juego a otro desarrollador de juegos para un uso y adaptación flexibles. Bifurcación (desarrollo de software)
Las bifurcaciones de proyectos de "software" libre pueden surgir de un cisma en los objetivos o un choque de personalidades. En una bifurcación, ambos lados asumen derechos de autor idénticos pero típicamente solo el grupo de mayor tamaño, o el que contiene al arquitecto original, retendrá el nombre original completo. Al tratarse de software con licencia libre, cada miembro de la comunidad de usuarios asociada puede elegir mantenerse en el proyecto original, o cambiarse a la versión bifurcada y actualizada mediante una forma de gestión diferente. Además, gracias a la licencia libre está permitido trasladar las mejoras creadas en una versión a la otra cuando sea deseable. El resultado puede ser tener dos proyectos que evolucionan en paralelo, cada uno especializado en adaptarse a unas condiciones distintas al otro. Diseño de software
El diseño de software es el proceso por el que un agente crea una especificación de un artefacto de software, pensado para cumplir unos objetivos, utilizando un conjunto de componentes primitivos y sujeto a restricciones. El diseño de software  se puede referir a "toda la actividad en conceptualizar, enmarcar, implementar, poner en funcionamiento y, finalmente, modificar sistemas complejos" o "la actividad que sigue a la especificación de requisitos y precede a la programación, como en un proceso de ingeniería de software estilizado. Método de desarrollo de sistemas dinámicos
El Método de Desarrollo de Sistemas dinámicos (en inglés "Dynamic Systems Development Method" o "DSDM") es un método que provee un framework para el desarrollo ágil de software, apoyado por su continua implicación del usuario en un desarrollo iterativo y creciente que sea sensible a los requerimientos cambiantes, para desarrollar un sistema que reúna las necesidades de la empresa en tiempo y presupuesto. Es uno de un número de métodos de desarrollo ágil de software y forma parte de la alianza ágil. Proceso para el desarrollo de software
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: Proceso para el desarrollo de software
Un Rol se define como una “Función que alguien o algo cumple” (Abstracta Academy, 2016). Desarrollador de software
El concepto de desarrollo de software incluye: Desarrollador de software
En una segunda etapa se desarrolla una solución técnica (hardware) y se crea un modelo (análisis orgánico) del futuro programa (software) que gestionará el futuro sistema informático (si no existe). Diseño de software
El diseño de software es un proceso y un modelo. El proceso de diseño es una secuencia de pasos que habilita al diseñador para describir todos los aspectos del software a construir. La habilidad creativa, la experiencia, el sentido de qué hace a un "buen" software y el compromiso con la calidad son ejemplos de factores críticos para el éxito de un diseño competente. Es importante tener en cuenta aun así que el proceso de diseño no es siempre un procedimiento sencillo; el modelo de diseño puede ser comparado con los planos de una casa para un arquitecto. Se empieza representando la totalidad de la cosa que se va a construir (p. ej., un renderizado tridimensional de la casa); la cosa se va refinando lentamente para sevir como guía a la hora de construir cada detalle (p. ej., la parte de fontanería). Del mismo modo, el modelo de diseño que se crea para el software proporciona una variedad de visiones distintas del software. Los principios básicos de diseño ayudan al ingeniero de software a navegar por el proceso de diseño. Davis sugiere un conjunto de principios de diseño de software que han sido adaptados y extendidos en la siguiente lista:Los conceptos de diseño proporcionan al diseñador de software una base sobre la que se pueden aplicar métodos más sofisticados. El conjunto de conceptos fundamentales del diseño ha evolucionado. Son los siguientes:En su modelo de objeto, Grady Booch menciona Abstracción, Encapsulación, Modularización y Jerarquía como principios fundamentales del diseño de software. El acrónimo PHAME (del inglés: Principles of Hierarchy, Abstraction, Modularisation, and Encapsulation) se utiliza a veces para referirse a estos cuatro principios fundamentales. Lean software development
"Piensa en grande, actúa en pequeño, equivócate rápido; aprende con rapidez" estas consignas resumen la importancia de comprender el terreno y la idoneidad de implementar los principios Lean a lo largo del proceso de desarrollo de software. Sólo cuando todos los principios de Lean se aplican al mismo tiempo, combinado con un fuerte "sentido común" en relación con el ambiente de trabajo, hay una base para el éxito en el desarrollo de software. Personal Software Process
Uno de los mayores problemas que tiene es la gran cantidad de datos que hay que tomar. El PSP tiene obsesión por la toma de datos y elaboración de tablas. El PSP se orienta el conjunto de áreas clave del proceso que debe manejar un desarrollador cuando trabaja de forma individual.  PSP pretende formar ingenieros de software con métodos disciplinados para mejorar su desarrollo personal de software. PSP le ayuda a los desarrolladores a:El entrenamiento de PSP sigue una metodología evolutiva de mejora: quien empieza a integrar PSP en su proceso comienza en el nivel PSP0 y progresa hasta alcanzar el nivel PSP2.1 que es el nivel máximo de madurez. Universal Media Disc
Estos miembros están mayoritariamente en países del primer mundo, donde hay disponibles conexiones de alta velocidad a Internet. Los grupos de crackers suelen ser pequeños. Teóricamente, para desarrollar software para una consola de videojuegos y en general para cualquier producto informático, hace falta encontrarse acreditado por el fabricante y pagar una considerable inversión para el uso de la licencia y la adquisición del Kit de Desarrollo (SDK). Sin embargo, gracias a la Scene y a su acceso libre a código ya desarrollado por otros programadores, con relativa facilidad, cualquiera puede desarrollar software para la PSP. Software
Es bien conocida la presión que sufren los desarrolladores de sistemas informáticos para comprender y rescatar las necesidades de los clientes/usuarios. Cuanto más complejo es el contexto del problema más difícil es lograrlo, a veces se fuerza a los desarrolladores a tener que convertirse en casi expertos de los dominios que analizan. Software
El proceso de desarrollo puede involucrar numerosas y variadas tareas, desde lo administrativo, pasando por lo técnico y hasta la gestión y el gerenciamiento. Pero, casi rigurosamente, siempre se cumplen ciertas etapas mínimas; las que se pueden resumir como sigue:En las anteriores etapas pueden variar ligeramente sus nombres, o ser más globales, o contrariamente, ser más refinadas; por ejemplo indicar como una única fase (a los fines documentales e interpretativos) de «análisis y diseño»; o indicar como «implementación» lo que está dicho como «codificación»; pero en rigor, todas existen e incluyen, básicamente, las mismas tareas específicas. Systems Development Life Cycle
Proceso de desarrollo de software De Wikipedia, la enciclopedia libre Saltar a navegación, búsqueda Proceso de desarrollo de software Actividades y las medidas • Requisitos de Especificación • Diseño de Arquitectura • Aplicación de Pruebas • Mantenimiento de implementación Pudrición del software
Los desarrolladores a menudo son alentados a entender completamente un problema antes de programar una solución, y a mantener precisa y completa la documentación del software. En la práctica, sin embargo, añadiendo nuevas características puede ser priorizado sobre la actualización de la documentación. Sin documentación, sin embargo, es posible que se pierdan los conocimientos específicos relativos a las partes del programa. Hasta cierto punto, esto puede ser mitigado por las siguientes mejores prácticas actuales en cuanto a la documentación interna y nombres de variables. Proceso para el desarrollo de software
Cada uno de los roles aportará al grupo parte del total necesario para tener éxito en el desarrollo. Los roles son necesarios para cubrir todas las especificaciones necesarias para cumplir un proceso ya que no todos tenemos las mismas cualidades y experiencias. Además al asignar roles, se definen objetivos y actividades para cada uno; lo anterior evitando que alguna actividad no sea asignada o que dos personas realicen el mismo trabajo. Código abierto
La idea bajo el concepto de "código abierto" es sencilla: cuando los programadores (en Internet) pueden leer, modificar y redistribuir el código fuente de un programa, este evoluciona, se desarrolla y mejora. Los usuarios lo adaptan a sus necesidades, corrigen sus errores con un tiempo de espera menor a la aplicada en el desarrollo de software convencional o cerrado, dando como resultado la producción de un mejor software. Proceso del desarrollo del software
Las organizaciones de desarrollo de software implementan metodologías de proceso para facilitar el proceso de desarrollo. A veces, los contratistas pueden requerir metodologías empleadas, un ejemplo es la industria de defensa de los EE. UU., que requiere una calificación basada en modelos de procesos para obtener contratos. El estándar internacional para describir el método de selección, implementación y seguimiento del ciclo de vida del software es ISO/IEC 12207. Software
El modelo es aconsejable para el desarrollo de "software" en el cual se observe, en su etapa inicial de análisis, que posee áreas bastante bien definidas a cubrir, con suficiente independencia como para ser desarrolladas en etapas sucesivas. Tales áreas a cubrir suelen tener distintos grados de apremio por lo cual las mismas se deben priorizar en un análisis previo, es decir, definir cual será la primera, la segunda, y así sucesivamente; esto se conoce como «definición de los incrementos» con base en la priorización. Pueden no existir prioridades funcionales por parte del cliente, pero el desarrollador debe fijarlas de todos modos y con algún criterio, ya que basándose en ellas se desarrollarán y entregarán los distintos incrementos. Desarrollo de software de código abierto
En 1997, Eric S. Raymond escribió "la Catedral y el Bazar". En este libro Raymond hace la distinción entre dos tipos de desarrollo de "software". El primero es el desarrollo convencional de "software" de código cerrado. Este tipo de desarrollo de métodos de desarrollo es, de acuerdo con Raymond, como construir una catedral; planificación centralizada organización fija y un proceso desde el comienzo hasta el final. La segunda es el desarrollo del código abierto progresivo, que es más como un gran bazar caótico con gente con muchas agendas diferentes y se acerca a lo que uno entendería por un emergente coherente y estable que solo podría ser posible a través de una sucesión de milagros. Esta analogía se refiere a la discusión que tiene lugar en un proceso de desarrollo de código abierto. Proyecto Debian
El proyecto Debian goza de un flujo permanente de gente que quiere ser desarrollador. Esta gente debe pasar un elaborado proceso de examen que establece su identidad, motivación, entendimiento de los objetivos del proyecto (agrupados en el Contrato Social de Debian) y competencia técnica. Scene
Para desarrollar software para una consola de videojuegos es necesario la acreditación de parte del fabricante y pagar una suma de dinero para el uso de la licencia y la adquisición del Kit de Desarrollo (SDK). La Scene ha desarrollado software que permite con relativa facilidad desarrollar software para un producto informático en particular. Software
Básicamente se tienen los siguientes tipos de cambios:El "software" es el producto derivado del proceso de desarrollo, según la ingeniería de "software". Este producto es intrínsecamente evolutivo durante su ciclo de vida: en general, evoluciona generando versiones cada vez más completas, complejas, mejoradas, optimizadas en algún aspecto, adecuadas a nuevas plataformas (sean de "hardware" o sistemas operativos), etc. Artesanía de software
Artesanía de software es un enfoque del desarrollo de software que enfatiza las habilidades de producir código de los propios desarrolladores de software o programadores. Es una respuesta de estos a los males percibidos en las prácticas establecidas de la industria, entre otros la priorización de las preocupaciones financieras sobre la responsabilidad del desarrollador. Software Quality Assurance Plan
Software Quality Assurance Plan o SQAP (es decir, "Plan de Garantía de Calidad de Software") es un documento que organiza el desarrollo del software con el fin de que el proceso de creación de este siga unas pautas que aseguren la calidad del resultado. Este plan de garantía forma parte de la Ingeniería de software. En este documento se organiza el equipo de personas, se elige el ciclo de vida a seguir, se especifican los documentos que harán falta, las revisiones que se harán, las pruebas e incluso cómo realizar el mantenimiento. Software
La instalación del "software" es el proceso por el cual los programas desarrollados son transferidos apropiadamente al computador destino, inicializados, y, eventualmente, configurados; todo ello con el propósito de ser ya utilizados por el usuario final. Constituye la etapa final en el desarrollo propiamente dicho del "software". Luego de esta el producto entrará en la fase de funcionamiento y producción, para el que fuera diseñado. Modelo de prototipos
El Modelo de prototipos, en Ingeniería de software, pertenece a los modelos de desarrollo evolutivo. El prototipo debe ser construido en poco tiempo, usando los programas adecuados y no se debe utilizar muchos recursos. El diseño rápido se centra en una representación de aquellos aspectos del software que serán visibles para el cliente o el usuario final. Este diseño conduce a la construcción de un prototipo, el cual es evaluado por el cliente para una retroalimentación; gracias a esta se refinan los requisitos del software que se desarrollará. La interacción ocurre cuando el prototipo se ajusta para satisfacer las necesidades del cliente. Esto permite que al mismo tiempo el desarrollador entienda mejor lo que se debe hacer y el cliente vea resultados a corto plazo. La construcción de prototipos se puede utilizar como un modelo del proceso independiente, se emplea más comúnmente como una técnica susceptible de implementarse dentro del contexto de cualquiera de los modelos del proceso expuestos. Sin importar la forma en que este se aplique, el paradigma de construcción de prototipos ayuda al desarrollado de software y al cliente a entender de mejor manera cuál será el resultado de la construcción cuando los requisitos estén satisfechos. De esta manera, este ciclo de vida en particular, involucra al cliente más profundamente para adquirir el producto.A pesar de que tal vez surjan problemas, la construcción de prototipos puede ser un paradigma efectivo para la ingeniería del software. La clave es definir las reglas del juego desde el principio; es decir, el cliente y el desarrollador se deben poner de acuerdo en: Proceso para el desarrollo de software
La espiral se visualiza como un proceso que pasa a través de algunas interacciones con el diagrama de los cuatro cuadrantes representativos de las siguientes actividades:Modelo de espiral con énfasis en los riesgos, haciendo hincapié en las condiciones de las opciones y limitaciones para facilitar la reutilización de software, la calidad del software puede ayudar como una meta propia en la integración en el desarrollo del producto. Sin embargo, el modelo en espiral tiene algunas limitaciones, entre las que destacan:La primera fase es la búsqueda de un plan para conseguir los objetivos con las limitaciones del proyecto para así buscar y eliminar todos los riesgos potenciales por medio de un cuidadoso análisis, y si fuera necesario incluyendo la fabricación de un prototipo. Si es imposible descartar algunos riesgos, el cliente ha de decidir si es conveniente terminar el proyecto o seguir adelante ignorando los riesgos. Por último, se evalúan los resultados y se inicia el diseño de la siguiente fase. Desarrollo de software de código abierto
Desarrollo del "software" de código abierto es el proceso por el que se desarrolla el "software" de código abierto, o de manera similar aquel "software" cuyo código fuente está disponible de manera pública. Estos son productos de "software" disponibles con su código fuente bajo una licencia de código abierto que permite estudiar, cambiar y mejorar el diseño de estos programas. Ejemplos de algunos productos populares de "software" de código abierto son Mozilla Firefox, Google Chromium, Android, LibreOffice y el paquete de oficina Apache OpenOffice Suite. El desarrollo de "software" de código abierto ha sido una gran parte de la creación de la World Wide Web tal y como la conocemos, con Tim Berners-Lee contribuyendo con su desarrollo de código HTML como la plataforma originaria sobre la que Internet se construye ahora. Desarrollo por etapas
1. Plan operativo Etapa donde se define el problema a resolver, las metas del proyecto, las metas de calidad y se identifica cualquier restricción aplicable al proyecto.  2. Especificación de requisitos Permite entregar una visión de alto nivel sobre el proyecto, poniendo énfasis en la descripción del problema desde el punto de vista de los clientes y desarrolladores. También se considera la posibilidad de una planificación de los recursos sobre una escala de tiempos.  3. Especificación funcional  Especifica la información sobre la cual el software a desarrollar trabajará.  4. Diseño  Permite describir como el sistema va a satisfacer los requisitos. Esta etapa a menudo tiene diferentes niveles de detalle. Los niveles más altos de detalle generalmente describen los componentes o módulos que formarán el software a ser producido. Los niveles más bajos, describen, con mucho detalle, cada módulo que contendrá el sistema.  5. Implementación  Aquí es donde el software a ser desarrollado se codifica. Dependiendo del tamaño del proyecto, la programación puede ser distribuida entre distintos programadores o grupos de programadores. Cada uno se concentrará en la construcción y prueba de una parte del software, a menudo un subsistema. Las pruebas, en general, tiene por objetivo asegurar que todas las funciones están correctamente implementadas dentro del sistema.  6. Integración  Es la fase donde todos los subsistemas codificados independientemente se juntan. Cada sección es enlazada con otra y, entonces, probada. Este proceso se repite hasta que se han agregado todos los módulos y el sistema se prueba como un todo.  7. Validación y verificación  Una vez que el sistema ha sido integrado, comienza esta etapa. Es donde es probado para verificar que el sistema es consistente con la definición de requisitos y la especificación funcional. Por otro lado, la verificación consiste en una serie de actividades que aseguran que el software implementa correctamente una función específica. Al finalizar esta etapa, el sistema ya puede ser instalado en ambiente de explotación.  8. Mantenimiento  El mantenimiento ocurre cuando existe algún problema dentro de un sistema existente, e involucraría la corrección de errores que no fueron descubiertos en las fases de prueba, mejoras en la implementación de las unidades del sistema y cambios para que responda a los nuevos requisitos. Las mantenciones se puede clasificar en: correctiva, adaptativa, perfectiva y preventiva. Programador
Inicialmente, la profesión se formalizó desde el enfoque tayloriano de la especialización de funciones en la empresa. Así, el proceso de producción de software se concibe como un conjunto de tareas altamente especializadas donde está claramente definido el papel de cada categoría profesional:Hoy día se reconoce que este enfoque no es válido para organizar tareas de tipo intelectual, como es el desarrollo de software. De manera que la profesión de programador ha ido evolucionando. Las dificultades de comunicación entre analistas y programadores (un mero documento no basta para describir lo que se quiere hacer) dio origen a una categoría de profesional intermedia, denominada analista-programador. La concepción original del programador ha desaparecido siendo sustituida por la de un profesional mucho más formado y con unas funciones menos «mecánicas». Software
Siendo que la captura, elicitación y especificación de requisitos, es una parte crucial en el proceso de desarrollo de "software", ya que de esta etapa depende el logro de los objetivos finales previstos, se han ideado modelos y diversas metodologías de trabajo para estos fines. También existen herramientas "software" que apoyan las tareas relativas realizadas por el ingeniero en requisitos. Software comercial
Si bien la creación de software por programación es un proceso que requiere mucho tiempo y trabajo, comparable a la creación de bienes físicos, la reproducción, duplicación y uso compartido de software como bienes digitales es, en comparación, desproporcionadamente fácil. No se requieren máquinas especiales ni recursos adicionales costosos, a diferencia de casi todos los bienes y productos físicos. Una vez que se crea un software, cualquiera puede copiarlo en números infinitos, por un costo casi nulo. Esto hizo imposible la Contrato de compraventa comercialización de software para el mercado masivo en el comienzo de la Revolución Digital era de la computación. A diferencia del hardware, no se consideraba un bien comercializable. El software se compartió de forma gratuita (cultura hacker) o se Paquetización de productos distribuyó con el hardware vendido, como parte del servicio para que el cliente pueda utilizar el hardware. Software libre
Mucha gente reconoce el beneficio cualitativo del proceso de desarrollo de software cuando los desarrolladores pueden usar, modificar y redistribuir el código fuente de un programa. El movimiento del software libre hace especial énfasis en los aspectos morales o éticos del software, viendo la excelencia técnica como un producto secundario de su estándar ético. El movimiento de código abierto ve la excelencia técnica como el objetivo prioritario, siendo la compartición del código fuente un medio para dicho fin. Por dicho motivo, la Fundación del Software Libre se distancia tanto del movimiento de código abierto como del término "Código Abierto". Proceso unificado
En resumidas cuentas, la cuestión fundamental del desarrollo del software es la escritura del código. Después de todo, los diagramas son solo imágenes bonitas. Ningún usuario va a agradecer la belleza de los dibujos; lo que el usuario quiere es software que funcione.("UML Gota a Gota", Addison Wesley, pág. 7).Por lo tanto, cuando considere usar UML es importante preguntarse por qué lo hará y cómo le ayudará a usted cuando llegue el momento de escribir el código. No existe una evidencia empírica adecuada que demuestre si estas técnicas son buenas o malas; pero lo que sí es cierto es que es de considerable ayuda para las etapas de mantenimiento en proyectos de mediana/avanzada envergadura... Betavine
"Todos son bienvenidos a registrarse como miembros, descargar y jugar con cualquier aplicación, contribuir a los hilos de discusión y crear o comentar entradas de blog. Como desarrollador puede cargar sus propias aplicaciones, mostrar su trabajo y obtener comentarios útiles de otros miembros. Los estudiantes deben mantenerse atentos para grandes competiciones y otras oportunidades."" Fábrica de software
Es necesario también tener en cuenta que al emprender una fábrica de software se debe capacitar muy bien al personal que va a trabajar para ser más eficientes y contribuyan al desarrollo continuo y avanzado en el transcurrir del tiempo y de las necesidades. Licencia de software
El licenciante o proveedor-licenciante es aquel que provee el software más la licencia al licenciatario, la cual, le permitirá a este último tener ciertos derechos sobre el "software". El rol de licenciante lo puede ejercer cualquiera de los siguientes actores:Es la garantía ofrecida por el licenciante o propietario, en la cual, asegura que cuenta con suficientes derechos de explotación sobre el "software" como para permitirle proveer una licencia al licenciatario. Convenciones de programación
Todos los desarrolladores de software tienen que enfrentarse con el problema de organizar y dirigir en ocasiones de un gran número de instrucciones complejas. Para todos los proyectos de software excepto los más pequeños, el código fuente (instrucciones) se divide en archivos separados y frecuentemente entre muchos directorios. De manera natural para programadores se concentran funciones estrechamente relacionadas (comportamientos) en el mismo archivo y se agrupan archivos relacionados en directorios. Como el desarrollo de software evolucionó desde lo programación por procedimientos (como FORTRAN) hacia una programación más orientada a objetos (como C++), se convirtió en práctica habitual escribir el código para una sola clase (pública) en un único archivo (la convención una clase por archivo). Java ha ido un paso más allá: el compilador Java devuelve un error si encuentra más de una clase pública por archivo. Metodología de desarrollo de software
El "desarrollo rápido de aplicaciones" (RAD) es una metodología de desarrollo de software, que implica el desarrollo iterativo y la construcción de prototipos. El desarrollo rápido de aplicaciones es un término originalmente utilizado para describir un proceso de desarrollo de software introducido por James Martin en 1991. Ingeniería de software
La etapa de implementación del diseño de "software" es el proceso de convertir una especificación del sistema en un sistema ejecutable. Siempre implica los procesos de diseño y programación de "software", pero, si se utiliza un enfoque evolutivo de desarrollo, también puede implicar un refinamiento de la especificación del "software". Esta etapa es una descripción de la estructura del "software" que se va a implementar, los datos que son parte del sistema, las interfaces entre los componentes del sistema, y algunas veces los algoritmos utilizados. Proceso Unificado de Rational
El desarrollo de software no lo hace una única persona sino múltiples equipos. Debe haber una comunicación fluida para coordinar requisitos, desarrollo, evaluaciones, planes, resultados, etc. Proceso del desarrollo del software
Hay tres variantes principales de desarrollo incrementalEl desarrollo rápido de aplicaciones (RAD) es una metodología de desarrollo del software, que favorece desarrollo iterativo y la construcción rápida de prototipos en lugar de grandes cantidades de planificación inicial. La "planificación" del software desarrollado utilizando RAD se intercala con la escritura del propio software. La falta de una planificación previa extensa generalmente permite que el software se escriba mucho más rápido, y hace que sea más fácil cambiar los requisitos. Microsoft
Redmond recluta a jóvenes universitarios desarrolladores de software y los mantiene en la empresa. La toma de decisiones se lleva a cabo por desarrolladores. Se podría decir que los desarrolladores de software en Microsoft están considerados como las "estrellas" de la compañía, mientras que en otras empresas como en IBM, estas son los agentes de venta. Desarrollador de software
Conforme pasa el tiempo, la separación entre el diseño de sistemas informáticos, el desarrollo de software, y la programación, se van haciendo más claras y diferenciadas. En el mercado laboral suele encontrarse una diferenciación entre programadores y desarrolladores, siendo estos últimos los que diseñan la estructura o jerarquía de clases. Incluso esos desarrolladores se convierten en arquitectos de sistemas informáticos, o sea, aquellos que diseñan la arquitectura a varios niveles o las interacciones entre componentes de un proyecto de software grande. Ciencias de la computación
Ingeniería de software es el estudio del diseño, implementación y modificación del software con la finalidad de asegurarse de que es de alta calidad, asequible, fácil de mantener, y rápido de construir. Es un enfoque sistemático para el diseño de software, que implica la aplicación de prácticas de ingeniería de software. Los ingenieros de software comercian con la organización y análisis de software — no solo lidian con la creación o fabricación de un nuevo software, sino también con su mantenimiento y disposición interna. Se prevé que estén entre las ocupaciones de más rápido crecimiento entre 2008 y 2018. Debido a la novedad de este subcampo, la educación formal en Ingeniería de software generalmente es parte de los planes de estudio de ciencias de la computación, la gran mayoría de ingenieros de software tienen un grado académico en ciencias de la computación sin tener relación con la ingeniería. Ingeniería de software
En el contexto de ingeniería de "software", el gestor de desarrollo de "software" es un participante, que reporta al director ejecutivo de la empresa que presta el servicio de desarrollo. Es responsable del manejo y coordinación de los recursos y procesos para la correcta entrega de productos de "software", mientras participa en la definición de la estrategia para el equipo de desarrolladores, dando iniciativas que promuevan la visión de la empresa. Proceso del desarrollo del software
El término se utilizó por primera vez para describir un proceso de desarrollo de software introducido por James Martin en 1991. Según Whitten (2003), es una fusión de varias técnicas estructuradas, especialmente ingeniería de tecnología de la información basada en datos, con técnicas de creación de prototipos para acelerar el desarrollo de sistemas de software. Programación
Habitualmente la creación de un programa ejecutable (un típico .exe para Microsoft Windows o DOS) conlleva dos pasos: el primer paso se llama compilación (propiamente dicho) y traduce el código fuente, escrito en un lenguaje de programación y almacenado en un archivo de texto, a código en bajo nivel (normalmente a código objeto, no directamente a lenguaje máquina). El segundo paso se llama "enlazado" en el cual se enlaza el código de bajo nivel generado de todos los ficheros y subprogramas que se han mandado compilar y se añade el código de las funciones necesarias que residen en bibliotecas externas, para que el ejecutable pueda comunicarse directamente con el sistema operativo, traduciendo así finalmente el código objeto a código máquina, y generando un módulo ejecutable. 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. Ingeniería de software
En ingeniería de "software", el modelo de prototipos pertenece a los modelos de desarrollo evolutivo. Este permite que todo el sistema, o algunos de sus partes, se construyan rápidamente para comprender con facilidad y aclarar ciertos aspectos en los que se aseguren que el desarrollador, el usuario, el cliente estén de acuerdo en lo que se necesita así como también la solución que se propone para dicha necesidad y de esta manera minimizar el riesgo y la incertidumbre en el desarrollo, este modelo se encarga del desarrollo de diseños para que estos sean analizados y prescindir de ellos a medida que se adhieran nuevas especificaciones, es ideal para medir el alcance del producto, pero no se asegura su uso real. Metodología de desarrollo de software
Las metodologías de desarrollo de "software" tienen como objetivo presentar un conjunto de técnicas tradicionales y modernas de modelado de sistemas que permitan desarrollar software de calidad, incluyendo heurísticas de construcción y criterios de comparación de modelos de sistemas. Industria del software
Existe una categoría de software que requiere que se le agregue valor, como pueden ser los software de desarrollo (lenguajes de desarrollo o software que necesita sea adaptado e integrado). Este tipo de software va dirigido a empresas y es vendido por revendedores con un conocimiento mayor que entregan servicios adicionales a la simple venta de una caja ("VAR: Value Added Resellers"). En la venta de software para grandes empresas o corporaciones, en general, se involucran directamente las marcas de software ya que les interesa tomar los proyectos grandes y poder vender adicionalmente capacitación, desarrollo, soporte, licencias y actualizaciones y consultoría. Los avances en tecnología del hardware y software de los últimos años han convertido al negocio de la computación en algo complejo. Es muy poco probable que las empresas pongan en marcha sus sistemas de computación sin la ayuda o asistencia de los vendedores de software (ejm: SAP). Proceso para el desarrollo de software
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. Cadena de herramientas
Una simple cadena de herramientas de desarrollo de software consiste de un editor de texto para editar código fuente, un compilador y enlazador para transformar el código fuente en un programa ejecutable, bibliotecas para proveer una interfaz al sistema operativo, y un depurador. Un producto complejo como un videojuego necesita de herramientas para preparar efectos de sonido, música, texturas, modelado en 3D y animaciones, y otras herramientas para combinar estos recursos en el producto final. Desarrollo de videojuegos independiente
A mediados de los años 2000, muchos desarrolladores de videojuegos independientes decidieron liberar el código fuente de sus videojuegos, aumentando así en gran medida el número de posibles participantes, dependiendo esto del interés que genere un proyecto. Esto posibilita que los videojuegos sean mucho más complejos y que tengan éxito en situaciones en las que una versión de código cerrado estaría limitada debido a recursos reducidos (creando así la posibilidad de convertirse en vaporware). Personal Software Process
El proceso personal de software, PSP, es un conjunto de prácticas disciplinadas para la gestión del tiempo y mejora de la productividad personal de los programadores o ingenieros de software, en tareas de desarrollo y mantenimiento de sistemas, mediante el seguimiento del desempeño predicho frente al desempeño real. Está alineado y diseñado para emplearse en organizaciones con modelos de procesos CMMI o ISO 15504. Fue propuesto por Watts Humphrey en 1995 y estaba dirigido a estudiantes. A partir de 1997 con el lanzamiento del libro "An introduction to the Personal Software Process" se dirige ahora a ingenieros juniors. Proceso para el desarrollo de software
Encargado de la concepción y el diseño, escribe el código, prueba lo que construye y se encarga de hacer el mantenimiento del código. Personal Software Process
Los métodos de la ingeniería de software pueden variar desde predictivos hasta adaptativos. PSP es una metodología predictiva, desarrollo Ágil es considerada una metodología adaptiva, pero a pesar de sus diferencias, TSP/PSP y desarrollo Ágil comparten varios conceptos aproximaciones – particulmente en cuanto a la organización del equipo. Con ambos es posible:Desarrollo Ágil y TSP/PSP comparten la idea que los miembros del equipo se responsabilicen por su propio trabajo y trabajen juntos para acordar un plan realista, crear un ambiente de confianza y responsabilidad. Sin embargo, el TSP/PSP se diferencia del desarrollo Ágil en su énfasis en la documentación del proceso y el uso de datos para predecir y definir la agenda del proyecto. DevOps
DevOps (acrónimo inglés de "development" -desarrollo- y "operations" -operaciones-) es un conjunto de prácticas que agrupan el desarrollo de software ( "Dev" ) y las operaciones de TI ( "Ops" ). Su objetivo es hacer más rápido el ciclo de vida del desarrollo de software y proporcionar una entrega continua de alta calidad. DevOps es una práctica complementaria al desarrollo de software ágil ; esto debido a que varias de las características de DevOps provienen de la metodología Agile (término en inglés para la metodologÍa de desarrollo ágil). Software
La obtención de especificaciones a partir del cliente (u otros actores intervinientes) es un proceso humano muy interactivo e iterativo; normalmente a medida que se captura la información, se la analiza y realimenta con el cliente, refinándola, puliéndola y corrigiendo si es necesario; cualquiera sea el método de ERS utilizado. EL analista siempre debe llegar a conocer la temática y el problema que resolver, dominarlo, hasta cierto punto, hasta el ámbito que el futuro sistema a desarrollar lo abarque. Por ello el analista debe tener alta capacidad para comprender problemas de muy diversas áreas o disciplinas de trabajo (que no son específicamente suyas); así por ejemplo, si el sistema a desarrollar será para gestionar información de una aseguradora y sus sucursales remotas, el analista se debe compenetrar en cómo ella trabaja y maneja su información, desde niveles muy bajos e incluso llegando hasta los gerenciales. Dada a gran diversidad de campos a cubrir, los analistas suelen ser asistidos por especialistas, es decir gente que conoce profundamente el área para la cual se desarrollará el "software"; evidentemente una única persona (el analista) no puede abarcar tan vasta cantidad de áreas del conocimiento. En empresas grandes de desarrollo de productos "software", es común tener analistas especializados en ciertas áreas de trabajo. Proceso para el desarrollo de software
El desarrollo de codificación y corrección (en inglés "Code and fix") es, más que una estrategia predeterminada, el resultado de una falta de experiencia o presión que se ejerce sobre los desarrolladores para cumplir con una fecha de entrega. Sin dedicar tiempo de forma explícita para el diseño, los programadores comienzan de forma inmediata a producir código. Antes o después comienza la fase de pruebas de software (a menudo de forma tardía) y los inevitables errores que se encuentran han de eliminarse antes de poder entregar el software. Proceso del desarrollo del software
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. Licencia de software
Una licencia de "software" es un contrato entre el licenciante (autor/titular de los derechos de explotación/distribución) y el licenciatario (usuario consumidor, profesional o empresa) del programa informático, para utilizarlo cumpliendo una serie de términos y condiciones establecidas dentro de sus cláusulas, es decir, es un conjunto de permisos que un desarrollador le puede otorgar a un usuario en los que tiene la posibilidad de distribuir, usar o modificar el producto bajo una licencia determinada. Además se suelen definir los plazos de duración, el territorio donde se aplica la licencia (ya que la licencia se soporta en las leyes particulares de cada país o región), entre otros. Desarrollador de software
Luego se deben escribir las líneas de código necesarias para el correcto funcionamiento (programación), participar en las fases de pruebas, confeccionar la documentación técnica, y hacer el seguimiento y el mantenimiento del producto. Aplicación vertical
Software como éste puede ser comprado cuando está disponible, o el interesado puede contratar a una empresa, consultor o programador independiente para crear desde cero o modificar un software existente y acomodarlo a sus necesidades. Diseño de software
El diseño de software es el proceso de visionado y definición de soluciones software a uno o más conjuntos de problemas. Uno de los componentes principales del diseño de software es el análisis de requisitos del software (ARS, del inglés SRA). Se trata de una parte del proceso de desarrollo de software que enumera especificaciones empleadas en ingeniería de software. Si el software está "automatizado" o centrado en el usuario, el diseño de software puede implicar también el diseño de experiencia de usuario que utiliza un storyboard o guion gráfico para ayudar determinar esas especificaciones. Si el software es completamente automatizado (es decir, sin usuario o interfaz de usuario), un diseño de software puede ser tan sencillo como un diagrama de flujo o un texto describiendo una secuencia planeada de acontecimientos. También hay métodos semiestándares como el Lenguaje Unificado de Modelado (UML) y conceptos fundamentales de modelado. En cualquier caso, normalmente alguna documentación del plan resulta como producto del diseño. Además, un diseño de software puede ser independiente de la plataforma o específico de la plataforma, dependiendo de la disponibilidad de la tecnología utilizada para el diseño. Estudios de software
Los estudios de software son un campo interdisciplinario. Para estudiar el software como un artefacto, se basa en los métodos y la teoría de las humanidades digitales y de las perspectivas computacionales en el software. Metodológicamente, los estudios de software suelen diferir de los enfoques de la informática y la ingeniería de software, que se ocupan principalmente del software en teoría de la información y en la aplicación práctica; sin embargo, todos estos campos comparten un énfasis en la alfabetización informática, particularmente en las áreas de programación y código fuente. Este énfasis en el análisis de las fuentes y los procesos de software (en lugar de las interfaces) a menudo distingue los estudios de software de los nuevos estudios de medios, que generalmente se restringen a discusiones de interfaces y efectos observables. Release Management
Muchos nuevos desafíos han aparecido en los últimos años. Muchas veces el software no es desarrollado por un equipo principal sino que el desarrollo se distribuye entre equipos e incluso entre compañías. Los diseñadores deben tener presente componentes ya existentes y las dependecias entre las componentes, sobre todo en el caso de equipos trabajando en lugares geográficamente alejados. El software debe ser descrito acusiosamente. Uno de los aspectos más importantes son las dependencias con otros sistemas. La localización, recepción y revisión de componentes puede ser fuente de errores. Hoek (1997&2003) señala que el gestor de entrega de software en un puente entre las organizaciones donde se escribe y produce una componente y las organizaciones donde son integrados en una aplicación. Kit de desarrollo de software
Los SDK pueden incluir licencia de software que los hacen incompatibles para crear "software" que se pretenda hacer para una licencia no compatible. Por ejemplo: un SDK propietario probablemente será incompatible para el desarrollo de software libre. Y un SDK bajo la licencia GPL posiblemente será incompatible con el desarrollo de "software" propietario. Sin embargo, los bajo la licencia LGPL suelen ser seguros para el desarrollo de software propietario. Bifurcación (desarrollo de software)
En ingeniería de software se considera una bifurcación (en inglés fork) al desarrollo de un proyecto informático tomando como base un código fuente que ya existe o a la ramificación de un proyecto madre en varios proyectos que son independientes entre sí y que cuentan con objetivos o desarrolladores diferentes. Como resultado de una bifurcación se pueden derivar varios proyectos de uno preexistente, los cuales pueden intentar cubrir necesidades distintas aunque similares o implementar diferentes soluciones con el fin de abordar los mismos problemas pudiendo llegar a competir entre ellos. Serverless computing
Los pequeños equipos de desarrolladores pueden ejecutar código ellos mismo sin depender de equipos de infraestructuras ni ingenieros de soporte; cada vez más desarrolladores se convierten en hábiles DevOps y las distinciones entre ser un desarrollador de software o de hardware son cada vez más difusas.