收藏 分销(赏)

开发人员单元测试标准规范.docx

上传人:精*** 文档编号:2769657 上传时间:2024-06-05 格式:DOCX 页数:14 大小:24.72KB
下载 相关 举报
开发人员单元测试标准规范.docx_第1页
第1页 / 共14页
开发人员单元测试标准规范.docx_第2页
第2页 / 共14页
开发人员单元测试标准规范.docx_第3页
第3页 / 共14页
开发人员单元测试标准规范.docx_第4页
第4页 / 共14页
开发人员单元测试标准规范.docx_第5页
第5页 / 共14页
点击查看更多>>
资源描述

1、为了提高整个开发中心产品和项目测试效率,保证产品与项目内部系统集成测试顺利进行,现规定系统开发部各项目组在提交产品至项目监理部之前必要进行严格单元测试,即按照代码单元构成逐个进行测试。详细阐明如下:单元测试内容单元测试根据是详细设计,应对模块内所有重要控制途径设计测试用例,以便发现模块内部错误。单元测试测试类型重要涉及:1模块接口测试;2模块局部数据构造测试;3模块边界条件测试;4模块中所有独立执行通路测试;5模块各条错误解决通路测试;6模块非法测试,例如在输入数字地方输入字母;7代码重用测试,在开发过程中有些模块功能几乎相似,程序员在重用代码时也许忘掉在原有代码上修改或修改不全面,而导致错误

2、;8系统兼容测试,例如有些程序在IE6能运营正常,到IE5下不能运营。有些程序在WIN下能运营,而到WIN98却不能运营。单元测试力度规定测试力度满足:语句覆盖:使被测程序每条语句至少执行一次;鉴定覆盖:使被测程序每一分支执行一次;条件覆盖:规定鉴定中每个条件均为“真”、“假”两种成果至少执行一次;条件组合覆盖:让条件覆盖中成果所有也许组合至少浮现一次;单元测试环节普通以为单元测试应紧接在编码之后,当源程序编制完毕并通过复审和编译检查,便可开始单元测试。测试用例设计应与复审工作相结合,依照设计信息选用测试数据,将增大发现各类错误也许性。在拟定测试用例同步,应给出盼望成果。项目组完毕单元测试,向

3、项目监理部提交验收版本同步必要一并递交单元测试案例及测试问题报告记录。测试部由项目监理部获得需测试系统版本及有关文档,若在测试期间发现单元测试中记录问题,如实记录。项目监理部视详细状况酌情对该项目组绩效考核与项目评分加以控制。不同语言及架构单元测试见附件。附件一c语言单元测试规范1.基本规定1.1程序构造清析,简朴易懂,单个函数程序行数不得超过100行。1.2打算干什么,要简朴,直接了当,代码精简,避免垃圾程序。1.3尽量使用原则库函数和公共函数。1.4不要随意定义全局变量,尽量使用局部变量。1.5使用括号以避免二义性。2.可读性规定2.1可读性第一,效率第二。2.2保持注释与代码完全一致。2

4、.3每个源程序文献,均有文献头阐明,阐明规格见规范。2.4每个函数,均有函数头阐明,阐明规格见规范。2.5重要变量(构造、联合、类或对象)定义或引用时,注释能反映其含义。2.7常量定义(DEFINE)有相应阐明。2.8解决过程每个阶段均有有关注释阐明。2.9在典型算法前均有注释。2.10运用缩进来显示程序逻辑构造,缩进量一致并以Tab键为单位,定义Tab为6个字节。2.11循环、分支层次不要超过五层。2.12注释可以与语句在同一行,也可以在上行。2.13空行和空白字符也是一种特殊注释。2.14一目了然语句不加注释。2.15注释作用范畴可觉得:定义、引用、条件分支以及一段代码。2.16注释行数(

5、不涉及程序头和函数头阐明部份)应占总行数1/5到1/3。3.构造化规定3.1禁止浮现两条等价支路。3.2禁止GOTO语句。3.3用IF语句来强调只执行两组语句中一组。禁止ELSEGOTO和ELSERETURN。3.4用CASE实现多路分支。3.5避免从循环引出各种出口。3.6函数只有一种出口。3.7不使用条件赋值语句。3.8避免不必要分支。3.9不要容易用条件分支去替代逻辑表达式。4.对的性与容错性规定4.1程序一方面是对的,另一方面是优美4.2无法证明你程序没有错误,因而在编写完一段程序后,应先回头检查。4.3改一种错误时也许产生新错误,因而在修改前一方面考虑对其他程序影响。4.4所有变量在

