Saltar al contenido

Desarrollo de software

A-Level Ciencias de la Computación · Tema 12

Entrenar
Lección de video para este tema Abrir la página de video
19:27

Ciclo de vida del desarrollo de programas

Un pequeño error, si escapa hasta el lanzamiento, puede costar una fortuna repararlo — mucho más que atraparlo temprano. Por eso no solo empezamos a escribir código. Seguimos…

Narración en inglés · Subtítulos en inglés + 中文 quemados en pantalla

12.1

Ciclo de vida del desarrollo

Syllabus
Los candidatos deben ser capaces de: Notas y orientación
Demostrar comprensión del propósito de un ciclo de vida del desarrollo
Demostrar comprensión de la necesidad de diferentes ciclos de vida del desarrollo según el programa que se esté desarrollando Incluyendo: en cascada, iterativo, desarrollo rápido de aplicaciones (RAD)
Describir los principios, beneficios y desventajas de cada tipo de ciclo de vida
Demostrar comprensión de las etapas de análisis, diseño, programación, pruebas y mantenimiento en el ciclo de vida del desarrollo de programas

Fuente: Plan de estudios Cambridge International

Un ciclo de vida del desarrollo 开发生命周期 es el conjunto de etapas desde la idea hasta un software terminado y mantenido. Existe para planificar, gestionar y controlar un proyecto: construir el producto correcto, a tiempo y con buena calidad.

A software team collaborating around a table
El software lo construyen equipos que siguen un ciclo de vida del desarrollo para mantenerse coordinados
Un diagrama de flujo con terminadores, cajas de proceso y diamantes de decisión
Un diagrama de flujo planifica la lógica de un programa durante la etapa de diseño del ciclo

Por qué se necesita un ciclo de vida

La lista del examinador sobre "el propósito de un ciclo de vida del desarrollo": divide un proyecto grande en etapas que pueden planificarse y gestionarse; asegura que los requisitos 需求 se identifiquen y aprueben antes de comenzar el diseño y la codificación; incluye pruebas y documentación en lugar de dejarlas para el final; permite al equipo seguir el progreso frente a hitos y gestionar riesgos; y ofrece al cliente puntos definidos para revisar el trabajo. Sin uno, un equipo programa primero y descubre tarde que ha construido lo incorrecto.

Por qué existen diferentes tipos

Ningún único ciclo de vida sirve para todos los proyectos, por lo que hay varios ciclos de vida del desarrollo. La elección depende del tamaño y la complejidad, qué tan claros estén los requisitos 需求 al inicio, cuánto cambio se espera, el nivel de riesgo, el equipo y el plazo.

Modelos comunes

  • Waterfall 瀑布模型 — una secuencia lineal (Análisis → Diseño → Codificación → Pruebas → Mantenimiento), donde cada etapa se termina antes de comenzar la siguiente. Claro y bien documentado; bueno para requisitos estables, pero poco apto para manejar cambios a mitad del proyecto, y el cliente no ve nada funcionando hasta el final.
  • Modelo iterativo 迭代模型 — pasadas repetidas, cada una produciendo una versión parcial que se revisa y refina. Detecta problemas temprano; bueno cuando los requisitos se descubren con el tiempo, pero más difícil de estimar.
  • Desarrollo Rápido de Aplicaciones 快速应用开发 (RAD) — uso intensivo de un prototipo 原型 y retroalimentación del usuario. Entrega muy rápida de la primera versión; bueno para requisitos cambiantes, pero depende de la disponibilidad del usuario y se adapta mejor a sistemas pequeños.
  • Agile 敏捷 — iteraciones cortas ("sprints"), colaboración constante y pruebas. Flexible y adaptable, pero requiere un cliente comprometido y un equipo capacitado.
Cinco cajas (Análisis, Diseño, Codificación, Pruebas, Mantenimiento) escalonadas hacia abajo, cada una llevando a la siguiente
El modelo Waterfall: cada etapa se termina antes de que comience la siguiente
Un ciclo Diseñar-Construir-Probar-Revisar con un bucle de repetición de vuelta a Diseñar, y barras de versión creciendo más altas cada pasada hasta completar
El modelo iterativo: pasadas repetidas refinan el programa
Tres partes construidas en paralelo como prototipos que refinan con retroalimentación del usuario, luego se combinan en el sistema final
Desarrollo Rápido de Aplicaciones: los equipos trabajan en partes en paralelo

Principios, beneficios y desventajas — según enumera la guía de calificación.

