您好,欢迎访问三七文档
主讲:张轶软件测试技术C7二楼QQ:3824644第四章静态测试本章教学目标:掌握静态测试和动态测试的概念掌握理解静态测试的基本内容和方法正确理解静态测试的意义静态测试与动态测试1、静态测试静态测试,英文是StaticTesting。静态测试指测试不运行的部分,例如测试产品说明书,对此进行检查和审阅.。静态方法是指不运行被测程序本身,仅通过分析或检查源程序的文法、结构、过程、接口等来检查程序的正确性。静态方法通过程序静态特性的分析,找出欠缺和可疑之处,例如不匹配的参数、不适当的循环嵌套和分支嵌套、不允许的递归、未使用过的变量、空指针的引用和可疑的计算等。静态测试结果可用于进一步的查错,并为测试用例选取提供指导。2、动态测试动态方法的主要特征是:——计算机必须真正运行被测试的程序,通过输入测试用例,对其运行情况即输入与输出的对应关系进行分析,以达到检测的目的。静态测试静态测试包括代码检查、静态结构分析、代码质量度量等。它可以由人工进行,充分发挥人的逻辑思维优势,也可以借助软件工具自动进行。静态测试常用工具有:Logiscope、PRQA;静态测试方法也可利用计算机作为对被测程序进行特性分析的工具,但与人工测试方式有着根本区别。另一方面,因它并不真正运行被测程序,只进行特性分析,这又与动态方法不同。所以,静态方法常常称为“分析”,静态测试是对被测程序进行特性分析方法的总称。1.静态白盒测试静态动态黑盒白盒动态白盒测试检查产品说明书•等价类划分法•边界值分析法•状态测试•决策表法•……静态白盒测试静态黑盒测试动态黑盒测试1.静态白盒测试静态测试:只不运行程序,而只是检查和审阅代码、文档等白盒测试:指访问代码,能够查看和审查1.静态白盒测试静态白盒测试是在不执行软件的条件下有条理地仔细审查软件设计、体系结构和代码,从而找出软件缺陷的过程,有时也称为结构化分析。检查和审阅代码、文档需要有编程方面的专业检验测试人员能了解编程所使用的语言最好。静态白盒测试的好处尽早发现软件缺陷,以找出动态黑盒测试难以发现和隔离的软件缺陷。在开发过程初期让测试小组集中精力进行软件设计的审查非常有价值。为黑盒测试员在接受软件进行测试时设计和应用测试用例提供思路。静态白盒测试所面临的主要问题经常不做或不能善始善终高层管理者可能会认为太花时间错误认为检查代码没有生产率Note:ThetyrannyoftheLOCmetric,Linesofexecutablecodeasameasureofproductivity!2.正式审查(FormalReview)正式审查(FormalReview)就是进行静态白盒测试的过程。正式审查的含义很广,从两个程序员之家的简单交谈,到软件设计和代码的详细的、严格的检查都属于此过程。正式审查的4个基本要素确定问题:审查的目的是找出软件的问题-不仅是出错的项目,还包括遗漏的项目。要注意对事不对人。遵守规则:要遵守一套固定的规则,规则可能设定要审查的代码量、花费多少时间、哪些内容要做评价等。准备:每一个参与者都为审查做准备,并尽自己的力量。编写报告:审查小组必须做出审查结果的书面总结报告,并使报告便于开发小组的成员使用。进行正式审查要按照已经建立起来的过程执行。随意“聚在一起复查代码”是不够的,实际上还会造成危害。如果审查正确地进行,则是早期发现软件缺陷的好方法。正式审查的方法检验(Inspection)同事审查(PeerReview)走查(Walkthrough)InformalFormalPeerReviewWalkthroughInspection同事审查(PeerReview)也称同行评审(PeertoPeerReview)也就是同事之间你看我的,我看你的从正式的程度上来讲,要求最低尽管如此,所有的参与者要切实保证正式正式审查的4个关键要素走查(Walkthrough)其正式程度介于检验和同行评审之间。编写代码的程序员向5人小组或者其他程序员和测试员组成的小组做正式陈述。审查人员在审查之前接到软件拷贝,以便检查并编写备注和问题,在审查过程中提问。审查之后,报告人要编写报告说明发现的问题及解决方案检验(Inspection)最正式的审查类型按照定义好的过程进行OverviewPreparationInspectionReworkFollow-upMeeting代码审查应涵盖下列方面业务逻辑的审查。主要审查是否是按照实现设计的规格说明书展开编程,逻辑是否正确且简单,思路是否清晰算法的效率。无论是内存处理还是统计排序算法,或者SQL语句,都需要精心设计算法,确定最优化的方法代码风格。代码的命名规则、注释行、嵌套次数、书写格式等直接影响了软件的可读性、可维护性和可靠性等方面的质量编程规则。包括语句的完整性、数据定义的准确性、常量和变量的定义、函数调用、参数的使用、内存管理、逻辑表达式等。执行规则保证程序运行的正确性、准确性、性能、稳定性可可扩充性等。坚持编码标准和规范的三个重要理由:–可靠性–可读性/可维护性–移植性3.编码标准和规范编程标准和规范示例标准由四个部分组成标题标准解释说明示例获取标准标准资源站点:美国国家标准协会(ANSI):国际工程协会(IEC):国际标准化组织(ISO):信息技术标准国家委员会(NCITS):美国计算机协会(ACM):电子电气工程协会(IEEE):(i=1;in;i++)couta[i]endl;coutiendl;ReaderexplainsThatiistheindexofanarraynameda.Thevariablenisinitializedelsewhere(andidentifieswhere).Theloopoutputsvaluesfora[1],a[2],...,a[i-1].Questionsraised:Wheredoesthevariableigetavalueforthelastline?Doestheprogrammerexpecttheoutputvalueforitobeinsidetheloop?Zhu.Kerry@gmail.com例:代码风格审查例1:If(1==j)//好的代码风格If(j==1)//一般的代码风格例2:If(jMAX_NUM)//好的代码风格if(j2000)//差的代码风格例:数据流分析Voidexchange(int&Min,int&Max){intHelp;If(MinMax){Max=Help;Max=Min;Help=Min;}}引用未赋值的变量Max的重复赋值对Help的赋值有什么用?例:命名规则类名和函数名:由大写字母开头的单词组合而成,变量由小写字母开头的单词组合而成,常量全用大写的字母,并用下划线分割单词。如:int,MAX_LENGTH静态变量家前缀s_,全局变量加前缀g_,类的数据成员前加m_变量名用“名词”或“形容词+名词”。全局函数使用“动词”或“动词+名词”,如DrawBox。类的成员函数只使用动词,被省掉的名词就是对象本身,例box→Draw介绍两个概念匈牙利命名法例:cStudentName,iNumber,cSexGNU命名规则-软件版本的命名GNU的软件命名规则与windows不同。命名格式:主版本号.子版本号[.修正版本号[.编译版本号]]示例:1.2.1,2.0,5.0.0build-13124课上练习根据所讲的内容,利用通用代码审查清单,对所提供的triangle,txt中的代码进行审查,找出其中存在(至少5个)的问题。控制流图控制流图(可简称流图)是对程序流程图进行简化后得到的,它可以更加突出的表示程序控制流的结构。控制流图中包括两种图形符号:节点和控制流线。节点由带标号的圆圈表示,可代表一个或多个语句、一个处理框序列和一个条件判定框(假设不包含复合条件)。控制流线由带箭头的弧或线表示,可称为边。它代表程序中的控制流。对于复合条件,则可将其分解为多个单个条件,并映射成控制流图。常见结构的控制流图说明1)图形符号:圆圈代表一个结点,表示一个或多个无分支的语句或源程序语句。2)程序控制流边和点圈定的部分叫做区域。当对区域计数时,图形外的一个部分也应记为一个区域。3)判断语句中的条件为复合条件(即条件表达式由一个或多个逻辑运算符连接的逻辑表达式(aandb))时,则需要改变复合条件的判断为一系列只有单个条件的嵌套的判断。结点由带标号的圆圈表示,可代表一个或多个语句、一个处理框序列和一个条件判定框(假设不包含复合条件)。控制流线由带箭头的弧或线表示,可称为边,它代表程序中的控制流。为了满足路径覆盖,必须首先确定具体的路径以及路径的个数。我们通常采用控制流图的边(弧)序列和节点列表示某一条具体路径。程序的控制流图控制流图:注意图中的数字是指代的代码的行号。看到这个流图之后,大家多少会有点疑惑,图中的那些代码行号是怎么选择出来的,为什么要选择图中的那些呢?是这样的:图中选择的行号的代码都是出现了选择分支,循环操作,判断等,顺序执行的语句可以合并成。这也是画控制流图的一般规则。圈复杂度有了控制流图以后,很自然地,我们要知道我们到底要写几个测试用例,才能来满足基本路径测试。当大家看到上面介绍的控制流程图的时候,学过离散数学或者是数据结构的人,我想都是会有很一种很熟悉的感觉,不错,控制流程图就是来源于图及有向图(这会不会再一次让大家感觉到数学对我们的重要性呢?)下面我就介绍一下新的概念——圈复杂度(也称为程序的环形复杂度)。圈复杂度是一种为程序逻辑复杂性提供定量测试的软件度量。将该度量用于计算程序的基本独立路径数目。为确保所有语句至少执行一次的测试数量的上界。公式圈复杂度V(G)=E-N+2,E是流图中边的数量,N是流图中结点的数量。公式圈复杂度V(G)=P+1,P是流图G中判定结点的数量。通俗的说圈复杂度就是判断单元是不是复杂,是不是好测试的标准。一般来说如果圈复杂度如果大于20就表示这个单元的可测试性不好,太复杂举例计算计算结果为节点数量N=8,导出边的数量E=10(用①、②、③、④、⑤、⑥、⑦、⑧、⑨、⑩编号表示)V(G)=E-N+2=10-8+2=10(条边)-8(个节点)+2=4上图的圈复杂图是4。这个结果对我们来说有什么意义呢?它表示我们只要最多4个测试用例就可以达到基本路径覆盖
本文标题:静态测试-白盒
链接地址:https://www.777doc.com/doc-3771682 .html