跳到主要内容

软件开发

A-Level 计算机科学 · 第 12 主题

训练
本章视频课 打开视频页面
19:27

The Program Development Life Cycle

A tiny bug, if it slips through to release, can cost a fortune to fix — far more than catching it early. That is why we don't just start typing code. We follow…

英文讲解 · 内嵌中英文字幕

12.1

程序开发生命周期

大纲
Candidates should be able to: Notes and guidance
Show understanding of the purpose of a development life cycle
Show understanding of the need for different development life cycles depending on the program being developed Including: waterfall, iterative, rapid application development (RAD)
Describe the principles, benefits and drawbacks of each type of life cycle
Show understanding of the analysis, design, coding, testing and maintenance stages in the program development life cycle

来源:剑桥国际大纲

一个开发生命周期(development life cycle)是从想法到完成、被维护的软件的一套阶段。它的存在是为了规划、管理和控制一个项目——按时、以好的质量构建正确的产品。

一个软件团队在开站会
软件由遵循一个开发生命周期以保持协调的团队构建
一张带处理框和判断菱形的流程图
一张流程图在生命周期的设计阶段规划一个程序的逻辑

Why a life cycle is needed

考官关于"开发生命周期的用途"的清单:它把一个大项目分成可以规划和管理的阶段;它确保在设计和编码开始之前找到并确认需求;它把测试文档内建进来,而不是留到最后;它让团队按里程碑跟踪进度并管理风险;它给客户定义好的评审节点。没有它,团队会先写代码,然后很晚才发现做错了东西。

Why there are different ones

没有单一的生命周期适合每个项目,所以存在几种开发生命周期(development life cycles)。选择取决于规模和复杂度、开始时需求(requirements)有多清晰、预期有多少变化、风险级别、团队,以及截止日期。

Common models

  • 瀑布模型(Waterfall)——一个线性序列(分析 → 设计 → 编码 → 测试 → 维护),每个阶段在下一个之前完成。清晰且文档完善;适合稳定的需求,但不擅长应对项目中途的变化,而且客户直到最后才看到任何能工作的东西。
  • 迭代模型(iterative model)——重复的趟数,每趟产出一个被评审和精炼的部分版本。更早发现问题;适合需求随时间被发现的情况,但更难估算。
  • 快速应用开发(Rapid Application Development,RAD)——大量使用一个原型(prototype)和用户反馈。非常快的首次交付;适合变化的需求,但依赖用户的可用性并适合较小的系统。
  • 敏捷(Agile)——短迭代("冲刺")、持续的协作和测试。灵活且适应性强,但需要一个投入的客户和一个熟练的团队。
五个框(分析、设计、编码、测试、维护)向下级联,每个引出下一个
瀑布模型:每个阶段在下一个开始之前完成
一个设计-构建-测试-评审循环,带一个重复回到设计的循环,以及每趟长高的版本条,直到完成
迭代模型:重复的趟数精炼程序
三个部分作为原型并行构建,随用户反馈精炼,然后组合成最终系统
快速应用开发:团队并行地在各部分上工作

原则、好处与缺点——按标准答案的列法。

模型 原则 好处 缺点
瀑布 各阶段按固定顺序进行,每个阶段完成并签字确认后下一个才开始;回头意味着重走顺序 易于管理;每个阶段都有完整文档;需求早早固定,所以能估算成本和日期 阶段完成后就不灵活了;很晚才有能用的软件;分析阶段的错误后期修复代价高;客户看不到进度
迭代 先做一个小的可运行版本,然后通过后续版本反复改进直到完成 早且频繁地有可用软件;问题在早期版本中就被发现;客户的反馈塑造每个版本;需求可以改变 难以估计总时间和成本;反复测试耗费工作量;需要客户随时参与;版本不规划就会跑偏
RAD 快速构建系统各部分的原型并与用户一起完善直到被接受,常由几个团队并行进行 第一版交付非常快;用户全程参与,产品贴合需求;变化容易吸收 需要熟练的开发者和投入的用户;文档薄弱;不太适合大型或安全关键系统

例题。 一家公司必须率先推出一款新游戏机的网站,而设计会随着游戏机功能的公布而改变。说出最合适的生命周期并说明理由。

RAD。 网站的原型几天内就能做出并给用户看,并随需求变化而完善;网站规模小到适合原型驱动的方法,而交付速度是首要要求。瀑布模型会在任何页面做出之前就固定需求,并且直到最后才有交付。

The standard stages

每个阶段都有目的、产出和典型活动——"描述……阶段"的题目要的是其中两三条。

  • analysis(分析)——找出程序必须做什么。活动:对现有系统的访谈、问卷和观察;可行性研究;确认需求规格说明,后面每个阶段都对照它检查。
  • design(设计)——决定怎么做。产出:结构图(模块和参数)、每个模块的流程图伪代码标识符表和数据结构、屏幕和文件布局,以及现在就根据规格说明写好的测试计划——在任何代码存在之前。
  • coding(编码,实现(implementation))——用高级语言按照设计逐个模块编写程序;每个模块写好就测试。
  • testing(测试)——对照测试计划(正常、异常、极端和边界数据)运行程序并纠正发现的错误;随后是集成、α、β 和验收测试。
  • maintenance(维护)——发布后,纠正故障,使程序适应新的硬件、软件或法律,并改进它(见下文)。

例题。 补全瀑布图 分析 → ? → ? → ? → 维护,并描述设计阶段发生什么。

缺少的阶段是设计、编码、测试。在设计阶段,需求被变成程序的规划:把问题分解成模块(结构图),每个模块的算法写成伪代码或流程图,选定数据结构和标识符,布置屏幕和文件,并根据规格说明写出测试计划。

探索

The program development life cycle

Step through the stages every project passes through. Getting the requirements right in analysis matters most — a mistake caught in testing is far costlier to fix than one caught early.

探索

Software process lab

Classify development examples by the stage or tool they belong to.

词汇表 训练
英文 中文 拼音
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
maintenance/ˈmeɪntənəns/ 维护 wéi hù
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é
implementation/ˌɪmplɪmənˈteɪʃn/ 实现 shí xiàn
练习卷 双页
12.2

程序设计

大纲
Candidates should be able to: Notes and guidance
Use a structure chart to decompose a problem into sub-tasks and express the parameters passed between the various modules/procedures/functions which are part of the algorithm design Describe the purpose of a structure chart Construct a structure chart for a given problem Derive equivalent pseudocode from a structure chart
Show understanding of the purpose of state-transition diagrams to document an algorithm

来源:剑桥国际大纲

Structure chart

一个结构图(structure chart)显示一个程序到模块(子程序(subroutines))的层次分解(hierarchical decomposition)以及它们之间传递的参数(parameters)。每个模块是一个矩形;线把调用者(上方)连到被调用者(下方);小箭头显示数据往下走、结果往上回。这个设计随后可被变成等价的伪代码(pseudocode)。

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

它是一个设计阶段的工具,你可以从它读出过程签名。

一张结构图,顶部是 Convert temperature,下方是 INPUT、Convert to Celsius 和 OUTPUT 模块,连线上带 temperature 参数
一张结构图:模块及它们之间传递的参数

考官会问的符号。 一个框是一个模块;一条线把调用者(上方)与它调用的模块(下方)连起来,按调用顺序从左到右读。尾部带空心圆的小箭头是数据耦合——向传入模块的参数或向返回的值;带实心圆的箭头是控制耦合,一个告诉调用者发生了什么的标志(通常是 BOOLEAN)。分支处的菱形表示选择:根据条件,只调用它下方模块中的一个。横扫各连线的弯曲箭头表示迭代:它下面的模块在循环中被反复调用。

一张展示全部符号的结构图:模块框、调用线、向下传递 item ID 的空心圆数据耦合、向上返回库存标志的实心圆控制耦合、在 Print invoice 和 Reject order 之间选择的菱形,以及标记每份订单重复调用的模块的弯曲箭头
结构图符号:数据耦合与控制耦合、选择菱形和迭代箭头

例题。 四个模块定义为 PROCEDURE Main()PROCEDURE ReadData(BYREF Count : INTEGER)FUNCTION IsValid(Value : INTEGER) RETURNS BOOLEANPROCEDURE Report(Total : INTEGER, Count : INTEGER)。Main 调用 ReadData,然后对读入的每个值调用一次 IsValid,最后调用 Report。描述这张结构图。

