web program

UD1. Reconocimiento de elementos del desarrollo de software

1. Conceptos de programa informático y aplicación informática.
2. Concepto de lenguaje de programación.
3. Tipos de lenguajes de programación.
4. Características de los lenguajes más difundidos.
5. Código fuente, código objeto y código ejecutable a partir del código fuente; herramientas implicadas. Traductores de lenguajes. Depuradores.
6. Fases del desarrollo de una aplicación.
7. Ejercicios.

1. Conceptos de programa informático y aplicación informática.

Ejercicio unificado
MyfpSoft es una empresa dedicada al desarrollo de software. Cuenta con dos personas de amplio recorrido en la informática Andrino que es analista programador y Emma que es arquitecta de software. El equipo se completa con dos nuevas incorporaciones Manuela y Dimas. Ambos han terminado el ciclo de DAW y entran en esta nueva empresa a trabajar como programadores. ¿Sabrán ellos cuáles son sus atribuciones al igual que las de Andrino y Emma?

1.1 El software

El software es la parte intangible de un sistema informático, el equivalente al equipamiento o soporte lógico. Lo constituyen el componentes lógicos (no físicos) y por tanto no tangibles y no físicos. Todo software esta diseñado para realizar una tarea determinada en nuestro sistema.

El software es el encargado de comunicarse con el hardware. Todas las órdenes que el usuario le comunique al software, éste las traducirá en órdenes comprensibles por el hardware.

Podemos definir el software como el conjunto de los programas de cómputo, procedimientos, reglas, documentación y datos asociados que forman parte de las operaciones de un sistema de computación (definición extraída del estándar 729 de IEEE).

charles babbage
Concepto de software.

El concepto de software fue utilizado por Charles Babbage hace mucho tiempo.

Cuando trabajaba en su máquina diferencial utilizaba series de instrucciones que se leían desde la memoria principal del sistema. A esta serie de instrucciones las denominaba software.

Si visitas Londres, en el Science Museum podrás ver algunos mecanismos inconclusos que desarrollo y si quieres conocer más sobre este genio, parte de su cerebro se encuentra conservado en formol en el Royal College of Surgeons de la misma ciudad.

Posteriormente, Alan Turing profundizó en el concepto de software. Turing elaboró la máquina de turing y desarrolló la teoría de la computación, la cual forma la base del software moderno.

alan turing
Alan Turing (1.912-1.954).

Nacionalidad Inglesa. Desarrolló su carrera como matemático pero destacó en su momento como informático teórico y criptógrafo.

El objetivo de la criptografía es alterar el contenido de un mensaje haciéndolo ininteligible a los receptores que no estén autorizados.

La criptografía se ha utilizado tradicionalmente como arte y como ciencia. Turing fué considerado uno de los padres de la Ciencia de la Computación. La ciencia de la computación es el antecedente de la informática moderna.

Turing fué el artífice de la Teoría de la Computación la cual se tiene como referente hoy en día. Como inglés contribuyó a descifrar la máquina Enigma de los alemanes durante la Segunda Guerra Mundial.

Todos sabemos que la muerte de Turing fué célebremente triste. Fue acusado y procesado por ser homosexual. Lo castraron químicamente y finalmente se suicidó.

Todos sabemos que el software tiene una serie de características muy particulares que lo definen. Estas características son la siguientes:

• El Software es lógico, no físico. Es intangible.
• El Software se desarrolla, no se fabrica. Es mejor decir desarrolladores de software que fabricantes de software.
• El Software no se estropea y una copia del mismo da lugar a un clon con las mismas características del original.
• En ocasiones se puede construir a medida. Existe software a medida y software enlatado.

Sabías que…John Wilder tukey

La palabra software entedida como tal, la empleó por primera vez John Wilder Tukey en 1958 en un artículo de la revista “American Mathematical Monthly”.

En este artículo se empleó el termino “computer software” por primera vez.En dicho artículo se hablaba de aprovechar las capacidades de cálculo de los ordenadores de tal manera que los programadores pudiesen escribir conjuntos de instrucciones (programas) los cuales podrían llegar a ser complejos y luego estas órdenes se traducirían en otras más comprensibles para las máquinas en las que fueran a ser ejecutadas.

Como se puede observar, se establecían las bases de los modernos compiladores.J.W. Tukey también también creó otro término imprescindible en la Tecnología Computacional, la palabra “bit” como contracción de “Digito Binario”, por sus siglas en inglés Binary Digit.

1.2. Los programas y las aplicaciones informáticas

