开发人员单元测试规范_第1页
开发人员单元测试规范_第2页
开发人员单元测试规范_第3页
开发人员单元测试规范_第4页
开发人员单元测试规范_第5页
已阅读5页,还剩11页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

软通动力信息技术公司1 开发人员单元测试规范开发人员单元测试规范 为了提高整个开发中心产品和项目的测试效率 保证产品与项目内部系统集成测试的 顺利进行 现要求系统开发部各项目组在提交产品至项目监理部之前必须进行严格的单元 测试 即按照代码的单元组成逐个进行测试 具体说明如下 单元测试内容单元测试内容 单元测试的依据是详细设计 应对模块内所有重要的控制路径设计测试用例 以便发 现模块内部的错误 单元测试的测试类型主要包括 1 模块接口测试 2 模块局部数据结构测试 3 模块边界条件测试 4 模块中所有独立执行通路测试 5 模块的各条错误处理通路测试 6 模块的非法测试 例如在输入数字的地方输入字母 7 代码重用测试 在开发过程中有些模块功能几乎相同 程序员在重用代码时可能忘 记在原有代码上修改或修改不全面 而造成的错误 8 系统兼容测试 例如有些程序在 IE6 能运行正常 到 IE5 下不能运行 有些程序在 WIN2000 下能运行 而到 WIN98 却不能运行 单元测试力度单元测试力度 要求测试力度满足 语句覆盖 使被测程序的每条语句至少执行一次 判定覆盖 使被测程序的每一分支执行一次 条件覆盖 要求判定中的每个条件均为 真 假 两种结果至少执行一次 条件组合覆盖 让条件覆盖中的结果的所有可能组合至少出现一次 单元测试步骤单元测试步骤 一般认为单元测试应紧接在编码之后 当源程序编制完成并通过复审和编译检查 便可开始单元测试 测试用例的设计应与复审工作相结合 根据设计信息选取测试数 据 将增大发现各类错误的可能性 在确定测试用例的同时 应给出期望结果 项目 组完成单元测试 向项目监理部提交验收版本的同时必须一并递交单元测试案例及测 试问题报告记录 测试部由项目监理部取得需测试系统的版本及相关文档 若在测试期间发现单元 测试中记录的问题 如实记录 项目监理部视具体情况酌情对该项目组的绩效考核与 项目评分加以控制 不同语言及架构的单元测试见附件 软通动力信息技术公司2 附件一附件一 c 语言单元测试规范 语言单元测试规范 1 基本要求 1 1 程序结构清析 简单易懂 单个函数的程序行数不得超过 100 行 1 2 打算干什么 要简单 直接了当 代码精简 避免垃圾程序 1 3 尽量使用标准库函数和公共函数 1 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 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 不要轻易用条件分支去替换逻辑表达式 4 正确性与容错性要求 4 1 程序首先是正确 其次是优美 4 2 无法证明你的程序没有错误 因此在编写完一段程序后 应先回头检查 4 3 改一个错误时可能产生新的错误 因此在修改前首先考虑对其它程序的影响 4 4 所有变量在调用前必须被初始化 4 5 对所有的用户输入 必须进行合法性检查 软通动力信息技术公司3 4 6 不要比较浮点数的相等 如 10 0 0 1 1 0 不可靠 4 7 程序与环境或状态发生关系时 必须主动去处理发生的意外事件 如文件能否 逻辑锁定 打印机是否联机等 4 8 单元测试也是编程的一部份 提交联调测试的程序必须通过单元测试 5 可重用性要求 5 1 重复使用的完成相对独立功能的算法或代码应抽象为公共控件或类 5 2 公共控件或类应考虑 OO 思想 减少外界联系 考虑独立性或封装性 5 3 公共控件或类应建立使用模板 1 适用范围 本标准适用于利用 Visul C Borland C 进行软件程序开发的人员 2 变量命名 命名必须具有一定的实际意义 形式为 xAbcFgh x 由变量类型确定 Abc Fgh 表示连续意 义字符串 如果连续意义字符串仅两个 可都大写 如 OK 具体例程 BOOL 类型 bEnable ch char chText c 类对象 cMain 对象实例 h Handle 句柄 hWnd i int n 无符号整型 p 指针 sz str 字符串 w WORD x y 坐标 Char 或者 TCHAR 类型 与 Windows API 有直接联系的用 szAppName 10 形式否则用 FileName 10 形式 单个字符也可用小写字母表示 Int 类型 nCmdShow LONG 类型 lParam UINT 类型 uNotify DWORD 类型 dwStart PSTR 类型 pszTip LPSTR 类型 lpCmdLine LPTSTR 类型 lpszClassName LPVOID 类型 lpReserved WPARAM 类型 wParam LPARAM 类型 lParam HWND 类型 hDlg HDC 类型 hDC HINSTANCE 类型 hInstance 软通动力信息技术公司4 HANDLE 类型 hInstance HICON 类型 hIcon int iTmp float fTmp DWORD dw String AnsiString str m 类成员变量 m nVal m bFlag g 全局变量 g nMsg g bFlag 局部变量中可采用如下几个通用变量 nTemp nResult I J 一般用于循环变量 其他资源句柄同上 3 常量命名和宏定义 常量和宏定义必须具有一定的实际意义 常量和宏定义在 include 和函数定义之间 常量和宏定义必须全部以大写字母来撰写 中间可根据意义的连续性用下划线连接 每一 条定义的右侧必须有一简单的注释 说明其作用 资源名字定义格式 菜单 IDM XX 或者 CM XX 位图 IDB XX 对话框 IDD XX 字符串 IDS XX DLGINIT DIALOG XX ICON IDR XX 4 函数命名 函数原型说明包括引用外来函数及内部函数 外部引用必须在右侧注明函数来源 模 块名及文件名 如是内部函数 只要注释其定义文件名 第一个字母必须使用大写字母 要求用大小写字母组合规范函数命名 必要时可用下划线 间隔 示例如下 void UpdateDB Tfgd TRACK NAME file 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 结构体命名 结构体类型命名必须全部用大写字母 原则上前面以下划线开始 结构体变量命名必须用 大小写字母组合 第一个字母必须使用大写字母 必要时可用下划线间隔 对于私有数 据区 必须注明其所属的进程 全局数据定义只需注意其用途 示例如下 typedef struct char szProductName 20 char szAuthor 20 char szReleaseDate 16 char szVersion 10 软通动力信息技术公司5 unsigned long MaxTables unsigned long UsedTables DBS DATABASE DBS DATABASE GdataBase 6 控件的命名 用小写前缀表示类别 用小写前缀表示类别 fm 窗口 cmd 按钮 cob combo 下拉式列表框 txt 文本输入框 lab labal 标签 img image 图象 pic picture grd Grid 网格 scr 滚动条 lst 列表框 frm fram 7 注释 原则上注释要求使用中文 文件开始注释内容包括 公司名称 版权 作者名称 时间 模块用途 背景介绍等 复 杂的算法需要加上流程说明 函数注释包括 输入 输出 函数描述 流程处理 全局变量 调用样例等 复杂的函数 需要加上变量用途说明 程序中注释包括 修改时间和作者 方便理解的注释等 引用一 文件开头的注释模板 文件名 Copyright c 1998 1999 公司技术开发部 创建人 日 期 修改人 日 期 描 述 版 本 软通动力信息技术公司6 引用二 函数开头的注释模板 函数名 输 入 a b c a b c 输 出 x x 为 1 表示 x 为 0 表示 功能描述 全局变量 调用模块 作 者 日 期 修 改 日 期 版本 引用三 程序中的注释模板 注释内容 8 程序 a 程序编码力求简洁 结构清晰 避免太多的分支结构及太过于技巧性的程序 尽量不采用递归模式 b 编写程序时 亦必须想好测试的方法 换句话说 单元测试 的测试方案应 在程序编写时一并拟好 c 注释一定要与程序一致 d 版本封存以后的修改一定要将老语句用 封闭 不能自行删除或修改 并要 在文件及函数的修改记录中加以记录 e 程序中每个 block 的开头 及 必须对齐 嵌套的 block 每进一套 缩进一个 tab TAB 为 4 个空格 block 类型包括 if for while do 等关键字引出的 f 对于比较大的函数 每个 block 和特殊的函数调用 都必须注明其功能 举例如下 count divisor 1193280 freq compute the proper count OutByte unsigned short 67 unsigned char 182 tell 8253 that a count is coming OutByte unsigned short 66 count c 0 send low order byte OutByte unsigned short 66 count c 1 send high order byte 软通动力信息技术公司7 bcb delphi 中的变量命名 遵循匈牙利命名法 命 名必须有意义 制定如下规定 窗体 以大写的 W 开始 如 About 版权窗体 命名为 WAbout 文件 以大写的 F 开始 如 About 版权窗体 文件命名为 FAbout cpp 按钮 Button 如退出按钮 命名为 btnExit 基类 加 base 标记 如报表基类 窗体命名为 WBaseRep 文件命名为 FBaseRep cpp 1 在 h cpp 的开头应有一段格式统一的说明 内容包括 a 文件名 FileName b 创建人 Creater c 文件创建时间 Date d 简短说明文件功能 用途 Comment 好习惯 2 除非极其简单 否则对函数应有注释说明 内容包括 功能 入口 出口参数 必 要 时还可有备注或补充说明 还是好习惯 3 每列代码的长度推荐为 80 列 最长不得超过 120 列 折行以对齐为准 太宽了 我的限制是 60 列 因为文本方式下屏幕一共 80 列 如果你用 BC 这一类的编辑 器 窗口边框等又要占据一定空间 所以 80 列太宽 4 循环 分支代码 判断条件与执行代码不得在同一行上 很对 5 指针的定义 号既可以紧接类型 也可以在变量名之前 例 可写做 int pnsize 也可写做 int pnsize 但不得写做 int pnsize 建议采用第二种 除非附加另外一条规定 一次只声明一个变量 否则就会让人混淆 比如 int a b 看起来 b 好像也是个指针 其实不是 6 在类的成员函数内调用非成员函数时 在非成员函数名前必须加上 这一条我倒觉得并不是必需的 我的看法是决不要让你的类成员函数和全局函数的名称 相同 或类似 7 函数入口参数有缺省值时 应注释说明 例 BOOL CWpsDib PaintDIB CDC pDC CRect 而不是 byte buffer 方法的参数 使用有意义的参数命名 如果可能的话 使用和要赋值的字段一样的名字 SetCounter int size this size size Java 文件样式 所有的 Java java 文件都必须遵守如下的样式规则 版权信息 软通动力信息技术公司12 版权信息必须在 java 文件的开头 比如 Copyright 2000 Shanghai XXX Co Ltd All right reserved 其他不需要出现在 javadoc 的信息也可以包含在这里 Package Imports package 行要在 import 行之前 import 中标准的包名要在本地的包名之前 而且按照字 母顺序排列 如果 import 行中包含了同一个包中的不同子目录 则应该用 来处理 package stats import java io import java util Observable import hotlava util Application 这里 java io 使用来代替 InputStream and OutputStream 的 Class 接下来的是类的注释 一般是用来解释类的 A 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 counters protected int packets public 的成员变量必须生成文档 JavaDoc Proceted private 和 package 定义的成 员变量如果名字含义明确的话 可以没有注释 存取方法 接下来是类变量的存取的方法 它只是简单的用来将类的变量赋值获取值的话 可以简单 的写在一行上 软通动力信息技术公司13 Get the counters return an array containing the statistical data This array has been freshly allocated and can be modified by the caller public int getPackets return copyArray packets offset public int getBytes return copyArray bytes offset public int getPackets return packets public void setPackets int packets this packets packets 其它的方法不要写在一行上 构造函数 接下来是构造函数 它应该用递增的方式写 比如 参数多的写在后面 访问类型 public private 等 和 任何 static final 或 synchronized 应该在一行中 并且方法和参数另写一行 这样可以使方法和参数更易读 public CounterSet int size this size size 克隆方法 如果这个类是可以被克隆的 那么下一步就是 clone 方法 public Object clone try CounterSet obj CounterSet super clone obj packets int packets clone obj size size return obj catch CloneNotSupportedException e throw new InternalError Unexpected CloneNotSUpportedException e getMessage 类方法 下面开始写类的方法 Set the packet counters such as when restoring from a database protected final void setArray int r1 int r2 int r3 int r4 throws IllegalArgumentException 软通动力信息技术公司14 Ensure the arrays are 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 方法 public String toString String retval CounterSet for int I 0 I 0 I 错误 和 在同一行 if i 0 I 软通动力信息技术公司15 正确 单独作为一行 语句永远单独作为一行 如果 语句应该缩进到与其相对应的 那一行相对齐的位置 括号 左括号和后一个字符之间不应该出现空格 同样 右括号和前一个字符之间也不应该出现 空格 下面的例子说明括号和空格的错误及正确使用 CallProc Aparameter 错误 CallProc Aparameter 正确 不要在语句中使用无意义的括号 括号只应该为达到某种目的而出现在源代码中 下面的 例子说明错误和正确的用法 if I 42 错误 括号毫无意义 if I 42 or J 42 then 正确 的确需要括号 程序编写规范 exit exit 除了在 main 中可以被调用外 其他的地方不应该调用 因为这样做不给任何代码代 码机会来截获退出 一个类似后台服务地程序不应该因为某一个库模块决定了要退出就退 出 异常 申明的错误应该抛出一个 RuntimeException 或者派生的异常 顶层的 main 函数应该截获所有的异常 并且打印 或者记录

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论