测试原则
◇ 4/26 套 · 近年 2/12测试是为了发现错误而执行程序;成功的测试是发现了至今未发现的错误。测试只能证明有错,不能证明没错。
易错尽早、不断地测试;用例 = 输入 + 预期输出,合理与不合理的输入都要测;错误有集群现象
怎么记测试是为了找错,不是为了证明正确。已经发现错误越多的程序段,残存的错误往往也越多。
D2 里要死记的内容都在这一页:5 组考点、41 张卡片和表,每组都标了考频,最后一组是晚间的知识产权(著作权)。McCabe 环路复杂度、逻辑覆盖、关键路径要按步骤算,放在配套的技巧图解里。
黑盒白盒 · 等价类铁律 · 各阶段查什么
逻辑覆盖六级和 McCabe 环路复杂度要会算,在配套的像素视频里;这一页只背概念。
| 依据 | 方法 / 查什么 | |
|---|---|---|
| 白盒测试 | 程序内部逻辑 | 逻辑覆盖(语句 < 判定 < 条件 < 判定/条件 < 条件组合 < 路径)、基本路径测试 |
| 黑盒测试 | 规格说明,不看代码 | 等价类划分、边界值分析、错误推测、因果图(判定表) |
| 单元测试 | 详细设计 | 模块内部:模块接口、局部数据结构、重要执行路径、出错处理、边界条件 |
| 集成测试 | 概要设计 | 模块之间的接口和参数传递 |
| 确认测试 | 需求规格说明 | α 测试在开发方场地,β 测试在用户场地;最后用户做验收测试 |
| 系统测试 | 目标来自需求分析 | 整个系统的功能和非功能要求(性能、压力、安全……) |
易错拿不到源代码的第三方组件只能用黑盒;逻辑覆盖属于白盒,不是黑盒技术。
测试是为了发现错误而执行程序;成功的测试是发现了至今未发现的错误。测试只能证明有错,不能证明没错。
易错尽早、不断地测试;用例 = 输入 + 预期输出,合理与不合理的输入都要测;错误有集群现象
怎么记测试是为了找错,不是为了证明正确。已经发现错误越多的程序段,残存的错误往往也越多。
白盒:依据程序内部逻辑,逻辑覆盖、基本路径。黑盒:依据规格说明,不看内部:等价类、边界值、错误推测、因果图。
易错拿不到源代码的第三方组件只能用黑盒;逻辑覆盖不属于黑盒技术
怎么记白盒看内部逻辑,黑盒只看规格说明。拿不到源代码,只能黑盒;问哪个不属于黑盒技术,就选逻辑覆盖。
等价类分有效和无效:一个用例可覆盖多个有效类,但最多覆盖一个无效类。边界值:测边界两侧,如 3499、3500、3501。
怎么记一个用例里如果同时有两个非法值,出错了分不清是哪个引起的,所以每个用例最多放一个无效等价类。
单元测试:对应详细设计,查模块内部;集成测试:对应概要设计,查模块之间的接口;系统测试:目标来自需求分析,验证功能和非功能要求。
补充确认测试:α 测试在开发方场地,β 测试在用户场地;最后用户做验收测试
怎么记模块之间参数类型传错,是接口问题,单元测试发现不了,要靠集成测试;系统测试的目标来自需求分析阶段。
模块接口、局部数据结构、重要的执行路径、出错处理、边界条件。
易错全局数据结构不在其中;“使用未初始化的变量”属于局部数据结构;驱动模块模拟上级,桩模块模拟下级
怎么记单元测试查五项,全局数据结构不在里面。驱动模块模拟上级来调用它,桩模块模拟它要调用的下级。
自顶向下:要写桩模块,能较早验证主要的控制和判断点。自底向上:要写驱动模块、不用写桩,主要设计问题到后期才发现。三明治:两者结合。
易错三明治能较早验证主控和底层、并行度高;官方口径:“桩和驱动工作量较少”不算它的优点
怎么记记方向:自顶向下,下级还没写好,写桩;自底向上,上级还没写好,写驱动。
修改程序之后(比如改正一个错误)重新测试,确认修改没有引入新错误,原来正确的代码也没被改坏。
怎么记只要程序一改,就要做回归测试,防止改出新的错误。
先在心里说出答案,再点开核对。
年份 0 和月份 13 都是无效值,C 同时覆盖了两个无效等价类,出错时分不清是哪个输入引起的,所以 C 不合适。
26 套里考得最多的一个考法
先用一句话判断:改老错是正确性,外面变了是适应性,要更多更好是完善性,为了将来是预防性。
| 类型 | 一句话 | 真题里的场景 |
|---|---|---|
| 正确性维护(改正性) | 改老错误:开发时就有、测试没发现 | 改正开发阶段已发生、测试阶段没发现的错误(09下·34) |
| 适应性维护 | 外部变了:软硬件平台、外部系统、数据格式、市场和管理需求 | 信用卡公司升级支付系统,超市系统跟着改(12下·34);官方口径:多币种付款、语音输入(09上·36、14上·34) |
| 完善性维护(改善性) | 要更多更好:新功能、更快、更好用 | 改进排序算法让它更快(11下·33)、改进图形输出(17下·36)、增加监控设施(11上·34) |
| 预防性维护 | 为将来:提高以后的可维护性和可靠性 | 把专用报表功能改成通用的报表生成功能 |
易错多币种付款、语音输入看着像加功能,官方答案都是适应性(适应新的市场和管理需求),考到原题按官方答案选。
改正在开发阶段已经存在、而测试阶段没有发现的错误。
易错防错性程序设计可以有效控制正确性维护的成本
怎么记正确性维护改的是遗留下来的老错误。
软硬件平台、对接的外部系统、数据格式变了,或企业的市场环境和管理需求变了,软件为了适应而修改。
易错官方口径:网银扩充多币种付款、搜索引擎增加语音输入,都判为适应性
怎么记外部变了软件跟着变,就是适应性。注意两道题:多币种付款和语音输入,看起来像加功能,官方答案都是适应性,理由是适应新的市场和管理需求,考到原题就按官方答案选。
满足用户提出的新功能、新性能要求:扩充功能、提高运行效率、改进界面或图形输出、增加监控设施。
补充工作量最大,占全部维护工作的一半以上
怎么记修改排序算法让它更快、改进图形输出、为运行增加监控设施,都是完善性维护。
为了将来的可维护性和可靠性主动改造软件,比如把专用报表功能改成通用的报表生成功能。
怎么记预防性维护是为了以后:现在没坏,先改好。
三个指标:可理解性、可测试性、可修改性。公式:可维护性 = 1 / (1 + MTTR)。
易错可扩展性、可移植性不是评价指标;MTTF / (1 + MTTF) 是可靠性
怎么记可维护性三个指标:可理解、可测试、可修改,可扩展、可移植都是干扰项。
维护期比开发期长得多、投入大得多;可维护性是开发各阶段的关键目标,受文档影响。
易错“到维护阶段才考虑可维护性”“不受文档影响”都是错的;逆向工程在维护阶段进行
怎么记可维护性不是到维护阶段才考虑的,开发的每个阶段都要考虑;文档好,可维护性就高。
先在心里说出答案,再点开核对。
看起来像加功能,但官方答案是适应性:为了适应新的市场和管理需求,数据类型也要跟着改。考到原题就按官方答案选 B。
6 个特性 · 子特性归属是高频判断
六个特性连成一句话:功能可靠,易用高效,好维护,能移植。最常考的是“某个子特性属于哪个特性”。
| 特性 | 子特性 | 怎么记 |
|---|---|---|
| 功能性 | 适合性、准确性、互用性、依从性、安全性 | 把事办对、办安全:安全性在这里,不在可靠性 |
| 可靠性 | 成熟性、容错性、易恢复性 | 少出错 → 出错扛得住 → 坏了能恢复 |
| 易用性 | 易理解性、易学性、易操作性 | 三个都带“易”;易分析性不在这里 |
| 效率 | 时间特性、资源特性 | 只有两个 |
| 可维护性 | 易分析性、易改变性、稳定性、易测试性 | 修东西的顺序:查 → 改 → 不出新毛病 → 验 |
| 可移植性 | 适应性、易安装性、共存性、易替换性 | 搬到新环境:适应、装得上、和别人共处、能顶替旧的 |
易错最容易错的三处:安全性归功能性;易分析性、易测试性归可维护性;易恢复性归可靠性。
适合性、准确性、互用性、依从性、安全性。
易错安全性:防止对程序和数据的非授权访问,归功能性,不归可靠性
怎么记最容易错的是安全性:它在功能性下面。把每个用户的数据和其他用户隔离开,考的就是功能性。
成熟性、容错性、易恢复性。
补充易恢复性:故障发生后重新建立性能、恢复受影响的数据(如 90 秒内恢复)
怎么记可靠性三个:成熟、容错、易恢复。故障后九十秒内恢复性能和数据,就是易恢复性。
易理解性、易学性、易操作性。
易错易分析性不属于易用性,它在可维护性下面
怎么记易用性三个都带“易”:易理解、易学、易操作。易分析是可维护性的。
时间特性、资源特性。
怎么记效率只有两个:时间和资源。
易分析性、易改变性、稳定性、易测试性。
补充易测试性:与确认经修改软件所需努力有关的属性
怎么记可维护性四个:易分析、易改变、稳定、易测试。
适应性、易安装性、共存性、易替换性。
易错易理解性不属于可移植性
怎么记可移植性四个:适应、易安装、共存、易替换。
McCall 三个视角:产品运行、产品修正、产品转移。正式技术评审的目标:发现软件中的错误。
易错“灵活性”属于产品修正;可靠性取决于潜在错误的数量、位置和使用方式,与开发方式无关;设计质量评审不含“模块层次”
怎么记正式技术评审就是为了发现错误,不是为了评价程序员。McCall 的灵活性属于产品修正,不属于产品运行。
功能适合性、性能效率、兼容性、易用性、可靠性、信息安全性、维护性、可移植性。和 9126 比:效率改叫性能效率,新增兼容性和信息安全性。
补充26 套真题都按 9126 出,只有题目明说 25010 时才用这张:按 25010,互操作性、共存性归兼容性,保密性归信息安全性;可靠性多了一个可用性。
怎么记记两个“新增”:兼容性(和别的系统共存、互操作),信息安全性(从功能性里独立出来)。
先在心里说出答案,再点开核对。
可靠性的三个子特性是成熟性、容错性和易恢复性;可移植性是另一个质量特性,不是可靠性的子特性,选 D。
风险、沟通、成本估算、文档、配置管理,加上两种进度图
关键路径、松弛时间要会算,在像素视频里;这一页只背概念和公式。
| 考点 | 记住 |
|---|---|
| 风险的两个特性 | 不确定性和损失 |
| 风险的类别 | 项目风险(规模、结构、复杂性的不确定)、技术风险(不成熟的前沿技术)、商业风险(市场、销售) |
| 风险分析四个活动 | 识别 → 预测(估计发生的可能性和后果)→ 评估(定义风险参照水准)→ 控制(建立处理风险的策略) |
| 风险的优先级 | 按风险暴露排:发生概率 × 损失 |
| 沟通路径 | 两两都能沟通:n(n-1)/2;主程序员组:n-1 |
| 成本估算 COCOMO | 基本 COCOMO:静态单变量;COCOMO Ⅱ 有三个阶段模型:应用组装、早期设计、体系结构 |
| 配置数据库 | 开发库、受控库、产品库 |
| 两种进度图 | 甘特图缺依赖关系,PERT 图缺并行情况 |
| PERT 三点估算 | 期望工期 = (乐观 + 4 × 最可能 + 悲观)÷ 6 |
不确定性和损失:可能发生也可能不发生,发生了会带来损失,可以干预来减少损失。
易错“一定会发生”“能预测就能避免”都是错的;已经确定的事实不是风险
怎么记风险是可能发生的坏事。一定会发生的,那叫事实,不叫风险。
项目复杂性、规模和结构的不确定 → 项目风险;采用不成熟的前沿技术 → 技术风险;市场、销售方面 → 商业风险。
怎么记项目自身的不确定是项目风险,技术不成熟是技术风险。
识别:找出威胁;预测:估计发生的可能性和后果;评估:定义风险参照水准;控制:建立处理风险的策略。
易错优先级按风险暴露= 概率 × 损失;主动控制以风险避免最好;风险监控不能消除风险
怎么记四个活动依次是识别、预测、评估、控制。定义风险参照水准是评估,建立处理风险的策略是控制;排优先级看风险暴露,不能只看后果。
提前培养后备人员,让项目组成员都了解开发信息,对工作组织细致的评审。
易错“临时招聘新职员”最不合适:新人不了解项目
怎么记应对风险靠提前准备。等人走了再临时招人,新人不了解项目,起不到作用。
两两都能沟通(无主程序员组):n(n-1)/2,8 人 = 28 条。主程序员组:成员只和主程序员沟通,n-1,8 人 = 7 条。
易错无主程序员组适合人少、新技术、确定性小的项目,不宜大规模;进度落后时加人不一定能加快进度
怎么记八个人两两沟通是八乘七除以二,二十八条;主程序员组只有七条。
基本 COCOMO:静态单变量;中级:静态多变量;详细:还考虑各阶段的成本驱动。COCOMO Ⅱ:以规模为主,三个阶段模型:应用组装、早期设计、体系结构。
易错COCOMO Ⅱ 的规模用对象点、功能点或代码行;几种估算方法结合也得不到精确结果
怎么记基本 COCOMO 是静态单变量模型;COCOMO 二有三个阶段性模型。
文档是软件不可缺少的部分,能提高开发效率和可见度。高质量文档:针对性、精确性、清晰性、完整性、灵活性、可追溯性。
易错“无重复性”不是质量特性;开发人员与管理人员沟通用系统开发计划(含 PERT 图、预算分配表)
怎么记文档考得很多:它能提高开发效率,“编写文档会降低开发效率”是错的;高质量文档没有“无重复性”这一条。
贯穿全过程:变更标识、变更控制、版本控制、配置状态报告。配置数据库:开发库、受控库、产品库。
易错质量控制、风险管理不属于配置管理;“信息库”不是配置数据库
怎么记配置管理管的是变更。质量控制、风险管理都不属于它;配置数据库只有开发库、受控库和产品库。
甘特图(Gantt)用横条表示任务,能清楚表示任务的开始和结束时间、持续时间、进展,以及任务之间的并行;PERT 图能表示任务之间的依赖关系(谁完成后谁才能开始)和关键路径。
易错甘特图不能清晰反映任务之间的依赖关系和关键任务;PERT 图不能清晰描述任务之间的并行情况。别对调。
怎么记一句话:甘特图缺依赖,PERT 图缺并行。
题目规定第一批活动从第 1 天开始时,算出的最早开始时间要再加 1。PERT 三点估算:期望工期 = (乐观 + 4×最可能 + 悲观) / 6。
补充同一个人要做两个活动时只能串行,比较两种先后顺序,取工期较短的那种
怎么记第一批活动从第一天开始,最早开始时间要加一;PERT 三点估算是乐观加四倍最可能再加悲观,除以六。
先在心里说出答案,再点开核对。
风险的优先级要按风险暴露来定,也就是发生概率乘以损失,只看后果是不对的,所以选 A。
D2 晚间任务;专利、商标、商业秘密在 D3 晚间
知识产权每套卷子固定 3 分左右,几乎全是背的。著作权和专利、商标最大的不同:不用申请,写完就有。
| 问题 | 答案 |
|---|---|
| 什么时候产生? | 作品(软件)完成之日起自动产生,不用登记,也不用发表 |
| 保护什么? | 计算机程序及其有关文档 |
| 不保护什么? | 开发软件所用的思想、处理过程、操作方法、数学概念 |
| 两个基本法律文件 | 《中华人民共和国著作权法》和《计算机软件保护条例》 |
| 哪些权利永久保护? | 署名权、修改权、保护作品完整权 |
| 发表权和财产权保护多久? | 自然人:终生 + 死后 50 年;单位:首次发表后 50 年(都截止于第 50 年的 12 月 31 日) |
| 职务作品归谁? | 单位(开发者保留署名权) |
| 委托开发归谁? | 先看合同;没有合同或没有约定,归受托方 |
| 买正版软件光盘得到什么? | 那张光盘的所有权,不是著作权 |
| 不知情用了盗版? | 也算侵权:不赔偿,但要停用、销毁;停用损失重大的,付合理费用后可以继续用 |
著作权自作品完成之日起自动产生,不需要登记,也不需要发表;软件著作权属于软件开发者。软件著作权保护程序和文档,不保护开发软件所用的思想、处理过程、操作方法和数学概念。
易错两个基本法律文件是《著作权法》和《计算机软件保护条例》,条例是国务院颁布的,不是国家知识产权局;法律法规本身不受著作权法保护。
怎么记著作权写完就有;专利、商标要申请才有。
人身权有发表权、署名权、修改权、保护作品完整权,其中署名权、修改权、保护作品完整权保护期不受限制。发表权和财产权(复制、发行、出租、展览、信息网络传播、翻译……)有期限:自然人作品为作者终生及死后 50 年,单位作品为首次发表后 50 年。
易错发表权、发行权、展览权都有期限,问“保护期不受限制”时别选;可以续展、能“无限期拥有”的是注册商标(每次 10 年),著作权和专利都不能续展。
怎么记署名、修改、保护作品完整这三项跟着作者本人走,永远保护;发表权和财产权一起算期限。
职务作品:为完成本职工作、按单位规定开发的软件和文档,著作权归单位,开发者享有署名权。委托开发:有书面合同的按约定;没有合同或合同没约定,归受托方(接活儿、实际开发的一方)。
易错“除署名权外归个人”“公司与个人共同享有”都是错项;个人把职务软件登记在自己名下,登记证书可以撤销;受非任职单位委托开发,同样是有约定从约定、没约定归受托人。
怎么记在单位上班写的归单位;接活儿写的先看合同,合同没写就归干活的人。
合理使用可以不经许可、不付报酬(比如个人学习研究、适当引用已发表的作品),但要指明作者和作品名称。买软件光盘只得到光盘的所有权;买美术作品原件得到原件的所有权和展览权,著作权不跟着转移。
易错独家许可(真题口径):权利人不能再许可第三方,但自己可以用;继承人可以继承财产权,不继承署名权。软件的翻译权是把软件从一种自然语言文字转换成另一种(11上·10 资料答案按旧口径,见高频考点总结的存疑题)。
怎么记买到的是“东西”,不是“权利”:光盘、画作原件都只是载体。
不知道是侵权复制品也算侵权:不承担赔偿责任,但要停止使用、销毁;停用会造成重大损失的,可以向著作权人支付合理费用后继续使用。常见侵权:更改他人的开发者署名、离职带走职务源码、销售时附送所购工具软件的复制品、把受托开发的软件略改后交给另一家。
易错“不侵权,可以继续使用”是错项;别人没注册的商标被抢先注册,不算侵权(商标权归先注册的人)。
怎么记盗版不会因为“不知道”就变正版:不赔钱,但得停用;实在停不了,补钱继续用。
先在心里说出答案,再点开核对。
按公司规定完成本职工作开发的软件是职务软件,著作权归公司;王某只享有署名权。A、C、D 都把权利分给了个人。
这是委托开发,不是职务作品:有约定从约定,没有约定的归受托人李某。