Un programa es una serie de órdenes o instrucciones secuenciadas u ordenadas con una finalidad concreta que realizan una función determinada.

Veamos el típico programa hola mundo desarrollado en lenguaje C:

//**Código:Programa Holamundo****
/* Programa holamundo.c */
#include <stdio.h>
main()
{
printf(“Hola Mundo”);
}

El texto de la izquierda representa un ejemplo de lo que sería un programa. Se compone de 6 líneas que se van a comentar a continuación:

/* Programa holamundo.c */
Esta línea no realiza ninguna función solo dice cual es el nombre del programa

#include <stdio.h>
Esta línea es necesaria si se va a sacar algo por pantalla.
main ()
Esta línea indica que esto es lo primero que va ejecutar el programa (lo contenido entre { y }
{
printf (“Hola Mundo”);
Esta línea muestra las palabras Hola Mundo por pantalla.
}

En resumen, este programa mostrará las palabras Hola Mundo por pantalla.

¿Qué es una aplicación informática?

Existen en el mercado muchas aplicaciones informáticas, cada una tiene su utilidad y finalidad concreta. Generalmente las aplicaciones suelen estar formadas por varios programas con sus librerías correspondientes aunque podrían constar solamente de un programa. Cuando son varios programas que se pueden ejecutar independientemente uno de otro se le suele denominar suite o paquete integrado como por ejemplo la suite ofimática de OpenOffice.

Generalmente estos programas tienen un nexo de unión en común, comparten librerías, almacén e incluso datos. La compatibilidad entre ellos es completa.

Una aplicación informática está en contacto con el usuario y no con el hardware. Será el sistema operativo el que haga de nexo de unión entre ambos (aplicación informática y hardware).

Existen multitud de aplicaciones informáticas que automatizan o ayudan a la realización de ciertas tareas como por ejemplo:
• Programas de contabilidad
• Programas de diseño gráfico
• Procesadores de texto
• Programa de facturación
• Multimedia
• Las bases de datos
• Hojas de cálculo
• Presentaciones
• Correo electrónico

1.3. Diferencia entre el software a medida y software estándar

Un software a medida es una o varias aplicaciones realizadas según los requerimientos e instrucciones de una empresa u organismo. Dichos programas se amoldan a adecuan a la actividad desarrollada y son diseñados a la medida del organismo, su forma de trabajar, sus necesidades.

Algunas características del software a medida son las siguientes:

• Como todo software, necesita de un tiempo de desarrollo.
• Se adapta a las necesidades específicas de la empresa. Eso implica que en ocasiones ese software no sea trasladable a otras empresas diferentes (incluso a otras empresas del mismo sector).
• Generalmente suele contener errores y se necesita de una etapa de mantenimiento en la que se subsanan y se mejora dicho software.
• En general, es más costoso que el software estándar debido a que el precio del mismo lo soporta un solo cliente. En el software enlatado o estándar ese precio se comparte entre los distintos compradores.

El software estándar o enlatado, es un software genérico (valido para cualquier cliente potencial), que resuelve múltiples necesidades. Generalmente para hacerlo más adaptable, dicho software tiene herramientas de configuración que lo parametrizan y lo adaptan a las necesidades del cliente. En ocasiones no es el software ideal puesto que le faltan opciones, procedimientos y procesos que la empresa realiza y que a la postre se tendrán que realizar con otra herramienta.

Sus principales características son:

• Se compra ya hecho. El software ya fue desarrollado en su momento y lo único que se podría hacer es adaptarlo a las necesidades de la empresa.
• Suele tener muchos menos errores que el software a medida, dado que fue probado por múltiples empresas.
• Suele ser más barato que el software a medida. Los costes de desarrollo se reparten entre las múltiples licencias que se venden.
• Generalmente tiene funciones que no la empresa no usará y también carecerá de otras opciones. Por regla general no se adapta completamente a las necesidades de una empresa (es mas, a veces la empresa se tiene que adaptar al software).

Ejercicio unificado
MyfpSoft tiene un cliente que le ha pedido que le hagan una tienda online para venta de sus productos farmacéuticos.
La farmacia cliente ya tiene un sistema de gestión. Un sistema en Windows con base de datos en SQL Server realizado y mantenido por la empresa Trompisoft.
Dimas se pregunta si es mejor utilizar software a medida o estándar. No sabe muy bien cuales son las ventajas e inconvenientes de uno u otro. Tampoco sabe cómo se va a comunicar la tienda online con la tienda física.

2. Concepto de lenguaje de programación.

Todos los programas se desarrollan en algún lenguaje de programación. Nadie (más bien casi nadie) programa directamente con instrucciones máquina debido a que no son inteligibles por el ser humano y realizar un programa de este tipo provocaría numerosos errores.

Los lenguajes de programación son por lo tanto un lenguaje artificial creado para que al traducirse a código máquina, cada una de las instrucciones de dicho lenguaje den lugar a una o varias instrucciones máquina.

Generalmente dichos lenguajes tienen una sintaxis y un conjunto de normas y palabras reservadas de tal manera que la traducción sea lo más efectiva posible.

coding ground

En la actualidad hay multitud de lenguajes de programación. Uno de los más conocidos es Java pero no es el único.

3. Tipos de lenguajes de programación.

Los lenguajes de programación han evolucionado a lo largo del tiempo para aumentar su rendimiento y facilitar el trabajo a los programadores. Cada vez más existen lenguajes de programación que son más “user friendly” y más fáciles de programar.

Muchas veces el que se programe más rápido y los programas sean más sencillos de realizar provoca que los mismos sean más lentos y que ocupen más espacio.

Veamos las características de los Lenguajes de Programación existentes en la actualidad:

Lenguaje máquina.

- Sus instrucciones son complejas e ininteligibles. Se componen de combinaciones de unos y ceros.

- No necesita ser traducido por lo tanto es el único lenguaje que entiende directamente el ordenador.

- Fue el primer lenguaje utilizado. Los expertos en su momento debían tener un dominio profundo del hardware para poder entender así este lenguaje de programación.

- Difiere para cada procesador. Las instrucciones no son portables de un equipo a otro.

- Salvo excepciones hoy día nadie programa en este lenguaje.

Lenguaje de medio nivel o ensamblador:

- Dada la dificultad y poca portabilidad del lenguaje máquina, el ensamblador lo sustituyó para facilitar la labor de programación.

- Sigue estando cercano al hardware pero en lugar de unos y ceros se programa usando mnemotécnicos. Los mnemotécnicos son instrucciones más inteligibles por el programador que permiten comprender de una forma más sencilla qué hace el programa.

- Este lenguaje necesita compilarse, traducirse al lenguaje máquina para poder ejecutarse.

- Se trabaja con los registros del procesador y direcciones físicas. En lenguajes de nivel más alto ya se utilizan variables y estructuras más sofisticadas.

- Es difícil de comprender y programar.

- Dada la dificultad y poca portabilidad del lenguaje máquina, el ensamblador lo sustituyó para facilitar la labor de programación.

Lenguajes de alto nivel:

- La mayoría de los lenguajes de programación actuales pertenecen a esta categoría.

- Tienen una forma de programar más intuitiva y sencilla.

- Más cercano al lenguaje humano que al lenguaje máquina. (por ejemplo: WHILE var DO….DONE).

- Suelen tener librerías y funciones predeterminadas que solucionan algunos de los problemas que se le suelen presentar al programador.

- En ocasiones ofrecen frameworks para una programación más eficiente y rápida.

- Suelen trabajar con mucha abstracción y orientación a objetos. De esa manera es más fácil la reutilización y el encapsulamiento de componentes.

Un framework es un conjunto de conceptos, estructuras, funciones, componentes, etc. Todo este conjunto de elementos son la base para personalizarlas y adaptarlas a las necesidades de la aplicación. De esa manera se van construyendo las aplicaciones.

Un ejemplo de framework es bootstrap. Utilizado en twitter y liberado para que cualquiera pueda realizar páginas y aplicaciones web con sus componentes.

Si quieres ver ejemplos de sitios web diseñados con bootstrap puedes acceder a su zona de exposición.

Dependiendo de la forma de en la que son ejecutados se puede hacer otra clasificación:

Lenguajes compilados.
Necesitan de un programa traductor (compilador) para convertir el código fuente en código máquina. Este tipo de programas se ejecutan de forma más rápida que los interpretados o los virtuales. Además del compilador, existe un programa llamado enlazador o linker que permite unir el código objeto del programa con el código objeto de las librerías.

Lenguajes interpretados.
No se genera código objeto. El interprete es un programa que tiene que estar cargado en memoria y se encarga de leer cada una de las instrucciones, interpretarlas y luego ejecutarlas. Las instrucciones se traducen “on the fly” y solamente se traducen las instrucciones que se van ejecutando en vez de interpretar todo el programa.

Lenguajes virtuales.
Son lenguajes más portables que los lenguajes compilados puesto que el código que se genera tras la compilación es un código intermedio o bytecode. Este código puede ser a su vez interpretado por una máquina virtual instalada en cualquier equipo. Tienen una ejecución lenta pero su versatilidad de poder ejecutarse en cualquier entorno los hace muy apreciados.

Clasificación de lenguajes

Dimas y Manuela están tomando café. Entre ellos se han picado para saber si pueden clasificar los siguientes lenguajes. Los dos dicen saber mucho sobre lenguajes de programación. A los dos les encantaba la asignatura Entornos de desarrollo y por lo tanto creen poder clasificar los lenguajes que a continuación se presentan:

  • AngularJS
  • PHP
  • Java
  • JavaScript
  • Ruby
  • Python
  • Cobol
  • C
  • Pascal
  • TurboPascal
  • C++
  • Objetive C
  • Visual Basic
  • Swift
  • Ensamblador
  • Fortran
  • ADA
  • Prolog
  • Tcl
  • Simula
  • Smalltalk
  • Perl
  • Verilog
  • Scala
  • Lisp
  • Node.JS
  • 4. Características de los lenguajes más difundidos.

    Java.

    public class HolaMundo {public static void main(String[] args) {
    System.out.println(“Hola Mundo”);
    }}

    - Java es una simplificación de C++ dado que no permite la sobrecarga de operadores ni herencia múltiple.

    - Para cualquier programador, el manejo de String en Java es mucho más eficiente y fácil que en C y C++.

    - Es un lenguaje orientado a objetos.

    - Está pensado para trabajar con redes y protocolos TCP/IP, HTTP, FTP, etc.

    - Es un lenguaje virtual interpretado.

    - Muy portable. Ejecutable en cualquier plataforma.

    - Ofrece múltiples aspectos de seguridad. Actualmente se trabaja en la encriptación del código fuente para una mayor seguridad.

    - Permite multihilos. Múltiples hilos de ejecución en un mismo programa.

    Python.

    # Hola mundo en Python
    print (“¡Hola mundo!”)

    - Es un lenguaje de alto nivel. Su ventaja es la portabilidad que ofrece. Si evitamos la dependencia de las librerías particulares de cada sistema un programa en python puede ejecutarse en cualquier máquina.

    - Es un lenguaje interpretado. Al igual que Java, Python convierte el código fuente en bytecode que luego se traduce y se ejecuta en la máquina. No hay que enlazar el código con librerías. Eso se hará a la hora de ejecutar el bytecode.

    - Orientado a objetos como la mayoría de lenguajes de programación modernos.

    - Permite escribir código en C y luego combinarlo con programas en Python, de esa manera esa porción de código se ejecutará más rápido.

    - Se puede incrustar también en otros lenguajes de programación como C y C++.

    - Es uno de los lenguajes más simples y sencillos de aprender.

    C y C++.

    using namespace std;
    int main(int argc, char *argv[]) {
    std::cout << “Hola mundo” << endl;
    return 0;
    }

    - La entrada salida se ejecuta a través de funciones.

    - C estuvo en su momento muy ligado a Unix como sistema operativo. C++ se intentó desligar del mismo.

    - Lenguajes estructurados y muy ligados a funciones.

    - Incluyen el concepto de puntero. Puntero es una variable que contiene la dirección de memoria de otra variable. Este aspecto ofrece mucha flexibilidad pero por el contrario puede ser compleja su utilización por parte del programador.

    - Combinan comandos de alto nivel aunque se pueden incluir fragmentos de código que trabajen a más bajo nivel.

    - Los programas son muy eficientes y rápidos.

    - El tamaño de los programas compilados es pequeño.

    - Son lenguajes relativamente portables. Se pueden recompilar en cualquier tipo de máquina realizando ninguno o pocos cambios.

    JavaScript.

    <script type=”text/javascript”>
    alert(“Hola Mundo!”);
    </script>

    - Tiene la ventaja de parecerse mucho a Java, C y C++. Por lo tanto los programadores de estos lenguajes se sienten cómodos al programar con Javascript.

    - Es un lenguaje de scripting.

    - Se ejecuta en el lado del cliente.

    - Es un lenguaje seguro y fiable.

    - Su código es visible y cualquiera puede leerlo ya que como se explicó se interpreta en el lado cliente.

    - Tiene sus limitaciones como cualquier lenguaje ejecutado en el lado del cliente. Esas limitaciones tienen más que ver con el tema de la seguridad.

    PHP.

    <?php echo ‘<p>Hola Mundo</p>’; ?>

    - Lenguaje multiplataforma. Puede instalarse prácticamente en cualquier sistema.

    - Se orientó desde el principio al desarrollo de webs dinámicas.

    - Conocidos son su buena integración con Mysql y otros servicios como Proftpd, etc.

    - Permite aplicar técnicas de orientación a objetos.

    - Lenguaje interpretado con lo cual no hace falta definir variables.

    - Existen muchos framework basados en PHP que permiten trabajar los patrones de diseño Modelo Vista Controlador (MVC).

    VB.NET.

    Module VBModule
    Sub Main()
    Console.WriteLine(“Hello, world!”)
    End Sub
    End Module

    - Desde hace mucho tiempo visual basic es uno de los referentes de los lenguajes de programación.

    - Visual basic es el lenguaje que se utiliza para programar macros en Microsoft Office.

    - VB.NET es un lenguaje orientado a objetos implementado sobre el framework .NET.

    - La mayoría de programadores utilizan la herramienta de Microsoft Visual Studio.

    - Existen también entornos libres de desarrollo en .NET como Sharpdevelop pero no es tan potente como el primero.

    - Es posible desde el Visual Studio 2008 programar en Ajax.

    Aprende más sobre VB.NET
    Dimas es un entusiasmado de los lenguajes de programación. El otro día en una revista leyó algo relativo a VB.NET y posteriormente buscando en Internet accedió a la página aprendiendo vb.net de myfpschool
    No lo creerás pero es cierto.

    Microsoft fue una de las primeras compañías en desarrollar software para Apple. Su fundador, Steve Jobs tenía muy claro que necesitaba software para que Macintosh fuese un éxito, y Microsoft era la solución.

    En sus orígenes, la empresa de Bill Gates se especializaba en los lenguajes de programación y son creadores de Basic y Fortran.

    Más tarde comprarían y revenderían a IBM el DOS entrando de lleno en el mercado de los Sistemas Operativos.

    Para poder escribir un programa de ordenador, es necesario conocerlo todo sobre él, por lo que Jobs tuvo que mostrar a Microsoft los primeros prototipos de Macintosh.

    A Bill Gates le causó muy buena impresión el sistema operativo de Apple, y comenzó a buscar la forma de emplear los iconos, ventanas y mouse en la plataforma IBM PC.

    Según cuentan algunos, Gates presionó a Jobs para que le permita utilizar partes de la interfaz de Macintosh en PC, a cambio de no demorar el lanzamiento de las aplicaciones que Apple necesitaba.

    Esto sería el detonante para lo que luego se llamaría Windows 1.0. Todas las futuras demandas legales de Apple contra Microsoft por el uso de algunos elementos de la GUI se vieron debilitadas debido a este antiguo acuerdo entre ambas empresas.

    Ejercicio unificado
    Manuela le pregunta a Dimas qué lenguaje de programación cree el que va a elegir Emma (para la tienda online). Tampoco saben por qué Emmma elige el lenguaje de programación y no Andrino. ¿Qué lenguaje/lenguajes de programación elegirán y cuáles son las ventajas e inconvenientes del mismo?

    5. Código fuente, código objeto y código ejecutable a partir del código fuente; herramientas implicadas. Traductores de lenguajes. Depuradores.

    Diferencias compilador e intérprete

    Los traductores son programas cuya finalidad es traducir lenguajes de alto nivel (en los que nosotros programamos) a lenguajes de bajo nivel como ensamblador o código máquina. Existen dos grandes grupos de tipos de traductores: los compiladores y los intérpretes.

    Un intérprete traduce el código fuente línea a línea de la siguiente forma. Primero traduce la primera línea, detiene la traducción y posteriormente la ejecuta. Lee la siguiente línea, detiene la traducción y la ejecuta. Y así sucesivamente. El intérprete tiene que estar en memoria ejecutándose para poder ejecutar el programa. Al igual que el intérprete, el código fuente tiene que estar también en memoria.

    Un compilador traduce el código fuente a código máquina. El compilador solamente está en la máquina de desarrollo. El código generado solamente funcionará en una máquina con un hardware y software determinado. Si cambian hardware o software hay que volver a recompilar.

    fases de la compilación
    En la figura anterior se puede observar cómo funcionan los compiladores.

    En el proceso de compilación primero se realiza un preprocesado del código. Todas los comandos de preprocesamiento se ejecutan y traducen.

    Una vez realizado este paso se compilan los ficheros del código fuente generándose un código intermedio. Existen muchos compiladores de código intermedio a código máquina y el objetivo de este paso es reutilizar dichos compiladores puesto que son rápidos, eficientes, están probados y reducen el tiempo de desarrollo.
    El código intermedio generalmente se vuelve a compilar y traducir a ensamblador o código objeto directamente.

    Durante la fase de compilación.

    Durante la fase de compilación se realizan dos subfases. La primera consiste en realizar un análisis léxico de la aplicación. Se lee secuencialmente el programa y se detectan los tokens o lexemas que son las palabras reservadas del lenguaje, las operaciones, los caracteres de puntuación, etc.

    En una segunda fase se realiza un análisis sintáctico (e incluso semántico). En este análisis se comprueba que gramaticalmente el programa u aplicación es correcto. Se comprobarán si el tamaño de las variables es el adecuado. Las conversiones son posibles. En general, que se cumplen las reglas sintácticas y semánticas del lenguaje.

    Dependiendo de lo eficiente que sea el compilador estas fases llevarán más o menos tiempo.

    El código objeto es básicamente un código máquina, lo único que le falta es enlazarlo a las librerías para generar un programa ejecutable.

    El proceso de enlazado (incluir en el código ejecutable el código máquina de las librerías) lo realiza un programa específico llamado enlazador o linker. Este enlazador muchas veces además de enlazar todo el código objeto, optimiza los programas para que se ejecuten más rápido en un futuro.

    Comprende la diferencia.

    * Código fuente. Código escrito en un lenguaje de programación.

    * Código objeto. Resultado de compilar el código fuente. Puede ser código máquina o bytecode si es un lenguajes interpretado luego por una VM (virtual machine).

    * Código ejecutable. Resultado de compilar y enlazar el código con las librerías. Ejecutable directamente sobre una máquina concreta.

    Ejercicio unificado
    Dimas está emocionado con el nuevo lenguaje de programación que ha elegido Emma para el desarrollo.
    Por su parte Dimas está estudiando AngularJS. Manuela quiere que Dimas le explique qué es y cómo funciona ese lenguaje. ¿Qué piensas que Dimas le explicará a Manuela?

    6. Fases del desarrollo de una aplicación.

    Existen muchos paradigmas de desarrollo pero generalmente todos ellos suelen tener una serie de etapas en común. A continuación detallaremos las etapas que generalmente con independencia del tipo de ciclo de vida se dan en un desarrollo software:

    CICLO DE VIDA

    Ejercicio unificado
    Manuela y Dimas están emocionados con el nuevo proyecto. Han escuchado hablar a Andrino y Emma sobre las fases de desarrollo. No saben muy bien qué son las fases de desarrollo de su nuevo proyecto y qué tendrán que hacer en cada una de ellas.
    A Manuela le han encargado la documentación. No sabe qué tiene que incluir en los documentos y si tiene que preparar uno o varios documentos. Está algo perdida.

    Fase inicial. En esta fase se planifica el proyecto, se hacen estimaciones, se decide si el proyecto es rentable o no, etc. Es decir, se establecen las bases de cómo se van a desarrollar el resto de fases del proyecto. En un símil con la construcción de un edificio sería el ver si se dispone de licencia de construcción, cuánto me va a costar el edificio, cuántos trabajadores voy a necesitar para construirlo, quién lo va a construir, etc. La fase de planificación y estimación son las más complejas de un proyecto. Para esto se necesita gente con experiencia tanto en la elaboración de proyectos como en las plataformas en las que se va a realizar el mismo. De esta fase surgen muchos documentos tanto de planificación (general y detallada) como documentos de estimaciones en el que se incluyen datos económicos, posibles soluciones al problema y sus costes, etc. Son documentos que se realizan a alto nivel y se acuerdan con la dirección de la empresa o las personas responsables del proyecto. En estas fases iniciales se suelen tomar decisiones que a veces afectan a todas las demás fases del proyecto, con lo cual tiene que estar todo bien documentado, detallado y soportado por datos concretos.

    Análisis. En esta fase se analiza el problema. Consiste en recopilar, examinar y formular los requisitos del cliente y analizar cualquier restricción que se pueda aplicar. Todas las entrevistas con el cliente por lo tanto tienen que estar registradas en documentos y generalmente esos documentos se consensuan con el cliente y desde mi punto de vista algunos tienen hasta caracter contractual. Yo en algunos proyectos he hecho firmar al cliente un documento de requisitos de la aplicación en el cual mi equipo de desarrollo se compromete a realizar las especificaciones indicadas por el cliente y también el cliente se compromete a no variar sus necesidades hasta por lo menos terminar una primera release. Como puedes ver es un documento que obliga a ambas partes a cumplir con lo acordado.

    Diseño. Esta fase consiste en determinar los requisitos generales de la arquitectura de la aplicación y dar una definición precisa de cada subconjunto de la aplicación. En esta fase los documentos ya son más técnicos. Se suelen crear dos documentos de diseño, uno más genérico en el que se tiene una visión de la aplicación más general y otro detallado en el que se profundizará en los detalles técnicos de cada módulo concreto del sistema. Estos documentos los realizarán los analistas junto con la supervisión del jefe de proyecto.

    Codificación o implementación. Esta fase consiste en la implementación del software en un lenguaje de programación para crear las funciones definidas durante la etapa de diseño. Durante esta fase se crea documentación muy detallada en el que se incluye código. Aunque mucho código se suele comentar en el mismo programa, también se tienen que generar documentos donde se indica por ejemplo para cada función las entradas, salidas, parámetros, propósito, módulos o librerías donde se encuentra, quien la ha realizado, cuando, las revisiones que se han realizado de la misma, etc. Como puedes ver el detalle es máximo teniendo en cuenta que ese código en un futuro va a tener que ser mantenido por la misma o seguramente otra persona y toda información que pueda recibir a veces es poca.

    Pruebas. En esta fase se realizarán pruebas para garantizar que la aplicación se programó de acuerdo con las especificaciones originales y los distintos programas de los que consta la aplicación están perfectamente integrados y preparados para la explotación. Como se ha visto anteriormente, las pruebas son de todo tipo. Yo clasificaría la documentación de las pruebas en dos bloques diferentes. Existen unas pruebas funcionales en las que se prueba que la aplicación hace lo que tiene que hacer con las funciones acordes a los documentos de especificaciones que se establecieron con el cliente, y esas pruebas se deberían realizar con el cliente delante. Mientras que se están realizando las pruebas se tienen que hacer todo tipo de anotaciones para luego plasmarlas en un documento en el que tendrá que darle el visto bueno el cliente (que por ese motivo estuvo en las pruebas). En ese documento se van detallando fallos tanto de la propia aplicación como modificaciones a la misma si no cumple con las especificaciones iniciales. En el caso que haya discrepancia se suele consultar documentación anterior para que no se incluyan en este punto funcionalidades nuevas o variaciones de las funcionalidades. En otro documento aparte se detallarán los resultados de las pruebas técnicas realizadas. A estas pruebas ya no hace falta que asista el usuario o cliente puesto que son de carácter meramente técnico. En estas pruebas se harán cargas reales, se someterá la aplicación y el sistema a estrés, etc.

    Explotación. En esta fase se instala el software en el entorno real de uso y se trabaja con él de forma cotidiana. Generalmente es la fase más larga y suelen surgir multitud de incidencias, nuevas necesidades, etc. Toda esta información se suele detallar en un documento en el que se documentan los errores o fallos detectados intentando ser lo más explícito posible puesto que luego los programadores y analistas deben de revisar estos fallos o bugs y darle la mejor solución posible. También surgirán otras necesidades que se van a ir detallando en un documento y que pasarán a realizarse en operaciones de mantenimiento.

    Mantenimiento. En esta fase se realizan todo tipo de procedimientos correctivos (corrección de fallos) y actualizaciones secundarias del software (mantenimiento continuo) que consistirán en adaptar y evolucionar las aplicaciones. Para realizar las labores de mantenimiento hay que tener siempre delante la documentación técnica de la aplicación. Sin una buena documentación de la aplicación, las labores de mantenimiento son muy difíciles y su garantía en ese caso sería poca. Todas las operaciones de mantenimiento tienen que estar documentadas porque se tiene que saber quien ha realizado la operación, qué ha hecho y cómo. También tienen que estar documentadas porque deberían probarse por otra persona distinta al programador.

    La documentación.

    En cada una de estas fases anteriores se generan uno o más documentos. En ningún proyecto es viable comenzar la codificación sin haber realizado las fases anteriores porque eso equivaldría a un desastre absoluto. Además, la documentación debe de ser útil y estar adaptada a los potenciales usuarios de dicha documentación (cuando se crea un coche existen los manuales de usuario y los manuales técnicos para los mecánicos. Para qué quiero yo saber dónde están situados los inyectores, las bujías o la trócola si nunca la voy a cambiar. A mí lo que me interesa es saber cómo se regula el volante, cómo funciona la radio, etc.).

    Visto esto, decir que en cualquier aplicación, como mínimo, se deberán de generar los siguientes documentos:

    Manual de usuario. Es, como ya se comentó anteriormente, el manual que utilizará el usuario para desenvolverse con el programa. Deberá ser autoexplicativo y de ayuda para el usuario. Este manual debe de servirle al usuario para aprender cómo se maneja la aplicación y qué es lo que hay que hacer y lo que no. Si como técnico no vas a hacer un manual que le sirva al usuario en su comienzo o práctica diaria es mejor no hacerlo o realizar otro tipo de documentación.

    Manual técnico. Es el manual dirigido a los técnicos (el manual para los mecánicos citado anteriormente). Con esta documentación, cualquier técnico que conozca el lenguaje con el que la aplicación ha sido creada debería de poder conocerla casi tan bien como el personal que la creó.

    Manual de instalación. En este manual se explican paso a paso los requisitos y cómo se instala y pone en funcionamiento la aplicación.

    Desde la experiencia, recalcar una vez más la importancia de la documentación, puesto que sin documentación una aplicación o programa es como un coche sin piezas de repuesto, cuando tenga un problema o haya que repararlo no se podrá hacer nada.

    Roles o figuras que forman parte del proceso de desarrollo software.

    perfilArquitecto de software.
    Es la persona encargada de decidir cómo se va a realizar el proyecto y cómo se va a cohesionar. Tiene un conocimiento profundo de las tecnologías, los framework, librerías, etc. Decide la forma y los recursos con los que se va a llevar a cabo un proyecto.

    perfilJefe de proyecto.
    Dirige el proyecto. Muchas veces un jefe de proyecto puede ser un analista con experiencia, un arquitecto o simplemente una persona dedicada solamente a ese puesto. Tiene que saber gestionar un equipo, gestionar los tiempos, tener una relación fluida con el cliente, etc.

    perfilAnalista de sistemas.
    Es un rol tradicional en el desarrollo de software. Es una persona con experiencia que realiza un estudio exhaustivo del problema a analizar y realiza tanto el análisis como el diseño de todo el sistema.
    La experiencia que tiene este tipo de personas es fundamental puesto que muchas veces es necesaria a la hora de tener reuniones con el cliente, establecer los requisitos de la aplicación, etc.

    perfilAnalista programador.
    Puesto a caballo entre el analista y el programador. Es un programador senior por así decirlo. Realiza funciones de análisis porque sus conocimientos lo permiten y también codifica. En proyectos pequeños puede realizar ambas funciones (analista y programador).

    perfilProgramador.
    Su función es conocer en profundidad el lenguaje de programación y codificar las tareas que le han sido encomendadas por el analista o analista-programador.

    Ejercicio.

    Realiza un listado de tareas y asignaselas a los distintos roles de un desarrollo software. Algunas tareas podrían ser:

  • Cargar base de datos con datos de prueba.
  • Entrevista con el cliente para establecer requisitos.
  • Elección de las herramientas de desarrollo.
  • Elección del lenguaje de desarrollo.
  • Pruebas unitarias.
  • Pruebas finales.
  • Crear estructura de la base de datos.
  • Establecer requisitos del proyecto.
  • Entrega de la primera versión del proyecto.
  • Documentación técnica.
  • Documentación de usuario.
  • Puedes también establecer en qué paso del desarrollo software se va a realizar dicha tarea con lo cual lo más eficiente es que hagas una tabla con las siguientes columnas: tarea, paso de desarrollo y rol que la ejecuta.

    Ejercicios.

    Ejercicio 1.
    php ejecución cliente servidor
    Interpreta la figura anterior y explica el proceso que se dá en la misma. Explica paso a paso qué esta ocurriendo y si la información se está interpretando, qué programas participan, etc.

    Ejercicio 2.
    Investiga cuáles son los framework más utilizados en la actualidad. Características, ventajas, desventajas. Lenguajes con los que se utilizan.

    Ejercicio unificado. Ten en cuenta que tienes que realizar un documento que englobe la información de todo el tema. Dicho documento tiene que tener una estructura y propósito determinado. Deberá contemplar todos los aspectos que se han ido resaltando durante el enunciado del mismo y el resultado es un documento independiente que compile la información proporcionada con la investigada y trabajada por parte del alumno.

    Deja un comentario

    Tu dirección de correo electrónico no será publicada. Los campos necesarios están marcados *

    Puedes usar las siguientes etiquetas y atributos HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>