软件的实现阶段:软件编码,单元测试和综合测试。
软件编码是对软件设计的进一步具体化,其任务是将设计表示变换成用程序设计语言编写的程序。
软件测试是软件质量保证的重要手段,要成功开发出高质量的软件产品,必须认真计划并彻底地进行软件测试。
4.1软件编码
4.1.1程序设计语言
用于书写计算机程序的语言。
按照级别可以分为两大类:
①低级语言:包括机器语言和汇编语言,优点是执行速度快,但代码编写难度较大,可读性较差。另外,用它编写的程序与具体的机器有关,想要运行在不同的机器上,必须重写,但是在实现与硬件系统的接口部分时,易于实现且实现效率高。
机器语言是机器能直接识别的程序设计语言或指令代码。无须经过翻译。
汇编语言也称符号语言。要通过汇编过程转换成机器指令。
②高级语言:在一定程度上与具体机器无关,是有可移植性,更接近人的思维,易于编程,阅读和修改。但由于运行时需将其翻译成机器语言,运行效率相对较低,对硬件的可控性相对于低级语言较弱。
程序设计语言的选择:
①应用领域的不同决定选择的语言。
②系统用户的要求。
③程序员的经验和知识。
④开发和维护成本。
⑤软件可移植性要求。
4.1.2程序设计风格
①源程序文档化:包括标识符的命名,使用注释,程序的视觉组织。
标识符的命名应具有精练的意义,明确的名字,不与关键词同名。
使用注释应有助于对程序的阅读理解,不宜太多也不能太少。
程序的视觉组织:恰当地利用空格,空行和缩进来增加程序的层次性和清晰度。
②数据说明标准化:为使程序中的数据说明更易于理解和维护。应数据说明的次序规范化,说明语句中变量安排有序化,使用注释说明复杂数据结构。
③语句结构简单化。
④输入/输出方法规范化:
结构化程序设计应遵循以下重要原则:
使用语言中的顺序,选择,重复等有限的基本控制结构表示程序逻辑。
选用的控制结构只准许有一个入口和一个出口。
复杂结构应该用基本控制结构进行组合嵌套来实现。
4.1.3程序效率分析
复杂性度量解决多可选方案问题与在程序编写完成后,测试,评价程序。
程序复杂性主要指摸块内程序的复杂性其度量方法一般分为以下两种:
①代码行度量法:统计一个程序摸块的源代码行数目,并以源代码行数作为程序复杂性的度量,适用于控制结构比较简单的模块。
②McCabe度量法:基于程序控制流。使用程序控制流图进行McCabe度量。仅仅描绘程序的控制流程。
4.2软件测试概述
软件测试是为了发现错误而执行程序的过程。
4.2.1测试的目的和原则
两种不同的测试目的:
①从用户角度出发,他们普遍希望通过软件测试暴露出软件中隐藏的错误和缺陷,以考虑是否可以接受该产品。
②从软件开发者的角度出发,他们则希望测试成为表明软件产品中不存在错误的过程,验证该软件已正确地实现了用户的要求,确立用户对软件质量的信心。
软件测试目的观点:①测试是程序的执行过程,目的在于发现错误。②一个好的测试用例在于能发现至今未发现的错误。③一个成功的测试是发现了至今未发现错误的测试。
软件测试的原则:①应当把尽早地,不断地进行软件测试作为软件开发者的座右铭。
②测试用例应由测试输入数据和与之对应的预期输出结果两部分组成。
③应由第三方人员从事测试工作。
④在设计测试用例时,应当包括合理的输入条件和不合理的输入条件。
⑤注意测试中的错误群集现象。
⑥严格执行测试计划,排除测试的随意性。
4.2.2测试的方法和步骤
1,软件测试方法
黑盒测试:已知产品的功能设计规格,可以进行测试证明每个实现了的功能是否符合要求。不考虑程序内部的逻辑结构和内部特性。
白盒测试:已知产品的内部工作过程,可以进行测试证明每种内部动作是否按设计规格要求正常进行。对软件的过程性细节做细致检查。允许测试人员利用程序内部的逻辑结构及有关信息,设计或选择测试用例。
2,软件测试步骤
自底向上:从小规模测试开始逐步进行大规模测试。首先重点测试单个程序模块,然后重点转移到正在集成的模块组,接着对整个系统进行测试,最后由用户进行系统的验收测试。一般分为单元测试,集成测试,系统测试和验收测试。
4.3黑盒测试
着重测试软件的功能需求,是在程序接口上进行的测试,主要是为了发现以下错误:
①是否有功能错误,功能遗漏。
②是否能正确地接收输入数据并产生正确的输出结果。
③是否有数据结构错误或外部信息访问错误。
④是否有程序初始化和终止方面的错误。
黑盒穷举测试对所有输入数据的各种可能值的排列组合都进行测试,来检查程序是否都能产生正确的输出。
具体的黑盒测试用例设计方法包括等价类划分法,边界值分析法,错误推测法等。
①等价类划分法:把程序的输入分为若干类,然后在每一类中选取少数代表性数据作为测试用例,每一类的代表性数据在测试中的作用等价于这一类中的其他值。
②边界值分析法:对等价类划分方法的补充。针对各种边界情况设计测试用例。
③错误推测法:基于经验和直觉推测程序中所有可能存在的各种缺陷和错误,从而有针对性地设计测试用例的方法。
4.4白盒测试
目的:①保证程序中所有关键路径都被测试到,防止系统投入使用后用户发现系统问题。
②便于衡量测试的完整性,即是否把某个功能点的所有可能情况都测试到。
③可以测试到程序中的所有真分支,假分支。
④检查局部数据结构的有效性。
⑤检查程序的异常处理能力。
⑥检查代码是否遵循编码规范。
总体上分为静态白盒测试和动态白盒测试两大类。
①静态白盒测试是一种不通过执行程序而进行测试的技术,其关键功能是检查软件的表示和描述是否一致。一般包括桌面检查,代码走查和代码审查。
②动态白盒测试将程序在受控的环境下使用特定的测试用例进行正式的运行,显示了一个系统在检查状态下是否正确。最重要的技术是路径和分支测试。
穷举测试难以实现,一般可采用逻辑覆盒的白盒测试,即孝察用测试数据运行被测程序对程序逻辑的覆盖程度。可由弱到强分为语句覆盖,判定覆盖,条件覆盖,判定-条件覆盖,条件组合覆盖和路径覆盖。
正确的白盒测试要先从代码分析入手,根据不同的语句执行情况具体的测试场景选择适合的覆盖方式。
①语句覆盖:设计若干个测试用例,运行被测程序,使每个可执行语句至少执行一次。
②判定覆盖:设计若干个测试用例,运行被测程序,使程序中每个判断的取真分支和取假分支至少经历一次。
③条件覆盖:设计若干个测试用例,运行被测程序,使程序中每个判断的所有条件的每种可能取值至少执行一次。
④判定-条件覆盖:设计足够的测试用例,使判断中每个条件的所有可能取值至少执行一次。
⑤条件组合覆盖:设计足够的,测试用例,运行被测程序,使每个判断的所有可能的条件取值组合至少执行一次。
4.5单元测试
①内容:模块接口测试,局部数据结构测试,重要路径测试,错误处理测试,边界测试。
②步骤:编码阶段进行。辅助模块:驱动模地,桩模块。进行单元测试时,应为测试模块开发一个驱动模块和若干桩模块。
4.6集成测试
目标:按照设计要求使用那些通过单元测试的构件来构造程序结构。①功能性测试:黑盒测试技术针对被测模块的接口规格说明进行测试。②非功能性测试:对模块的性能或可靠性进行测试。
集成方式:①一次性集成方式:首先对每个模块分别进行模块测试,然后再把所有模地组装在一起进行测试,最终得到要求的软件系统。
②增量式集成方式:先对各个模块进行模块测试,然后将这些模块逐步组装成较大的系统,在组装的过程中边连接边测试,以发现连接过程中产生的问题,最后通过增量逐步组装成为要求的软件系统。有自顶向下,自底向上两种增量方式。
4.7系统测试
①功能测试,②回归测试,③可靠性测试,④压力测试,⑤性能测试,⑥恢复测试,⑦启动/停止测试,⑧配置测试等