You are on page 1of 33

Plan de Trabajo

Fases de Desarrollo de un
Programa
Fases de desarrollo
Anlisis
Especificacin y batera de pruebas
Diseo
Revisin y ampliacin de la batera de pruebas
Pruebas de escritorio (trazas)
Codificacin
Revisin y ampliacin de la batera de pruebas
Pruebas de ejecucin
Anlisis y Especificaciones
Entradas:
Salidas:
Objetivo:
Mtodo:
Suposiciones:
Entorno local
Constantes:
Variables:
Usa: ...
Batera de pruebas:

Caso Entrada Salida esperada Salida obtenida


1 ... ...
... ... ...
Ejemplo
Anlisis: Especificacin

Anlisis: Batera de Pruebas


Caso Entrada Salida esperada Salida obtenida
1 0 0 0 Infinitas soluciones

2 0 0 05 No hay solucin

3 0 32 688 -215

4 1 -2 1 1 (doble)

5 2 10 8 4 1

6 1 0 4 2i - 2i
Diseo
Diseo descendente
Refinamientos sucesivos
Diseo modular
Divide y vencers
Diseo: Nivel 1
inicio
leer coeficientes
mostrar soluciones: ecuacin (a, b, c)
fin

Especificacin de "ecuacin"
Enunciado: Mtodo que muestra por pantalla las
soluciones de una ecuacin de hasta grado dos a partir
de sus coeficientes
Entradas: parmetros a, b y c, nmeros reales
Salidas: por pantalla, una de las siguientes
Diseo: Nivel 2
inicio
escribir (Introduzca coeficiente x2)
leer a
escribir (Introduzca coeficiente x)
leer b
escribir (Introduzca trmino independiente)
leer c
ecuacin (a, b, c)
fin
inicio
Diseo: Nivel 1 ecuacion
si (a = 0) entonces
si (b = 0) entonces /*ecuacin de grado 0*/
si (c = 0) entonces
Infinitas soluciones
si_no
No hay solucin
fin_si
si_no /*ecuacin de grado 1*/
Una solucin
fin_si
si_no /*ecuacin de grado 2*/
Dos soluciones (real doble, reales distintas o complejas conjugadas)
fin_si
fin
inicio
Diseo: Nivel 2 ecuacion
si (a = 0) entonces
si (b = 0) entonces /*ecuacin de grado 0*/
si (c = 0) entonces
Infinitas soluciones
si_no
No hay solucin
fin_si
si_no /*ecuacin de grado 1*/
Una solucin
fin_si
si_no /*ecuacin de grado 2*/
d discriminante
si (d = 0) entonces
Calcular solucin real doble
si_no
si (d > 0) entonces
Calcular dos soluciones reales
si_no
Calcular dos soluciones complejas
fin_si
fin_si
fin_si
fin
Diseo: Nivel 3 ecuacion