6、调用前必要被初始化。4.5对所有顾客输入,必要进行合法性检查。4.6不要比较浮点数相等,如:10.0*0.1=1.0,不可靠4.7程序与环境或状态发生关系时,必要积极去解决发生意外事件,如文献能否逻辑锁定、打印机与否联机等。4.8单元测试也是编程一部份,提交联调测试程序必要通过单元测试。5.可重用性规定5.1重复使用完毕相对独立功能算法或代码应抽象为公共控件或类。5.2公共控件或类应考虑OO思想,减少外界联系,考虑独立性或封装性。5.3公共控件或类应建立使用模板。1合用范畴本原则合用于运用VisulC+,BorlandC+进行软件程序开发人员.。.2变量命名命名必要具备一定实际意义,形式为xA

7、bcFgh,x由变量类型拟定,Abc、Fgh表达持续意义字符串,如果持续意义字符串仅两个,可都大写.如OK.详细例程:BOOL类型bEnable;ch*charchTextc*类对象cMain(对象实例)h*Handle(句柄)hWndi*intn*无符号整型p*指针sz,str*字符串wWORDx,y坐标Char或者TCHAR类型与WindowsAPI有直接联系用szAppName10形式否则用FileName10形式,单个字符也可用小写字母表达;Int类型nCmdShow;LONG类型lParam;UINT类型uNotify;DWORD类型dwStart;PSTR类型pszTip;LPST

8、R类型lpCmdLineLPTSTR类型lpszClassName;LPVOID类型lpReservedWPARAM类型wParam,LPARAM类型lParamHWND类型hDlg;HDC类型hDC;HINSTANCE类型hInstanceHANDLE类型hInstance,HICON类型hIcon;intiTmpfloatfTmpDWORDdw*String,AnsiStringstr*m_类成员变量m_nVal,m_bFlagg_全局变量g_nMsg,g_bFlag局部变量中可采用如下几种通用变量:nTemp,nResult,I,J(普通用于循环变量)。其她资源句柄同上.3常量命名和宏定

9、义常量和宏定义必要具备一定实际意义;常量和宏定义在#include和函数定义之间;常量和宏定义必要所有以大写字母来撰写,中间可依照意义持续性用下划线连接,每一条定义右侧必要有一简朴注释,阐明其作用;资源名字定义格式:菜单:IDM_XX或者CM_XX位图:IDB_XX对话框:IDD_XX字符串:IDS_XXDLGINIT:DIALOG_XXICON:IDR_XX.4函数命名函数原型阐明涉及引用外来函数及内部函数,外部引用必要在右侧注明函数来源:模块名及文献名,如是内部函数,只要注释其定义文献名;第一种字母必要使用大写字母,规定用大小写字母组合规范函数命名,必要时可用下划线间隔,示例如下:void

10、UpdateDB_Tfgd(TRACK_NAME);file:/ModuleName:r01/sdw.cvoidPrintTrackData(TRACK_NAME);file:/ModuleName:r04/tern.cvoidImportantPoint(void);file:/ModuleName:r01/sdw.cvoidShowChar(int,int,chtype);file:/LocalModulevoidScrollUp_V(int,int);file:/LocalModule.5构造体命名构造体类型命名必要所有用大写字母,原则上前面如下划线开始;构造体变量命名必要用大小写字母组

