Vous êtes sur la page 1sur 5

Introducción a la Computación

Etapas en el desarrollo de programas

Tenemos un problema que “queremos” resolver mediante la implementación


de un programa. Un programa es una secuencia de instrucciones que la com-
putadora interpreta como operaciones aritmeticas y lógicas. El programa es
almacenado en memoria y los dispositivos de entrada/salida posibilitan la trans-
ferencia de datos entre la computadora y el mundo externo.
En lı́nea general, los pasos a seguir en el desarrollo de programas son los
siguientes:
1. Análisis y especificación del problema
2. Diseño

3. Codificación
4. Verificación y validación
5. Mantenimiento

Análisis y especificación del problema


El problema seguramente esté descripto en lenguaje natural, puede haber falta
de exactitud y ambigüedad, hasta es posible no estar seguros de que problemas
queremos resolver. El primer paso en el desarrollo de un programa consiste en
formular una especificación precisa del problema. Para esto se puede recurrir a
algún modelo formal, aunque la complejidad de los problemos que resolveremos
en esta materia no lo harán necesario.
No siempre el problema tendrá solución y, en el caso de tenerla, no siempre
será posible encontrarla mediante el uso de la computadora. En la materia,
estamos interesados en los problemas que tienen solución hallable mediante la
computadora.
La especificación de un problema debe incluir:
• Una descripción de la entrada del problema: qué información se da y qué
objetos son relevantes para resolver el problema.
• Una descripción de la salida: qué información debe producirse para resol-
ver el problema.
Dado que para una entrada determinada el programa siempre debe generar
una misma salida, podemos verlo como una función, cuyo dominio es el conjunto

1
de todas las posibles entradas y su imagen el de todas las posibles salidas.

Ejemplo 1: Mi abuela quiere saber el importe de su factura telefónica co-


rrespondiente al mes pasado. La empresa le informó que cada comunicación
telefónica tiene un costo de conexión de $1 y por cada 10 segundos de comu-
nicación un costo adicional de $0.1. Durante el mes pasado, mi abuela realizó
10 llamados a amigos con una duración total de 1500 segundos y 20 llamados
a otras personas hablando en total 500 segundos. ¿Cuál será el costo de la
factura?
Entrada:
• Costo por llamada: $1
• Costo por 10 seg. de comunicción: $0.1
• Número de comunicaciones: 30
• Tiempo total de comunicación: 2000 seg.
Salida:
• Monto de la factura telefónica
Los otros datos (que es mi abuela, a quién realizó los llamados, que los datos
corresponden al mes anterior) no son relevantes y se pueden ignorar.
Este problema es un caso especial de un problema más general: calcular
el monto de la factura telefónica generado por realizar cualquier número de
llamadas, con cualquier duración total, cualquier costo por conexión y cualquier
costo por 10 seg. de comunicación.
Entrada:
• Costo por llamada
• Costo por 10 seg. de comunición
• Número de comunicaciones
• Tiempo total de comunicación
Salida:
• Monto de la factura telefónica
Por supuesto, podrı́amos generalizar aún más, diferentes tipos de comuni-
caciones, diferentes tipos de tarifa, etc. Un aspecto importante del análisis de
problemas es la generalización: el programa desarrollado debe ser lo suficiente-
mente flexible para que resuelva no sólo el problema concreto dado, sino también
cualquier problema relacionado del mismo estilo.

Ejemplo 2: Queremos multiplicar 987 por 1234.

Entrada:
• multiplicando: 987
• multiplicador: 1234

2
Salida:
• Producto del multiplicando por el multiplicador
El problema puede ser generalizado:

Entrada:
• multiplicando: cualquier número natural
• multiplicador: cualquier número natural
Salida:
• Producto del multiplicando por el multiplicador
A veces un algoritmo está indefinido para ciertos valores de entrada. La
especificación debe indicar esta suituación en la precondición o condición de
entrada del algoritmo. El algoritmo debe estar definido para los valores de
los tipos de entrada que cumplen la precondición. Para los demás valores, el
comportamiento del algoritmo será impredecible, por ejemplo, puede que retorne
el valor correcto o que la ejecución termine sin hallar ningún valor.
Suponiendo que los datos de entrada cumplen la precondición, el algoritmo
debe retornar valores que cumplan cierta propiedad, expresada en la postcon-
dición del algoritmo.
En el ejemplo anterior, la precondición es que el multiplicando y el multi-
plicador son números naturales, y la postcondición que el valor retornado es
producto de los valores de entrada.
Entonces, si bien el problema que queremos resolver es la multiplicación entre
987 y 1234, estamos interesados en desarrollar un programa que pueda calcular la
multiplicación entre dos números naturales cualesquiera y aplicarlo a 987 y 1234.
Los valores de entrada que necesitamos saber para poder resolver el problema se
llaman parámetros del problema, en este caso multiplicando y multiplicador.
Cuando especificamos los valores del multiplicando y multiplicador, 987 y 1234
en el ejemplo, obtenemos una instancia del problema. Cada combinación de
valores de los parámetros que cumplen la precondición es una instancia del
problema. Si el multiplicando es 456 y el multiplicador 9887 tenemos otra
instancia del mismo problema. Sin embargo, si queremos multiplicar 98.6 y
4213, no tendrı́amos una instancia del problema anterior, porque el valor del
multiplicando no cumple la precondición de ser un número natural.

