Implementaci贸n del Software


Anuncios


En este cap铆tulo, estudiaremos m茅todos de programaci贸n, documentaci贸n y retos en la implementaci贸n de Software.

Programaci贸n estructurada

En el proceso de codificaci贸n, las l铆neas del c贸digo se multiplican continuamente, por consiguiente, el tama帽o del software se incrementa. Se vuelve casi imposible recordar el flujo del programa gradualmente. Si nos olvidamos c贸mo se construyen el software y sus subyacentes programas, los archivos... resulta muy dif铆cil compartir, modificar y eliminar los fallos del programa. La soluci贸n yace en la programaci贸n estructurada. Motiva al desarrollador a usar subrutinas y estructuras de control (loops) en vez de usar simples saltos en el c贸digo, de este modo haciendo el c贸digo m谩s claro y mejorando su eficiencia, la programaci贸n estructurada tambi茅n ayuda al programador a reducir el tiempo de codificaci贸n y a organizar el lenguage de programaci贸n correctamente.

La programaci贸n estructurada define c贸mo debe ser codificado el programa. La programaci贸n estructurada usa principalmente 3 conceptos:

  • An谩lisis 'Top-down'(de arriba a abajo) - El software se crea principalmente para llevar a cabo un tipo de trabajo racional. Este tipo de trabajo se conoce como problema en la jerga software. Por consiguiente, es muy importante que entendamos c贸mo resolver el problema. Seg煤n el an谩lisis top-down, el problema debe romperse en peque帽as piezas con un significado concreto. Cada problema se resuelve de manera independiente y los pasos a seguir para resolver el problema en su conjunto son dictados de manera clara.

  • Programaci贸n modular - Mientras se programa, el c贸digo se rompe en peque帽os grupos de instrucciones. Estos grupos se denominan m贸dulos, subprogramas o subrutinas. La programaci贸n modular se basa en el entendimiento del an谩lisis top-down. Desmotiva los saltos usando 贸rdenes de 'Ir a' en el programa, lo que a menudo hace que el flujo del programa no sea localizable. En programaci贸n modular Los saltos est谩n prohibidos y se fomenta el formato modular.

  • Codificaci贸n estructurada - En referencia al an谩lisis top-down, la codificaci贸n estructurada divide los m贸dulos en peque帽as unidades de c贸digo para su satisfactoria ejecuci贸n. La programaci贸n estructurada usa estructuras de control, las cuales controlan el flujo del programa, mientras que la codificaci贸n estructurada usa estructuras 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 usa conceptos de funciones matem谩ticas. En matem谩ticas una funci贸n siempre debe producir el mismo resultado si recibe el mismo argumento. En un lenguage procedimental, el flujo del programa funciona a trav茅s de procedimientos, esto es, el control del programa se transfiere al procedimiento mencionado. Mientras el flujo de control se transfiere de un procedimiento a otro, el programa cambia su estado.

En programaci贸n procedimental, es posible que un procedimiento produzca resultados diferentes cuando es llamado con el mismo argumento, ya que el programa puede estar en un estado diferente mientras se llama al mismo. Esta es una propiedad as铆 como una desventaja de la programaci贸n procedimental, en que la secuencia o temporalizac贸n de la ejecuci贸n procedimental se vuelve importante.

La programaci贸n funcional aporta medios de computaci贸n as铆 como funciones matem谩ticas, lo que genera resultados independientemente del estado del programa. Esto posibilita la predicci贸n del comportamiento del programa.

La programaci贸n funcional usa los siguientes conceptos:

  • Funciones de primera clase y de orden superior - Estas funciones tienen la capacidad de aceptar otra funci贸n como argumento o de devolver otras funciones como resultado.

  • Funciones puras - Estas funciones no incluyen actualizaciones destructivas, es decir, no afectan a ning煤n Perif茅rico de Entrada/Salida o a la memoria, y si no se usan pueden ser facilmente eliminadas sin dificultar al resto del programa.

  • Recursi贸n - La recursi贸n es una t茅cnica en que la funci贸n se llama a s铆 misma y repite el c贸digo del programa en 茅sta, a menos que alguna condici贸n definida previamente se corresponda con la misma. La recursi贸n es el camino para crear estructuras de sistema en programaci贸n funcional.

  • Evaluaci贸n estricta - Es un m茅todo para evaluar la expresi贸n que se ha pasado a una funci贸n como argumento. La programaci贸n funcional tiene dos tipos de m茅todos de evaluaci贸n, el estricto (entusiasta) y el no estricto (vago). La evaluaci贸n estricta siempre evalua la expresi贸n antes de aplicar la funci贸n. La evaluaci贸n no estricta no evalua la expresi贸n a menos que sea necesario.

  • C谩lculo lambda (位-calculus) - La mayor parte de lenguajes de programaci贸n usan c谩lculo lambda como su sistema de tipos. Las expresiones '位' se ejecutan evalu谩ndolas tal y como ocurren.

Common Lisp, Scala, Haskell, Erlang y F# son algunos ejemplos de lenguajes de programaci贸n funcional.

Estilo de programaci贸n

El estilo de programaci贸n se configura con reglas de codificaci贸n seguidas por todos los programadores para escribir el c贸digo. Cuando m谩s de un programador trabaja en el mismo proyecto de software, necesitan frecuentemente trabajar con el c贸digo del programa que ha escrito otro desarrollador. Esto se vuelve tedioso o a veces imposible, si todos los desarrolladores no siguen un estilo de programaci贸n est谩ndar para codificar el programa.

Un estilo de programaci贸n apropiado incluye el uso de funciones y nombres variables y relevantes para la tarea que se va a llevar a cabo, usando una sangr铆a bien ubicada, comentando el c贸digo para la conveniencia del lector y para la presentaci贸n general del c贸digo. Esto facilita la inteligibilidad del c贸digo, lo que facilita que uno por uno se eliminen y solucionen los errores. Adem谩s, un estilo de codificaci贸n adecuado ayuda a facilitar el proceso de actualizaci贸n y de documentaci贸n.

Directrices de codificaci贸n

Las distintas pr谩cticas de estilo de codificaci贸n var铆an en cada organizaci贸n, sistema operativo, y en el mismo lenguaje de codificaci贸n.

Los siguientes elementos de codificaci贸n se pueden definir bajo las directrices de una organizaci贸n:

  • Convenci贸n de nomenclatura - Esta secci贸n define c贸mo nombrar funciones, variables, constantes, y variables globales.

  • Sangr铆a - Este es el espacio que se encuentra al principio de cada l铆nea, normalmente incluye de 2 a 8 espacios en blanco o un solo tabulador (v茅ase tecla 'tab').

  • Espacio en blanco - Generalmente se omite al final de cada l铆nea.

  • Operadores - Define las reglas para escribir operadores l贸gicos y tareas matem谩ticas. Por ejemplo, operador de tarea 鈥=鈥 debe tener un espacio antes y despu茅s de 茅ste, como en 鈥渪 = 2鈥.

  • Estructuras de Control - Son las reglas para escribir 'SI..ENTONCES..SI NO'(if..then..else), el SEG脷N (case o switch), declaraciones 'while-until' para afirmaciones de flujo de control 煤nicamente, y en lenguaje ensamblador de moda.

  • Longitud de l铆nea y envoltorio - Define el n煤mero de caracteres que debe haber en una l铆nea, mayormente una l铆nea tiene 80 caracteres de longitud. Envolver define c贸mo se envolver谩 la l铆nea, si es demasiado larga.

  • Funciones - Esto define c贸mo se deben aplicar y manifestar las funciones, con y sin par谩metros.

  • Variables - Esto menciona c贸mo se deben manifestar y definir las variables de diferentes tipos de datos.

  • Comentarios - Este es uno de los componentes m谩s importantes de la codificaci贸n, ya que los comentarios que se incluyen en el c贸digo describen describe lo que realmente hace el c贸digo y todas las otras descripciones asociadas. Esta secci贸n tambi茅n ayuda a crear documentaci贸n de ayuda para otros desarrolladores.

Documentaci贸n de Software

La documentaci贸n de Software es una parte importante del proceso de software. Un documento bien escrito es una gran herramienta y es un medio repositorio de informaci贸n necesario para conocer el proceso de software. La documentaci贸n de Software tambi茅n aporta informaci贸n sobre c贸mo se debe usar el producto.