Main 在顶部;ReadData、IsValid 和 Report 在它下方一行,按调用顺序从左到右。ReadData 的连线上有一个向上的数据耦合 Count(BYREF 参数会传回来)。IsValid 的连线上有一个向下的数据耦合 Value 和一个向上的控制耦合(BOOLEAN 结果),这条连线上还有一个弯曲的迭代箭头,因为它对每个值都被调用。Report 的连线上有两个向下的数据耦合 TotalCount。反过来读,凡返回值的模块都是函数——它的头部需要 RETURNS 和返回类型。

State-transition diagram

一个状态转换图(state-transition diagram)显示一个系统可以处于的状态(states)以及在它们之间移动它的事件——适合自动售货机、交通灯、用户界面。状态转换图被用来记录一个算法或系统的行为。每个状态是一个圆;每个转换是一个用事件标注的箭头。

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

它使遗漏的转换容易被发现("如果在等待选择时投入第二枚硬币会怎样?")。

一张状态图:Locked 到 Waiting for second digit 到 Waiting for third digit 到 Unlocked,带正确数位和错误数位的转换
一个代码为 259 的门锁的状态转换图

读图与画图。 每个转换标注为输入 | 输出(或条件 | 动作):发生了什么,然后系统在改变状态时做什么。题目会给一张当前状态、输入、输出、下一状态的表并要求画图,或者反过来——表中的每一行恰好是一个箭头。检查每个状态对每种可能出现的输入都有一个离开它的箭头,包括让状态保持不变的那些(绕回同一状态的箭头)。

例题。 一个水泵控制器有水泵关水泵开两个状态。在水泵关时,输入检测到低水位产生输出启动水泵并转到水泵开;在水泵开时,检测到正常水位产生停止水泵并转到水泵关。其他任何输入都不改变状态。画出表格。

当前状态 输入 输出 下一状态
水泵关 检测到低水位 启动水泵 水泵开
水泵关 检测到正常水位 水泵关
水泵开 检测到正常水位 停止水泵 水泵关
水泵开 检测到低水位 水泵开

两行"无变化"在图上是自环箭头;漏掉它们会丢完整性的分。

探索

Software process lab

Classify development examples by the stage or tool they belong to.

词汇表 训练
英文 中文 拼音
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ǎ
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
观看视频课 练习卷 双页
12.3

程序测试与维护

大纲
Candidates should be able to: Notes and guidance
Show understanding of ways of exposing and avoiding faults in programs
Locate and identify the different types of errors syntax errorslogic errorsrun-time errors
Correct identified errors
Show understanding of the methods of testing available and select appropriate data for a given method Including dry run, walkthrough, white-box, black-box, integration, alpha, beta, acceptance, stub
Show understanding of the need for a test strategy and test plan and their likely contents
Choose appropriate test data for a test plan Including normal, abnormal and extreme/boundary
Show understanding of the need for continuing maintenance of a system and the differences between each type of maintenance Including perfective, adaptive, corrective
Analyse an existing program and make amendments to enhance functionality

来源:剑桥国际大纲

  • syntax error(语法错误)——破坏语言的语法(遗漏括号、拼错关键字)。在翻译时被捕获;在修正之前程序不会运行。
  • run-time error(运行时错误)——在运行时发生(除以零、文件未找到、数组索引越界)。程序崩溃或抛出一个异常;通过添加检查来修正。
  • logic error(逻辑错误)——程序运行但给出错误的结果(用 + 代替 -、一个差一的循环、条件顺序错误)。最难找到;唯一的迹象是错误的输出,所以用仔细的测试和追踪。
一个从写代码到翻译到运行到输出的流水线:一个语法错误在翻译时停住它,一个运行时错误在运行期间崩溃,一个逻辑错误运行正常但给出错误的输出
每种错误何时出现:语法在翻译时,运行时在运行期间,逻辑在输出中

暴露和避免故障。 故障通过对照测试计划的测试、手工跟踪或跟踪表、与同事的走查,以及 IDE 的调试器(断点、单步执行、监视变量)被暴露。它们通过先设计后编码(结构图、伪代码)、带有意义的标识符和注释的模块化代码、对每个输入的验证、处理异常而不是让运行时错误使程序崩溃,以及 IDE 在输入时的动态语法检查被避免