Modelo Principio Beneficios Desventajas
waterfall las etapas se ejecutan en un orden fijo, cada una completada y aprobada antes de que comience la siguiente; volver atrás significa reiniciar la secuencia fácil de gestionar; cada etapa está totalmente documentada; los requisitos se fijan pronto, por lo que los costos y fechas se pueden estimar inflexible una vez terminada una etapa; no hay software funcional hasta tarde; un error en el análisis es costoso de corregir después; el cliente no puede ver el progreso
iterative se construye primero una pequeña versión funcional, luego se mejora repetidamente mediante versiones adicionales hasta estar completo software funcional pronto y a menudo; problemas encontrados en versiones tempranas; la retroalimentación del cliente moldea cada versión; los requisitos pueden cambiar difícil estimar el tiempo total y costo; las pruebas repetidas requieren esfuerzo; necesita que el cliente esté disponible; puede desviarse si las versiones no están planificadas
RAD prototipos de partes del sistema se construyen rápidamente y se refinan con el usuario hasta ser aceptados, a menudo en paralelo por varios equipos entrega muy rápida de una primera versión; el usuario está involucrado todo el tiempo, por lo que el producto se ajusta a sus necesidades; los cambios son fáciles de absorber necesita desarrolladores capacitados y usuarios comprometidos; la documentación es débil; menos adecuado para sistemas grandes o críticos para la seguridad

Ejemplo resuelto. Una empresa debe ser la primera en lanzar un sitio web para una nueva consola de videojuegos, y el diseño cambiará a medida que se anuncien las características de la consola. Nombre el ciclo de vida más adecuado y justifíquelo.

RAD. Se puede construir y mostrar un prototipo del sitio a los usuarios en cuestión de días, y refinarlo a medida que cambian los requisitos; el sitio es pequeño suficiente para un enfoque impulsado por prototipos, y la velocidad de entrega es el requisito principal. Waterfall fijaría los requisitos antes de construir cualquier página y no entregaría nada hasta el final.

Las etapas estándar

Cada etapa tiene un propósito, una salida y actividades típicas —una pregunta de "describir la … etapa" busca dos o tres de estos elementos.

  • análisis — averiguar qué debe hacer el programa. Actividades: entrevistas, cuestionarios y observación del sistema actual; un estudio de viabilidad; acordar la especificación de requisitos, contra la cual se verifica cada etapa posterior.
  • diseño — decidir cómo lo hará. Salidas: el diagrama de estructura (módulos y parámetros), diagramas de flujo o pseudocódigo para cada módulo, tablas de identificadores y estructuras de datos, diseños de pantallas y archivos, y el plan de pruebas escrito ahora, desde la especificación, antes de que exista código.
  • codificación (implementación 实现) — escribir el programa en un lenguaje de alto nivel, módulo por módulo, siguiendo el diseño; cada módulo se prueba a medida que se escribe.
  • pruebas — ejecutar el programa según el plan de pruebas (datos normales, anormales, extremos y de límite) y corregir los errores encontrados; le siguen pruebas de integración, alpha, beta y aceptación.
  • mantenimiento 维护 — después del lanzamiento, corregir fallos, adaptar el programa a nuevo hardware, software o leyes, y mejorarlo (ver abajo).

Ejemplo resuelto. Complete el diagrama Waterfall Análisis → ? → ? → ? → Mantenimiento y describa qué sucede en la etapa de diseño.

Las etapas faltantes son Diseño, Codificación, Pruebas. En la etapa de diseño, los requisitos se convierten en un plan para el programa: el problema se descompone en módulos (un diagrama de estructura), el algoritmo de cada módulo se escribe como pseudocódigo o diagrama de flujo, se eligen las estructuras de datos e identificadores, se diseñan las pantallas y archivos, y se redacta el plan de pruebas desde la especificación.

Explorar

El ciclo de vida del desarrollo de programas

Recorra las etapas por las que pasa cada proyecto. Obtener correctamente los requisitos en el análisis es lo más importante: un error detectado en las pruebas es mucho más costoso de corregir que uno detectado temprano.

Explorar

Laboratorio de procesos de software

Clasificar ejemplos de desarrollo según la etapa o herramienta a la que pertenecen.

Vocabulario Entrenar
Inglés Chino Pinyin
development life cycle/dɪˈveləpmənt laɪf ˈsaɪkl/ 开发生命周期 kāi fā shēng mìng zhōu qī
requirements/rɪˈkwaɪəmənts/ 需求 xū qiú
waterfall/ˈwɔːtəfɔːl/ 瀑布模型 pù bù mó xíng
iterative model/ˈɪtərətɪv ˈmɒdl/ 迭代模型 dié dài mó xíng
Rapid Application Development/ˈræpɪd ˌæplɪˈkeɪʃn dɪˈveləpmənt/ 快速应用开发 kuài sù yìng yòng kāi fā
prototype/ˈprəʊtəʊtaɪp/ 原型 yuán xíng
Agile/ˈædʒaɪl/ 敏捷 mǐn jié
12.2

Herramientas de diseño de programas

Syllabus
Los candidatos deben ser capaces de: Notas y orientación
Utilizar un diagrama de estructura para descomponer un problema en subtareas y expresar los parámetros que se transmiten entre los diversos módulos/procedimientos/funciones que forman parte del diseño del algoritmo Describir el propósito de un diagrama de estructura. Construir un diagrama de estructura para un problema dado. Derivar pseudocódigo equivalente a partir de un diagrama de estructura.
Demostrar comprensión del propósito de los diagramas de transición de estado para documentar un algoritmo

Fuente: Plan de estudios Cambridge International

Diagrama de estructura

Un diagrama de estructura 结构图 muestra la descomposición jerárquica 分解 de un programa en módulos (subrutinas 子程序) y los parámetros 参数 que se transmiten entre ellos. Cada módulo es un rectángulo; líneas conectan al llamador (arriba) con el llamado (abajo); pequeñas flechas muestran los datos bajando y los resultados subiendo. El diseño luego puede convertirse en pseudocódigo 伪代码 equivalente.

                CalculatePay
            /        |         \
       GetEmployee  CalculateBonus  CalculateTax
       Returns:     Takes: sales    Takes: gross
       employeeID   Returns: bonus  Returns: tax

Es una herramienta de la etapa de diseño, y puedes leer las firmas de procedimiento directamente de él.

Un gráfico estructural con Convertir temperatura arriba y los módulos INPUT, Convertir a Celsius y OUTPUT abajo, con parámetros de temperatura en los enlaces
Un diagrama de estructura: módulos con los parámetros transmitidos entre ellos

Los símbolos que el examinador pide. Una caja es un módulo; una línea enlaza a un solicitante (arriba) con los módulos que llama (abajo), leyéndose de izquierda a derecha en el orden en que se invocan. Una pequeña flecha con un círculo abierto en su cola es un par de datos: un parámetro pasado hacia abajo dentro de un módulo o un valor devuelto hacia arriba; una flecha con un círculo relleno es un par de control, una bandera (generalmente BOOLEAN) que informa al solicitante de lo ocurrido. Un rombo en una bifurcación indica selección: solo uno de los módulos debajo es llamado, dependiendo de una condición. Una flecha curva que barre sobre las líneas significa iteración: los módulos bajo ella se llaman repetidamente en un bucle.

Un gráfico estructural mostrando cada símbolo: cajas de módulos, líneas de llamada, un acople de datos de círculo abierto transportando ID de artículo hacia abajo, un acople de control de círculo lleno devolviendo una bandera de stock disponible hacia arriba, un diamante seleccionando entre Imprimir factura y Rechazar pedido, y una flecha curva marcando los módulos repetidos para cada pedido
Los símbolos del diagrama de estructura: pares de datos y control, un rombo de selección y una flecha de iteración

Ejemplo resuelto. Se definen cuatro módulos como PROCEDURE Main(), PROCEDURE ReadData(BYREF Count : INTEGER), FUNCTION IsValid(Value : INTEGER) RETURNS BOOLEAN y PROCEDURE Report(Total : INTEGER, Count : INTEGER). Main llama a ReadData, luego llama a IsValid una vez por cada valor leído, y finalmente llama a Report. Describa el diagrama de estructura.

Main en la parte superior; ReadData, IsValid y Report en una fila debajo, de izquierda a derecha según el orden de llamada. En la línea de ReadData hay un par de datos ascendente Count (un parámetro BYREF regresa). En la línea de IsValid hay un par de datos descendente Value y un par de control ascendente (el resultado BOOLEAN), con una flecha curva de iteración sobre esa línea porque se llama para cada valor. En la línea de Report hay dos pares de datos descendentes, Total y Count. Leyendo en sentido inverso, una función es cualquier módulo que devuelve un valor: su cabecera necesita RETURNS y el tipo devuelto.

Diagrama de transición de estados

Un diagrama de transición de estados 状态转换图 muestra los estados 状态 en los que puede encontrarse un sistema y los eventos que lo mueven entre ellos — útil para máquinas expendedoras, semáforos e interfaces de usuario. Los diagramas de transición de estados se utilizan para documentar el comportamiento de un algoritmo o sistema. Cada estado es un círculo; cada transición es una flecha etiquetada con el evento.

   coin inserted               item selected
[Idle] --------------→ [Awaiting selection] ----------→ [Dispensing]

Facilita detectar transiciones faltantes ("¿qué pasa si se introduce una segunda moneda mientras se espera la selección?").

Un diagrama de estado: Bloqueado a Esperando segundo dígito a Esperando tercer dígito a Desbloqueado, con transiciones de dígito correcto y dígito incorrecto
Un diagrama de transición de estados para una cerradura con código 259

Lectura y dibujo. Cada transición está etiquetada como entrada | salida (o condición | acción): qué ocurrió, seguido de lo que hace el sistema al cambiar de estado. Una pregunta presenta una tabla de estado actual, entrada, salida, próximo estado y pide el diagrama, o viceversa: cada fila de la tabla corresponde exactamente a una flecha. Verifique que cada estado tenga una flecha saliente para cada entrada posible, incluidas las que dejan el estado sin cambios (una flecha que vuelve sobre sí mismo).

Ejemplo resuelto. Un controlador de bomba tiene estados bomba apagada y bomba encendida. En bomba apagada, la entrada nivel bajo detectado produce la salida activar bomba y pasa a bomba encendida; en bomba encendida, nivel normal detectado produce desactivar bomba y pasa a bomba apagada. Cualquier otra entrada deja el estado sin cambios. Dibuje la tabla.

Estado actual Entrada Salida Próximo estado
bomba apagada nivel bajo detectado activar bomba bomba encendida
bomba apagada nivel normal detectado — bomba apagada
bomba encendida nivel normal detectado desactivar bomba bomba apagada
bomba encendida nivel bajo detectado — bomba encendida

Las dos filas de "sin cambio" se convierten en flechas de bucle en el diagrama; omitirlas resulta en pérdida de puntos por incompletitud.

Explorar

Laboratorio de procesos de software

Clasificar ejemplos de desarrollo según la etapa o herramienta a la que pertenecen.

Vocabulario Entrenar
Inglés Chino Pinyin
structure chart/ˈstrʌktʃə tʃɑːt/ 结构图 jié gòu tú
parameters/pəˈræmɪtəz/ 参数 cān shù
pseudocode/ˈsuːdəʊkəʊd/ 伪代码 wěi dài mǎ
test plan/test plæn/ 测试计划 cè shì jì huà
implementation/ˌɪmplɪmənˈteɪʃn/ 实现 shí xiàn
boundary data/ˈbaʊndəri ˈdeɪtə/ 边界数据 biān jiè shù jù
acceptance testing/əkˈseptəns ˈtestɪŋ/ 验收测试 yàn shōu cè shì
hierarchical decomposition/haɪəˈrɑːkɪkl ˌdiːkɒmpəˈzɪʃn/ 分解 fēn jiě
decomposition/ˌdiːkɒmpəˈzɪʃn/ 分解 fēn jiě
subroutines/ˈsʌbruːtiːnz/ 子程序 zi chéng xù
state-transition diagram/steɪt trænˈsɪʃn ˈdaɪəɡræm/ 状态转换图 zhuàng tài zhuǎn huàn tú
states/steɪts/ 状态 zhuàng tài
syntax error/ˈsɪntæks ˈerə/ 语法错误 yǔ fǎ cuò wù
run-time error/rʌn taɪm ˈerə/ 运行时错误 yùn xíng shí cuò wù
logic error/ˈlɒdʒɪk ˈerə/ 逻辑错误 luó jí cuò wù
dry run/draɪ rʌn/ 手工跟踪 shǒu gōng gēn zōng
trace table/treɪs ˈteɪbl/ 跟踪表 gēn zōng biǎo
12.3

Errores

Syllabus
Los candidatos deben ser capaces de: Notas y orientación
Demostrar comprensión de las formas de detectar y evitar fallos en los programas
Localizar e identificar los diferentes tipos de errores • errores de sintaxis • errores de lógica • errores en tiempo de ejecución
Corregir los errores identificados
Demostrar comprensión de los métodos de prueba disponibles y seleccionar datos apropiados para un método dado Incluyendo prueba seca, recorrido, caja blanca, caja negra, integración, alfa, beta, aceptación, stub
Demostrar comprensión de la necesidad de una estrategia y un plan de prueba, así como de su probable contenido
Elegir datos de prueba adecuados para un plan de prueba Incluyendo normales, anormales y extremos/borde
Demostrar comprensión de la necesidad del mantenimiento continuo de un sistema y de las diferencias entre cada tipo de mantenimiento Incluyendo perfectivo, adaptativo, correctivo
Analizar un programa existente y realizar modificaciones para mejorar su funcionalidad

Fuente: Plan de estudios Cambridge International

  • error de sintaxis 语法错误 — rompe la gramática del lenguaje (corchete faltante, palabra clave mal escrita). Se captura durante la traducción; el programa no ejecutará hasta que se corrija.
  • error de tiempo de ejecución 运行时错误 — ocurre durante la ejecución (división por cero, archivo no encontrado, índice de matriz fuera de rango). El programa se bloquea o genera una excepción; se corrige añadiendo comprobaciones.
  • error lógico 逻辑错误 — el programa se ejecuta pero da resultados incorrectos (usar + en lugar de -, un bucle de error de uno, condiciones en orden incorrecto). Es el más difícil de encontrar; la única señal es la salida errónea, así que use pruebas cuidadosas y trazado.