11、合,第一种字母必要使用大写字母,必要时可用下划线间隔。对于私有数据区,必要注明其所属进程。全局数据定义只需注意其用途。示例如下:typedefstructcharszProductName20;charszAuthor20;charszReleaseDate16;charszVersion10;unsignedlongMaxTables;unsignedlongUsedTables;DBS_DATABASE;DBS_DATABASEGdataBase;6控件命名:用小写前缀表达类别用小写前缀表达类别:fm窗口cmd按钮cobcombo,下拉式列表框txt文本输入框lablabal,标签imgi

12、mage,图象picpicturegrdGrid,网格scr滚动条lst列表框frmfram7注释原则上注释规定使用中文;文献开始注释内容涉及:公司名称、版权、作者名称、时间、模块用途、背景简介等,复杂算法需要加上流程阐明;函数注释涉及:输入、输出、函数描述、流程解决、全局变量、调用样例等,复杂函数需要加上变量用途阐明;程序中注释涉及:修改时间和作者、以便理解注释等;引用一:文献开头注释模板/*文献名:*Copyright(c)1998-1999*公司技术开发部*创立人:*日期:*修改人:*日期:*描述:*版本:*-*/引用二:函数开头注释模板/*函数名:*输入:a,b,c*a-*b-*c-*

13、输出:x-*x为1,表达.*x为0,表达.*功能描述:*全局变量:*调用模块:*作者:*日期:*修改:*日期:*版本*/引用三:程序中注释模板/*-*/*注释内容*/*-*/8程序a.程序编码力求简洁,构造清晰,避免太多分支构造及太过于技巧性程序,尽量不采用递归模式。b.编写程序时,亦必要想好测试办法,换句话说,”单元测试”测试方案应在程序编写时一并拟好。c.注释一定要与程序一致。d.版本封存后来修改一定要将老语句用/*/封闭,不能自行删除或修改,并要在文献及函数修改记录中加以记录。e.程序中每个block开头”及”必要对齐,嵌套block每进一套,缩进一种tab,TAB为4个空格,block

14、类型涉及if、for、while、do等核心字引出。f.对于比较大函数,每个block和特殊函数调用,都必要注明其功能,举例如下:count.divisor=1193280/freq;/computethepropercountOutByte(unsignedshort)67,(unsignedchar)182);/tell8253thatacountiscomingOutByte(unsignedshort)66,count.c0);/sendlow-orderbyteOutByte(unsignedshort)66,count.c1);/sendhigh-orderbytebcb,delp

15、hi中变量命名:遵循匈牙利命名法,命名必要故意义,制定如下规定窗体:以大写W开始,如About版权窗体,命名为WAbout文献:以大写F开始,如About版权窗体,文献命名为FAbout.cpp按钮(Button):如退出按钮,命名为btnExit基类:加base标记,如报表基类,窗体命名为:WBaseRep,文献命名为FBaseRep.cpp1.在.h/.cpp开头应有一段格式统一阐明,内容涉及:a.文献名(FileName);b.创立人(Creater);c.文献创立时间(Date);d.简短阐明文献功能、用途(Comment)。好习惯2.除非极其简朴,否则对函数应有注释阐明。内容涉及:功

16、能、入口/出口参数,必要时还可有备注或补充阐明。还是好习惯3.每列代码长度推荐为80列,最长不得超过120列;折行以对齐为准。太宽了,我限制是60列,由于文本方式下屏幕一共80列,如果你用BC这一类编辑器,窗口边框等又要占据一定空间,因此80列太宽4.循环、分支代码,判断条件与执行代码不得在同一行上。很对5.指针定义,*号既可以紧接类型,也可以在变量名之前。例:可写做:int*pnsize;也可写做:int*pnsize;但不得写做:int*pnsize;建议采用第二种,除非附加此外一条规定:一次只声明一种变量,否则就会让人混淆,例如:int*a,b;看起来b好像也是个指针,其实不是。6.在类

17、成员函数内调用非成员函数时,在非成员函数名前必要加上:。这一条我倒觉得并不是必须,我看法是决不要让你类成员函数和全局函数名称相似(或类似)7.函数入口参数有缺省值时,应注释阐明。例:BOOLCWpsDib:PaintDIB(CDC*pDC,CRect&rc,intnBrightness,file:/*=0*/BOOLbGrayScalefile:/*=FALSE*/)每个变量写一行,必要时加上/*in,out*/注释8.elseif必要写在一行。应当尽量避免elseif这样构造9.与、关于各项规定:9.1、应独占一行。在该行内可有注释。9.2必要另起一行,之后裔码必要缩进一种Tab。与必要在同

