Resumen: Entrega nº49 del curso Aprender a programar en Visual Basic desde cero.
Codificación aprenderaprogramar.com: CU00350A

 

 

DEPURAR ALGORITMOS

Vamos a reflejar en forma de código enfoques para la verificación de algoritmos. Partimos del siguiente bucle ejemplo:

For i = a To b
    For j = m To n
        R = i * j
    Next j
Next i

 

 

Los enfoques para depurar el algoritmo los podemos establecer a partir de puntos de interrupción. Sin embargo, en general es más rápido hacer una simple constatación del valor de variables que establecer una interrupción del programa, ya que por cada parada estaremos perdiendo un tiempo. Con este razonamiento, usaremos un Labelpara dejar constancia del valor de una variable en un punto dado del programa. Sólo cuando no seamos capaces de llegar a conclusiones sin tener que detener el programa, estableceremos puntos de interrupción.

 

 

Enfoque al resultado

Nos centramos en comprobar un valor final, en este caso R, suponiendo que si este valor es correcto el resto de procesos también lo son. Por ejemplo:

Código (versiones VB menos recientes) Código (versiones VB más recientes)
'Curso VB aprenderaprogramar.com
Option Explicit
Dim i%, j%
Dim a%, b%
Dim m%, n%
Dim R%

Private Sub Form_Load()
Label1 = ""
a = 1: b = 3: m = 1: n = 3
For i = a To b
    For j = m To n
        R = i * j
        Label1 = Label1 & R & vbCrLf
    Next j
Next i
End Sub
REM Curso Visual Basic aprenderaprogramar.com
Option Explicit On
Public Class Form1
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Dim i%, j%
        Dim a%, b%
        Dim m%, n%
        Dim R%
        Label1.Text = ""
        a = 1 : b = 3 : m = 1 : n = 3
        For i = a To b
            For j = m To n
                R = i * j
                Label1.Text = Label1.Text & R & vbCrLf
            Next j
        Next i
    End Sub
End Class

 


En el programa anterior hemos verificado qué valor toma R en cada pasada del bucle. El objetivo del bucle va a ser transferir el valor de R a otros procesos, pero antes de hacer eso hemos querido comprobar qué resultado era el que obteníamos con este diseño de bucle.

 

Enfoque al proceso

Analizamos qué ocurre en uno o varios pasos del programa que resultan de nuestro interés, estudiando los valores que van tomando las variables. Por ejemplo:

Código (versiones VB menos recientes) Código (versiones VB más recientes)
'Curso VB aprenderaprogramar.com
Option Explicit
Dim i%, j%
Dim a%, b%
Dim m%, n%

Private Sub Form_Load()
Label1 = ""
a = 1: b = 3: m = 1: n = 3
Label1 = Label1 & "a =" & a & " b =" & b & vbCrLf
For i = a To b
    Label1 = Label1 & "m =" & m & " n =" & n & " i =" & i & vbCrLf
    For j = m To n
        Label1 = Label1 & "j =" & j & vbCrLf
    Next j
Next i
End Sub
REM Curso Visual Basic aprenderaprogramar.com
Option Explicit On
Public Class Form1
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
  Dim i%, j%
  Dim a%, b%
  Dim m%, n%
Label1.Text = ""
a = 1 : b = 3 : m = 1 : n = 3
Label1.Text = Label1.Text & "a =" & a & " b =" & b & vbCrLf
For i = a To b
Label1.Text = Label1.Text & "m =" & m & " n =" & n & " i =" & i & vbCrLf
    For j = m To n
        Label1.Text = Label1.Text & "j =" & j & vbCrLf
    Next j
Next i
End Sub
End Class

 


Este programa da lugar a que se nos muestre lo siguiente:

a = 1 b = 3

m = 1 n = 3 i = 1

j = 1

j = 2

j = 3

m = 1 n = 3 i = 2

j = 1

j = 2

j = 3

m = 1 n = 3 i = 3

j = 1

j = 2

j = 3

 

 

A partir de estos valores de variables el programador analiza si el programa está respondiendo a lo que él tenía previsto o si se está produciendo un resultado indeseado. En caso de detectar algún error, procede a la corrección y a una nueva prueba.

 

 

Enfoques zonales

Analizamos qué ocurre en una zona de código donde estimamos ocurren procesos de interés o donde pensamos que puede existir un problema. Siguiendo con nuestro ejemplo, un enfoque zonal a la entrada del bucle sería:

Código (versiones VB menos recientes) Código (versiones VB más recientes)
'Curso VB aprenderaprogramar.com
Option Explicit

Dim i%, j%
Dim a%, b%, m%, n%, R%

Private Sub Form_Load()
Label1 = ""
a = 1: b = 3: m = 1: n = 3
Label1 = Label1 & "a = " & a & " b = " & b & vbCrLf
Label1 = Label1 & "m = " & m & " n = " & n & vbCrLf
Label1 = Label1 & "i = " & i & " j = " & j & vbCrLf
Label1 = Label1 & "R = " & R & vbCrLf
For i = a To b
    For j = m To n
        R = i * j
        Label1 = Label1 & R & " ,"
    Next j
Next i
End Sub
REM Curso Visual Basic aprenderaprogramar.com
Option Explicit On
Public Class Form1
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Dim i%, j%
        Dim a%, b%, m%, n%, R%
        Label1.Text = ""
        a = 1 : b = 3 : m = 1 : n = 3
        Label1.Text = Label1.Text & "a = " & a & " b = " & b & vbCrLf
        Label1.Text = Label1.Text & "m = " & m & " n = " & n & vbCrLf
        Label1.Text = Label1.Text & "i = " & i & " j = " & j & vbCrLf
        Label1.Text = Label1.Text & "R = " & R & vbCrLf
        For i = a To b
            For j = m To n
                R = i * j
                Label1.Text = Label1.Text & R & " ,"
            Next j
        Next i
    End Sub
End Class

 

 

El resultado obtenido es:

a = 1 b = 3

m = 1 n = 3

i = 0 j = 0

R = 0

1, 2, 3, 2, 4, 6, 3, 6, 9

 

 

Se han verificado todas las variables a la entrada del bucle. Algunas no tiene demasiada lógica que se verifiquen, pero a veces los errores saltan donde menos son de esperar, y toda información es valiosa.

 

 

 

 

 

 

Para acceder a la información general sobre este curso y al listado completo de entregas pulsa en este link:  Ver curso completo.
 
Para  hacer un comentario o consulta utiliza los foros aprenderaprogramar.com, abiertos a cualquier persona independientemente de su nivel de conocimiento.

Descargar archivo: