Saltar al contenido

Desarrollo Creativo

AP Principios de Ciencias de la Computación · Tema 1

Lección de video para este tema Abrir la página de video
6:15

Desarrollo creativo

Aquí hay un programa que debería imprimir el promedio de dos números. Ejecuta. No falla. Imprime una respuesta —y la respuesta es incorrecta. Dale cuatro y seis…

Narración en inglés · subtítulos en inglés y 中文 que puedes cambiar

1.1

Colaboración

Syllabus

Comprensión duradera (CRD-1): La incorporación de múltiples perspectivas a través de la colaboración mejora las innovaciones computacionales a medida que se desarrollan.

Objetivo de aprendizaje CRD-1.A: Explicar cómo las innovaciones computacionales se mejoran mediante la colaboración. [Habilidad 1.C]

  • CRD-1.A.1 Una innovación computacional incluye un programa como parte integral de su función.
  • CRD-1.A.2 Una innovación computacional puede ser física (p. ej., un automóvil autónomo), software computacional no físico (p. ej., software de edición de imágenes) o un concepto computacional no físico (p. ej., comercio electrónico).
  • CRD-1.A.3 La colaboración efectiva produce una innovación computacional que refleja la diversidad de talentos y perspectivas de quienes la diseñaron.
  • CRD-1.A.4 La colaboración que incluye diversas perspectivas ayuda a evitar sesgos en el desarrollo de innovaciones computacionales.
  • CRD-1.A.5 La consulta y la comunicación con los usuarios son aspectos importantes del desarrollo de innovaciones computacionales.
  • CRD-1.A.6 La información recopilada de posibles usuarios puede utilizarse para comprender el propósito de un programa desde diversas perspectivas y para desarrollar un programa que incorpore plenamente estas perspectivas.

Objetivo de aprendizaje CRD-1.B: Explicar cómo las innovaciones computacionales son desarrolladas por grupos de personas. [Habilidad 1.C]

  • CRD-1.B.1 Las herramientas en línea apoyan la colaboración al permitir que los programadores compartan e intercambien retroalimentación sobre ideas y documentos.
  • CRD-1.B.2 Modelos comunes como la programación en parejas existen para facilitar la colaboración.

Objetivo de aprendizaje CRD-1.C: Demostrar habilidades interpersonales efectivas durante la colaboración. [Habilidad 1.C]

  • CRD-1.C.1 Los equipos colaborativos efectivos practican habilidades interpersonales, incluidas, entre otras:
    • comunicación
    • construcción de consensos
    • resolución de conflictos
    • negociación

Fuente: College Board AP Course and Exam Description

Un rompecabezas en progreso: la colaboración y el diseño modular arman la solución pieza a pieza
Un rompecabezas en progreso: la colaboración y el diseño modular arman la solución pieza a pieza

En 1999 la NASA perdió la Mars Climate Orbiter, una nave espacial que había costado más de cien millones de dólares. El código no estaba mal escrito. El software de un equipo daba los números en unidades estadounidenses y el de otro equipo los interpretaba como unidades métricas. Cada componente funcionaba por separado; el fallo estaba en la comunicación entre las personas. Esta unidad trata sobre cómo se crean realmente los programas: en grupos, para usuarios, en ciclos repetidos, encontrando y corrigiendo errores durante el proceso.

La computación es una actividad colaborativa. Trabajar en equipo aporta más perspectivas, detecta más errores y produce mejores programas que trabajar solo. Una buena colaboración utiliza construcción de consensos, comunicación clara y las fortalezas de cada miembro. La programación en parejas – dos personas en un computador, una tecleando y otra revisando – es una práctica común. En el examen, debes ser capaz de explicar cómo la colaboración mejoró un programa (más ideas, menos errores, pruebas más amplias).

Una innovación informática es algo nuevo que tiene un programa como parte esencial. Puede ser un objeto físico (un automóvil autónomo), software (un editor de fotos) o un concepto (las compras en línea). Cuando una pregunta dice «innovación informática», cualquiera de los tres sirve.

Por qué importan las diferentes personas. Las personas con distintas experiencias detectan problemas diferentes. Un equipo que incluye diversas perspectivas tiene más probabilidades de evitar el sesgo, porque alguien preguntará «¿qué pasa con los usuarios como yo?». Los desarrolladores también hablan directamente con los usuarios: lo que dicen ayuda al equipo a comprender para qué sirve el programa y para quiénes debe funcionar.

Habilidades y herramientas. Los buenos equipos practican la comunicación, la construcción de consenso, la resolución de conflictos y la negociación. Las herramientas en línea, como los documentos compartidos y los repositorios de código compartidos, permiten dar comentarios desde cualquier lugar.

Ejemplo resuelto. Dos estudiantes construyen una aplicación de cuestionario. Mei escribe el procedimiento de puntuación mientras Tom revisa cada línea mientras ella teclea; más tarde, Tom pide a cinco compañeros que prueben la aplicación, y dos de ellos descubren que una respuesta en blanco la hace fallar. ¿Cómo ayudó la colaboración?

  1. Tom revisa el código mientras se escribe (programación en pareja), lo que puede detectar errores de forma temprana.
  2. Los compañeros son usuarios con diferentes hábitos; sus pruebas encontraron un caso que ninguno de los programadores había considerado, la respuesta en blanco.
  3. Cada beneficio se nombra y se vincula al programa: "más probadores encontraron el fallo con respuesta en blanco" obtiene crédito donde "el trabajo en equipo es bueno" no lo haría.

Ejemplo resuelto: un desacuerdo. Dos integrantes de un equipo no están de acuerdo: Sara quiere un temporizador en cada pregunta del cuestionario y Li dice que un temporizador preocupará a los usuarios nerviosos. ¿Cuál es el mejor paso a seguir?

  • Sara y Li votan y quien pierde cede: es rápido, pero ignora a los usuarios.
  • Cada uno crea su propia versión y nunca la comparten: el equipo se divide.
  • Consultan a algunos usuarios y luego acuerdan una regla, por ejemplo, un temporizador que los usuarios puedan desactivar.

La tercera opción es construcción de consenso: la decisión se basa en pruebas y ambas personas la aceptan.

Vocabulario Entrenar
English Español
program/ˈprəʊɡræm/ programa
software/ˈsɒftweə/ software
code segment segmento de código
behavior/bɪˈheɪvjə/ comportamiento
tactile táctil
iterative/ˈɪtərətɪv/ iterativo
1.2

Función y propósito del programa

Syllabus

Comprensión duradera (CRD-2): Los desarrolladores crean e innovan mediante un proceso de diseño iterativo centrado en el usuario, que incorpora ciclos de implementación y retroalimentación, y que deja amplio margen para la experimentación y la asunción de riesgos.

Objetivo de aprendizaje CRD-2.A: Describir el propósito de una innovación computacional. [Habilidad 1.A]

  • CRD-2.A.1 El propósito de las innovaciones computacionales es resolver problemas o perseguir intereses a través de la expresión creativa.
  • CRD-2.A.2 La comprensión del propósito de una innovación computacional proporciona a los desarrolladores una mayor capacidad para crear dicha innovación.

Objetivo de aprendizaje CRD-2.B: Explicar cómo funciona un programa o un segmento de código. [Habilidad 4.A]

  • CRD-2.B.1 Un programa es un conjunto de instrucciones de programa que realiza una tarea específica cuando es ejecutado por una computadora. A menudo se hace referencia a un programa como software.
  • CRD-2.B.2 Un segmento de código es un conjunto de instrucciones de programa que forma parte de un programa.
  • CRD-2.B.3 Un programa debe funcionar correctamente ante una variedad de entradas y situaciones.
  • CRD-2.B.4 El comportamiento de un programa es la manera en que opera durante su ejecución y suele describirse según la interacción del usuario con él.
  • CRD-2.B.5 Un programa puede describirse de forma general indicando lo que hace, o con más detalle especificando tanto lo que hace el programa como cómo las instrucciones logran esa función.

Objetivo de aprendizaje CRD-2.C: Identificar la(s) entrada(s) de un programa. [Habilidad 3.A]

  • CRD-2.C.1 Las entradas del programa son datos enviados a una computadora para ser procesados por un programa. La entrada puede presentarse en diversas formas, como táctil, auditiva, visual o textual.
  • CRD-2.C.2 Un evento está asociado a una acción y suministra datos de entrada a un programa.
  • CRD-2.C.3 Los eventos pueden generarse al presionar una tecla, hacer clic con el mouse, iniciar un programa u ocurrir cualquier otra acción definida que afecte el flujo de ejecución.
  • CRD-2.C.4 Las entradas suelen afectar la salida producida por un programa.
  • CRD-2.C.5 En la programación basada en eventos, las instrucciones del programa se ejecutan cuando son activadas, en lugar de hacerlo mediante un flujo de control secuencial.
  • CRD-2.C.6 La entrada puede provenir de un usuario o de otros programas.

Objetivo de aprendizaje CRD-2.D: Identificar la(s) salida(s) producidas por un programa. [Habilidad 3.A]

  • CRD-2.D.1 Las salidas del programa son todos los datos enviados desde un programa a un dispositivo. La salida del programa puede presentarse en diversas formas, como táctil, auditiva, visual o textual.
  • CRD-2.D.2 La salida del programa generalmente se basa en la entrada del programa o en su estado previo (p. ej., valores internos).

Fuente: College Board AP Course and Exam Description

Cada programa se escribe con un propósito: resuelve un problema o persigue un interés. Un programa recibe una entrada, la procesa y produce una salida. Las entradas pueden provenir de un usuario, un dispositivo, un archivo u otro programa; las salidas pueden ser visuales, auditivas, textuales o una señal para un dispositivo. Poder enunciar el propósito de un programa y describir claramente sus entradas y salidas es una habilidad fundamental (y parte de la tarea de rendimiento Create).

Algunos términos que el examen usa de forma precisa:

  • Un programa (también llamado software) es un conjunto de instrucciones que realiza una tarea cuando una computadora lo ejecuta. Un segmento de código es una parte de un programa.
  • El comportamiento de un programa es la forma en que actúa mientras se ejecuta; suele describirse según la forma en que un usuario interactúa con él.
  • Tanto la entrada como la salida pueden ser táctiles (contacto, vibración), de audio, visuales o de texto.
  • La salida suele depender de la entrada y también puede depender del estado previo: los valores que el programa ya almacena.

Puedes describir un programa de forma general (qué hace) o con más detalle (qué hace y cómo lo hacen sus instrucciones). Una respuesta escrita suele requerir la segunda opción.

Cada programa se descompone en entrada, procesamiento y salida
Cada programa se descompone en entrada, procesamiento y salida
Cada programa sigue el modelo de entrada-procesamiento-salida
Cada programa sigue el modelo de entrada-procesamiento-salida

Ejemplo resuelto. Una aplicación de conteo de pasos lee el movimiento mediante el sensor del teléfono, cuenta los pasos y muestra el total del día y una insignia cuando el usuario alcanza 10,000.

Pregunta Respuesta
Propósito: por qué existe para ayudar a los usuarios a mantenerse activos rastreando su caminata
Función: qué hace cuenta los pasos y compara el total con una meta
Entrada lecturas del sensor de movimiento; la meta del usuario
Salida el total de pasos en pantalla; una insignia en 10,000

La insignia también muestra cómo funciona el estado previo: la misma entrada de un paso solo produce una insignia si el total almacenado acaba de alcanzar la meta.

Un error común es dar la función como propósito: "cuenta pasos" dice qué hace el programa, no el problema que resuelve.

Explorar

Explorar el modelo entrada → procesamiento → salida

Recorrer el modelo IPO. Todo programa toma una entrada, realiza un procesamiento siguiendo sus instrucciones y luego produce una salida: rastrear un ejemplo de aplicación meteorológica a lo largo del proceso.

1.3

Diseño y desarrollo de programas

Syllabus

Comprensión perdurable (CRD-2): Los desarrolladores crean e innovan mediante un proceso de diseño iterativo centrado en el usuario, que incorpora ciclos de implementación y retroalimentación, y que deja amplio margen para la experimentación y la asunción de riesgos.

Objetivo de aprendizaje CRD-2.E: Desarrollar un programa utilizando un proceso de desarrollo. [Habilidad 1.B]

  • CRD-2.E.1 Un proceso de desarrollo puede ser ordenado e intencional, o tener una naturaleza exploratoria.
  • CRD-2.E.2 Existen múltiples procesos de desarrollo. Las siguientes fases se utilizan comúnmente al desarrollar un programa:
    • investigación y reflexión
    • diseño
    • prototipado
    • prueba
  • CRD-2.E.3 Un proceso de desarrollo iterativo requiere refinamiento y revisión basados en la retroalimentación, las pruebas o la reflexión a lo largo del proceso. Esto puede implicar volver a fases anteriores del proceso.
  • CRD-2.E.4 Un proceso de desarrollo incremental es aquel que divide el problema en partes más pequeñas y asegura que cada parte funcione correctamente antes de integrarla al conjunto completo.

Objetivo de aprendizaje CRD-2.F: Diseñar un programa y su interfaz de usuario. [Habilidad 1.B]

  • CRD-2.F.1 El diseño de un programa incluye la investigación para determinar sus requisitos.
  • CRD-2.F.2 La investigación en un proceso de desarrollo es útil para comprender e identificar las restricciones del programa, así como las preocupaciones e intereses de las personas que lo utilizarán.
  • CRD-2.F.3 Algunas formas en que se puede realizar la investigación son las siguientes:
    • recopilación de datos mediante encuestas
    • pruebas con usuarios
    • entrevistas
    • observaciones directas
  • CRD-2.F.4 Los requisitos de un programa describen cómo funciona y pueden incluir una descripción de las interacciones con el usuario que el programa debe proporcionar.
  • CRD-2.F.5 La especificación de un programa define los requisitos del mismo.
  • CRD-2.F.6 En un proceso de desarrollo, la fase de diseño describe cómo lograr la especificación dada del programa.
  • CRD-2.F.7 La fase de diseño de un programa puede incluir:
    • lluvia de ideas
    • planificación y guion gráfico
    • organización del programa en módulos y componentes funcionales
    • creación de diagramas que representen los diseños de la interfaz de usuario
    • desarrollo de una estrategia de pruebas para el programa

Objetivo de aprendizaje CRD-2.G: Describir el propósito de un segmento de código o de un programa escribiendo documentación. [Habilidad 4.A]

  • CRD-2.G.1 La documentación del programa es una descripción escrita de la función de un segmento de código, evento, procedimiento o programa y de cómo fue desarrollado.
  • CRD-2.G.2 Los comentarios son una forma de documentación del programa escrita dentro del mismo para ser leída por personas y no afectan el funcionamiento del programa.
  • CRD-2.G.3 Los programadores deben documentar un programa a lo largo de su desarrollo.
  • CRD-2.G.4 La documentación del programa ayuda a desarrollar y mantener programas correctos cuando se trabaja individualmente o en entornos de programación colaborativa.
  • CRD-2.G.5 No todos los entornos de programación admiten comentarios, por lo que pueden requerirse otros métodos de documentación.

Objetivo de aprendizaje CRD-2.H: Reconocer segmentos de código utilizados de otras fuentes. [Habilidad 1.C]

  • CRD-2.H.1 Es importante reconocer cualquier segmento de código que haya sido desarrollado de manera colaborativa o por otra fuente.
  • CRD-2.H.2 El reconocimiento de un segmento de código escrito por otra persona y utilizado en un programa puede realizarse en la documentación del programa. Dicho reconocimiento debe incluir el origen o el nombre del autor original.

Fuente: College Board AP Course and Exam Description

Un programador depurando en una estación de trabajo con múltiples monitores — diseño e prueba iterativos
Un programador depurando en una estación de trabajo con múltiples monitores — diseño e prueba iterativos

Los programas se construyen mediante un proceso iterativo, no en una línea recta: investigar el problema y los usuarios, diseñar (a menudo con un diagrama o plan escrito), implementar en código y probar; luego repetir. Un problema grande se divide en partes más pequeñas (descomposición). Los comentarios y la nomenclatura clara documentan el diseño para que otros (y tu yo del futuro) puedan entenderlo. El desarrollo es incremental: construye y prueba una pequeña parte, luego agrega la siguiente.

Las fases habituales son investigar y reflexionar, diseñar, construir un prototipo (un modelo funcional inicial) y probar. El orden puede planificarse de antemano o ser más exploratorio, y un equipo puede volver a una fase anterior en cualquier momento.

Ejemplo resuelto: ¿iterativo o incremental? Las dos palabras suenan parecidas y el examen las distingue.

Qué hace el equipo Término Por qué
Los evaluadores dicen que el texto es demasiado pequeño, así que el equipo vuelve al diseño y lo cambia iterativo los comentarios hacen que vuelvan a revisarlo
El equipo hace que se muestren las preguntas y lo prueba; luego añade la puntuación y la prueba; después añade un temporizador incremental una parte a la vez, cada una funcionando antes de incorporarse al conjunto

