软件工程复习资料第6、7、8章
作者名:不详 来源:网友提供 06年6月8日
第6章
将详细设计得到的处理过程的描述转换为基于某种计算机语言的程序,即源程序代码。
程序设计语言特性:
1心理特性指影响程序员心理的语言性能,许多这类特性是作为程序设计的结果而出现的。
歧义性:有些语法规则容易使人用不同的方式来解释语言,这就产生了心理上的二义性。
简洁性,人们必须记住的语言成分的数量越多,简洁性越差。
局部性和顺序性:局部性是指语言的联想性,在编码过程中,由语句组合成模块,由模块组装成系统结构,并在组装过程实现模块的高内聚,低耦合,使局部性得到加强。
传统性:传统性容易影响人们学习新语种的积极性。
2工程特性
可移值性:指程序从一个计算机环境移植到另一个计算机环境的容易程度。
开发工具的可利用性
软件的可重用性
可维护性。
3技术特性
为开发一个特定项目选择程序设计语言时,必须从技术特性、工程特性和心理特性几方面考虑。通常,考虑选用语言的因素有:
1项目的应用领域:科学工程计算(需要大量的标准库函数,以便处理复杂的数值计算,可供选用的语言有:FORTRAN Pascal C PL/1);数据处理与数据库应用(CoBol SQL 4GL);实时处理(汇编语言 Ada);系统软件(汇编语言 C语言 Pascal语言和Ada语言);人工智能(Lisp是一种函数型语言 Prolog是一种逻辑型语言)
2软件开发的方法:有时编程语言的选择依赖于开发的方法,如果要用快速原形模型来开发,要求能快速实现原形,宜采用4GL。如果是面向对象方法,宜采用面向对象的语言编程(C++ JAVA)
3软件执行的环境
4算法和数据结构的复杂性
5软件开发人员的知识。
程序设计风格指一个编制程序时所表现出来的特点、习惯、逻辑思想等。
语句构造的原则是:简单直接,不能为了追求效率而使代码复杂化。
效率指处理机时间和存储空间的使用:效率是一个性能要求,目标在需求分析给出;追求效率建立在不损害程序可读性或可靠性基础之上;提高程序效率的根本途径在于选择良好的设计方法、良好的数据结构与算法,而不是靠编程时对程序语句做调整。 第7章
软件测试的目的:软件测试是为了发现错误而执行程序的过程;一个好的测试用例能够发现至今尚未发现的错误;一个成功的测试是发现了至今尚未发现的错误的测试。测试阶段的基本任务应该是根据软件开发各阶段的文档资料和程序的内部结构,精心设计一组“高产”的测试用例,利用这些实例执行程序,找出软件中潜在的各种错误和缺陷。
软件测试中,应注意以下指导原则:测试用例应由输入数据和预期的输出数据两部分组成;测试用例不仅选用合理的输入数据,还要选择不合理的输入数据。这样能更多的发现错误,提高程序的可靠性。对不合理的输入数据,程序应拒绝接受,并给出相应提示。
软件测试方法一般分为两大类:动态测试方法与静态测试方法。静态测试指被测试程序不在机器上运行,而是采用人工检测和计算机辅助静态分析的手段对程序进行检测。
动态测试指通过运行程序发现错误,分为黑盒测试法和白盒测试法。
黑盒法:把被测试对象看成一个黑盒子,测试人员完全不考虑程序的内部结构和处理过程,只在软件的接口处进行测试,依据需求规格说明书,检查程序是否满足功能要求。因此,黑盒测试又称为功能测试或数据驱动测试。
白盒法:把测试对象看作一个打开的盒子,测试人员须了解程序的内部结构和处理过程,以检查处理过程的细节为基础,对程序中尽可能多的逻辑路径进行测试,检验内部控制结构和数据结构是否有错,实际的运行状态与预期的状态是否一致。
由于白盒测试是结构测试,所以被测对象基本上是源程序,以程序的内部逻辑为基础设计测试用例。
1逻辑覆盖
语句覆盖是指设计足够的测试用例,使被测程序中的每个语句至少执行一次,语句覆盖是比较弱的覆盖标准。
判定覆盖指设计足够的测试用例,使得被测程序中每个判定表达式至少获得一次“真”值和“假”值,从而使程序的每一个分支至少都通过一次,因此判定覆盖也称分支覆盖。
条件覆盖指设计足够的测试用例,使得判定表达式中每个条件的各种可能的值至少出现一次。
判定/条件覆盖指设计足够的测试用例,使得判定表达式中的每个条件的所有可能取值至少出现一次,并使每个判定表达式所有可能的结果也至少出现次。
条件组合覆盖是比较强的覆盖标准,它是指设计足够的测试用例,使得每个判定表达式中条件的各种可能的值的组合至少出现一次,满足条件组合覆盖的测试一定满足“判定覆盖”、“条件覆盖”和“判定/条件覆盖”。
路径覆盖是指设计足够的测试用例,覆盖被测程序中所有可能的路径。语句覆盖发现错误能力最弱。判定覆盖包含了语句覆盖,但它可能会使一些条件得不到测试。P87
2循环覆盖
3基本路径测试是在程序控制流程图的基础上,通过分析控制构造的环路复杂性,导出基本路径集合,从而设计测试用例,保证这些路径至少通过一次。
独立路径是指包括一组以前没有处理的语句或条件的一条路径。从程序图来看,一条独立路径是至少包含有一条在其他独立路径中未有过的边的路径。P89
黑盒测试是功能测试,因此设计测试用例时,需要研究需求规格说明和概要设计说明中有关程序功能或输入、输出之间的关系等信息,从而与测试后的结果进行分析比较。
1等价类划分:它将输入数据域按有效的或无效的(也称合理的或不合理的)划分为若干个等价类,测试每个等价类的代表值就等于对该类其他值的测试。
用等价类划分的方法设计测试用例的步骤为:
划分等价类
确定测试用例的步骤:为每一个等价类编号;设计一个测试用例,使其尽可能多地覆盖尚未被覆盖过的合理等价类。重覆这步,直到所有合理等价类被测试用例覆盖;设计一个测试用例,使其只覆盖一个不合理等价类。重覆这一步,直到所有不合理等价类被覆盖。
2边界值分析
使用边界值分析方法设计测试用例时一般与等价类划分结合起来。但它不是从一个等价类中任选一个例子作为代表,而将测试边界情况作为重点目标,选取正好等于、刚刚大于或刚刚小于边界值的测试数据。
3错误推测:在测试程序时,人们可能根据经验或直觉推测程序中可能存在的各种错误,从而有针对性地编写检查这些错误的测试用例,这就是错误推测法。
4因果图:因果图能有效地检测输入条件的各种组合可能会引起的错误。因果图的基本原理是通过画因果图,把用自然语言描述的功能说明转换为判定表,最后为判定表的每一列设计一个测试用例。
5综合策略
软件测试时需要三类信息:
1软件配置:指需求规格说明书、设计说明书、源程序等。
2测试配置:指测试方案、测试用例、测试驱动程序等
3测试工具:指计算机辅助测试的有关工具。
软件产品在交付使用之前要经过哪些测试呢?一般要经过以下四步测试:单元测试、集成测试、确认测试和系统测试。
软件测试的步骤及与各开发阶段的关系
单元测试指对源程序中每一个程序单元进行测试,检查各个模块是否正确实现规定的功能,从而发现模块在编码中或算法中的错误。该阶段涉及编码和详细设计的文档。各模块经过单元测试后,将各模块组装起来进行集成测试,以检查与设计相关的软件体系结构的有关问题。确认测试主要检查已实现的软件是否满足需求规格说明书中确定了的各种需求。系统测试指把已确认的软件与其他系统元素结合在一起进行测试。
单元测试主要针对模块的以下五个基本特征进行测试:模块接口、局部数据结构、重要的执行路径、错误处理、边界条件。
在单元测试时,需要为被测模块设计驱动模块和桩模块。
驱动模块的作用是用来模拟被测模块的上级调用模块,它只完成接受测试数据,以上级模块调用被测模块的格式驱动被测模块,接收被测模块的测试结果并输出。
桩模块用来代替被测试模块所调用的模块。它的作用是返回被测试模块所需的信息。
集成测试是指在单元测试的基础上,将所有模块按照设计要求组装成一个完整的系统进行的测试,故也称组装测试或联合测试。
集成测试的方法主要有两种:非渐增式测试和渐增式测试。
非渐增式方法把单元测试和集成测试分成两个不同的阶段。P97
渐增式测试有以下两种不同的组装模块的方法:自顶向下结合(深度优先策略、宽度优先策略);自底向上结合
确认测试又称有效性测试。它的任务是检查软件的功能与性能是否与需求规格说明书中确定的指标相符合,确认测试阶段有两项工作:进行确认测试与软件配置审查。
确认测试一般是在模拟环境下运用黑盒测试方法,由专门测试人员和用户参加的测试。
软件配置审查的任务是检查软件的所有文档资料的完整性、正确性。如发现遗漏和错误,应补充和改正。
软件测试的目的是尽可能多地发现程序中的错误,而调试则是在进行了成功的测试之后才开始的工作,因此调试也称为纠错。
归纳法调试从测试结果发现的线索入手,分析它们之间的联系,导出错误原因的假设,然后再证明或否定这个假设。
步骤:收集有关数据;组织数据;提出假设;证明假设
演绎法调试是列出所有可能的错误原因的假设,然后利用测试数据排除不适当的假设,最后再测试数据验证余下的假设确实是出错的原因。
步骤:列出所有可能的错误原因的假设;排除不适当的假设;精化余于的假设;证明余于的假设。
回溯法调试:该方法从程序产生错误的地方出发,人工沿程序的逻辑路径反向搜索,直到找到错误原因为止。
第8章
软件维护的内容有四种:校正性维护,适应性维护,完善性维护和预防性维护。
校正性维护:为了识别和纠正错误,修改软件性能上的缺陷,应进行确定和修改错误的过程,这个过程就称为校正性维护。
适应性维护:为了使应用软件适应硬件和软件环境的变化而修改软件的过程称为适应性维护。
完善性维护:增加软件功能、增强软件性能、提高软件运行效率而进行的维护活动称为完善性维护。
预防性维护:为了提高软件的可维护性和可靠性而对软件进行的修改称为预防性维护。
软件的开发过程对软件的维护有较大的影响。若不采用软件工程的方法开发软件,则软件只有程序而无文档,维护工作非常困难,这是一种非结构化的维护。若采用软件工程的方法开发软件,则各阶段都有相应的文档,容易进行维护工作,这是一种结构化的维护。
用于软件维护工作的活动可分为生产性活动和非生产性活动两种。生产性活动包括分析评价、修改设计和编写程序代码等。非生产性活动包括理解程序代码功能、解释数据结构接口特点和设计约束。P106
维护的流程:制定维护申请报告;审查申请报告并批准;进行维护并做详细记录;覆审。
维护申请报告是一种由用户生产的文档,它用作计划维护任务的基础。
不管维护类型如何,大体上要开展相同的技术工作。这些工作包括修改软件设计、必要的代码修改、单元测试、集成测试、确认测试以及复审。
有两类维护技术,它们是面向维护的技术和维护支援技术。面向维护的技术是在软件开发阶段用来减少错误、提高软件可维护性的技术。维护支援技术是在软件维护阶段用来提高维护作业的效率和质量的技术。这些技术方法都能减少软件错误,提高软件的可维护性。
因修改软件而造成的错误或其他不希望出现的情况称为维护的副作用。(编码副作用、数据副作用、文档副作用)在软件交付这前对整个软件配置进行评审,以减少文档副作用。
软件可维护性的定义:软件能够被理解、校正、适应及增强功能的容易程度。
软件的可维护性、可使用性、可靠性是衡量软件质量的几个主要特性。软件的可维护性可用下面七个质量特性可来衡量,即可理解性、可测试性、可修改性、可靠性、可移植性、可使用性和效率。对不同类型的维护,这七种特性的侧重点也不相同。
提高可维护性的方法:建立明确的软件质量目标;利用先进的软件开发技术和工具;建立明确的质量保证工作;选择可维护的程序设计语言;改进程序文档。
为了保证可维护性,以下四类检查是非常有用的:在检查点进行检查;验收检查;周期性的维护检查;对软件包的检查。
|