Implementación de software
En este capítulo, estudiaremos sobre métodos de programación, documentación y desafíos en la implementación de software.
Programación estructurada
En el proceso de codificación, las líneas de código se siguen multiplicando, por lo que aumenta el tamaño del software. Gradualmente, se vuelve casi imposible recordar el flujo del programa. Si uno olvida cómo se construyen el software y sus programas, archivos y procedimientos subyacentes, entonces se vuelve muy difícil compartir, depurar y modificar el programa. La solución a esto es la programación estructurada. Anima al desarrollador a utilizar subrutinas y bucles en lugar de utilizar saltos simples en el código, lo que aporta claridad al código y mejora su eficiencia. La programación estructurada también ayuda al programador a reducir el tiempo de codificación y organizar el código correctamente.
La programación estructurada establece cómo se codificará el programa. La programación estructurada utiliza tres conceptos principales:
Top-down analysis- Siempre se hace un software para realizar algún trabajo racional. Este trabajo racional se conoce como problema en el lenguaje del software. Por tanto, es muy importante que entendamos cómo solucionar el problema. Bajo un análisis de arriba hacia abajo, el problema se divide en pequeños fragmentos donde cada uno tiene algún significado. Cada problema se resuelve individualmente y los pasos se indican claramente sobre cómo resolver el problema.
Modular Programming- Durante la programación, el código se divide en grupos más pequeños de instrucciones. Estos grupos se conocen como módulos, subprogramas o subrutinas. Programación modular basada en la comprensión del análisis de arriba hacia abajo. Desalienta los saltos usando declaraciones 'goto' en el programa, lo que a menudo hace que el flujo del programa no sea rastreable. Los saltos están prohibidos y se recomienda el formato modular en la programación estructurada.
Structured Coding - En referencia con el análisis de arriba hacia abajo, la codificación estructurada subdivide los módulos en unidades de código más pequeñas en el orden de su ejecución. La programación estructurada usa una estructura de control, que controla el flujo del programa, mientras que la codificación estructurada usa una estructura de control para organizar sus instrucciones en patrones definibles.
Programación funcional
La programación funcional es un estilo de lenguaje de programación, que utiliza los conceptos de funciones matemáticas. Una función en matemáticas siempre debería producir el mismo resultado al recibir el mismo argumento. En los lenguajes de procedimiento, el flujo del programa se ejecuta a través de procedimientos, es decir, el control del programa se transfiere al procedimiento llamado. Mientras el flujo de control se transfiere de un procedimiento a otro, el programa cambia de estado.
En la programación por procedimientos, es posible que un procedimiento produzca resultados diferentes cuando se lo llama con el mismo argumento, ya que el programa en sí puede estar en un estado diferente al llamarlo. Esta es una propiedad y también un inconveniente de la programación de procedimientos, en la que la secuencia o el tiempo de ejecución del procedimiento se vuelve importante.
La programación funcional proporciona medios de cálculo como funciones matemáticas, que producen resultados independientemente del estado del programa. Esto hace posible predecir el comportamiento del programa.
La programación funcional utiliza los siguientes conceptos:
First class and High-order functions - Estas funciones tienen la capacidad de aceptar otra función como argumento o devuelven otras funciones como resultados.
Pure functions - Estas funciones no incluyen actualizaciones destructivas, es decir, no afectan a ninguna E / S ni a la memoria y si no están en uso se pueden eliminar fácilmente sin obstaculizar el resto del programa.
Recursion- La recursividad es una técnica de programación en la que una función se llama a sí misma y repite el código del programa en ella a menos que coincida alguna condición predefinida. La recursividad es la forma de crear bucles en la programación funcional.
Strict evaluation- Es un método para evaluar la expresión pasada a una función como argumento. La programación funcional tiene dos tipos de métodos de evaluación, estrictos (ansiosos) o no estrictos (vagos). La evaluación estricta siempre evalúa la expresión antes de invocar la función. La evaluación no estricta no evalúa la expresión a menos que sea necesaria.
λ-calculus- La mayoría de los lenguajes de programación funcionales utilizan λ-cálculo como sus sistemas de tipos. Las expresiones λ se ejecutan evaluándolas a medida que ocurren.
Common Lisp, Scala, Haskell, Erlang y F # son algunos ejemplos de lenguajes de programación funcionales.
Estilo de programación
El estilo de programación es un conjunto de reglas de codificación seguidas por todos los programadores para escribir el código. Cuando varios programadores trabajan en el mismo proyecto de software, con frecuencia necesitan trabajar con el código del programa escrito por otro desarrollador. Esto se vuelve tedioso o, en ocasiones, imposible, si todos los desarrolladores no siguen algún estilo de programación estándar para codificar el programa.
Un estilo de programación apropiado incluye el uso de nombres de funciones y variables relevantes para la tarea prevista, uso de sangrías bien ubicadas, código de comentarios para la conveniencia del lector y presentación general del código. Esto hace que el código del programa sea legible y comprensible para todos, lo que a su vez facilita la depuración y la resolución de errores. Además, el estilo de codificación adecuado ayuda a facilitar la documentación y la actualización.
Directrices de codificación
La práctica del estilo de codificación varía según las organizaciones, los sistemas operativos y el lenguaje de codificación en sí.
Los siguientes elementos de codificación pueden definirse según las directrices de codificación de una organización:
Naming conventions - Esta sección define cómo nombrar funciones, variables, constantes y variables globales.
Indenting - Este es el espacio que queda al principio de la línea, generalmente de 2 a 8 espacios en blanco o una sola pestaña.
Whitespace - Generalmente se omite al final de la línea.
Operators- Define las reglas de escritura de operadores matemáticos, de asignación y lógicos. Por ejemplo, el operador de asignación '=' debe tener un espacio antes y después, como en "x = 2".
Control Structures - Las reglas de escritura if-then-else, case-switch, while-until y para las declaraciones de flujo de control únicamente y de forma anidada.
Line length and wrapping- Define cuántos caracteres debe haber en una línea, la mayoría de las veces una línea tiene 80 caracteres. Envolver define cómo se debe envolver una línea, si es demasiado larga.
Functions - Esto define cómo se deben declarar e invocar las funciones, con y sin parámetros.
Variables - Esto menciona cómo se declaran y definen variables de diferentes tipos de datos.
Comments- Este es uno de los componentes de codificación importantes, ya que los comentarios incluidos en el código describen lo que realmente hace el código y todas las demás descripciones asociadas. Esta sección también ayuda a crear documentación de ayuda para otros desarrolladores.
Documentación de software
La documentación del software es una parte importante del proceso del software. Un documento bien escrito proporciona una gran herramienta y un medio de repositorio de información necesario para conocer el proceso del software. La documentación del software también proporciona información sobre cómo utilizar el producto.
Una documentación bien mantenida debe incluir los siguientes documentos:
Requirement documentation - Esta documentación funciona como herramienta clave para que el diseñador de software, el desarrollador y el equipo de pruebas lleven a cabo sus respectivas tareas. Este documento contiene toda la descripción funcional, no funcional y de comportamiento del software previsto.
La fuente de este documento pueden ser datos almacenados previamente sobre el software, software que ya se está ejecutando al final del cliente, entrevista del cliente, cuestionarios e investigación. Generalmente se almacena en forma de hoja de cálculo o documento de procesamiento de texto con el equipo de administración de software de alta gama.
Esta documentación sirve como base para el desarrollo del software y se utiliza principalmente en las fases de verificación y validación. La mayoría de los casos de prueba se crean directamente a partir de la documentación de requisitos.
Software Design documentation - Esta documentación contiene toda la información necesaria, que se necesita para construir el software. Contiene:(a) Arquitectura de software de alto nivel, (b) Detalles de diseño de software, (c) Diagramas de flujo de datos, (d) Diseño de base de datos
Estos documentos funcionan como repositorio para que los desarrolladores implementen el software. Aunque estos documentos no brindan detalles sobre cómo codificar el programa, brindan toda la información necesaria que se requiere para la codificación y la implementación.
Technical documentation- Esta documentación es mantenida por los desarrolladores y codificadores reales. Estos documentos, en su conjunto, representan información sobre el código. Al escribir el código, los programadores también mencionan el objetivo del código, quién lo escribió, dónde se requerirá, qué hace y cómo lo hace, qué otros recursos usa el código, etc.
La documentación técnica aumenta la comprensión entre varios programadores que trabajan en el mismo código. Mejora la capacidad de reutilización del código. Hace que la depuración sea fácil y rastreable.
Hay varias herramientas automatizadas disponibles y algunas vienen con el propio lenguaje de programación. Por ejemplo, java viene con la herramienta JavaDoc para generar documentación técnica de código.
User documentation- Esta documentación es diferente a todas las explicadas anteriormente. Toda la documentación previa se mantiene para brindar información sobre el software y su proceso de desarrollo. Pero la documentación del usuario explica cómo debería funcionar el producto de software y cómo debería utilizarse para obtener los resultados deseados.
Esta documentación puede incluir procedimientos de instalación de software, guías prácticas, guías de usuario, método de desinstalación y referencias especiales para obtener más información, como actualización de licencias, etc.
Desafíos de implementación de software
Hay algunos desafíos que enfrenta el equipo de desarrollo al implementar el software. Algunos de ellos se mencionan a continuación:
Code-reuse- Las interfaces de programación de los lenguajes actuales son muy sofisticadas y están equipadas con enormes funciones de biblioteca. Aún así, para reducir el costo del producto final, la administración de la organización prefiere reutilizar el código, que se creó anteriormente para algún otro software. Los programadores enfrentan grandes problemas para verificar la compatibilidad y decidir cuánto código reutilizar.
Version Management- Cada vez que se envía un nuevo software al cliente, los desarrolladores deben mantener la documentación relacionada con la versión y la configuración. Esta documentación debe ser muy precisa y estar disponible a tiempo.
Target-Host- El programa de software, que se está desarrollando en la organización, debe diseñarse para máquinas host en el extremo del cliente. Pero a veces, es imposible diseñar un software que funcione en las máquinas de destino.