Una tubería desde escribir código a traducir a ejecutar a salida: un error de sintaxis lo detiene en la traducción, un error en tiempo de ejecución falla durante la ejecución, y un error lógico se ejecuta bien pero da la salida incorrecta
Cuándo aparece cada error: sintaxis en la traducción, tiempo de ejecución durante la ejecución, lógica en la salida

Exposición y prevención de fallos. Los fallos son expuestos mediante pruebas contra un plan de prueba, mediante una ejecución en seco o tabla de trazado, mediante una revisión con colegas y mediante el depurador del IDE (puntos de interrupción, paso a paso, observación de variables). Se previenen diseñando antes de programar (diagrama de estructura, pseudocódigo), mediante código modular con identificadores y comentarios significativos, mediante la validación de todas las entradas, manejando excepciones en lugar de dejar que un error de tiempo de ejecución bloquee el programa, y mediante las comprobaciones de sintaxis dinámica del IDE mientras escribe.

Ejemplo resuelto. Indique el tipo de error en cada caso y cómo se manifiesta. (a) Result <- STR_TO_NUM(x) / STR_TO_NUM(y) se ejecuta con y = "0". (b) La misma línea se ejecuta con x = "12a". (c) Un bucle escrito como FOR i <- 1 TO 9 procesa una matriz de diez elementos. (d) A OUTPUT "Total: " Total le falta una coma.

(a) Error de tiempo de ejecución — división por cero; el programa se bloquea cuando se ejecuta esta línea con esos datos. (b) Error de tiempo de ejecución — la cadena no puede convertirse en número. (c) Error lógico — el programa se ejecuta pero el décimo elemento nunca se procesa, por lo que la salida es incorrecta. (d) Error de sintaxis — la instrucción viola las reglas del lenguaje y es reportada por el traductor antes de ejecutar el programa.

Ejemplo resuelto. Corrija los errores en este pseudocódigo, que debería mostrar el promedio de diez calificaciones.

Total <- 0
FOR i <- 1 TO 10
    INPUT Mark
    Total <- Total + Mark
NEXT i
Average <- Total / 9
OUTPUT "Average" Average

La división debe ser por 10, no por 9 (error lógico); la línea de salida necesita una coma o un & entre la cadena y el valor (error de sintaxis); y Average nunca se declara como REAL (error de sintaxis o tiempo de ejecución, según el lenguaje). Indique qué línea y cuál es la línea corregida: Average <- Total / 10.

12.3

Métodos de prueba

  • ejecución en seco 手工跟踪 — tracee el código en papel, escribiendo el valor de cada variable en una tabla.
  • revisión 走查 — una revisión en equipo del código.
  • prueba de caja blanca 白盒测试 — diseñada a partir de la estructura interna del código, cubriendo cada instrucción, rama y bucle.
  • prueba de caja negra 黑盒测试 — diseñada únicamente a partir de la especificación: introduzca entradas y compruebe salidas.
  • prueba de integración 集成测试 — combine módulos y pruebe las interfaces entre ellos.
  • prueba alfa α测试 — realizada por los desarrolladores/interna antes del lanzamiento; prueba beta β测试 — realizada por un grupo limitado de usuarios reales en su propio entorno.
  • prueba de aceptación 验收测试 — realizada por el cliente para decidir si el producto cumple su propósito.
  • stub 桩 — un marcador de posición para un módulo que aún no existe, para poder probar la estructura de forma descendente.
Las pruebas de caja negra funcionan desde la especificación; las de caja blanca prueban las rutas internas del código
Las pruebas de caja negra verifican la especificación; las de caja blanca verifican los caminos del código

¿Qué método, cuándo. Una prueba en seco y un recorrido no requieren computadora — la prueba en seco es cuando tú trazas el algoritmo con una tabla de trazado; el recorrido es una reunión en la que el autor explica el código línea por línea y los colegas buscan errores, por lo que también difunde el conocimiento del código entre el equipo y lo verifica contra el diseño. Las pruebas de caja blanca son escritas por alguien que puede ver el código y tiene como objetivo ejecutar todos los caminos; las pruebas de caja negra se escriben a partir de la especificación y verifican solo las entradas contra las salidas esperadas, por lo que un usuario o un probador separado pueden realizarlas. La prueba de integración sigue a la prueba de módulos: los módulos que pasan individualmente aún pueden fallar cuando los datos pasados entre ellos tienen el tipo incorrecto o están en el orden equivocado. La prueba alfa es interna; la prueba beta entrega un candidato a versión a una muestra de usuarios reales, quienes reportan errores desde su uso real; la prueba de aceptación es cuando el cliente verifica el producto terminado contra los requisitos antes de pagar por él. Un stub permite iniciar las pruebas de arriba hacia abajo antes de que exista cada módulo.

