Colaboradores

Mostrando entradas con la etiqueta Proceso de software. Mostrar todas las entradas
Mostrando entradas con la etiqueta Proceso de software. Mostrar todas las entradas

martes, 11 de enero de 2011

El proceso del software (finalizando)

Continuando con la breve explicación de lo que es el proceso del software, en este post terminaré con los otros pasos que conllevan el proceso.
Anteriormente había comentado sobre la especificación del problema y el análisis y el diseño del algoritmo, ahora, para terminar les hablaré sobre  los siguientes pasos:

  • Implementación o construcción del modelo:
    • En éste paso o etapa, debemos de pasar nuestro algoritmo a un lenguaje de programación que hayamos elegido. A esta etapa se le conoce codificación. Esta etapa no debería de resultar difícil si es que hemos realizado un diseño que siga la filosofía del lenguaje.
  • Validación:
    • En esta etapa lo que se hace es probar lo que nuestro programa debe de hacer en principio para lo que fue diseñado. Para esto se realizan pruebas informales, que consisten en presentarle al programa diversos conjuntos de datos y verificar que el programa hace lo que tiene que hacer. En este tipo de pruebas se deben también de incluir conjuntos de datos erróneos, para así verificar que el programa sabe que hacer que hacer en situaciones anómalas. En este caso, dependiendo del tipo de lenguaje que se este utilizando, se debe de lanzar algún tipo de excepción para gestionar el tipo de error causado en tiempo de ejecución.
  • Mantenimiento:
    • Actualmente, el mantenimiento de los programas y diversos sistemas es la actividad que mayor coste representa. El mantenimiento de nuestros programas se puede realizar de dos maneras:
      • Mantenimiento correctivo:
        • Este tipo de mantenimiento se da cuando hay situaciones o eventos que el programa o sistema no está resolviendo de manera adecuada.
      • Mantenimiento extensivo:
        • Este tipo de mantenimiento se refiere a extender las capacidades originales de nuestro programa o sistema, esto quiere decir, que nuestro programa o sistema debe regresarnos un conjunto adicional de resultados.
    • Para poder realizar un buen mantenimiento, es necesario incluir una buena documentación de nuestro programa, en caso contrario, sería imposible extender nuestro programa o sistema.
  • Extensión y refinamiento:
    • Esta etapa la realizan personas distintas a las que diseñaron originalmente el programa o sistema. En este caso, cuando se realiza la extensión de los programas o sistemas, lo que se busca es tratar de “tapar un hoyo, sin realizar otro en el programa o sistema”,  esto es fácil de realizar si se tiene modularidad en el programa o sistema, ya que es fácil atacarlo por módulos. Además debe tener la propiedad de encapsulamiento, esto es, que cada módulo tenga perfectamente delimitado su campo de acción,  esto permite tener una mejor comunicación entre módulos de manera controlada.
Estas etapas no necesariamente son realizadas de manera secuencial, ya que un buen trabajo de hace de manera cíclica entre los diversos pasos, esto para tener un software bien asentado, además de que pueden surgir problemas que conlleven a regresar a pasos anteriores que impliquen regresar a pasos anteriores para resolver dicho problema. Insisto que un buen diseño y análisis permiten tener éxito en etapas posteriores, sin necesidad de rehacer todo nuestro trabajo.

jueves, 6 de enero de 2011

El proceso del software (Análisis y diseño del algoritmo).

Análisis y diseño del algoritmo
Ahora que tenemos el enunciado del problema a resolver, así como las entradas con las que contamos y las salidas que deseamos, es necesario que tengamos un algoritmo que nos permita resolver nuestro problema y obtener los resultados que esperamos.
Para esto es necesario el modelar o elaborar un modelo que nos permita resolver nuestro problema. En más de una ocasión es probable que para llegar a nuestro objetivo se involucren una serie de pasos intermedios(estados de los datos), o más que ello, sea posible que necesitemos tener un cierto comportamiento para no tener un resultado concreto sino un resultado relativo que también nos sirve para nuestro objetivo. En el primer caso, me refiero a soluciones que necesitan ser inmediatos, como la impresión de un saludo en pantalla o resolver una operación aritmética, y, en el segundo caso, a cosas como los videojuegos o simulaciones (un reloj o un calendario por ejemplo).
A pesar de que depende del entorno de nuestro problema tendremos distintos tipos de soluciones que nos resolverán nuestro problema, cada solución tendrá distintas características propias de su entorno, pero, a pesar de ello todas las soluciones comparten un conjunto de características:


  • La solución debe de ser correcta, eficiente y efectiva.