18、一列上。9.3在循环、分支之后若只有一行代码,虽然可省略、,但不推荐这样做。若省略后也许引起歧义,则必要加上、。持保存意见,由于GNU代码规范是这样:if(NULL=ptr)/dosomethinghere或者if(NULL=ptr)/dosomethinghere争论哪个更好并没故意义,核心是统一,如果用VC固然你办法最以便,可是如果你用emacs或者vi,就不是这样了。10.与空格关于各项规定。10.1在所有两目、三目运算符两边都必要有空格。在单目运算符两端不必空格。但在、:、.、等运算符先后,及&(取地址)、*(取值)等运算符之后不得有空格。10.2for、while、if等核心词之后应

19、有1个空格,再接(,之后无空格;在结尾)前不得有空格。我以为在括号两端加空格并不是什么错误,特别是在一种条件十分复杂if语句里10.3调用函数、宏时,(、)先后不得有空格。10.4类型强制转换时,()先后不得有空格同上11.与缩进关于各项规定11.1缩进以Tab为单位。1个Tab为4个空格我以为这个值应当更大,我自己使用8个空格,如果你代码由于缩进幅度太大而导致折行,那么几乎可以必定你程序设计方案有问题。11.2下列状况,代码缩进一种Tab:1.函数体相对函数名及、。2.if、else、for、while、do等之后裔码。3.一行之内写不下,折行之后裔码,应在合理位置进行折行。若有+-*/等运

20、算符,则运算符应在上一行末尾,而不应在下一行行首。这一条我反对,运算符应当放在下一行行首,以使人能清晰懂得这一行是续上一行,例如if(something&somethingelse&otherthings)如果写做if(something&somethingelse&otherthings)反而看不清晰11.3下列状况,不必缩进:switch之后case、default。附件二java语言单元测试规范java语言编程规范遵循公司开发规范。1.基本规定1.1程序构造清析,简朴易懂,单个函数程序行数不得超过100行。1.2代码精简,避免垃圾程序。1.3尽量使用原则库函数和公共函数。1.4不要随意定

21、义全局变量,尽量使用局部变量。1.5使用括号以避免二义性。2.可读性规定2.1可读性第一,效率第二。2.2保持注释与代码完全一致。2.3每个源程序文献,均有文献头阐明,阐明规格见规范。2.4每个函数,均有函数头阐明,阐明规格见规范。2.5重要变量(构造、联合、类或对象)定义或引用时,注释能反映其含义。2.7常量定义(DEFINE)有相应阐明。2.8解决过程每个阶段均有有关注释阐明。2.9在典型算法前均有注释。2.10运用缩进来显示程序逻辑构造,缩进量一致并以Tab键为单位,定义Tab为6个字节。2.11循环、分支层次不要超过五层。2.12注释可以与语句在同一行,也可以在上行。2.13空行和空白

