Sesión 13
Unidad 2 · Proyecto Entrega 2 — Consolidación y corrección de errores críticos
Navegación: ← → · Home / End · F pantalla completa · Táctil: desliza
Unidad 2 · Proyecto Entrega 2 — Consolidación y corrección de errores críticos
Navegación: ← → · Home / End · F pantalla completa · Táctil: desliza
| Categoría | Descripción | Síntoma visible | Origen más frecuente |
|---|---|---|---|
| Error de sintaxis | El compilador rechaza el código antes de ejecutar. | Línea subrayada en rojo en VS Code. | Punto y coma faltante, llaves desbalanceadas, tipo incorrecto. |
| Error de ejecución | El programa compila pero colapsa durante la ejecución. | IndexOutOfRangeException, FormatException, DivideByZeroException. | Índice fuera de rango, Parse sin validación, división con denominador no controlado. |
| Error lógico | El programa corre sin colapsar pero produce resultados incorrectos. | Salida numérica equivocada, ciclo que nunca entra o nunca sale. | Condición de ciclo invertida, acumulador no reinicializado, contador mal ubicado. |
La declaración bool activo = false dentro del bloque crea una nueva variable local con el mismo nombre. La variable del do-while nunca se modifica: ciclo infinito.
Nunca redeclares (bool, int, etc.) una variable de control dentro del bloque que depende de ella. Solo asigna.
Un error de tipo "uno de más" o "uno de menos" en los límites de un ciclo que recorre una estructura indexada. Es el error más frecuente en código iterativo de estudiantes e ingenieros por igual.
double.Parse(string) lanza FormatException ante cualquier entrada no convertible. En un sistema interactivo real, el usuario siempre cometerá al menos un error de tipado.
El sistema nunca sale del sub-ciclo hasta recibir datos correctos. El usuario no puede romper el flujo con texto arbitrario.
El cálculo del promedio (suma / Count) colapsa si el usuario solicita el reporte antes de registrar cualquier dato. La colección vacía hace que Count == 0, y la división no está definida.
El depurador convierte el razonamiento abstracto sobre el algoritmo en observación directa del estado de la máquina.
| Caso | Entrada | Resultado esperado | Error que detecta |
|---|---|---|---|
| Colección vacía | Solicitar reporte sin registrar nada. | Mensaje de advertencia. No hay excepción. | División por cero, acceso a índice -1. |
| Un solo registro | Registrar un valor, luego pedir reporte. | Promedio == ese valor. Máx == Mín == ese valor. | Error de índice en ciclos con lógica de comparación. |
| Entrada no numérica | Ingresar "abc" cuando se pide un número. | Mensaje de error. Sistema sigue activo. | FormatException por Parse sin guardia. |
| Valor en frontera | Ingresar exactamente el valor límite del dominio (ej. 0.0 o 5.0). | El sistema acepta el valor. No lo rechaza ni genera error silencioso. | Condición de validación con operador incorrecto (< vs <=). |
| Salida limpia | Seleccionar "Salir" desde el menú. | El programa termina sin colgar ni lanzar excepción. | Ciclo infinito por bandera no actualizada. |
(A) FormatException si el usuario escribe texto. (B) Redeclaración local — ciclo infinito. (C) Off-by-one — IndexOutOfRangeException en la última iteración. (D) DivideByZeroException si la colección está vacía; además, división entera si suma y Count son int.
¿Es el texto convertible al tipo de dato esperado?
Esta capa la provee el runtime de .NET a través de TryParse. No requiere lógica manual.
¿El valor numérico cumple las restricciones del negocio?
Esta capa la define el programador según los requisitos. Cambia entre sistemas; la Capa 1 es universal.
Antes de hacer el commit de entrega, verifica manualmente cada ítem:
Estas fechas también corresponden a la prueba individual de la Unidad 2 (810: 09/04 · 811: 10/04). El dominio del sistema propio es la mejor preparación para esa prueba.