Volver a la portadaFormación Tecnológica · noveno año · Cambiar asignatura
Empezar gratis
Apuntes

Ejercicios: El proceso de desarrollo

Practica★☆☆
Estas fases del desarrollo de un programa están desordenadas: (a) probar el programa con distintos datos, (b) editar el código fuente, (c) depurar los errores…

Estas fases del desarrollo de un programa están desordenadas: (a) probar el programa con distintos datos, (b) editar el código fuente, (c) depurar los errores encontrados, (d) ejecutar el programa. Ordénelas de forma razonable y explique qué se hace en cada una, teniendo en cuenta que al probar puede ser necesario volver atrás.

Resolver
Practica★☆☆
Explique qué es un «bug» en un programa y qué es depurar. Ponga un ejemplo sencillo de error que podría tener el programa de un cajero automático y qué consecuencia…

Explique qué es un «bug» en un programa y qué es depurar. Ponga un ejemplo sencillo de error que podría tener el programa de un cajero automático y qué consecuencia tendría para el usuario.

Resolver
Practica★☆☆
La figura muestra el ciclo de trabajo del desarrollo de un programa, pero una de sus etapas está tapada con un signo de interrogación, como se muestra en la figura.…

La figura muestra el ciclo de trabajo del desarrollo de un programa, pero una de sus etapas está tapada con un signo de interrogación, como se muestra en la figura.

Editar el código Ejecutar y probar ¿funciona bien? ? Publicar el programa no sí

Indique qué etapa falta dentro del ciclo, en qué consiste y por qué la flecha de «no» devuelve el trabajo a la edición del código.

Resolver
Practica★☆☆
Explique qué es un mensaje de traza o registro (log) en un programa y cómo ayuda a encontrar un error (permite ver por dónde pasó el programa y con qué valores).

Explique qué es un mensaje de traza o registro (log) en un programa y cómo ayuda a encontrar un error (permite ver por dónde pasó el programa y con qué valores).

Resolver
Practica★☆☆
Los programas tienen versiones (1.0, 1.1, 2.0...). Explique para qué sirve guardar versiones del código y qué puede hacer si la última versión funciona peor que la…

Los programas tienen versiones (1.0, 1.1, 2.0...). Explique para qué sirve guardar versiones del código y qué puede hacer si la última versión funciona peor que la anterior.

Resolver
Practica★☆☆
Explique qué es un caso de prueba y escriba dos casos para un programa que suma dos números: uno con valores normales y otro con algún valor especial, indicando la…

Explique qué es un caso de prueba y escriba dos casos para un programa que suma dos números: uno con valores normales y otro con algún valor especial, indicando la entrada y el resultado esperado de cada uno.

Resolver
Practica★☆☆
La documentación acompaña al programa. Explique qué dos cosas debería explicar como mínimo (qué hace el programa y cómo se usa) y por qué un programa sin documentar…

La documentación acompaña al programa. Explique qué dos cosas debería explicar como mínimo (qué hace el programa y cómo se usa) y por qué un programa sin documentar «envejece» mal cuando trabaja un equipo.

Resolver
Practica★☆☆
Distinga entre un error que aparece al compilar (el programa ni siquiera arranca) y un error que aparece en ejecución (arranca pero falla con ciertos datos), con un…

Distinga entre un error que aparece al compilar (el programa ni siquiera arranca) y un error que aparece en ejecución (arranca pero falla con ciertos datos), con un ejemplo de cada tipo.

Resolver
Practica★★☆
Explique la diferencia entre un error de sintaxis y un error de lógica, con un ejemplo de cada uno en un programa que calcula el promedio de tres notas. ¿Cuál de los dos…

Explique la diferencia entre un error de sintaxis y un error de lógica, con un ejemplo de cada uno en un programa que calcula el promedio de tres notas. ¿Cuál de los dos tipos impide ejecutar el programa y cuál deja ejecutarlo pero da resultados incorrectos?

Resolver
Practica★★☆
Un programa que divide dos números funciona bien en casi todas las pruebas, pero falla cuando el divisor es 0. Explique qué son los valores límite o casos especiales en…

Un programa que divide dos números funciona bien en casi todas las pruebas, pero falla cuando el divisor es 0. Explique qué son los valores límite o casos especiales en las pruebas, por qué hay que probarlos siempre y cite otros dos valores con los que probaría este programa.

Resolver
Practica★★☆
Explique qué es la modularización de un programa (dividirlo en funciones o módulos) y analice dos ventajas que aporta cuando el desarrollo lo hace un equipo de varias…

