版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、.为了提高整个开发中心产品和项目的测试效率,保证产品与项目内部系统集成测试的顺利进行,现要求系统开发部各项目组在提交产品至项目监理部之前必须进行严格的单元测试,即按照代码的单元组成逐个进行测试。具体说明如下:单元测试内容单元测试的依据是详细设计, 应对模块内所有重要的控制路径设计测试用例, 以便发现模块内部的错误。单元测试的测试类型主要包括:1 模块接口测试;2模块局部数据结构测试;3 模块边界条件测试;4模块中所有独立执行通路测试;5 模块的各条错误处理通路测试;6 模块的非法测试,例如在输入数字的地方输入字母;7 代码重用测试,在开发过程中有些模块功能几乎相同,程序员在重用代码时可能忘记在
2、原有代码上修改或修改不全面,而造成的错误;8 系统兼容测试, 例如有些程序在 ie6 能运行正常, 到 ie5 下不能运行。 有些程序在 win2000 下能运行,而到 win98 却不能运行。单元测试力度要求测试力度满足:语句覆盖:使被测程序的每条语句至少执行一次;判定覆盖:使被测程序的每一分支执行一次;条件覆盖:要求判定中的每个条件均为“真”、“假”两种结果至少执行一次;条件组合覆盖:让条件覆盖中的结果的所有可能组合至少出现一次;单元测试步骤一般认为单元测试应紧接在编码之后,当源程序编制完成并通过复审和编译检查,便可开始单元测试。 测试用例的设计应与复审工作相结合,根据设计信息选取测试数据
3、,将增大发现各类错误的可能性。在确定测试用例的同时,应给出期望结果。项目组完成单元测试,向项目监理部提交验收版本的同时必须一并递交单元测试案例及测试问题报告记录。测试部由项目监理部取得需测试系统的版本及相关文档,若在测试期间发现单元测试中记录的问题,如实记录。项目监理部视具体情况酌情对该项目组的绩效考核与项目评分加以控制。不同语言及架构的单元测试见附件。附件一c语言单元测试规范1. 基本要求1.1程序结构清析,简单易懂,单个函数的程序行数不得超过100 行。 1.2 打算干什么,要简单,直接了当,代码精简,避免垃圾程序。1.3 尽量使用标准库函数和公共函数。1.4不要随意定义全局变量,尽量使用
4、局部变量。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.
5、13 空行和空白字符也是一种特殊注释。 2.14 一目了然的语句不加注释。;.2.15 注释的作用范围可以为:定义、引用、条件分支以及一段代码。2.16 注释行数(不包括程序头和函数头说明部份)应占总行数的1/5 到 1/3 。3. 结构化要求3.1 禁止出现两条等价的支路。3.2 禁止 goto语句。3.3 用 if 语 句 来 强 调 只 执 行 两 组 语 句 中 的 一 组 。 禁止 else goto和 else return。 3.4 用 case实现多路分支。 3.5 避免从循环引出多个出口。 3.6 函数只有一个出口。3.7 不使用条件赋值语句。3.8 避免不必要的分支。3.9
6、 不要轻易用条件分支去替换逻辑表达式。4. 正确性与容错性要求4.1 程序首先是正确,其次是优美4.2 无法证明你的程序没有错误,因此在编写完一段程序后,应先回头检查。4.3 改一个错误时可能产生新的错误,因此在修改前首先考虑对其它程序的影响。4.4 所有变量在调用前必须被初始化。4.5 对所有的用户输入,必须进行合法性检查。4.6 不要比较浮点数的相等,如: 10.0 * 0.1 = 1.0 , 不可靠4.7 程序与环境或状态发生关系时,必须主动去处理发生的意外事件,如文件能否逻辑锁定、打印机是否联机等。4.8 单元测试也是编程的一部份,提交联调测试的程序必须通过单元测试。5. 可重用性要求
7、5.1 重复使用的完成相对独立功能的算法或代码应抽象为公共控件或类。5.2 公共控件或类应考虑oo 思想,减少外界联系,考虑独立性或封装性。5.3 公共控件或类应建立使用模板。1适用范围本标准适用于利用visul c+ ,borland c+进行软件程序开发的人员 .。.2 变量命名命名必须具有一定的实际意义,形式为 xabcfgh,x 由变量类型确定 ,abc、fgh 表示连续意 义字符串 ,如果连续意义字符串仅两个,可都大写 .如 ok. 具体例程 :bool类型benable;ch*charchtextc*类对象cmain(对象实例) h *handle(句柄)hwnd i *intn*
8、无符号整型 p *指针 sz,str *字符串 wword x,y坐标char 或 者 tchar 类 型与 windows api 有 直 接 联 系 的 用 szappname10 形 式 否 则用 filename10 形式 , 单个字符也可用小写字母表示; int 类型ncmdshow; long 类型lparam; uint 类型unotify; dword 类型dwstart; pstr类型psztip; lpstr类型lpcmdline lptstr类型lpszclassname; lpvoid类型lpreserved wparam 类型wparam, lparam类型lpara
9、m hwnd 类型hdlg; hdc类型hdc; hinstance类型hinstancehandle类型hinstance, hicon类型hicon; intitmp floatftmp dworddw* string , ansistringstr *m_类成员变量m_nval, m_bflag g_全局变量g_nmsg, g_bflag局部变量中可采用如下几个通用变量:ntemp, nresult, i, j(一般用于循环变量) 。 其他资源句柄同上.3 常量命名和宏定义常量和宏定义必须具有一定的实际意义; 常量和宏定义在 #include 和函数定义之间 ;常量和宏定义必须全部以大写
10、字母来撰写,中间可根据意义的连续性用下划线连接,每一 条定义的右侧必须有一简单的注释, 说明其作用; 资源名字定义格式: 菜单 :idm_xx 或者;.cm_xx 位图 :idb_xx 对话框 :idd_xx 字符串 :ids_xx dlginit:dialog_xx icon:idr_xx函.4数命名函数原型说明包括引用外来函数及内部函数,外部引用必须在右侧注明函数来源:模块名及文件名 , 如是内部函数,只要注释其定义文件名;第一个字母必须使用大写字母,要求用大小写字母组合规范函数命名,必要时可用下划线间隔,示例如下:void updatedb_tfgd (track_name); file
11、:/module name :r01 /sdw.c void printtrackdata (track_name); file:/module name :r04 /tern.c void importantpoint (void);file:/module name :r01/sdw.c void showchar (int , int , chtype);file:/local module void scrollup_v (int , int);file:/local module .5 结构体命名结构体类型命名必须全部用大写字母,原则上前面以下划线开始;结构体变量命名必须用大小写字母
12、组合,第一个字母必须使用大写字母,必要时可用下划线间隔。对于私有数据区,必 须 注 明 其 所 属 的 进 程 。 全 局 数 据 定 义 只 需 注 意 其 用 途 。示 例 如下:typedef structcharszproductname20;charszauthor20;charszreleasedate16;charszversion10;unsigned longmaxtables;unsigned longusedtables; dbs_database;dbs_database gdatabase;6 控件的命名:用小写前缀表示类别用小写前缀表示类别:fm窗口 cmd按钮co
13、bcombo , 下 拉 式 列 表 框 txt文 本 输 入 框 lablabal , 标 签 imgimage , 图象 picpicture grdgrid,网格 scr滚动条 lst列表框 frmfram 7 注释原则上注释要求使用中文 ;文件开始注释内容包括:公司名称、版权、作者名称、时间、模块用途、背景介绍等,复 杂的算法需要加上流程说明;函数注释包括 :输入、输出、函数描述、流程处理、全局变量、调用样例等,复杂的函数 需要加上变量用途说明 ;程序中注释包括 :修改时间和作者、方便理解的注释等;引用一 : 文件开头的注释模板/* *文件名 :* copyright (c) 1998
14、-1999 *公 司 技 术 开 发 部 *创 建 人 : *日期 : * 修 改人: *日 期: *描 述 : * *版 本 :*-*/引用二 : 函数开头的注释模板/* *函数名 : *输 入 : a,b,c *a-* b- *c- *输 出 : x- *x为 1, 表 示 . *x 为 0,表示 . * 功能描述 : * 全局变量 : * 调用模块 : * 作 者: * 日 期: * 修 改: * 日 期 : * 版本*/引用三 : 程序中的注释模板/*-*/ /*注释内容*/ /*-*/ 8程序a.程序编码力求简洁,结构清晰,避免太多的分支结构及太过于技巧性的程序,尽量不采用递归模式。
15、b. 编写程序时,亦必须想好测试的方法,换句话说,”单元测试”的测试方案应在程序编;.写 一并 好。c. 注 一定要与程序一致。d. 版本封存以后的修改一定要将老 句用/* */封 ,不能自行 除或修改,并要 在文件及函数的修改 中加以 。e.程序中每个block 的开 ” 及 ” 必 ,嵌套的block 每 一套, 一个tab,tab为 4 个空格 ,block 型包括if、 for 、while 、 do 等关 字引出的。f. 于比 大的函数,每个 block 和特殊的函数 用,都必 注明其功能, 例如下:count.divisor = 1193280 / freq;/ compute t
16、he proper count outbyte(unsigned short)67, (unsigned char)182); / tell 8253 that a count is comingoutbyte(unsigned short)66, count. c0); / send low-order byte outbyte(unsigned short)66, co unt. c1); / send high-order bytebcb, delphi 中的 量命名:遵循匈牙利命名法,命名必 有意 ,制定如下 定窗体:以大写的w 开始,如about 版 窗体,命名 wabout 文件:
17、以大写的f 开始,如about 版 窗体,文件命名 fabout.cpp 按 (button) :如退出按 ,命名 btnexit 基 :加 base ,如 表基 ,窗体命名 : wbaserep, 文件命名 fbaserep.cpp1. 在 .h/.cpp 的开 有一段格式 一的 明,内容包括: a. 文件名 (filename) ; b. 建人 (creater) ; c. 文件 建 (date); d. 短 明文件功能、用途(comment) 。 好 2. 除非极其 ,否 函数 有注 明。内容包括:功能、入口/ 出口参数,必要 可有 注或 充 明。 是好 3. 每列代 的 度推荐 80
18、列,最 不得超 120列;折行以 准。太 了, 我的限制是 60 列,因 文本方式下屏幕一共80 列,如果你用 bc 一 的 器,窗口 框等又要占据一定空 ,所以80 列太 4. 循 、分支代 ,判断条件与 行代 不得在同一行上。很 5. 指 的定 , * 号既可以 接 型,也可以在 量名之前。 例:可写做: int* pnsize; 也可写做: int *pnsize; 但不得写做: int * pnsize;建 采用第二种,除非附加另外一条 定:一次只声明一个 量,否 就会 人混淆,比如: int* a, b;看起来 b 好像也是个指 ,其 不是。 6. 在 的成 函数内 用非成 函数 ,
19、在非成 函数名前必 加上: 。 一条我倒 得并不是必需的,我的看法是决不要 你的 成 函数和全局函数的名称相同(或 似) 7. 函数入口参数有缺省 , 注 明。 例: bool cwpsdib:paintdib(cdc* pdc, crect& rc, int nbrightness, file:/*=0*/ bool bgrayscale file:/*=false*/ )每个 量写一行,必要 加上/*in, out*/ 注 8. else if 必 写在一行。 尽量避免 else if 的 构 9. 与,?、,?有关的各 定: 9.1,? 、,? 独占一行。在 行内可有注 。 9.2 ,?
20、必 另起一行,, ? 之后的代 必 一个tab。,?与,?必 在 同 一列上。 9.3 在循 、分支之后若只有一行代 , 然可省略,?、,?,但不推荐 么 做。若省略后可能引起歧 , 必 加上,?、,?。 持保留意 ,因 gnu 的代 范是 ;.的: if ( null = ptr )/ do something here 或者if ( null = ptr ) / do something here 争论哪个更好并没有意义,关键是统一,如果用vc 当然你的办法最方便,可是如果你用 emacs 或者 vi,就不是这样了。 10. 与空格有关的各项规定。 10.1 在所有两目、三目运算符的两边都
21、必须有空格。在单目运算符两端不必空格。但 在 , ?、,:?、,.?、,?、,?等运算符前后,及, &?(取地址)、,* ?(取值)等运算符之后不得有空格。 10.2 for 、 while 、 if 等关键词之后应有1 个空格,再接, (?,之后无空格;在结尾 的,)?前不得有空格。我认为在括号两端加空格并不是什么错误,尤其是在一个条件十分复杂的if 语句里 10.3 调用函数、宏时,, (?、,)?前后不得有空格。 10.4 类型强制转换时,, (?,)?前后不得有空格同上 11. 与缩进有关的各项规定 11.1 缩进以 tab 为单位。 1 个 tab 为 4 个空格我认为这个值应该更大
22、,我自己使用8个空格,如果你的代码因为缩进幅度太大而导致折行,那么几乎可以肯定你的程序设计方案有问题。 11.2 下列情况,代码缩进一个 tab: 1. 函数体相对函数名及 、 。 2. if、 else、 for、 while 、 do 等之后的代码。 3. 一行之内写不下,折行之后的代码,应在合理的位置进行折行。若有+ - * / 等 运 算符,则运算符应在上一行末尾,而不应在下一行的行首。这一条我反对,运算符应该放在下一行行首,以使人能清楚的知道这一行是续上一行的,比如if ( something& somethingelse& otherthings )如果写做 if ( someth
23、ing &somethingelse &otherthings )反而看不清楚 11.3 下列情况,不必缩进: switch 之后的 case、 default 。附件二 java 语言单元测试规范java 语言的编程规范遵照公司的开发规范。1. 基本要求1.1程序结构清析,简单易懂,单个函数的程序行数不得超过100 行。 1.2代码精简,避免垃圾程序。1.3尽量使用标准库函数和公共函数。1.4不要随意定义全局变量,尽量使用局部变量。1.5 使用括号以避免二义性。2.可读性要求2.1可读性第一,效率第二。2.2 保持注释与代码完全一致。2.3每个源程序文件,都有文件头说明,说明规格见规范。2.
24、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 注释行数(不包括程
25、序头和函数头说明部份)应占总行数的1/5 到 1/3 。3. 结构化要求3.1 禁止出现两条等价的支路。3.2 禁止 goto语句。3.3用if语句来强调只执行两组语句中的一组。禁止 else goto和 else return。 3.4 用 case实现多路分支。 3.5 避免从循环引出多个出口。 3.6 函数只有一个出口。 3.7 不使用条件赋值语句。 3.8 避免不必要的分支。3.9 不要轻易用条件分支去替换逻辑表达式。4. 正确性与容错性要求4.1程序首先是正确,其次是优美4.2无法证明你的程序没有错误,因此在编写完一段程序后,应先回头检查。4.3 改一个错误时可能产生新的错误,因此在
26、修改前首先考虑对其它程序的影响。4.4所有变量在调用前必须被初始化。4.5对所有的用户输入,必须进行合法性检查。4.6 不要比较浮点数的相等,如: 10.0 * 0.1 = 1.0 , 不可靠4.7程序与环境或状态发生关系时, 必须主动去处理发生的意外事件,如文件能否 逻辑锁定、打印机是否联机等。4.8单元测试也是编程的一部份,提交联调测试的程序必须通过单元测试。5. 可重用性要求5.1 重复使用的完成相对独立功能的算法或代码应抽象为公共控件或类。5.2 公共控件或类应考虑oo 思想,减少外界联系,考虑独立性或封装性。5.3 公共控件或类应建立使用模板。命名规范定义这个规范的目的是让项目中所有
27、的文档都看起来像一个人写的,增加可读性, 减少项目组中因为换人而带来的损失。(这些规范并不是一定要绝对遵守,但是一定要让程序有良好的可读性)package 的命名package 的名字应该都是由一个小写单词组成。class 的命名class 的名字必须由大写字母开头而其他字母都小写的单词组成class变量的命名变量的名字必须用一个小写字母开头。后面的单词用大写字母开头。static final 变量的命名static final 变量的名字应该都大写,并且指出完整含义。参数的命名参数的名字必须和变量的命名规范一致。数组的命名数组应该总是用下面的方式来命名:byte buffer;而不是:byt
28、e buffer;方法的参数使 用 有 意 义 的 参 数 命 名 , 如 果 可 能 的 话 , 使 用 和 要 赋 值 的 字 段 一 样 的 名字: setcounter(int size) this.size = size; java 文件样式所有的 java(*.java) 文件都必须遵守如下的样式规则版权信息版权信息必须在java 文件的开头,比如:/* copyright ? 2000 shanghai xxx co. ltd. * all right reserved. */ 其他不需要出现在 javadoc 的信息也可以包含在这里。package/importspackage
29、 行要在 import 行之前, import 中标准的包名要在本地的包名之前,而且按照字母顺;.序 排 列 。 如 果 import 行 中 包 含 了 同 一 个 包 中 的 不 同 子 目 录 , 则 应 该 用 * 来 处理。 package .stats; import java.io.*;import java.util.observable; import hotlava.util.application;这里 java.io.* 使用来代替inputstream and outputstream的。class接下来的是类的注释,一般是用来解释类的。/* a
30、 class representing a set of packet and byte counters * it is observable to allow it to be watched, but only * reports changes when the current set is complete */接下来是类定义,包含了在不同的行的 extends 和 implements public class counterset extends observable implements cloneable class fields接下来是类的成员变量:/* packet co
31、unters */ protected int packets;public 的成员变量必须生成文档( javadoc)。proceted、private 和 package 定义的成员变量如果名字含义明确的话,可以没有注释。存取方法接下来是类变量的存取的方法。 它只是简单的用来将类的变量赋值获取值的话, 可以简单的写在一行上。 /* get the counters* return an array containing the statistical data. this array has been * freshly allocated and can be modified by t
32、he caller. */public int getpackets() return copyarray(packets, offset); public int getbytes() return copy array(bytes, offset); public int getpackets() return packets; public void setpackets(int packets) this.packets = packets; 其它的方法不要写在一行上构造函数接下来是构造函数,它应该用递增的方式写(比如:参数多的写在后面)。访问类型(public, private等 .
33、) 和 任何 static, final或 synchronized 应该在一行中,并且方法和参数另写一行,这样可以使方法和参数更易读。publiccounterset(int size) this.size = size; 克隆方法如果这个类是可以被克隆的,那么下一步就是clone 方法:publicobject clone() try counterset obj = (counterset)super.clone(); obj.packets = (int)packets.clone(); obj.size = size; return obj;catch(clonenotsupport
34、edexception e) throw new internalerror(unexpected clonenotsupportedexception: + e.getmessage(); 类方法下面开始写类的方法:/* set the packet counters* (such as when restoring from a database) */ protected finalvoid setarray(int r1, int r2, int r3, int r4) throws illegalargumentexception /;./ ensure the arrays are
35、 of equal size /if (r1.length != r2.length | r1.length != r3.length | r1.length != r4.length) throw new illegalargumentexception(arrays must be of the same size); system.arraycopy(r1, 0, r3, 0, r1.length); system.arraycopy(r2, 0, r4, 0, r1.length);tostring 方法无论如何,每一个类都应该定义tostring 方法: publicstring t
36、ostring() string retval = counterset: ;for (int i = 0; i 0) i + ; / 错误 , 和 在同一行 if (i0) i +; / 正确 , 单独作为一行 语句永远单独作为一行.如果 语句应该缩进到与其相对应的 那一行相对齐的位置。括号左括号和后一个字符之间不应该出现空格, 同样 , 右括号和前一个字符之间也不应该出现空格 . 下 面 的 例 子 说 明 括 号 和 空 格 的 错 误 及 正 确 使 用 : callproc( aparameter ); /错误 callproc(aparameter); / 正确不要在语句中使用无意义的括号. 括号只应该为达到某种目的而出
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年吉林省梅河口市高二生物下册期末考试试卷附参考答案【突破训练】
- 2026年山东省龙口市高二生物下册期末考试测试卷有完整答案
- 2025年湖北省大冶市高二生物下册期末考试测试卷带答案(B卷)
- 2026年山东省龙口市高二生物下册期末考试测试卷含答案【A卷】
- 2026年江西省贵溪市高二生物下册期末考试考试卷含完整答案【易错题】
- 2026年江苏省张家港市高二生物下册期末考试模拟卷【基础题】附答案
- 2025年辽宁省调兵山市高二生物下册期末考试检测卷附参考答案【达标题】
- 2025年黑龙江省尚志市高二生物下册期末考试模拟卷含答案(B卷)
- 2025年江苏省太仓市高二生物下册期末考试模拟卷及参考答案【满分必刷】
- 2026年山西省侯马市高二生物下册期末考试测试卷附答案(综合卷)
- 专业英语四级(语法与词汇)模拟试卷4(共270题)
- 第二节 蛋白质说课稿-2025-2026学年高中化学人教版2019选择性必修3 有机化学基础-人教版2019
- T-GDHES 006-2025 水环境治理工程供排水有限空间作业管控技术导则
- DB42∕T 1046-2021 住宅厨房、卫生间集中排气系统技术规程
- 1静-水工钢筋混凝土结构(本)(闭卷) 国开机考答案
- 业务台账管理制度
- 管理学沟通的含义
- 免疫检验技术学习通超星期末考试答案章节答案2024年
- 新能源发电技术 课件 第4章 太阳能发电
- 城市合伙人协议 城市合伙人方案(协议)范本
- 第9课 共同弘扬中华传统美德 《中华民族大团结》(初中 精讲课件)
评论
0/150
提交评论