| Candidates should be able to: | Notes and guidance |
|---|---|
| 1 Understand the program development life cycle, limited to: analysis, design, coding and testing | • Including identifying each stage and performing these tasks for each stage: – analysis: abstraction, decomposition of the problem, identification of the problem and requirements – design: decomposition, structure diagrams, flowcharts, pseudocode – coding: writing program code and iterative testing – testing: testing program code with the use of test data |
| 2 (a) Understand that every computer system is made up of sub-systems, which are made up of further sub-systems (b) Understand how a problem can be decomposed into its component parts | • Including: – inputs – processes – outputs – storage |
| (c) Use different methods to design and construct a solution to a problem | • Including: – structure diagrams – flowcharts – pseudocode |
| 3 Explain the purpose of a given algorithm | • Including: – stating the purpose of an algorithm – describing the processes involved in an algorithm |
| 4 Understand standard methods of solution | • Limited to: – linear search – bubble sort – totalling – counting – finding maximum, minimum and average values |
| 5 (a) Understand the need for validation checks to be made on input data and the different types of validation check | • Including: – range check – length check – type check – presence check – format check – check digit |
| (b) Understand the need for verification checks to be made on input data and the different types of verification check | • Including: – visual check – double entry check |
| 6 Suggest and apply suitable test data | • Limited to: – normal – abnormal – extreme – boundary • Extreme data is the largest/smallest acceptable value • Boundary data is the largest/smallest acceptable value and the corresponding smallest/largest rejected value |
| 7 Complete a trace table to document a dry-run of an algorithm | • Including, at each step in an algorithm: – variables – outputs – user prompts |
| 8 Identify errors in given algorithms and suggest ways of correcting these errors | |
| 9 Write and amend algorithms for given problems or scenarios, using: pseudocode, program code and flowcharts | • Precision is required when writing algorithms, e.g. x > y is acceptable but x is greater than y is not acceptable • See section 4 for flowchart symbols • See section 4 for pseudocode |
算法设计与问题求解
IGCSE 计算机科学 · 第 7 主题
9:17
The Program Development Life Cycle
Every app on your phone was written by someone like this. But they did not start by typing code. Before the first line, the problem was studied, the solution…
英文讲解 · 内嵌中英文字幕
大纲
来源:剑桥国际大纲
7.1
程序开发生命周期
程序开发生命周期(program development life cycle)是用来制作一个程序的一套阶段。有四个阶段。

| 阶段 | 你做什么 |
|---|---|
| 分析(analysis) | 研究问题并算出需要什么 |
| 设计(design) | 规划程序将如何工作 |
| 编码(coding) | 编写程序代码并随手测试它 |
| 测试(testing) | 用测试数据运行完成的程序以找到错误 |


Analysis
在分析中你理解问题。两个关键技能有帮助:
- 抽象(abstraction)——只保留重要的细节并忽略其余的;
- 分解(decomposition)——把一个大问题分成更小、更容易的部分。
Design
在设计中你规划解决方案,常常用分解。你可以把各部分显示为一个结构图(structure diagram,一个把一个系统分成更小的框的图)中的子系统(sub-systems)。
Coding and testing
在编码中你编写程序代码。你用迭代测试(iterative testing)——在你构建小部分时一遍又一遍地测试它们。在测试中你用测试数据(test data)运行整个程序以检查它工作。
| 英文 | 中文 | 拼音 |
|---|---|---|
| program development life cycle | 程序开发生命周期 | chéng xù kāi fā shēng mìng zhōu qī |
| analysis | 分析 | fēn xī |
| design | 设计 | shè jì |
| coding | 编码 | biān mǎ |
| testing | 测试 | cè shì |
| abstraction | 抽象 | chōu xiàng |
| decomposition | 分解 | fēn jiě |
| sub-systems | 子系统 | zi xì tǒng |
| structure diagram | 结构图 | jié gòu tú |
| iterative testing | 迭代测试 | dié dài cè shì |
| test data | 测试数据 | cè shì shù jù |
| flowchart | 流程图 | liú chéng tú |
7.2
设计工具
你可以用三种主要方式规划一个解决方案。
- 一个结构图(structure diagram)——显示一个系统的各部分以及它们如何组合在一起;
- 一个流程图(flowchart)——一个用框和箭头按顺序显示步骤的图;
- 伪代码(pseudocode)——用简单的、类似代码的英语书写的步骤(不是一门真实的语言)。