Un proyecto real suele hacer ambas cosas.

Las etapas del desarrollo de programas, con las pruebas retroalimentando para corregir y refinar
Las etapas del desarrollo de programas, con las pruebas retroalimentando para corregir y refinar
El software se construye mediante un proceso de desarrollo iterativo e incremental
El software se construye mediante un proceso de desarrollo iterativo e incremental

Investigar lo que los usuarios realmente necesitan

Antes de escribir código, el desarrollador investiga el problema y a las personas que usarán el programa. Algunas formas de hacerlo:

  • encuestas enviadas a posibles usuarios, que recopilan datos de muchas personas rápidamente;
  • entrevistas y observación directa de los usuarios realizando la tarea manualmente;
  • pruebas con usuarios, en las que las personas prueban una versión inicial mientras el equipo observa;
  • estudiar soluciones existentes para ver qué funciona y qué frustra a la gente.

Los hallazgos se convierten en un diseño. Dos artefactos hacen esto: una lista de requisitos del programa que dice exactamente qué debe hacer el programa, y diagramas que representan el diseño de la interfaz de usuario — bocetos que muestran qué controles aparecen dónde y qué hace cada uno al usarse. Diseñar la interfaz en papel primero es más barato que descubrir después de codificar que los botones están en el lugar equivocado.

La especificación de un programa define sus requisitos. Luego, la fase de diseño planifica cómo cumplirlos. Puede incluir una lluvia de ideas, un guion gráfico (una secuencia de bocetos de lo que ve el usuario), la división del programa en módulos y la planificación de las pruebas.

Eventos y programas que esperan

No todos los programas se ejecutan directamente de principio a fin. Un evento se genera cuando se presiona una tecla, se hace clic con el mouse, se inicia un programa o se produce cualquier otra acción definida. Un evento puede cambiar el flujo de ejecución al activar el código asociado a él, llamado controlador de eventos. En muchos programas gráficos, los eventos esperan en una cola hasta que termina el controlador actual.

Por eso un programa con interfaz gráfica puede parecer inactivo: está esperando el siguiente evento. El orden en que llegan esos eventos depende de las acciones del usuario y de otras fuentes de eventos, por lo que el mismo programa puede ejecutar sus bloques en un orden diferente cada vez que se usa.

Este estilo se llama programación orientada a eventos: las instrucciones se ejecutan cuando se activan, en lugar de hacerlo una tras otra desde el principio. El evento también proporciona datos de entrada, como qué tecla se presionó.

Documentación y reconocimiento de autoría

La documentación de un programa es una descripción escrita de lo que hace un segmento de código, evento, procedimiento o programa y de cómo se desarrolló. Los comentarios son una forma de documentación: se escriben para las personas y no cambian la ejecución del programa. No todos los entornos de programación permiten comentarios, por lo que a veces la documentación está en un archivo separado.

Escribe la documentación durante todo el desarrollo, no al final: te ayuda a ti y a tus compañeros a mantener el programa correcto.

Se debe reconocer la autoría del código de otra persona: indica en la documentación de dónde proviene y el nombre del autor original si lo conoces. Esto también se aplica al código escrito con un compañero.

Explorar

Recorrer el proceso de desarrollo iterativo

El desarrollo es iterativo: repites las etapas, mejorando el programa un poco en cada pasada. Recorre el ciclo y observa que vuelve al inicio en lugar de terminar después de una sola ejecución.