Diseño
Hasta ahora determinamos qué debe hacer el programa, en esta etapa cómo
va a hacer el programa la tarea requerida. Una vez dada la especificación de
un problema, se debe formular un plan de diseño para desarrollar un programa
que cumpla la especificación:
• Decidir formato de los datos de entrada y salida.
• Seleccionar estructuras para organizar y almacenar los datos durante las
operaciones intermedias del programa.

3
• Decidir modularización.
• Desarrollar procedimientos para procesar los datos.
La modularización consiste en “romper” el problema en subproblemas. Cada
subproblema es resuelto mediante un módulo. Un módulo será un subpro-
grama.
Esta etapa cobra sentido cuando los problemas a resolver tienen cierta com-
plejidad. En el transcurso de la materia veremos algunos conceptos básicos de
diseño.

Codificación
En esta etapa, se pasa del diseño obtenido en la etapa anterior a una descripción
escrita en un lenguaje de programación. Esta última descripción es el programa.
O sea, la codificación es el proceso de implementar en algún lenguaje de progra-
mación las estructuras usadas para almacenar los datos y los algoritmos para
resolver el problema.
Un lenguaje de programación es una herramienta para producir software.
Se compone de un conjunto de reglas, sı́mbolos y signos. Existen distintas
categorı́as, lenguajes de máquina (entendible por la computadora), lenguajes de
bajo nivel, lenguajes de alto nivel y algunas otras.
Los lenguajes de alto nivel proporcionan un conjunto de instrucciones amplio
y potente, son fáciles de aprender, los programas son mucho más legibles y son
transportables a distintos tipos de máquinas. En la materia vamos a utilizar el
lenguaje de alto nivel C y C++. Para poder ser ejecutados en la computadora,
los lenguajes de alto nivel deben ser traducidos a código de máquina. Esta
tarea la realizan los compiladores. Un compilador traduce el programa inicial,
programa fuente, escrito en un lenguaje de alto nivel a un progrma en lenguaje
de máquina, programa objeto o ejecutable.
También existen los intérpretes, que en lugar de generar un programa objeto,
analizan, traducen y ejecutan una a una las instrucciones del programa fuente.
No se analiza una instrucción hasta que la anterior se haya ejecutado.

Verificación y validación
Se pueden producir errores en cualquiera de las fases del proceso de desarrollo
de un programa. Para corregirlos se utilizan las siguientes técnicas:
• validación: consiste en comprobar que tanto el algoritmo como el programa
cumplen la especificación del problema, responde a la pregunta: ¿estamos
resolviendo el problema correcto?
• verificación: se refiere a la comprobación de que los algoritmos son correc-
tos, responde a la pregunta: ¿estamos resolviendo el problema de forma
correcta?
La verificación puede realizarse mediante la ejecución del programa con dis-
tintos conjuntos de datos y comprobar que el resultado es el esperado o desarro-
llar una demostración formal que garantice la correctitud del programa para
todos los datos posibles.

4
Los errores pueden detectarse en distintas fases del procesamiento del pro-
grama y provocar la detención del proceso. Los podemos clasificar dentro de las
siguientes categorı́as:
• errores sintácticos o errores en tiempo de compilación: suelen ser errores
de sintaxis, como por ejemplo puntuación incorrecta o palabras claves
escritas incorrectamente. Se detectan en forma automática en tiempo de
compilación y normalmente hacen imposible completar la compilación y
ejecutar el programa.
• errores en tiempo de ejecución: por ejemplo, en una expresión aritmética
dividir por una variable que tome valor cero. La computadora puede
entender la instrucción pero no ejecutarla. Pueden no ser detectados hasta
que ha comenzado la ejecución del programa. El usuario nota el error al
utilizar el programa.
• errores lógicos: surgen en el diseño del algoritmo o en la codificación del
programa que implemente el algoritmo. No ocurre ningún error durante
la compilación o la ejecución del programa, pero la salida producida no es
la esperada. Suelen ser los más difı́ciles de detectar.

Mantenimiento
Los programas para aplicaciones del mundo real se usan a menudo durante
varios años y es probable que requieran alguna modificación:
• para corregir defectos que salen a la luz después de que el software ha
comenzado a utilizarse
• para mejorar la ejecución o añadir nuevas caracterı́sticas
• por cambios en el hardware y/o el software de base, tales como un cambio
en el sistema operativo
• otros cambios por factores externos, por ejemplo, cambios en las leyes so-
bre los impuestos pueden significar revisar parte de un sistema de nóminas
Es necesario que los programadores hagan todo lo posible por diseñar pro-
gramas y sistemas de programas que sean legibles y estén bien documentados y
estructurados. De esta forma, los programas son más fáciles de comprender y
modificar, y por tanto más fáciles de mantener.

Vous aimerez peut-être aussi