Una documentaci贸n mantenida correctamente debe incluir los documentos que se citan a continuaci贸n:

  • Documentaci贸n de requisitos - Esta documentaci贸n funciona como herramienta clave para dise帽adores de software, desarroladores, y el equipo de evaluadores, para llevar a cabo sus respectivas tareas. Este documento contiene la descripci贸n funcional, no funcional, y conductual del software que se intenta lograr.

    El origen de este documento pueden ser datos almacenados previamente, software que ya est谩 funcionando con el consumidor final, entrevistas con clientes, cuestionarios e investigaciones. Generalmente se almacena en forma de hoja de c谩lculo o de documento realizados con procesadores de texto, con el equipo de gesti贸n de software de mayor calidad.

    Esta documentaci贸n funciona como base para desarrollar el software y se usa mayormente en las fases de verificaci贸n y de validaci贸n. La mayor pare de casos de prueba se construyen partiendo de la documentaci贸n de requisitos.

  • Documentaci贸n de dise帽o de Software - Esta documentaci贸n contiene toda la informaci贸n necesaria, que se requiere para construir el software. Incluye: (a) arquitectura de software de alto nivel, (b) Detalls de dise帽o Software, (c) Diagramas de flujo de datos, (d) Dise帽o de bases de datos

    Estos documents funcionan como repositorio para que los desarrolladores implementen el software. A pesar de que estos documentos no den nig煤n detalle de c贸mo codificar el programa, dan la informaci贸n necesaria que se requiere para las fases de codificaci贸n e implementaci贸n.

  • Documentaci贸n t茅cnica - Esta documentaci贸n la mantienen desarrolladores y programadores. Estos documentos, en su conjunto, representan informaci贸n sobre el c贸digo. Mientras escriben el c贸digo, los programadores tambi茅n suelen mencionar objetivos del c贸digo, qui茅n lo escribi贸, d贸nde se requerir谩, qu茅 hace y no hace, qu茅 otros recursos usa el c贸digo, etc.

    La documentaci贸n t茅cnica incrementa el entendimiento entre varios programadores que trabajan en el mismo c贸digo. Incentiva la capacidad de reutilizaci贸n del c贸digo. Facilita el proceso de eliminaci贸n y localizaci贸n de errores.

    Hay varias herramientas automatizadas disponibes y algunas ya vienen con su propio lenguaje de programaci贸n. Por ejemplo java viene con la herramienta JavaDoc tool para generar documentaci贸n t茅cnica del c贸digo.

  • Documentaci贸n del usuario - Esta documentaci贸n es diferente en comparaci贸n con las mencionadas con anterioridad. Las que ya se han expuesto se mantienen para la aportaci贸n de informaci贸n sobre el software y su proceso de desarrollo. Por el contrario, la documentaci贸n de usuario explica c贸mo se debe usar y c贸mo debe funcionar el producto software, con tal de lograr los resultados que se esperan.

    Esta documentaci贸n puede incluir, procedimientos de instalaci贸n del software, gu铆as de instrucciones, gu铆as para el usuario, m茅todo de desinstalaci贸n y referencias especiales para obtener m谩s informaci贸n como actualizaci贸n de licencias, etc.

Retos de la implementaci贸n de Software

Hay algunos retos que el equipo de desarrollo debe afrontar mientras se implementa el software. Algunos de ellos se explicitan a continuaci贸n:

  • Reutilizaci贸n del c贸digo - La interfaces de programaci贸n de los lenguajes actuales son muy sofisticadas y est谩n equipadas con grandes funciones de librer铆a. A煤n as铆, y a fin de disminuir el coste del producto final, la gesti贸n organizacional prefiere reutiizar el c贸digo, el cual se cre贸 con anterioridad para alg煤n otro software. Hay asuntos de gran magnitud que deben ser confrontados por los programadores para tests de compatibilidad y decidiendo la cantidad de c贸digo se reutilizar谩.

  • Gesti贸n de versiones - Cada vez que un nuevo software se entrega al consumidor, los desarrolladores deben mantener la documentaci贸n asociada a su configuraci贸n y a su versi贸n. Esta documentaci贸n debe ser muy acurada y disponible a tiempo.

  • 'Target-Host'(target de receptores) - El programa software que se est谩 desarrollando en la organizaci贸n, necesita ser dise帽ado para m谩quinas receptoras para el consumidor final. Pero a veces, es imposible dise帽ar un software que funciones en m谩quinas receptoras.



Advertisements