Vocabulario Entrenar
English Español
diagram diagrama
implement implementar
decomposition/ˌdiːkɒmpəˈzɪʃn/ descomposición
Comments/ˈkɒments/ comentarios
incremental/ˌɪŋkrɪˈmentl/ incremental
prototype/ˈprəʊtəʊtaɪp/ prototipo
surveys/ˈsɜːveɪz/ encuestas
interview/ˈɪntəvjuː/ entrevista
observation/ɒbzəˈveɪʃn/ observación
user testing pruebas con usuarios
program requirements Requisitos del programa
user interface/ˈjuːzə ˈɪntəfeɪs/ interfaz de usuario
specification/ˌspesɪfɪˈkeɪʃn/ especificación
storyboard/ˈstɔːribɔːd/ guion gráfico
event/ɪˈvent/ evento
flow of execution Flujo de ejecución
event handler/ɪˈvent ˈhændlə/ manejador de eventos
event-driven programming programación dirigida por eventos
program documentation documentación del programa
debugging/ˈdiːbʌɡɪŋ/ depuración
syntax error/ˈsɪntæks ˈerə/ error de sintaxis
runtime error/ˈrʌntaɪm ˈerə/ error de ejecución
logic error/ˈlɒdʒɪk ˈerə/ error lógico
overflow error/ˌəʊvəˈfləʊ ˈerə/ error de desbordamiento
test case caso de prueba
print statement Instrucción de impresión
hand-tracing Seguimiento manual
debugger/ˈdiːbʌɡə/ depurador
visualization/ˌvɪʒuːəlaɪˈzeɪʃn/ visualización
order of operations/ˈɔːdə ɒv ˌɒpəˈreɪʃnz/ orden de operaciones
feedback/ˈfiːdbæk/ Retroalimentación
1.4

Identificación y corrección de errores

Syllabus

Comprensión perdurable (CRD-2): Los desarrolladores crean e innovan mediante un proceso de diseño iterativo centrado en el usuario, que integra ciclos de implementación y retroalimentación, y que deja amplio margen para la experimentación y la asunción de riesgos.

Objetivo de aprendizaje CRD-2.I: Para los errores en un algoritmo o programa: a. Identificar el error. [Habilidad 4.C] b. Corregir el error. [Habilidad 4.C]

  • CRD-2.I.1 Un error de lógica es un fallo en el algoritmo o programa que provoca que este se comporte de manera incorrecta o inesperada.
  • CRD-2.I.2 Un error de sintaxis es un fallo en el programa donde no se cumplen las reglas del lenguaje de programación.
  • CRD-2.I.3 Un error en tiempo de ejecución es un fallo en el programa que ocurre durante la ejecución de este. Los lenguajes de programación definen sus propios errores en tiempo de ejecución.
  • CRD-2.I.4 Un error de desbordamiento es un error que ocurre cuando una computadora intenta manejar un número que está fuera del rango de valores definido.
  • CRD-2.I.5 Las siguientes son formas efectivas de encontrar y corregir errores:
    • casos de prueba
    • trazado manual
    • visualizaciones
    • depuradores
    • añadir statement(s) de salida adicionales

Objetivo de aprendizaje CRD-2.J: Identificar entradas y salidas esperadas o comportamientos correspondientes que puedan utilizarse para verificar la corrección de un algoritmo o programa. [Habilidad 4.C]

  • CRD-2.J.1 En el proceso de desarrollo, las pruebas utilizan entradas definidas para asegurar que un algoritmo o programa produce los resultados esperados. Los programadores usan los resultados de las pruebas para revisar sus algoritmos o programas.
  • CRD-2.J.2 Las entradas definidas utilizadas para probar un programa deben demostrar los diferentes resultados esperados que están en o justo más allá de los extremos (mínimo y máximo) de los datos de entrada.
  • CRD-2.J.3 Se necesitan requisitos del programa para identificar las entradas definidas apropiadas para las pruebas.

Fuente: College Board AP Course and Exam Description

Un error es un fallo en un programa; la depuración consiste en encontrarlo y corregirlo. El examen menciona cuatro tipos:

  • un error de sintaxis viola las reglas del lenguaje, por lo que el programa no se ejecutará;
  • un error de tiempo de ejecución provoca un fallo del programa durante su ejecución (p. ej., división por cero);
  • un error lógico permite que el programa se ejecute, pero produce un resultado incorrecto;
  • un error de desbordamiento ocurre cuando un número está fuera del intervalo que la computadora puede manejar.
Una tabla de trazado registra el valor de cada variable mientras se ejecuta el programa para detectar errores
Una tabla de trazado registra el valor de cada variable mientras se ejecuta el programa para detectar errores