Pruebas de escritorio
Ejecucin manual de un algoritmo sobre
un caso de prueba.
Se representa como una tabla.
Cada columna representa el entorno.
Cada fila muestra la modificacin del entorno
a medida que se simula la ejecucin lnea a
lnea del algoritmo.
ecuacion (1, 0, 4) a b c d real imag pantalla
inicio 1 0 4 ? ? ?
ecuacion (1, 0, 4) a b c d real imag pantalla
inicio 1 0 4 ? ? ?
si (a=0) entonces
si (b=0) entonces
si (c=0) entonces
escribir (Infinitas solu
si_no
escribir (No hay solu
fin_si
fin_si
si_no 1 0 4 ? ? ?
ecuacion (1, 0, 4) a b c d real imag pantalla
inicio 1 0 4 ? ? ?
si (a=0) entonces
si (b=0) entonces
si (c=0) entonces
escribir (Infinitas solu
si_no
escribir (No hay solu
fin_si
fin_si
si_no 1 0 4 ? ? ?
d b2-4ac 1 0 4 -16 ? ?
ecuacion (1, 0, 4) a b c d real imag pantalla
inicio 1 0 4 ? ? ?
si (a=0) entonces
si (b=0) entonces
si (c=0) entonces
escribir (Infinitas solu
si_no
escribir (No hay solu
fin_si
fin_si
si_no 1 0 4 ? ? ?
d b2-4ac 1 0 4 -16 ? ?
si (d=0) entonces
escribir -b/2a
si_no 1 0 4 -16 ? ?
ecuacion (1, 0, 4) a b c d real imag pantalla
inicio 1 0 4 ? ? ?
si (a=0) entonces
si (b=0) entonces
si (c=0) entonces
escribir (Infinitas solu
si_no
escribir (No hay solu
fin_si
fin_si
si_no 1 0 4 ? ? ?
d b2-4ac 1 0 4 -16 ? ?
si (d=0) entonces
escribir -b/2a
si_no 1 0 4 -16 ? ?
si (d>0) entonces
escribir (-b+d
si_no 1 0 4 -16 ? ?
ecuacion (1, 0, 4) a b c d real imag pantalla
inicio 1 0 4 ? ? ?
si (a=0) entonces
si (b=0) entonces
si (c=0) entonces
escribir (Infinitas solu
si_no
escribir (No hay solu
fin_si
fin_si
si_no 1 0 4 ? ? ?
d b2-4ac 1 0 4 -16 ? ?
si (d=0) entonces
escribir -b/2a
si_no 1 0 4 -16 ? ?
si (d>0) entonces
escribir (-b+d
si_no 1 0 4 -16 ? ?
real=-b/2a 1 0 4 -16 0 ?
ecuacion (1, 0, 4) a b c d real imag pantalla
inicio 1 0 4 ? ? ?
si (a=0) entonces
si (b=0) entonces
si (c=0) entonces
escribir (Infinitas solu
si_no
escribir (No hay solu
fin_si
fin_si
si_no 1 0 4 ? ? ?
d b2-4ac 1 0 4 -16 ? ?
si (d=0) entonces
escribir -b/2a
si_no 1 0 4 -16 ? ?
si (d>0) entonces
escribir (-b+d
si_no 1 0 4 -16 ? ?
real=-b/2a 1 0 4 -16 0 ?
imag=-d/2a 1 0 4 -16 0 2
ecuacion (1, 0, 4) a b c d real imag pantalla
inicio 1 0 4 ? ? ?
si (a=0) entonces
si (b=0) entonces
si (c=0) entonces
escribir (Infinitas solu
si_no
escribir (No hay solu
fin_si
fin_si
si_no 1 0 4 ? ? ?
d b2-4ac 1 0 4 -16 ? ?
si (d=0) entonces
escribir -b/2a
si_no 1 0 4 -16 ? ?
si (d>0) entonces
escribir (-b+d
si_no 1 0 4 -16 ? ?
real=-b/2a 1 0 4 -16 0 ?
imag=-d/2a 1 0 4 -16 0 2
escribir (real,+, imag... 1 0 4 -16 0 2 2i, -2i
ecuacion (1, 0, 4) a b c d real imag pantalla
inicio 1 0 4 ? ? ?
si (a=0) entonces
si (b=0) entonces
si (c=0) entonces
escribir (Infinitas solu
si_no
escribir (No hay solu
fin_si
fin_si
si_no 1 0 4 ? ? ?
d b2-4ac 1 0 4 -16 ? ?
si (d=0) entonces
escribir -b/2a
si_no 1 0 4 -16 ? ?
si (d>0) entonces
escribir (-b+d
si_no 1 0 4 -16 ? ?
real=-b/2a 1 0 4 -16 0 ?
imag=-d/2a 1 0 4 -16 0 2
escribir (real,+, imag... 1 0 4 -16 0 2 2i, -2i
fin_si 1 0 4 -16 0 2
ecuacion (1, 0, 4) a b c d real imag pantalla
inicio 1 0 4 ? ? ?
si (a=0) entonces
si (b=0) entonces
si (c=0) entonces
escribir (Infinitas solu
si_no
escribir (No hay solu
fin_si
fin_si
si_no 1 0 4 ? ? ?
d b2-4ac 1 0 4 -16 ? ?
si (d=0) entonces
escribir (-b/2a)
si_no 1 0 4 -16 ? ?
si (d>0) entonces
escribir -b+d/2a
si_no 1 0 4 -16 ? ?
real=-b/2a 1 0 4 -16 0 ?
imag=-d/2a 1 0 4 -16 0 2
escribir (real,+, imag... 1 0 4 -16 0 2 2i, -2i
fin_si 1 0 4 -16 0 2
fin
Codificacin
Traduccin del algoritmo a un programa
Lenguaje de programacin
Java
import java.util.Scanner;
public class EcuacionGradoHasta2 {

public static void main(String args[]) {


Scanner in = new Scanner (System.in);
System.out.println("Introduzca el coeficiente de x al cuadrado: ");
double n1 = in.nextDouble();
System.out.println("Introduzca el coeficiente de x: ");
double n2 = in.nextDouble();
System.out.println("Introduzca el trmino independiente: ");
double n3 = in.nextDouble();
ecuacion(n1, n2, n3);
}

Sigue
public static void ecuacion (double a, double b, double c){
if (a==0) /* grado menor que 2 */
if (b==0) /* grado 0 */
if (c==0)
System.out.println ("Hay infinitas soluciones");
else
System.out.println ("No hay solucin");
else /* grado 1 */
System.out.println (-c/b);
else { /* grado 2 */
double d = b*b - 4*a*c; // discriminante
if (d==0)
System.out.println (-b/2*a + " (doble)");
else if (d>0)
System.out.println ( ((-b+Math.sqrt(d))/2*a + ", " +
((-b-Math.sqrt(d))/2*a );
else{
double real = -b/2*a;
double imag = Math.sqrt(-d)/2*a;
System.out.println ( real + "+" + imag+"i" + ", " +
real + "-" + imag+"i" );
}
}
}
}
Pruebas
Caso Entrada Salida esperada Salida obtenida
1 0 0 0 Infinitas soluciones Infinitas soluciones

2 0 0 05 No hay solucin ERROR

3 0 32 688 -215 ERROR

4 1 -2 1 1 (doble) 1.0 (doble)

5 2 10 8 4 1 -4.0 -16.0

6 1 0 4 2i - 2i -0.0+2.0i -0.0-2.0i
Depuracin
Caso Motivo Modificar
2y3 Para separar los decimales Documentacin
se debe usar la coma (,)
5 / (2*a) en lugar de /2*a Cdigo
Especificaciones (ampliado)
Entradas: .
Salidas:
Objetivo:
Mtodo:
Observaciones: En la entrada, el separador de decimales es la
coma. En la salida es un punto.
Suposiciones: el usuario escribir nmeros en la entrada
Entorno local
Constantes:
Variables:
Usa: ...
Batera de pruebas:
public static void ecuacion (double a, double b, double c){

Cdigo (corregido)
if (a==0) /* grado menor que 2 */
if (b==0) /* grado 0 */
if (c==0)
System.out.println ("Hay infinitas soluciones");
else
System.out.println ("No hay solucin");
else /* grado 1 */
System.out.println (-c/b);
else { /* grado 2 */
double d = b*b - 4*a*c; // discriminante
if (d==0)
System.out.println (-b/(2*a) + " (doble)");
else if (d>0)
System.out.println ( ((-b+Math.sqrt(d))/(2*a) + ", " +
((-b-Math.sqrt(d))/(2*a) );
else{
double real = -b/(2*a);
double imag = Math.sqrt(-d)/(2*a);
System.out.println ( real + "+" + imag+"i" + ", " +
real + "-" + imag+"i" );
}
}
}
}
Pruebas
Caso Entrada Salida esperada Salida obtenida
1 0 0 0 Infinitas soluciones Infinitas soluciones

2 0 0 05 No hay solucin No hay solucin

3 0 32 688 -215 -2.15

4 1 -2 1 1 (doble) 1.0 (doble)

5 2 10 8 4 1 -1.0 -4.0

6 1 0 4 2i - 2i -0.0+2.0i -0.0-2.0i
Depuracin
Caso Motivo Modificar
5 El resultado correcto es -1 -4 Documentacin
(el error estaba en la batera
de pruebas)
Batera de Pruebas
Caso Entrada Salida esperada Salida obtenida
1 0 0 0 Infinitas soluciones

2 0 0 0,5 No hay solucin

3 0 3,2 6,88 -2.15

4 1 -2 1 1 (doble)

5 2 10 8 -4 -1

6 1 0 4 0+2i 0-2i

7 No numricos Error

You might also like