例题。 说出每种情况的错误类型及其表现。(a) Result <- STR_TO_NUM(x) / STR_TO_NUM(y)y = "0" 时运行。(b) 同一行在 x = "12a" 时运行。(c) 写成 FOR i <- 1 TO 9 的循环处理一个十元素数组。(d) OUTPUT "Total: " Total 少了一个逗号。

(a) 运行时错误——除以零;这一行用这个数据执行时程序崩溃。(b) 运行时错误——字符串无法转换成数字。(c) 逻辑错误——程序能运行,但第十个元素从未被处理,所以输出错误。(d) 语法错误——该语句违反语言规则,在程序运行前就被翻译器报告。

例题。 纠正这段伪代码中的错误,它应当输出十个分数的平均值。

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

除数应当是 10 而不是 9(逻辑错误);输出行在字符串和值之间需要一个逗号或 &(语法错误);Average 从未被声明为 REAL(语法或运行时错误,取决于语言)。要说明是哪一行以及改正后的行是什么:Average <- Total / 10

词汇表 训练
英文 中文 拼音
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ù
观看视频课 练习卷 双页
12.3

测试方法

  • dry run(手工跟踪)——在纸上追踪代码,在一个表格里写下每个变量的值。
  • walkthrough(走查)——对代码的一次团队评审。
  • white-box testing(白盒测试)——从代码的内部结构设计,覆盖每条语句、分支和循环。
  • black-box testing(黑盒测试)——只从规格说明设计:喂入输入,检查输出。
  • integration testing(集成测试)——组合模块并测试它们之间的接口。
  • alpha testing(α测试)——由开发者/内部在发布前;beta testing(β测试)——由有限的一组真实用户在他们自己的环境中。
  • acceptance testing(验收测试)——由客户,以决定产品是否适合用途。
  • stub(桩)——一个还不存在的模块的占位符,以便结构可以自顶向下地被测试。
黑盒测试从规格说明工作;白盒测试代码的内部路径
黑盒测试规格说明;白盒测试代码路径

何时用哪种方法。 手工跟踪走查不需要计算机——手工跟踪是你用跟踪表(trace table)追踪算法;走查是作者逐行解释代码、同事寻找故障的会议,所以它还在团队中传播代码知识,并对照设计检查代码。白盒测试由能看到代码的人编写,目标是走遍每条路径;黑盒测试根据规格说明编写,只对照预期输出检查输入,所以用户或独立测试者也能做。集成测试在模块测试之后:单独通过的模块在它们之间传递的数据类型或顺序不对时仍会失败。α 测试在内部进行;β 测试把候选发布版交给一部分真实用户,他们从真实使用中报告故障;验收测试是客户在付款前对照需求检查成品。让自顶向下的测试在所有模块存在之前就能开始。

桩测试:被测的主程序调用一个完成的模块 A 和一个代替未写的模块 B 的桩,桩有真实的头部但只返回一个固定值
桩代替尚未编写的模块,使它上面的模块现在就能测试

例题。 程序通过内部测试后,被交给一组用户在发布前试用。说出这种测试的名称,并说明接下来发生什么。

β 测试——真实用户在自己的环境中使用,报告开发者没发现的故障。故障被纠正后,客户对照需求进行验收测试,然后程序发布;正式使用中发现的故障之后由纠正性维护处理。

例题。 给出用走查测试程序的三个好处。

错误由没有写这段代码的人发现,他们读代码时没有先入之见;逻辑对照设计和规格说明检查,而不只对照测试数据;几个人学会了代码的工作方式,有助于日后维护;不需要测试数据或能用的计算机,所以可以早做。

词汇表 训练
英文 中文 拼音
acceptance testing/əkˈseptəns ˈtestɪŋ/ 验收测试 yàn shōu cè shì
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
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ì
stub/stʌb/ zhuāng
12.3

测试策略与测试计划

一个测试策略(test strategy)是高层的方法——哪几种测试、谁做、何时,以及往前推进的标准。一个测试计划(test plan)是详细的测试清单——每个带输入数据、预期输出,以及一个记录实际输出的列。

各自包含什么。 测试策略说明在哪个阶段用哪些测试方法(程序员做模块测试,然后是集成、α、β、验收),每项由谁负责,需要什么测试数据,以及进入下一阶段的标准。测试计划列出各个测试:对每个测试,写明被测模块或功能、输入数据、选择该数据的理由(正常、异常、极端、边界)、预期结果、留给实际结果的空位,以及两者不同时怎么办。计划在设计阶段根据规格说明写成,这样它测的是程序应当做什么,而不是它碰巧做什么。

Choosing test data

对每个字段或条件,包含三种:

  • normal data(正常数据)——有效范围内的典型值(对于分数 0–100:5075)。
  • abnormal data(异常数据)——应当被拒绝的值(-10200"abc")。
  • extreme data(极端数据)——仍被接受的最大和最小值(0100)。
  • boundary data(边界数据)——在边缘的值,差一错误藏在那里(每个被接受的极端值和刚好在它外面被拒绝的值:0/-1100/101)。
一个分数字段 0 到 100 的数轴:正常值 50 和 75 在里面,极端值 0 和 100 在被接受的边界,而异常值 -1、101、-10 和 200 在外面被拒绝
一个 0–100 字段的测试数据:正常在里面,极端在边界,异常在外面

例题。 某字段接受 0 到 100 的考试分数。给出各类测试数据及其预期结果。正常数据:50 - 被接受,是范围内的典型值。异常数据:-10200"abc" - 全部被拒绝,因为超出范围或数据类型错误。极端数据:0100 - 仍然被接受的最大值和最小值。边界数据:跨在每个边缘两侧的成对值 - 被拒绝的 -1 配上被接受的 0,以及被接受的 100 配上被拒绝的 101。每个值都必须写上它的预期结果,否则这份测试计划什么也证明不了。极端数据和边界数据是最常被混淆的一对:极端值处在范围之内且被接受,而边界测试永远是边缘两侧的一值 - 那里正是差一错误藏身的地方。

例题。 一个部件的重量(精确到克)在目标 50 g 的 3 g 之内即合格,也就是 47 g 到 53 g(含)。写出这项检查的测试计划各行。

测试数据 类型 理由 预期结果
50 正常 范围内的典型值 接受
47、53 极端(边界) 仍必须被接受的最小和最大值 接受
46、54 边界 刚好在范围之外的值,差一错误会把它们接受 拒绝
20、90 异常 远在范围之外的值 拒绝
"abc"、−5 异常 类型错误、负的重量 拒绝

每一行都必须说明为什么选这个值和应当发生什么;光列一串数字不得分。

词汇表 训练
英文 中文 拼音
test plan/test plæn/ 测试计划 cè shì jì huà
boundary data/ˈbaʊndəri ˈdeɪtə/ 边界数据 biān jiè shù jù
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ù
12.3

维护

一个程序生命期成本的大部分在维护中。三种:

三种维护:完善性、适应性和纠正性
三种维护:完善性、适应性和纠正性
  • perfective maintenance(完善性维护)——即使它能工作,也改进性能或功能(一个更快的查询、一个新选项)。
  • adaptive maintenance(适应性维护)——在一个变化的环境中保持它工作(一个新 OS、一个新 API、一个法律变更)。
  • corrective maintenance(纠正性维护)——修复使用中发现的漏洞。

一个程序在它一生中可能需要全部三种。

为什么需要每一种——标准答案列出的原因。 纠正性:发布后用户报告了故障,或在测试未覆盖的特定情况下发现输出不正确。适应性:操作系统、硬件或浏览器升级;法律或公司规定改变(税率、数据保护要求);程序必须与新的外部系统或文件格式配合。完善性:用户要求额外功能或更好的界面;程序被做得更快或占用更少内存;整理代码以便日后修改。

例题。 (a) 一个已发布的程序在某些情况下输出错误的值。(b) 运行程序的硬件被更换。(c) 顾客要求咖啡店的积分程序在顾客生日时发送消息。说出每种情况的维护类型。

(a) 纠正性——修复交付程序中的故障。(b) 适应性——修改程序以在新环境中运行。(c) 完善性——给一个已经能工作的程序增加功能。

词汇表 训练
英文 中文 拼音
corrective maintenance/kəˈrektɪv ˈmeɪntənəns/ 纠正性维护 jiū zhèng xìng wéi hù
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ù
12.3