| 英文 | 中文 | 拼音 |
|---|---|---|
| pseudocode | 伪代码 | wěi dài mǎ |
7.3
算法
一个算法(algorithm)是解决一个问题的一套步骤,以正确的顺序。每个算法能被分成三部分:
- 输入(input)——进去的数据;
- 处理(processing)——对数据做的工作;
- 输出(output)——出来的结果。
这叫分解成输入、处理和输出。例如,对于"求三个分数的平均值":输入是三个分数;处理是把它们相加并除以 3;输出是平均值。

| 英文 | 中文 | 拼音 |
|---|---|---|
| algorithm | 算法 | suàn fǎ |
| input | 输入 | shū rù |
| processing | 处理 | chǔ lǐ |
| output | 输出 | shū chū |
7.4
有效性检查与准确性检查
当数据被输入时,你检查它以减少错误。
验证(validation)检查数据是合理的并遵循规则。它不能检查数据是真的,只能检查它是被允许的。
| 验证检查 | 它检查什么 |
|---|---|
| 范围检查(range check) | 值在一个最低和最高允许值之间 |
| 长度检查(length check) | 字符的数目被允许(例如一个密码 ≥ 8) |
| 类型检查(type check) | 数据是正确的类型(例如一个数,而不是字母) |
| 存在性检查(presence check) | 某样东西实际被输入(没有留空) |
| 格式检查(format check) | 数据在正确的模式中(例如一个日期作为 dd/mm/yyyy) |
| 校验码(check digit) | 一个额外的数字确认一个数被正确地输入 |
核实(verification)检查数据被正确地复制或输入(键入它时没有错误)。两种方法:
- 目视检查(visual check)——一个人把键入的数据与原始比较;
- 双重输入(double entry)——数据被输入两次,而两个副本被比较。
| 英文 | 中文 | 拼音 |
|---|---|---|
| validation | 验证 | yàn zhèng |
| range check | 范围检查 | fàn wéi jiǎn chá |
| length check | 长度检查 | cháng dù jiǎn chá |
| type check | 类型检查 | lèi xíng jiǎn chá |
| presence check | 存在性检查 | cún zài xìng jiǎn chá |
| format check | 格式检查 | gé shì jiǎn chá |
| check digit | 校验码 | jiào yàn mǎ |
| verification | 核实 | hé shí |
| visual check | 目视检查 | mù shì jiǎn chá |
| double entry | 双重输入 | shuāng chóng shū rù |
7.5
跟踪表
一个追踪表(trace table)一步步地记录一个算法运行时每个变量的值。它帮助你:

- 检查一个算法正确地工作;
- 通过用给定的数据跟随它来算出一个算法做什么。
例子:用输入 5 追踪这个算法。
INPUT n
total ← 0
FOR i ← 1 TO n
total ← total + i
NEXT i
OUTPUT total
| i | total | OUTPUT |
|---|---|---|
| 1 | 1 | |
| 2 | 3 | |
| 3 | 6 | |
| 4 | 10 | |
| 5 | 15 | 15 |
追踪显示算法把 1 到 n 相加。用输入 5,输出是 15。
例题。 追踪这个算法并给出输出。
x ← 20
count ← 0
WHILE x > 1
x ← x DIV 2
count ← count + 1
ENDWHILE
OUTPUT count
DIV 只取除法的整数部分。每循环一次写一行:x 变成 10(count 为 1),然后 5(count 为 2),然后 2(count 为 3),然后 1(count 为 4)。此时 x > 1 为假,所以循环结束,输出是 4。有两个习惯能保住这些分:在每次循环之前而不是之后检验条件;以及每一次循环都新写一行 - 想把这些值记在脑子里,正是追踪出错的原因。
A trace table
Step through the loop and fill in the trace table, one row per pass.
| 英文 | 中文 | 拼音 |
|---|---|---|
| trace table | 追踪表 | zhuī zōng biǎo |
7.6
测试数据
测试数据(test data)是你用来测试一个程序的数据。有四种你必须知道的类型。
| 类型 | 意义 | 例子(年龄 0–120 允许) |
|---|---|---|
| 正常数据(normal) | 应当被接受的合理数据 | 25 |
| 异常数据(abnormal) | 应当被拒绝的错误数据 | -4 或 "cat" |
| 极端数据(extreme) | 仍被允许的最大和最小值 | 0 和 120 |
| 边界数据(boundary) | 一个限制每一侧的值(一个允许,一个不) | 120 和 121 |
| 英文 | 中文 | 拼音 |
|---|---|---|
| normal | 正常数据 | zhèng cháng shù jù |
| abnormal | 异常数据 | yì cháng shù jù |
| extreme | 极端数据 | jí duān shù jù |
| boundary | 边界数据 | biān jiè shù jù |
7.7
标准解题方法
你必须知道这些常见的算法。
Linear search
一个线性查找(linear search)逐个检查一个列表中的每个项,直到它找到它想要的值或到达末端。
found ← FALSE
FOR i ← 0 TO 9
IF list[i] = searchValue THEN
found ← TRUE
ENDIF
NEXT i
OUTPUT found

Bubble sort
一个冒泡排序(bubble sort)把一个列表排序。它比较每对并排的项,若它们顺序错误就交换它们。它重复这个直到不再需要交换。
FOR i ← 0 TO 8
IF list[i] > list[i + 1] THEN
temp ← list[i]
list[i] ← list[i + 1]
list[i + 1] ← temp
ENDIF
NEXT i

Totalling and counting
- 求和(totalling)——不断把值加到一个运行中的总数(
total ← total + value)。 - 计数(counting)——每次某样东西发生时给一个计数器加 1(
count ← count + 1)。
Maximum, minimum and average
- 要求最大值(maximum):保留到目前为止见过的最大值。
- 要求最小值(minimum):保留到目前为止见过的最小值。
- 要求平均值(average):把总数除以有多少个值。
total ← 0
FOR i ← 0 TO 9
total ← total + list[i]
NEXT i
average ← total / 10
OUTPUT average
| 英文 | 中文 | 拼音 |
|---|---|---|
| linear search | 线性查找 | xiàn xìng chá zhǎo |
| bubble sort | 冒泡排序 | mào pào pái xù |
| totalling | 求和 | qiú hé |
| counting | 计数 | jì shù |
| maximum | 最大值 | zuì dà zhí |
| minimum | 最小值 | zuì xiǎo zhí |
| average | 平均值 | píng jūn zhí |
7.8
考试技巧
- 学习四个生命周期阶段:分析 → 设计 → 编码 → 测试。抽象只保留重要的细节;分解把一个问题分成更小的部分。
- 验证检查数据是合理的(范围、长度、类型、存在性、格式检查);核实检查它被正确地复制(一个目视检查或双重输入)。
- 学习四种测试数据类型:正常(被接受)、异常(被拒绝)、极端(仍被允许的最大/最小)、边界(一个限制两侧的值)。
- 要算出一个算法做什么,填一个追踪表——写下每个变量在每一步的值。
- 知道标准算法:线性查找(依次检查每个项)和冒泡排序(交换并排的对直到不需要交换)。
本主题的互动课程
逐步学习,并即时检测练习。