22、字符也是一种特殊注释。2.14一目了然语句不加注释。2.15注释作用范畴可觉得:定义、引用、条件分支以及一段代码。2.16注释行数(不涉及程序头和函数头阐明部份)应占总行数1/5到1/3。3.构造化规定3.1禁止浮现两条等价支路。3.2禁止GOTO语句。3.3用IF语句来强调只执行两组语句中一组。禁止ELSEGOTO和ELSERETURN。3.4用CASE实现多路分支。3.5避免从循环引出各种出口。3.6函数只有一种出口。3.7不使用条件赋值语句。3.8避免不必要分支。3.9不要容易用条件分支去替代逻辑表达式。4.对的性与容错性规定4.1程序一方面是对的,另一方面是优美4.2无法证明你程序没有

23、错误,因而在编写完一段程序后,应先回头检查。4.3改一种错误时也许产生新错误,因而在修改前一方面考虑对其他程序影响。4.4所有变量在调用前必要被初始化。4.5对所有顾客输入,必要进行合法性检查。4.6不要比较浮点数相等,如:10.0*0.1=1.0,不可靠4.7程序与环境或状态发生关系时,必要积极去解决发生意外事件,如文献能否逻辑锁定、打印机与否联机等。4.8单元测试也是编程一部份,提交联调测试程序必要通过单元测试。5.可重用性规定5.1重复使用完毕相对独立功能算法或代码应抽象为公共控件或类。5.2公共控件或类应考虑OO思想,减少外界联系,考虑独立性或封装性。5.3公共控件或类应建立使用模板。

24、命名规范定义这个规范目是让项目中所有文档都看起来像一种人写,增长可读性,减少项目组中由于换人而带来损失。(这些规范并不是一定要绝对遵守,但是一定要让程序有良好可读性)Package命名Package名字应当都是由一种小写单词构成。Class命名Class名字必要由大写字母开头而其她字母都小写单词构成Class变量命名变量名字必要用一种小写字母开头。背面单词用大写字母开头。StaticFinal变量命名StaticFinal变量名字应当都大写,并且指出完整含义。参数命名参数名字必要和变量命名规范一致。数组命名数组应当总是用下面方式来命名:bytebuffer;而不是:bytebuffer;办法参

25、数使用故意义参数命名,如果也许话,使用和要赋值字段同样名字:SetCounter(intsize)this.size=size;Java文献样式所有Java(*.java)文献都必要遵守如下样式规则版权信息版权信息必要在java文献开头,例如:/*Copyright?ShanghaiXXXCo.Ltd.*Allrightreserved.*/其她不需要出当前javadoc信息也可以包括在这里。Package/Importspackage行要在import行之前,import中原则包名要在本地包名之前,并且按照字母顺序排列。如果import行中包括了同一种包中不同子目录,则应当用*来解决。pac

26、kage.stats;importjava.io.*;importjava.util.Observable;importhotlava.util.Application;这里java.io.*使用来代替InputStreamandOutputStream。Class接下来是类注释,普通是用来解释类。/*Aclassrepresentingasetofpacketandbytecounters*Itisobservabletoallowittobewatched,butonly*reportschangeswhenthecurrentsetiscomplete*/接下来是类定义,包括了在不同行e