Prueba de stubs: el programa principal bajo prueba llama a un Módulo A terminado y a un stub que representa al Módulo B no escrito, que tiene la cabecera real pero simplemente devuelve un valor fijo
Un stub sustituye a un módulo que aún no está escrito, para que los módulos superiores puedan probarse ahora

Ejemplo resuelto. Después de que el programa pasó sus pruebas internas, se le entregó a un grupo de usuarios para que lo probaran antes del lanzamiento. Nombra este tipo de prueba y establece qué sucede después.

Prueba beta — usuarios reales en su propio entorno, reportando errores que los desarrolladores no encontraron. Los errores se corrigen, luego el cliente lleva a cabo la prueba de aceptación contra los requisitos y se lanza el programa; los errores encontrados en uso en vivo son gestionados entonces mediante mantenimiento correctivo.

Ejemplo resuelto. Da tres beneficios de probar un programa mediante un recorrido.

Los errores son encontrados por personas que no escribieron el código y por lo tanto lo leen sin suposiciones; la lógica se verifica contra el diseño y la especificación, no solo contra los datos de prueba; varias personas aprenden cómo funciona el código, lo que ayuda en el mantenimiento posterior; y no se necesitan datos de prueba ni una computadora funcional, por lo que puede realizarse temprano.

Vocabulario Entrenar
Inglés Chino Pinyin
stub/stʌb/ 桩 zhuāng
corrective maintenance/kəˈrektɪv ˈmeɪntənəns/ 纠正性维护 jiū zhèng xìng wéi hù
test strategy/test ˈstrætədʒi/ 测试策略 cè shì cè lüè
normal data/ˈnɔːml ˈdeɪtə/ 正常数据 zhèng cháng shù jù
abnormal data/əbˈnɔːml ˈdeɪtə/ 异常数据 yì cháng shù jù
extreme data/ekˈstriːm ˈdeɪtə/ 极端数据 jí duān shù jù
perfective maintenance/pəˈfektɪv ˈmeɪntənəns/ 完善性维护 wán shàn xìng wéi hù
adaptive maintenance/əˈdæptɪv ˈmeɪntənəns/ 适应性维护 shì yìng xìng wéi hù
regression testing/rɪˈɡreʃn ˈtestɪŋ/ 回归测试 huí guī cè shì
12.3

Estrategia y plan de prueba

Una estrategia de prueba es el enfoque de alto nivel — qué tipos de pruebas, quién las realiza, cuándo, y los criterios para avanzar. Un plan de prueba es la lista detallada de pruebas — cada una con datos de entrada, salida esperada y una columna para la salida real.

Qué contiene cada uno. Una estrategia de prueba indica qué métodos de prueba se usarán en qué etapa (pruebas de módulo por el programador, luego integración, alpha, beta, aceptación), quién es responsable de cada una, qué datos de prueba se requieren y los criterios para pasar a la siguiente etapa. Un plan de prueba enumera las pruebas individuales: para cada una, el módulo o función bajo prueba, los datos de entrada, la razón por la que se eligió el dato (normal, anormal, extremo, límite), el resultado esperado, un espacio para el resultado real y qué hacer si difieren. El plan se escribe en la etapa de diseño, basado en la especificación, para que pruebe lo que el programa debería hacer en lugar de lo que simplemente hace.

Elegir datos de prueba

Para cada campo o condición, incluye tres clases:

  • datos normales — valores típicos dentro del rango válido (para calificaciones 0–100: 50, 75).
  • datos anormales — valores que deberían ser rechazados (-10, 200, "abc").
  • datos extremos — los valores más grandes y más pequeños que aún son aceptados (0 y 100).
  • datos límite — valores en los bordes, donde se esconden los errores de "fuera de uno" (cada valor extremo aceptado y el valor rechazado justo fuera de él: 0/-1, 100/101).
Una recta numérica para un campo de marca 0 a 100: valores normales 50 y 75 dentro, los extremos 0 y 100 en los límites aceptados, y valores anormales -1, 101, -10 y 200 rechazados fuera
Datos de prueba para un campo de 0–100: normal adentro, extremos en los límites, anormal afuera

Ejemplo resuelto. Un campo acepta una calificación de examen de 0 a 100. Da datos de prueba de cada clase con su resultado esperado. Normal: 50 - aceptado, un valor típico dentro del rango. Anormal: -10, 200, "abc" - todos rechazados, al estar fuera del rango o tener el tipo de datos equivocado. Extremo: 0 y 100 - el valor más grande y el más pequeño que aún son aceptados. Límite: los pares que cruzan cada borde - -1 rechazado junto con 0 aceptado, y 100 aceptado junto con 101 rechazado. Cada valor debe llevar su resultado esperado, de lo contrario el plan de prueba no demuestra nada. Extremo y límite son el par más confundido frecuentemente: un valor extremo se sitúa dentro y es aceptado, mientras que una prueba límite siempre es un par a ambos lados del borde - que es exactamente donde se esconden los errores de "fuera de uno".