Explique qué es la modularización de un programa (dividirlo en funciones o módulos) y analice dos ventajas que aporta cuando el desarrollo lo hace un equipo de varias personas: piense en el reparto del trabajo, en las pruebas y en la localización de errores.

Resolver
Practica★★☆
Un bucle de un programa no se detiene nunca. Explique dónde colocaría mensajes de escritura temporales para diagnosticarlo (dentro del bucle, mostrando la variable de…

Un bucle de un programa no se detiene nunca. Explique dónde colocaría mensajes de escritura temporales para diagnosticarlo (dentro del bucle, mostrando la variable de control en cada vuelta) y qué observaría en esos mensajes para encontrar la causa.

Resolver
Practica★★☆
Para probar un programa que aplica un descuento a personas de 65 años o más, defina tres casos de prueba: uno con un valor normal, uno con el valor límite exacto y uno…

Para probar un programa que aplica un descuento a personas de 65 años o más, defina tres casos de prueba: uno con un valor normal, uno con el valor límite exacto y uno con un valor erróneo (edad negativa o imposible), con el resultado esperado de cada uno. Justifique sus elecciones.

Resolver
Practica★★☆
Explique qué es refactorizar (mejorar el código sin cambiar lo que hace) y describa dos refactorizaciones típicas (renombrar variables con nombres claros, extraer una…

Explique qué es refactorizar (mejorar el código sin cambiar lo que hace) y describa dos refactorizaciones típicas (renombrar variables con nombres claros, extraer una función a partir de código repetido), con un ejemplo de cada una.

Resolver
Practica★★☆
Un fragmento de código usa las variables x, y2 y zzz para guardar el precio, el IVA y el total. Reescriba esos nombres de forma significativa y explique por qué la…

Un fragmento de código usa las variables x, y2 y zzz para guardar el precio, el IVA y el total. Reescriba esos nombres de forma significativa y explique por qué la elección de nombres es una herramienta contra los errores (el código se autodocumenta).

Resolver
Practica★★☆
Dos personas de un equipo editan a la vez el mismo archivo del proyecto y, al unir los cambios, aparece un conflicto. Explique qué es un conflicto de fusión, cómo se…

Dos personas de un equipo editan a la vez el mismo archivo del proyecto y, al unir los cambios, aparece un conflicto. Explique qué es un conflicto de fusión, cómo se resuelve (revisar ambas versiones y decidir) y qué dos hábitos de trabajo en equipo lo previenen (repartir el trabajo por módulos, integrar los cambios a menudo).

Resolver
Practica★★★
En el sistema de cobro de una cooperativa escolar se ha detectado que, al emitir la factura mensual, el total a pagar de algunos socios es erróneo. Usted dispone de los…

En el sistema de cobro de una cooperativa escolar se ha detectado que, al emitir la factura mensual, el total a pagar de algunos socios es erróneo. Usted dispone de los siguientes registros del sistema:

  • Socio 101: 2 compras de 15,00 colones -> Total cobrado: 30,00 colones (esperado: 30,00 colones).

  • Socio 102: 1 compra de 50,00 colones con descuento promocional del 10 % (5,00 colones) y recargo por gastos de gestión de 3,00 colones -> Total cobrado: 47,50 colones (esperado: 48,00 colones).

  • Socio 103: 1 compra de 20,00 colones y devolución de 1 artículo de 5,00 colones (-5,00 colones) -> Total cobrado: 25,00 colones (esperado: 15,00 colones).

  • Formule una hipótesis justificada sobre el fallo lógico o de orden de operaciones que explica el error en el Socio 102 y en el Socio 103.

  • Diseñe la estrategia de depuración para confirmar sus hipótesis: indique qué datos de prueba mínimos introduciría para aislar el fallo, en qué puntos del flujo situaría puntos de interrupción (breakpoints) y qué variables concretas debería inspeccionar paso a paso.

Resolver
Practica★★★
Un compañero de equipo le muestra la siguiente función en C++ para calcular el precio final con IVA y aplicar un descuento si el cliente es socio, asegurando: «Si…

Un compañero de equipo le muestra la siguiente función en C++ para calcular el precio final con IVA y aplicar un descuento si el cliente es socio, asegurando: «Si compila sin errores ni advertencias, es imposible que falle en ejecución; no hace falta probarla»:

float calcularPrecioFinal(float base, bool esSocio) {

    float total = base;

    if (esSocio = true) {

        total = total * 0.90f;

    }

    total = total * 1.21f;

    return total;

}
  1. Prediga razonadamente la salida de la función para un cliente no socio (esSocio = false) con una base de 100,00 colones. ¿Coincide con el comportamiento esperado? Explique por qué el compilador no lo rechaza como error.

  2. Justifique, a partir de este ejemplo, la diferencia entre lo que garantiza la verificación sintáctica del compilador y lo que demuestran las pruebas dinámicas de software.

  3. Proponga la corrección del código y escriba un caso de prueba concreto que evidencie el fallo si la corrección no estuviera aplicada.

Resolver
Practica★★★
Diseñe un plan de pruebas para un programa que pide dos números y muestra su división: haga una tabla con al menos seis casos de prueba (pares de valores de entrada,…

Diseñe un plan de pruebas para un programa que pide dos números y muestra su división: haga una tabla con al menos seis casos de prueba (pares de valores de entrada, incluyendo valores normales, límite y erróneos), el resultado esperado de cada uno y qué debería hacer el programa si la entrada no es válida. Justifique la elección de cada caso.

Resolver
Practica★★★
La intranet del cole implementa un módulo de autenticación con los siguientes requisitos: Nombre de usuario: de 4 a 12 caracteres alfanuméricos, insensible a…

La intranet del cole implementa un módulo de autenticación con los siguientes requisitos:

  • Nombre de usuario: de 4 a 12 caracteres alfanuméricos, insensible a mayúsculas/minúsculas.

  • Contraseña: entre 8 y 16 caracteres, sensible a mayúsculas/minúsculas, con al menos un dígito y un carácter especial.

  • Seguridad: bloqueo temporal de la cuenta durante 15 minutos tras tres intentos fallidos consecutivos.

Diseñe un plan de pruebas riguroso mediante una tabla con al menos seis casos de prueba diseñados por usted. Para cada caso debe especificar: identificador, valores de entrada (usuario y contraseña), estado previo del sistema, resultado esperado y qué riesgo específico de lógica, frontera o seguridad está validando.

Resolver
Practica★★★
Un programador sostiene que «una función de una sola línea no necesita pruebas porque es autoevidente» y presenta esta función escrita en C++: 1. Prediga la salida de la…

Un programador sostiene que «una función de una sola línea no necesita pruebas porque es autoevidente» y presenta esta función escrita en C++:

bool esImpar(int n) {

    return (n % 2 == 1);

}
  1. Prediga la salida de la función para n = 7, n = 0 y n = -7. Explique técnicamente por qué se produce un resultado inesperado en uno de ellos, basándose en cómo implementa el operador módulo (%) los operandos negativos en este lenguaje.

  2. Corrija la expresión para que la función sea matemáticamente correcta con cualquier número entero.

  3. Apoyándose en este caso, rebata con dos argumentos técnicos la idea de prescindir de pruebas unitarias en algoritmos breves o aparentemente triviales.

Resolver
Practica★★★
Reto del tema. Como analista júnior de software, va a diseñar un script en Python (puede usar un entorno web gratuito como Replit) que evalúe el costo energético diario…

Reto del tema. Como analista júnior de software, va a diseñar un script en Python (puede usar un entorno web gratuito como Replit) que evalúe el costo energético diario para promover el ahorro doméstico.

Siga estas tres fases:

  1. Captura de datos: Ingrese al sitio web del Instituto Costarricense de Electricidad (ICE) y registre el precio oficial ($\text{₡}\ /\text{kWh}$) de $6$ franjas horarias distintas del día de hoy.

  2. Diseño y codificación: Aplique el proceso de desarrollo de software. Esboce primero el algoritmo y trasládelo a Python. El programa debe almacenar los datos en una lista, usar un bucle iterativo para calcular el costo medio diario y emplear condicionales (if-else) que emitan alertas cuando el precio supere el umbral de $0,18$ colones/kWh.

  3. Depuración y producto final: Realice pruebas con valores límite y corrija fallos de ejecución. Redacte un informe breve que incluya el código limpio y comentado, una captura del resultado en la consola y dos propuestas de consumo eficiente para su hogar basadas en sus datos.

Se valorará:

  • Rigor en el proceso de desarrollo (diseño algorítmico previo, codificación textual y depuración).

  • Uso correcto de estructuras de control (secuenciales, condicionales e iterativas) y sintaxis del lenguaje.

  • Precisión en el tratamiento de datos reales y viabilidad de las conclusiones energéticas.

Resolver