Lo de correcta, creo que no hay nada que explicar sobre la correctez de una solución, ya que es lo que se desea cuando se diseña dicha solución. Con respecto a la eficiencia, se puede tener una excepción, ya que puede que solo si estamos haciendo un programa que nos ayude para resolver un problema para calcular algo o para sacarnos de un problema momentáneo, es decir, un programa que se va utilizar por un breve tiempo.
La eficiencia es una parte fundamental de una solución, ya que no podemos desperdiciar recursos(memoria principal, tiempo de procesamiento, etc.) de manera descuidada, ya que en más de una ocasión una pequeña falta de eficiencia en nuestras soluciones puede hacer que falle toda nuestra aplicación y la "tire".
Por efectiva nos referimos al hecho de que produce el efecto esperado en conjunción con la correctez y la eficiencia del mismo. Actualmente los programas son tan grandes que resulta muy difícil que una sola persona los realice por su propia cuenta, así que se tiende a trabajar en equipos(esto de manera muy GENERAL), entonces se requiere que los programas sean:


  • Modulares: esto quiere decir que se pueda dividir en varios pedazos (tener fronteras entre diversas partes que hagan su parte por separado), así para que las tareas se puedan repartir de manera eficiente.
  • Bajo nivel de acoplamiento: Esto es, que tengan que recibir o utilizar lo menor posible del exterior y entreguen lo mínimo posible (esto es que haya muy poco tráfico  entre los módulos), de tal forma que puedan ser reutilizados por otros.
  • Alta cohesión: aquí nos referimos al hecho de que todo lo que se encuentre relacionado (variables, métodos) se encuentren juntos, para que el programa sea fácil de entender y modificar.


Esto es lo básico del análisis y diseño del algoritmo, en el siguiente post seguiré con las demás etapas del proceso del software.

miércoles, 5 de enero de 2011

El proceso del software (especificación del problema).

Especificación del problema:
En la especificación del problema, se nos presenta el enunciado del problema a resolver, entonces debemos de entender el problema que tenemos que resolver, así como pedir toda la información necesaria que necesitemos para resolverlo, de tal manera que cuando nos encontremos en pasos posteriores del proceso de desarrollo, sea fácil y sin dificultad de entender lo que estamos desarrollando.
Dado que hemos entendido nuestro problema, es momento de determinar de donde partimos, es decir, con que entradas contamos para tratar de resolver nuestro problema, así como a donde queremos llegar (salidas deseadas, o resultados de nuestro problema).
En ésta etapa se tienen que tener bien claro los siguientes incisos:

  • Enunciado preciso del problema.
  • Entradas.
  • Salidas.

Y con esto tenemos nuestra especificación del problema, lo cual nos llevará a la siguiente etapa que es el análisis y diseño del algoritmo que nos permiirá resolver el problema planteado.
En el siguiente post les hablaré sobre el "Análisis y diseño del algoritmo".

jueves, 23 de diciembre de 2010

El proceso de software

Hoy les explicaré lo básico sobre el proceso del software, esto es el como empezar a desarrollar programas con un lenguaje de programación.

Cuando hablamos de lenguajes de programación nos referimos a un lenguaje específico con el cual comunicamos a la computadora u otro dispositivo lo que queremos que ejecute un algoritmo.

Cuando programamos tenemos que considerar varios pasos para poder desarrollar un buen programa.
Los pasos a considerar son los siguientes:

  • Especificación del problema
  • Análisis y diseño
  • Implementación
  • Validación
  • Mantenimiento
  • Refinamiento y extensión


Este proceso nos lleva a aplicar a nuestro programa un conjunto de etapas para tener un software decente. En el estado inicial tenemos que definir nuestro problema a resolver, especificándolo para así proseguir con el análisis y el diseño del algoritmo que nos permitirá resolver nuestro problema antes especificado; ahora que tenemos el algoritmo para resolver nuestro problema es momento de pasar a la implementación del algoritmo en un lenguaje de programación, el lenguaje a elegir deberá de ser adecuado con nuestro diseño del algoritmo, esto no deberá de ser difícil dado que el diseño sigue la filosofía del lenguaje de programación. A esta etapa también se le conoce como codificación. Ya que hemos terminado con la codificación, es momento de verificar que nuestro programa haga lo que se supone que debe de hacer, para esto, debemos de pasarle un conjunto de datos que sabemos que funcionan para nuestro algoritmo, así como datos que sabemos que lo harán fallar para detectar situaciones anómalas, esta etapa es la validación de nuestro programa. Los siguientes pasos a seguir son el mantenimiento, el refinamiento y extensión, hay que mantener nuestro programa después de haberlo puesto en funcionamiento, ya que esto es una de las partes más importantes del proceso de software, esto es la etapa de mantenimiento; el refinamiento y la extensión es por lo general hecha por personas distintas a las que diseñaron el software original; ayuda que el programa sea modular, esto quiere decir que nuestro programa contiene módulos que permiten extender el programa cambiando su comportamiento, sin cambiar el contenido original del programa, esto es la extensión y el refinamiento de nuestro programa.

Esta es una pequeña referencia sobre como es el desarrollo del software, en próximos posts explicaré de manera más detallada como es que se llevan estas etapas de manera individual y más formal.

Con esto me despido y Programación y otras historias... les deseamos una feliz navidad.