Ejemplo resuelto. Un componente pasa si su peso, medido al gramo más cercano, está dentro de 3 g del objetivo de 50 g, es decir, de 47 g a 53 g inclusive. Prepara las filas del plan de prueba para la verificación.

Datos de prueba Tipo Razón Resultado esperado
50 normal un valor típico bien dentro del rango aceptado
47, 53 extremo (límite) los valores más pequeños y más grandes que deben seguir siendo aceptados aceptado
46, 54 límite los valores justo fuera del rango, donde un error de "fuera de uno" los aceptaría rechazado
20, 90 anormal valores muy fuera del rango rechazado
"abc", −5 anormal el tipo equivocado, un peso negativo rechazado

Cada fila debe decir por qué se eligió el valor y qué debería ocurrir; una lista simple de números no obtiene puntos.

12.3

Mantenimiento

La mayor parte del costo de vida útil de un programa está en el mantenimiento. Tres clases:

Los tres tipos de mantenimiento: perfectivo, adaptativo y correctivo
Tres clases de mantenimiento: perfectivo, adaptativo y correctivo
  • mantenimiento perfectivo — mejorar el rendimiento o características aunque funcione correctamente (una consulta más rápida, una nueva opción).
  • mantenimiento adaptativo — mantenerlo funcionando en un entorno cambiante (un nuevo sistema operativo, una nueva API, un cambio legal).
  • mantenimiento correctivo — corregir errores encontrados en uso.

Un programa puede necesitar los tres durante toda su vida.

Por qué se necesita cada uno — las razones que lista la rúbrica de calificación. Correctivo: se reporta un fallo por un usuario después del lanzamiento, o se nota una salida incorrecta en circunstancias particulares que las pruebas no cubrieron. Adaptativo: se actualiza el sistema operativo, el hardware o el navegador; cambia una ley o regla corporativa (tasas impositivas, requisitos de protección de datos); el programa debe funcionar con un nuevo sistema externo o formato de archivo. Perfectivo: los usuarios piden funciones adicionales o una mejor interfaz; se hace el programa más rápido o reduce el uso de memoria; se limpia el código para facilitar cambios futuros.

Ejemplo resuelto. (a) Un programa lanzado produce un valor incorrecto bajo ciertas circunstancias. (b) Se reemplaza el hardware que ejecuta un programa. (c) Los clientes solicitan que el programa de fidelidad de la cafetería envíe un mensaje en el cumpleaños del cliente. Nombra el tipo de mantenimiento en cada caso.

(a) Correctivo — se está corrigiendo un fallo en el programa entregado. (b) Adaptativo — el programa se modifica para ejecutarse en su nuevo entorno. (c) Perfectivo — se añade una función a un programa que ya funciona.

Vocabulario Entrenar
Inglés Chino Pinyin
maintenance/ˈmeɪntənəns/ 维护 wéi hù
12.3

Modificar un programa existente

Cuando se pide agregar una función o corregir un error:

  1. Lee el código existente hasta que comprendas el algoritmo y el flujo de datos.
  2. Encuentra dónde va el cambio — en qué subrutina, en qué líneas.
  3. Haz el cambio lo más pequeño posible — no reescribas código que funcione.
  4. Actualiza las partes relacionadas — cada invocador de una lista de parámetros cambiada, cada rutina que use una estructura de datos modificada.
  5. Prueba el nuevo comportamiento y el antiguo (pruebas de regresión 回归测试 — verifica que no has roto nada).
  6. Documenta el cambio.

Comentarios claros, nombres significativos, subrutinas descompuestas y un diagrama de estructura hacen que un programa sea mucho más fácil de modificar — por eso importan las herramientas de diseño incluso después del primer lanzamiento.

Analizar un programa que no escribiste. Comienza con la tabla de identificadores y los encabezados de módulo: te dicen qué recibe y devuelve cada módulo antes de leer una sola línea de su cuerpo. Luego traza el algoritmo con una tabla de trazado para una entrada pequeña, tomando nota de dónde proviene cada valor de salida. Solo entonces decide dónde va la mejora — usualmente un nuevo módulo llamado desde el existente, para alterar el código funcional lo menos posible — y escribe el pseudocódigo para el cambio y los datos de prueba que lo demuestren.

12.3

Definiciones aceptadas por el examinador

Una pregunta de definición se califica según un texto fijo. Aprende estas definiciones exactamente, y da solo una respuesta.