Encuentra errores mediante casos de prueba con diferentes entradas, añadiendo instrucciones de impresión para ver los valores y siguiendo manualmente la ejecución del código. Un depurador detiene el programa en una línea elegida para que puedas examinar cada variable, y una visualización, como un gráfico, puede facilitar la detección de un patrón incorrecto. Elige las entradas de prueba de forma deliberada: deben mostrar los distintos resultados esperados en los extremos o justo fuera de ellos: los valores mínimo y máximo que el programa debe aceptar y un valor justo fuera de cada uno. Un programa que funciona con datos habituales falla con frecuencia ante una lista vacía, un cero o un valor inmediatamente posterior al final de un intervalo, por lo que conviene probar primero esas entradas. Corregir un error a la vez y volver a probar es el método más confiable.

Ejemplo resuelto: elegir entradas de prueba. Una página de inscripción a un club debe aceptar edades de 13 a 18. Los requisitos indican el resultado correcto, por lo que puedes elegir entradas y decir qué esperas:

Una recta numérica de edades con el intervalo de 13 a 18 marcado como aceptado; las pruebas con 12 y 19 se rechazan y las pruebas con 13, 15 y 18 se aceptan
Prueba ambos extremos del intervalo y un valor inmediatamente fuera de cada extremo

Cinco pruebas son suficientes: 12, 13, 15, 18 y 19. Si el código dice age > 13, solo la prueba con 13 muestra el fallo; la edad 15 se acepta en ambos casos.

Habilidad de examen: ser capaz de nombrar el tipo de error y describir una estrategia de pruebas que lo detectaría — tema recurrente en preguntas de opción múltiple y tareas Create.

Tres tipos de error de programación: sintaxis, lógica y tiempo de ejecución
Tres tipos comunes de errores de programación: sintaxis, lógica y ejecución

Ejemplo resuelto. Un programa diseñado para imprimir el promedio de dos números en su lugar ejecuta avg = a + b / 2. Al rastrear el orden de operaciones, / se ejecuta antes que +, por lo que calcula $a+\tfrac{b}{2}$ en lugar del promedio. Agrega paréntesis para corregirlo: avg = (a + b) / 2. Probar con $a=4,\ b=6$ confirma la corrección: la línea defectuosa produce $4+3=7$, la línea corregida produce $\tfrac{10}{2}=5$. Probar con entradas conocidas es exactamente cómo encuentras y confirmas un error lógico.

Ejemplo resuelto: identifica el error.

