




已阅读5页,还剩98页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1 编码 2 概述 软件编码是软件设计的自然结果 该阶段的主要任务是将详细设计产生的每个模块的程序设计说明书转换成用某种程序设计语言编写的源程序 编码阶段要交付的文档是程序 编码是软件开发的最终目标 是产生能在计算机上执行的程序 分析阶段和设计阶段产生的文档 都不能在计算机上执行 只有到了编码阶段 才产生可执行的代码 executablecodes 把软件的需求真正付诸实现 所以编码阶段也称为实现 implementation 阶段 3 概述 主要内容程序设计语言的特色程序设计风格 4 程序设计语言的分类 大体上 程序设计语言分为以下几类 机器语言汇编语言高级语言 5 编码语言的发展和分类 第4代语言 6 程序设计语言的选择 理想标准应该有理想的模块化机制 以及可读性好的控制结构和数据结构 以使程序容易测试和维护 同时减少软件生存周期的总成本 应该使编译程序能够尽可能多地发现程序中的错误 以便于调试和提高软件的可靠性 应该有良好的独立编译机制 以降低软件开发和维护的成本 7 程序设计语言的选择 实践标准选择客户具有经验和支持工具的语言 选择适合应用特点的语言 选择信息内聚性最大的语言 选择具有最佳成本 效率比的语言 选择风险最小的语言 8 选择一种语言 项目的应用领域科学工程计算数据处理与数据库应用实时处理系统软件人工智能软件开发的方法软件执行的环境算法和数据结构的复杂性软件开发人员的知识 9 程序设计风格 codingstyle 程序实际上也是一种供人阅读的文章 有一个文章的风格问题 应该使程序具有良好的风格 编码风格包括4个方面源程序文档化数据说明语句结构输入 输出方法 10 源程序文档化 标识符的命名安排注释程序的视觉组织 11 标识符的命名 符号名即标识符 包括模块名 变量名 常量名 标号名 子程序名 数据区名以及缓冲区名等 名字应能反映它所代表的实际东西 应有一定实际意义 应该见名知意 例如 表示次数的量用Times 表示总量的用Total 表示平均值的用Average 表示和的量用Sum等 12 程序的注释 夹在程序中的注释是程序员与日后的程序读者之间通信的重要手段 注释决不是可有可无的 一些正规的程序文本中 注释行的数量占到整个源程序的1 3到1 2 甚至更多 注释分为序言性注释和功能性注释 13 程序的注释 序言性注释通常置于每个程序模块的开头部分 它应当给出程序的整体说明 对于理解程序本身具有引导作用 有些软件开发部门对序言性注释做了明确而严格的规定 要求程序编制者逐项列出 14 程序的注释 有关项目包括 程序标题 有关本模块功能和目的的说明 主要算法 接口说明 包括调用形式 参数描述 子程序清单 有关数据描述 重要的变量及其用途 约束或限制条件 以及其它有关信息 模块位置 在哪一个源文件中 或隶属于哪一个软件包 开发简历 模块设计者 复审者 复审日期 修改日期及有关说明等 15 程序的注释 功能性注释功能性注释嵌入在源程序体内 用以描述其后的语句或程序段的处理功能 书写功能性注释 要注意以下几点 描述的对象是一段程序 而不是每一个语句 适当使用缩进和空行 使程序与注释易区别 注释一定要准确 不精确的甚至是错误的注释不仅对理解程序毫无帮助 反而会妨碍对程序的理解 16 程序的注释 例如 ADDAMOUNTTOTOTAL TOTAL AMOUNT TOTAL不好 如果注明把月销售额计入年度总额 便使读者理解了下面语句的意图 ADDMONTHLY SALESTOANNUAL TOTAL TOTAL AMOUNT TOTAL 17 视觉组织 恰当地利用空格 可以突出运算的优先性 避免发生运算的错误 例如 将表达式 A 17 ANDNOT B 49 ORC写成 A 17 ANDNOT B 49 ORC自然的程序段之间可用空行隔开 18 视觉组织 移行也叫做向右缩格 它是指程序中的各行不必都在左端对齐 都从第一格起排列 这样做使程序完全分不清层次关系 对于选择语句和循环语句 把其中的程序段语句向右做阶梯式移行 使程序的逻辑结构更加清晰 例如 两重选择结构嵌套 写成下面的移行形式 层次就清楚得多 19 视觉组织 IF THENIF THEN ELSE ENDIF ELSE ENDIF 20 数据说明 在设计阶段已经确定了数据结构的组织及其复杂性 在编写程序时 则需要注意数据说明的风格 为了使程序中数据说明更易于理解和维护 必须注意以下几点 1 数据说明的次序应当规范化2 说明语句中变量安排有序化3 当用一个语句说明多个变量名时 应当对这些变量按字母的顺序排列 4 对于复杂数据结构 应利用注释说明实现这个数据结构的特点 21 语句构造 使用标准的控制结构尽可能使用库函数首先应当考虑可读性注意GOTO语句的使用 22 输入和输出 输入 输出在设计和程序编码时都应考虑下列原则 对所有的输入数据都要进行检验 识别错误的输入 以保证每个数据的有效性 检查输入项的各种重要组合的合理性 必要时报告输入状态信息使得输入的步骤和操作尽可能简单 并保持简单的输入格式 输入数据时 应允许使用自由格式输入 应允许缺省值 输入一批数据时 最好使用输入结束标志 而不要由用户指定输入数据数目 23 输入和输出 在交互式输入时 要在屏幕上使用提示符明确提示交互输入的请求 指明可使用选择项的种类和取值范围 同时 在数据输入的过程中和输入结束时 也要在屏幕上给出状态信息 当程序设计语言对输入 输出格式有严格要求时 应保持输入格式与输入语句的要求的一致性 给所有的输出加注解 并设计输出报表格式 输入 输出风格还受到许多其它因素的影响 如输入 输出设备 例如终端的类型 图形设备 数字化转换设备等 用户的熟练程度 以及通信环境等 24 软件测试 25 测试的定义 为了发现程序中的错误而执行程序的过程 具体地说 软件测试是根据软件开发各阶段的规格说明和程序的内部结构而精心设计出一批测试用例 并利用测试用例来运行程序 以发现程序错误的过程 26 软件测试目的 1 测试是程序的执行过程 目的在于发现错误 2 一个好的测试用例在于能发现至今未发现的错误 3 一个成功的测试是发现了至今未发现的错误的测试 27 软件测试目的 测试的目的是想以最少的时间和人力 系统地找出软件中潜在的各种错误和缺陷 如果我们成功地实施了测试 我们就能够发现软件中的错误 28 软件测试目的 把证明程序无错当作测试目的不仅是不正确的 完全做不到的 而且对做好测试没有任何益处 甚至是十分有害的 软件测试要设法使软件发生故障 暴露软件错误 测试的 成功 与 失败 能够发现错误的测试是成功的测试 否则是失败的测试 29 软件测试目的 测试的目的是说明程序正确地执行它应有的功能 这种说法正确吗 例 程序Triangle 输入三个整数 表示一个三角形的三个边长 该程序产生一个结果 指出该三角形是等边三角形 等腰三角形还是不等边三角形 为说明其能正确执行它的功能 可使用 测试用例 3 4 5 5 5 6 6 6 6 程序都能给出正确结果 是否就可认为程序是正确的 30 软件测试的原则 1 应当把 尽早地和不断地进行软件测试 作为软件开发者的座右铭 2 测试用例应由测试输入数据和对应的预期输出结果这两部分组成 测试用例 测试数据 期望结果 3 程序员应避免检查自己的程序 4 在设计测试用例时 应当包括合理的输入条件和不合理的输入条件 31 软件测试的原则 5 除检查程序功能是否完备外 还应检查程序功能是否有多余6 应该完整地保留所有的测试文件包括测试数据集 预期的结果 程序执行的记录等 直至该软件产品废弃不用为止 7 一个模块或多个模块中有错误的概率与已发现错误的个数成正比 32 软件测试的对象 软件测试不等于程序测试 软件测试应贯穿于软件定义与开发的整个期间 据美国一家公司统计 查出的软件错误中 属于需求分析和软件设计的错误约占64 属于程序编写的错误仅占36 程序编写的许多错误是 先天的 需求分析 概要设计 详细设计以及程序编码等各阶段所得到的文档 包括需求规格说明 概要设计规格说明 详细设计规格说明以及源程序 都应成为软件测试的对象 33 测试与软件开发各阶段的关系 软件开发过程是一个自顶向下 逐步细化的过程软件计划阶段定义软件作用域软件需求分析建立软件信息域 功能和性能需求 约束等编码把设计用某种程序设计语言转换成程序代码 34 测试与软件开发各阶段的关系 测试过程是依相反顺序安排的自底向上 逐步集成的过程 35 测试的方法与技术 软件测试的策略和方法 静态测试方法 动态测试方法 人工测试方法 计算机辅助静分析方法 白盒测试方法 黑盒测试方法 36 静态测试 基本特征是在对软件进行分析 检查和审阅 不实际运行被测试的软件 静态测试约可找出30 70 的逻辑设计错误 对需求规格说明书 软件设计说明书 源程序做检查和审阅 包括 是否符合标准和规范 通过结构分析 流图分析 符号执行指出软件缺陷 37 动态测试 通过运行软件来检验软件的动态行为和运行结果的正确性动态测试的两个基本要素 被测试程序测试数据 测试用例 动态测试方法 1 选取定义域有效值 或定义域外无效值 2 对已选取值决定预期的结果 3 用选取值执行程序 4 执行结果与 2 结果相比 不吻合 程序有错 38 动态测试 两种常用的测试方法黑盒测试白盒测试 39 黑盒测试 根据被测试程序的功能来设计测试用例 不深入代码细节的测试方法称为动态黑盒测试 软件测试员充当客户来使用它 如果已知产品的功能 则可以对它的每一个功能进行测试 看是否都达到了预期的要求 这种方法是把测试对象看做一个黑盒子 测试人员完全不考虑程序内部的逻辑结构和内部特性 只依据程序的需求规格说明书 检查程序的功能是否符合它的功能说明 黑盒测试又叫做功能测试或数据驱动测试 40 白盒测试 如果已知产品的内部工作过程 则可以对它的每种内部操作进行测试 看是否符合设计要求 此方法把测试对象看做一个透明的盒子 它允许测试人员利用程序内部的逻辑结构及有关信息 设计或选择测试用例 对程序所有逻辑路径进行测试 通过在不同点检查程序的状态 确定实际的状态是否与预期的状态一致 因此白盒测试又称为结构测试或逻辑驱动测试 又称 开盒测试 结构测试 玻璃盒测试 基于覆盖的测试 41 黑盒测试与白盒测试比较 黑盒测试是从用户观点 按规格说明书要求的输入数据与输出数据的对应关系设计测试用例 是根据程序外部特征进行测试 白盒测试是根据程序内部逻辑结构进行测试 42 软件测试的特点 挑剔性复杂性不彻底性经济性 43 穷举测试 用黑盒测试发现程序中的错误 必须在所有可能的输入条件和输出条件中确定测试数据 来检查程序是否都能产生正确的输出 但这是不可能的 44 黑盒穷举测试示例 输入三角形三条边长可采用的测试用例数216 216 216 3 1014 设字长16位 执行时间 设测试一次需1ms 共需一万年 45 白盒穷举测试 例 含4个分支 循环次数 20 从A到B的可能路径 51 52 519 520 1013执行时间 设测试一次需1ms 穷举测试约需3170年 46 47 穷举测试 是不论黑盒还是白盒测试都不能进行穷尽测试 所以软件测试不可能发现程序中存在的所有错误 因此需精心设计测试方案 力争尽可能少的次数 测出尽可能多的错误 48 软件测试方法 黑盒测试方法白盒测试方法 49 黑盒测试方法 根据被测试程序的功能来设计测试用例 所以也称为功能测试 黑盒测试方法是在程序接口上进行测试 主要是为了发现以下错误 是否有不正确或遗漏了的功能 在接口上 输入能否正确地接受 能否输出正确的结果 是否有数据结构错误或外部信息 例如数据文件 访问错误 性能上是否能够满足要求 是否有初始化或终止性错误 50 黑盒测试方法 有4种常用技术 等价分类法边界值分析法错误猜测法因果图法 51 黑盒测试法 等价分类法等价分类 就是把输入数据的可能值划分为若干等价类 使每类中的任何一个测试用例 都能代表同一等价类中的其他测试用例 使用等价类划分设计测试用例时 完全不需要考虑程序的内部逻辑结构 而主要依据程序的功能说明 从所有可能的输入数据中选择一个具有代表性子集来进行测试 能尽可能多地发现程序中的错误 就是等价类划分法 该方法根据输入数据和输出数据的特点 将程序输入域划分成若干个部分 即子集 然后从每个子集中选取具有代表性的数据作为测试用例 52 等价分类法 如何划分等价类有效等价类 合理等价类 无效等价类 不合理等价类 划分等价类的标准 覆盖不相交代表性 53 用等价类划分法设计测试用例步骤 1 形成等价类表 每一等价类规定一个唯一的编号 2 设计一测试用例 使其尽可能多地覆盖尚未覆盖的有效等价类 重复这一步骤 直到所有有效等价类均被测试用例覆盖 3 设计一新测试用例 使其只覆盖一个无效等价类 重复这一步骤直到所有无效等价类均被覆盖 54 例 某报表处理系统要求用户输入处理报表的日期 日期限制在2001年1月至2005年12月 即系统只能对该段期间内的报表进行处理 如日期不在此范围内 则显示输入错误信息 系统日期规定由年 月的6位数字字符组成 前四位代表年 后两位代表月 如何用等价类划分法设计测试用例 测试程序的日期检查功能 55 第一步 等价类划分 报表日期 输入条件的等价类表 56 第二步 为有效等价类设计测试用例对表中编号为1 2 3的3个有效等价类用一个测试用例覆盖 57 第三步 为每一个无效等价类设至少计一个测试用例 测试数据期望结果覆盖范围 001MAY 等价类 4 输入无效 20015 等价类 5 输入无效 2001005 等价类 6 输入无效 200005 等价类 7 输入无效 200805 等价类 8 输入无效 200100 等价类 9 输入无效 200113 等价类 10 输入无效 不能出现相同的测试用例 本例的10个等价类至少需要8个测试用例 58 例 对招干考试系统 输入学生成绩 子模块设计测试用例 招干考试分三个专业 准考证号第一位为专业代号 如 1 行政专业 2 法律专业 3 财经专业 行政专业准考证号码为 110001 111215法律专业准考证号码为 210001 212006财经专业准考证号码为 310001 314015 59 例 准考证号码的等价类划分有效等价类 1 110001 111215 2 210001 212006 3 310001 314015无效等价类 4 110000 5 111216 210000 6 212007 31000 7 314016 60 边界值分析法 人们在长期的测试中发现 程序往往在处理边界值的时候容易出错 比如数组的下标 循环的上下界等 针对这种情况设计测试用例的方法就是边界值分析方法 边界值分析也属于黑盒测试 可以看作是对等价类划分的一个补充 在设计测试用例时 往往联合等价类划分和边界值分析这两种方法 61 边界值分析法 使用边界值分析方法设计测试用例时 首先要确定边界情况 通常输入等价类和输出等价类的边界 就是应该着重测试的程序边界情况 也就是说 应该选取恰好等于 小于和大于边界的值作为测试数据 而不是选取每个等价类内的典型值或任意值作为测试数据 62 边界值分析法 边界值分析法与等价类划分法区别 1 边界值分析不是从某等价类中随便挑一个作为代表 而是使这个等价类的每个边界都要作为测试条件 2 边界值分析不仅考虑输入条件 还要考虑输出空间产生的测试情况 软件边界与悬崖很类似 63 边界条件类型 如果软件测试问题包含确定的边界 那么数据类型可能是 数值字符位置数量速度地址尺寸 如果还要考虑数据类型的特征 第一个 最后一个最小值 最大值开始 完成空 满最慢 最快相邻 最远超过 在内 64 测试边界线 测试临近边界的合法数据 以及刚超过边界的非法数据 越界测试通常简单地加1或很小的数 对于最大值 和减1或很小的数 对于最小值 65 例 报表日期 边界值分析法测试用例 66 错误推测法 errorguessing 错误推测法的基本想法是 列举出程序中所有可能有的错误和容易发生错误的特殊情况 根据它们选择测试用例 例如 输入数据为零或输出数据为零的地方往往容易出错 各模块间对公有变量的引用也是容易出错的地方 常测试数据中的 缺省值 空白 空值 零值 无 67 因果图 因果图的适用范围如果在测试时必须考虑输入条件的各种组合 可使用一种适合于描述对于多种条件的组合 相应产生多个动作的形式来设计测试用例 这就需要利用因果图 因果图方法最终生成的就是判定表 它适合于检查程序输入条件的各种组合情况 68 白盒测试方法 以程序内部的逻辑结构为依据设计测试用例 所以又称为结构测试 软件人员使用白盒测试方法 主要想对程序模块进行如下的检查 对程序模块的所有独立的执行路径至少测试一次 对所有的逻辑判定 取 真 与取 假 的两种情况都至少测试一次 在循环的边界和运行界限内执行循环体 测试内部数据结构的有效性 等 69 白盒测试方法 根据逻辑覆盖的目标 又可以分为 语句覆盖判定覆盖条件覆盖判定 条件覆盖条件组合覆盖 70 例 SAMPLE FLOATA B X IF A 1 B 0 X X AIF A 2 X 1 X X 1 71 语句覆盖 语句覆盖就是设计若干个测试用例 运行被测程序 使得每一可执行语句至少执行一次 在例中 只需设计一个测试用例 输入数据 A 2 B 0 X 4 即达到了语句覆盖 ace 语句覆盖是最弱的逻辑覆盖 72 判定覆盖 判定覆盖就是设计足够的测试用例 使得程序中每个判定的取 真 分支和取 假 分支至少都执行一次 判定覆盖又称分支覆盖 判定覆盖比语句覆盖强 但是仍不能保证判断条件的正确性 例如 第二个判断条件中的x 1若错写成了x 1 利用上面的输入数据就不能检查出这个错误 73 判定覆盖 测试用例如果能够测试路径 ace 和 abd 就可以满足判定覆盖要求 可以设计如下两组输入数据 A 2 B 0 x 4A 1 B 1 x 1也可以让测试用例测试路径 abe 和 acd 相应的两组输入数据如下 A 2 B 1 x 1A 4 B 0 x 4 74 条件覆盖 条件覆盖就是设计足够的测试用例 使得程序判定中的每个条件能获得各种可能的结果 条件 A 1 B 0 A 2 x 1 需要有足够的测试用例使得上述四个条件都能有满足和不满足的情况 以下这两组输入数据能满足这些要求 A 2 B 0 x 4A 1 B 1 x 1 75 条件覆盖 上述两组数据不仅满足条件覆盖的要求 而且也满足判定覆盖的要求 但并不是所有的满足条件覆盖要求的数据都满足判定覆盖的要求 下面的两组数据满足条件覆盖的要求 A 1 B 0 x 3A 2 B 1 x 1但是这组数据不满足判定覆盖的要求 为了解决这个问题 可以采用下面的判定 条件覆盖 条件覆盖不一定包含判定覆盖 判定覆盖也不一定包含条件覆盖 76 判定 条件覆盖 判定 条件覆盖就是设计足够的测试用例 使得判定中的每个条件都取到各种可能的值 而且每个判定表达式也都取到各种可能的结果 对于上面的例子 下述两组输入数据能满足这些要求 A 2 B 0 x 4A 1 B 1 x 1 77 判定 条件覆盖 判定 条件覆盖仍有缺陷 从表面上看 它测试了所有条件的所有可能结果 但事实上并不是这样 因为某些条件掩盖了另一些条件 例如 在逻辑表达式中 如果 与 表达式中某一条件为 假 则整个表达式的值为 假 这个表达式中另外的几个条件就不起作用了 同样地 如果在 或 表达式中 某一条件为 真 则整个表达式的值为 真 其它条件也就不起作用了 因此 采用判定 条件覆盖时 逻辑表达式中的错误不一定能测试出来 78 条件组合覆盖 条件组合覆盖就是设计足够的测试用例 使得每个判定中的条件的各种可能组合都至少出现一次 显然 满足条件组合覆盖的测试数据 也一定满足判定覆盖 条件覆盖和判定 条件覆盖标准 但是 满足条件组合覆盖标准的测试数据并不一定覆盖了程序中的每条路径 79 条件组合覆盖 例可能的条件组合 1 A 1 B 0 2 A 1 B 0 3 A 1 B 0 4 A 1 B 0 5 A 2 x 1 6 A 2 x 1 7 A 2 x 1 8 A 2 x 1 相应的输入数据 A 2 B 0 x 4满足 1 和 5 A 2 B 1 x 1满足 2 和 6 A 1 B 0 x 2满足 3 和 7 A 1 B 1 x 1满足 4 和 8 利用上述四组测试数据就遗漏了路径 acd 80 软件测试的过程 81 软件测试策略 单元测试 U C D R S I V ST 集成测试 确认测试 系统测试 系统工程 软件需求分析 软件设计 代码编写 82 单元测试 单元测试又称模块测试 集中对软件设计的最小单位 模块进行测试 主要是为了发现模块内部可能存在的各种错误和不足 进行单元测试时 根据程序的内部结构设计测试用例 主要使用白盒测试法 由于各模块间相对独立 因而对多个模块的测试可以并行地进行 以提高测试效率 83 单元测试的内容 主要对模块的五个基本特性进行评价 模块 错误处理 模块接口 局部数据结构 重要的执行路径 边界条件 84 模块测试基本原则 至少测试所有语句一次测试所有可能的执行或逻辑路径的组合测试每个模块的所有入口和出口 85 单元测试的方法 单元测试一般为编码步骤的附属部分 模块不是独立的程序 自己不能运行 要靠其它部分来调用和驱动 要为每个单元测试开发两个软件 驱动模块 驱动程序 相当于主模块桩模块 测试存根 连接程序 代替所测模块调用的子模块 86 单元测试的测试环境举例 B A C D E 待测试模块 87 单元测试的测试环境举例 88 单元测试的测试环境举例 实际软件 华氏到慑氏转换模块 温度数据 实际配置 测试用例数据 结果 测试驱动软件 华氏到慑氏转换模块 结果 测试驱动际配置 89 单元测试的测试环境举例 温度显示模块 温度接口模块 实际配置 测试驱动际配置 温度显示模块 程序员编写的桩模块 测试存根 温度值的测试文件 90 集成测试 组装测试 集成测试 联合测试 通常 在单元测试的基础上 需要将所有模块按照设计要求组装成为系统 在单元测试的同时可进行组装测试 发现并
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 美美少年计划面试题及答案
- 肺炎治疗与康复
- 幼儿园运动会方案培训
- 2025年中国女式牛仔裤行业市场全景分析及前景机遇研判报告
- 4S店执行力培训
- 低血钾症状外科护理学
- 教育培训班教师工作总结
- CNAS认证实施流程
- 财务会计人员劳动合同续签与终止范本
- 电信礼仪培训
- 2025至2030中国汽车物流行业深度发展研究与企业投资战略规划报告
- 2025年四川富润招聘笔试冲刺题(带答案解析)
- 公司物流内部管理制度
- 公司资料部门管理制度
- 2025年数学中考专题复习课件:7.30 尺规作图
- 人教部编版五年级下册语文期末复习现代文阅读(含课内、课外)专项训练(三)(含答案)
- 育苗基地可行性研究报告
- 植物拓染教学课件
- 访谈保密协议书范本
- 医务人员职业暴露预防及处理课件
- 2025-2030年中国地效飞行器行业市场运行态势及发展前景研判报告
评论
0/150
提交评论