Término Definición
ciclo de vida del desarrollo la secuencia de etapas, desde el análisis hasta el mantenimiento, seguidas para producir y dar soporte a un programa
modelo en cascada (waterfall) un ciclo de vida en el que las etapas se realizan en un orden fijo, cada una completada antes de que comience la siguiente
modelo iterativo un ciclo de vida en el que se produce una versión funcional y luego se refina repetidamente hasta que está completa
desarrollo rápido de aplicaciones (RAD) un ciclo de vida que construye prototipos rápidamente, refinándolos con la retroalimentación de los usuarios hasta que son aceptados
diagrama de estructura un diagrama que muestra cómo se descompone un programa en módulos, el orden en que se invocan y los parámetros que se pasan entre ellos
diagrama de transición de estado un diagrama que muestra los estados en los que puede estar un sistema y las entradas que lo hacen cambiar entre ellos
error de sintaxis un error en la forma en que está escrita una instrucción, por lo que viola las reglas del lenguaje y no puede ser traducido
error lógico un error en el algoritmo, por lo que el programa se ejecuta pero produce el resultado incorrecto
error en tiempo de ejecución un error que ocurre mientras el programa se ejecuta, como la división por cero, y lo detiene
ensayo en seco recorrer el algoritmo manualmente, registrando los valores de las variables en una tabla de trazado
revisión (walkthrough) una revisión en la que el autor pasa paso a paso por el código con colegas que buscan errores
stub (módulo simulador) un módulo marcador de posición con el encabezado correcto que devuelve un valor fijo, utilizado para que los módulos que lo invocan puedan probarse
plan de pruebas una lista de las pruebas a realizar, cada una con sus datos de prueba, el motivo de los datos y el resultado esperado
datos límite valores en cada borde del rango válido, tanto el último valor aceptado como el primer valor rechazado
mantenimiento correctivo / adaptativo / perfectivo corregir fallos encontrados en uso / cambiar el programa para adaptarse a un entorno modificado / mejorar un programa que ya funciona
Vocabulario Entrenar
Inglés Chino Pinyin
walkthrough/ˈwɔːkθruː/ 走查 zǒu chá
white-box testing/waɪt bɒks ˈtestɪŋ/ 白盒测试 bái hé cè shì
black-box testing/blæk bɒks ˈtestɪŋ/ 黑盒测试 hēi hé cè shì
integration testing/ˌɪntɪˈɡreɪʃn ˈtestɪŋ/ 集成测试 jí chéng cè shì
alpha testing/ˈælfə ˈtestɪŋ/ α测试 α cè shì
beta testing/ˈbiːtə ˈtestɪŋ/ β测试 β cè shì
12.3

Consejos para el examen

  • Compara los modelos de desarrollo (cascada, iterativo, RAD) por principio, beneficio, desventaja, y conoce las cinco etapas del ciclo de vida del desarrollo de programas y qué produce cada una.
  • Distingue los errores sintácticos, lógicos y en tiempo de ejecución por cuándo se manifiestan: durante la traducción, en la salida, durante la ejecución.
  • Elige datos de prueba de todo tipo — normales, anormales, extremos y límites — y proporciona el motivo y el resultado esperado para cada valor.
  • Distingue los tipos de mantenimiento (correctivo, adaptativo, perfectivo) por por qué se realiza el cambio.
  • En un diagrama de estructura, nombra cada símbolo: caja, línea de llamada, acople de datos, acople de control, diamante de selección, flecha de iteración. Al leer los encabezados de módulo de un diagrama, recuerda que una función tiene RETURNS.

Errores comunes

  • Describir una etapa del ciclo de vida solo por su nombre ("en la etapa de diseño se diseña el programa"). Di qué se produce: diagrama de estructura, pseudocódigo, plan de pruebas.
  • Lamar "error en tiempo de ejecución" a una salida incorrecta. Si el programa llega al final, es un error lógico.
  • Dar datos límite solo como los extremos. La calificación requiere los valores en ambos lados del borde.
  • Tratar las pruebas alpha y beta como si fueran lo mismo. Alpha es interna por parte de los desarrolladores; beta es por parte de usuarios reales externos.
  • Confundir el mantenimiento adaptativo y perfectivo. El adaptativo responde a un cambio externo al programa; el perfectivo mejora un programa que nadie tuvo que cambiar.
  • Dibujar un diagrama de estructura con los módulos en cualquier orden. Se leen de izquierda a derecha en el orden en que se invocan, y cada parámetro necesita su flecha.

Lecciones interactivas sobre este tema

Trátalo paso a paso, con ejercicios de verificación instantánea.

Exámenes Anteriores

Más temas en A-Level Ciencias de la Computación

Iniciar sesión o crear cuenta

IGCSE, A-Level & AP