修改现有程序

当被要求添加一个功能或修复一个漏洞时:

  1. 阅读现有代码,直到你理解算法和数据流。
  2. 找出改动在哪里——哪个子程序、哪些行。
  3. 让改动尽可能小——不要重写能工作的代码。
  4. 更新相关部分——一个改动过的参数列表的每个调用者、使用一个改动过的数据结构的每个例程。
  5. 测试新行为旧行为(回归测试(regression testing)——检查你没弄坏任何东西)。
  6. 记录改动。

清晰的注释、有意义的名称、分解的子程序和一张结构图使一个程序更容易被修改——这就是为什么设计工具即使在首次发布之后也重要。

分析一个不是你写的程序。 从标识符表和模块头开始:在读它的任何一行主体之前,它们已经告诉你每个模块接收什么、返回什么。然后用跟踪表对一个小输入追踪算法,记下每个输出值来自哪里。这之后再决定增强功能放在哪里——通常是从现有模块调用的一个新模块,这样能工作的代码被扰动得最少——并写出改动的伪代码和证明它的测试数据。

词汇表 训练
英文 中文 拼音
regression testing/rɪˈɡreʃn ˈtestɪŋ/ 回归测试 huí guī cè shì
12.3

考官认可的定义

定义题按固定措辞给分。把这些记准,并且只给一个答案。

术语 定义
开发生命周期 为产出并支持一个程序而遵循的、从分析到维护的一系列阶段
瀑布模型 各阶段按固定顺序进行、每个阶段完成后下一个才开始的生命周期
迭代模型 先产出一个可运行版本、然后反复完善直到完成的生命周期
快速应用开发 快速构建原型并用用户反馈完善直到被接受的生命周期
结构图 显示程序如何分解成模块、模块的调用顺序以及它们之间传递的参数的图
状态转换图 显示系统可能处于的状态以及使其在状态间转移的输入的图
语法错误 语句书写方式的错误,违反语言规则而无法翻译
逻辑错误 算法中的错误,程序能运行但产生错误的结果
运行时错误 程序运行期间发生并使其停止的错误,如除以零
手工跟踪 手工执行算法,在跟踪表中记录变量的值
走查 作者与寻找错误的同事一起逐步过一遍代码的评审
头部正确、返回固定值的占位模块,用来测试调用它的模块
测试计划 将要进行的测试的清单,每项带有测试数据、选择数据的理由和预期结果
边界数据 有效范围每一边缘处的值,既包括最后一个被接受的值,也包括第一个被拒绝的值
纠正性 / 适应性 / 完善性维护 修复使用中发现的故障 / 改变程序以适应变化的环境 / 改进已经能工作的程序
12.3

考试技巧

  • 原则、好处、缺点比较开发模型(瀑布、迭代、RAD),并知道程序开发生命周期的五个阶段及各自的产出。
  • 按每种错误何时显现来区分语法、逻辑和运行时错误:翻译时、输出中、运行期间。
  • 选择每一类测试数据——正常、异常、极端和边界——并给出每个值的理由和预期结果。
  • 为什么改动来区分各类维护(纠正性、适应性、完善性)。
  • 在结构图上说出每个符号的名称:框、调用线、数据耦合、控制耦合、选择菱形、迭代箭头。从图中读出模块头时,记住函数有 RETURNS

常见错误

  • 只用名称描述生命周期的阶段("在设计阶段设计程序")。要说产出什么:结构图、伪代码、测试计划。
  • 把错误的输出叫作"运行时错误"。如果程序运行到结束,那是逻辑错误。
  • 把边界数据只给成极端值。得分需要边缘两侧的值。
  • 把 α 测试和 β 测试当成一回事。α 由开发者在内部做;β 由外部真实用户做。
  • 混淆适应性和完善性维护。适应性是对程序之外变化的响应;完善性是改进一个没人非改不可的程序。
  • 结构图上模块随意排列。它们按调用顺序从左到右读,每个参数都需要它的箭头。

本主题的互动课程

逐步学习,并即时检测练习。

A-Level 计算机科学历年真题

A-Level 计算机科学的更多主题

登录或创建账号

IGCSE, A-Level & AP