Qué sucede Tipo Motivo
A DISPLAY(score le falta un corchete de cierre; no se ejecuta nada sintaxis se incumple una regla del lenguaje
list[0] detiene el programa con un mensaje de error ejecución las listas en AP comienzan en el índice 1, y esto solo falla durante la ejecución
Un descuento de 10% se interpreta como 10 dólares lógica el programa se ejecuta y la respuesta es incorrecta
Se añade 1 a un contador de 4 bits que está en 1111 desbordamiento 16 está fuera del rango

Respuestas escritas sobre tu propio programa

La sección II del examen concede 60 minutos para dos preguntas con cuatro consignas escritas, todas sobre el programa que entregaste para la tarea de creación. Puedes ver tus propios segmentos de código en tu Referencia de Proyecto Personalizada, por lo que las respuestas deben referirse a tu programa, no a los programas en general. Imagina que este procedimiento está en el tuyo:

PROCEDURE Average(numbers)
{
   sum ← 0
   FOR EACH n IN numbers
   {
      sum ← sum + n
   }
   RETURN(sum / LENGTH(numbers))
}

En consignas anteriores se ha pedido lo siguiente.

  1. Una modificación que cause un error de lógica y cómo cambia el comportamiento. «Si sum ← 0 se cambia por sum ← 1, el procedimiento sigue ejecutándose, pero cada total es una unidad mayor de lo debido. Average([2, 4]) devuelve $3.5$ en lugar de $3$».
  2. Una llamada que el procedimiento acepta pero procesa incorrectamente. «Average([]): se acepta la lista vacía, pero LENGTH(numbers) es 0, por lo que la última línea divide entre cero y un error de ejecución detiene el programa». Indica la llamada, el comportamiento incorrecto y el motivo: son tres cosas distintas.
  3. Documentación para otro programador. «Un comentario encima del procedimiento que indique que numbers no debe estar vacío. Así, otro programador que reutilice Average sabrá que debe comprobar si la lista está vacía antes de llamar al procedimiento».
  4. Una entrada inesperada. Indica una entrada real para tu programa y di qué hace realmente el programa a continuación. Si rechaza la entrada, indica qué línea lo hace.

Errores comunes. Describir en qué consiste una modificación sin indicar qué cambia cuando se ejecuta el programa. Dar una llamada sin valores específicos para los argumentos. Responder sobre un procedimiento distinto del que menciona la consigna.

Explorar

Rastrear la lógica del juego de adivinanzas y detectar un error lógico

Arrastra el número de prueba y observa qué rama se ejecuta. Un error lógico enviaría el mismo número por la rama incorrecta: el programa sigue funcionando, pero muestra el mensaje equivocado. El número secreto aquí es 50.

Vocabulario Entrenar
English Español
collaborative/kəˈlæbrətɪv/ colaborativo
perspectives/pəˈspektɪvz/ perspectivas
consensus building construcción de consenso
Pair programming/peə ˈprəʊɡræmɪŋ/ programación en parejas
bug/bʌɡ/ error (bug)
testing/ˈtestɪŋ/ pruebas
computing innovation/kəmˈpjuːtɪŋ ˌɪnəˈveɪʃn/ innovación computacional
bias/ˈbaɪəs/ sesgo
user/ˈjuːzə/ usuario
conflict resolution resolución de conflictos
negotiation/nɪˌɡəʊʃɪˈeɪʃn/ negociación
purpose/ˈpɜːpəs/ propósito
input/ˈɪnpʊt/ entrada
output/ˈaʊtpʊt/ salida
1.4

Practice

Responda cada pregunta antes de leer las respuestas siguientes.

  1. Una aplicación de conteo de pasos cuenta los pasos y muestra un total diario para que los usuarios puedan alcanzar una meta. Indica el propósito del programa y una de sus funciones.
  2. Clasifica cada error como error de sintaxis, de lógica, de ejecución o de desbordamiento: (a) falta un corchete de cierre; (b) se calcula un promedio como sum / (count + 1); (c) se divide entre una variable que vale cero durante la ejecución del programa; (d) se añade $1$ al valor más grande que puede almacenar un número fijo de bits.
  3. Un procedimiento devuelve "pass" para puntuaciones de $60$ o más. Elige cuatro entradas de prueba y explica tus elecciones.
  4. Indica un beneficio de colaborar al diseñar un programa.
  5. Distingue el desarrollo iterativo del desarrollo incremental.
  6. Da dos razones para escribir comentarios y otra documentación de un programa.
1.4

Respuestas

  1. Propósito: ayudar a los usuarios a alcanzar una meta diaria de actividad. Función: por ejemplo, añade $1$ al total cada vez que detecta un paso o muestra el total.
  2. (a) Sintaxis; (b) lógica; (c) ejecución; (d) desbordamiento.
  3. $59$, $60$ y $61$ ponen a prueba el límite, donde es más probable que haya errores; un valor extremo como $0$ o $100$ permite comprobar los límites de las entradas válidas.
  4. Las distintas perspectivas ayudan a encontrar errores y evitar sesgos, de modo que el programa funcione para más usuarios (por ejemplo, la programación en pareja permite detectar errores antes).
  5. El desarrollo iterativo repite ciclos de diseño, prueba y mejora, y revisa el programa tras recibir comentarios. El desarrollo incremental construye y prueba el programa en partes pequeñas, añadiendo una parte funcional a la vez.
  6. Explica qué hace el código y por qué, para que otras personas (y el autor más adelante) puedan comprenderlo, mantenerlo y depurarlo; también registra las fuentes del código tomado de otros.
1.4

Consejos para el examen

  • La evaluación incluye preguntas de opción múltiple y el componente Create, con respuestas escritas en el examen AP. Explica tu razonamiento claramente, no solo tu resultado.
  • Conozca los beneficios de la colaboración y cómo las perspectivas diversas reducen el sesgo en un programa.
  • Usa vocabulario preciso (iterativo, incremental, requisitos del programa) cuando describas un proceso de diseño.
  • Haz pruebas en los extremos del rango de entrada y justo fuera de ellos, e indica la salida esperada para cada prueba.
  • Dar y recibir retroalimentación de manera constructiva; reconocer a colaboradores y fuentes.
  • Divida un problema grande en módulos más pequeños que un equipo pueda construir en paralelo.

Lecciones interactivas sobre este tema

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

Exámenes Anteriores

Más temas en AP Principios de Ciencias de la Computación

Iniciar sesión o crear cuenta

IGCSE, A-Level & AP