27、xtends和implementspublicclassCounterSetextendsObservableimplementsCloneableClassFields接下来是类成员变量:/*Packetcounters*/protectedintpackets;public成员变量必要生成文档(JavaDoc)。Proceted、private和package定义成员变量如果名字含义明确话,可以没有注释。存取办法接下来是类变量存取办法。它只是简朴用来将类变量赋值获取值话,可以简朴写在一行上。/*Getthecounters*returnanarraycontainingthestatist

28、icaldata.Thisarrayhasbeen*freshlyallocatedandcanbemodifiedbythecaller.*/publicintgetPackets()returncopyArray(packets,offset);publicintgetBytes()returncopyArray(bytes,offset);publicintgetPackets()returnpackets;publicvoidsetPackets(intpackets)this.packets=packets;其他办法不要写在一行上构造函数接下来是构造函数,它应当用递增方式写(例如:参

29、数多写在背面)。访问类型(public,private等.)和任何static,final或synchronized应当在一行中,并且办法和参数另写一行,这样可以使办法和参数更易读。publicCounterSet(intsize)this.size=size;克隆办法如果这个类是可以被克隆,那么下一步就是clone办法:publicObjectclone()tryCounterSetobj=(CounterSet)super.clone();obj.packets=(int)packets.clone();obj.size=size;returnobj;catch(CloneNotSuppo

30、rtedExceptione)thrownewInternalError(UnexpectedCloneNotSUpportedException:+e.getMessage();类办法下面开始写类办法:/*Setthepacketcounters*(suchaswhenrestoringfromadatabase)*/protectedfinalvoidsetArray(intr1,intr2,intr3,intr4)throwsIllegalArgumentException/Ensurethearraysareofequalsize/if(r1.length!=r2.length|r1.

31、length!=r3.length|r1.length!=r4.length)thrownewIllegalArgumentException(Arraysmustbeofthesamesize);System.arraycopy(r1,0,r3,0,r1.length);System.arraycopy(r2,0,r4,0,r1.length);toString办法无论如何,每一种类都应当定义toString办法:publicStringtoString()Stringretval=CounterSet:;for(intI=0;I0)I+;/错误,和在同一行if(i0)I+;/对的,单独作为

32、一行语句永远单独作为一行.如果语句应当缩进到与其相相应那一行相对齐位置。括号左括号和后一种字符之间不应当浮现空格,同样,右括号和前一种字符之间也不应当浮现空格.下面例子阐明括号和空格错误及对的使用:CallProc(Aparameter);/错误CallProc(Aparameter);/对的不要在语句中使用无意义括号.括号只应当为达到某种目而出当前源代码中。下面例子阐明错误和对的用法:if(I)=42)/错误-括号毫无意义if(I=42)or(J=42)then/对的-确需要括号程序编写规范exit()exit除了在main中可以被调用外,其她地方不应当调用。由于这样做不给任何代码代码机会来

33、截获退出。一种类似后台服务地程序不应当由于某一种库模块决定了要退出就退出。异常声明错误应当抛出一种RuntimeException或者派生异常。顶层main()函数应当截获所有异常,并且打印(或者记录在日记中)在屏幕上。垃圾收集JAVA使用成熟后台垃圾收集技术来代替引用计数。但是这样会导致一种问题:你必要在使用完对象实例后来进行清场工作。例如一种prel程序员也许这样写:FileOutputStreamfos=newFileOutputStream(projectFile);project.save(fos,IDEProjectFile);除非输出流一出作用域就关闭,非引用计数程序语言,例如J

34、AVA,是不能自动完毕变量清场工作。必要象下面同样写:FileOutputStreamfos=newFileOutputStream(projectFile);project.save(fos,IDEProjectFile);fos.close();Clone下面是一种有用办法:implementsCloneablepublicObjectclone()tryThisClassobj=(ThisClass)super.clone();obj.field1=(int)field1.clone();obj.field2=field2;returnobj;catch(CloneNotSupporte

35、dExceptione)thrownewInternalError(UnexpectedCloneNotSUpportedException:+e.getMessage();final类绝对不要由于性能因素将类定义为final(除非程序框架规定)如果一种类还没有准备好被继承,最佳在类文档中注明,而不要将她定义为final。这是由于没有人可以保证会不会由于什么因素需要继承她。访问类成员变量大某些类成员变量应当定义为protected来防止继承类使用她们。注意,要用intpackets,而不是intpackets,后一种永远也不要用。publicvoidsetPackets(intpackets)this.packets=packets;CounterSet(intsize)this.size=size;

展开阅读全文
相似文档                                   自信AI助手自信AI助手
猜你喜欢                                   自信AI导航自信AI导航
搜索标签

当前位置:首页 > 品牌综合 > 行业标准/行业规范

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        获赠5币

©2010-2024 宁波自信网络信息技术有限公司  版权所有

客服电话:4008-655-100  投诉/维权电话:4009-655-100

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :gzh.png    weibo.png    LOFTER.png 

客服