软件编程规范培训实例与练习 问题分类 逻辑类问题(A类)一指设计、编码中出现的计算正确性和一致性、程 序逻辑控制等方面出现的问题,在系统中起关键作用,将导致软件死机、功能正 常实现等严重问题 接口类问题(B类)一指设计、编码中出现的函数和环境、其他函数、全 局/局部变量或数据变量之间的数据/控制传输不匹配的问题,在系统中起重要作 用,将导致模块间配合失效等严重问题 维护类问题(C类)一指设计、编码中出现的对软件系统的维护方便程度 造成影响的问题,在系统中不起关键作用,但对系统后期维护造成不便或导致维 护费用上升; 可测试性问题(D类)一指设计、编码中因考虑不周而导致后期系统可测 试性差的问题。 处罚办法 问题发生率: P=D/S D=D4+0.5D+0.25D 其中: 问题发生率 D-1个季度内错误总数 D4-1个季度内A类错误总数 D-1个季度内B类错误总数 Dc-1个季度内C类错误总数 S-1个季度内收到问题报告单总数 1)当D≥3时,如果P≥3%,将进行警告处理,并予以公告 2)当D≥5时,如果P≥5%,将进行罚款处理,并予以公告
软件编程规范培训实例与练习 问题分类 1 逻辑类问题(A类)-指设计、编码中出现的计算正确性和一致性、程 序逻辑控制等方面出现的问题,在系统中起关键作用,将导致软件死机、功能正 常实现等严重问题; 接口类问题(B类)-指设计、编码中出现的函数和环境、其他函数、全 局/局部变量或数据变量之间的数据/控制传输不匹配的问题,在系统中起重要作 用,将导致模块间配合失效等严重问题; 维护类问题(C类)-指设计、编码中出现的对软件系统的维护方便程度 造成影响的问题,在系统中不起关键作用,但对系统后期维护造成不便或导致维 护费用上升; 可测试性问题(D类)-指设计、编码中因考虑不周而导致后期系统可测 试性差的问题。 处罚办法 问题发生率: P=D/S D=DA+0.5DB+0.25DC 其中: P -问题发生率 D -1个季度内错误总数 DA -1个季度内A类错误总数 DB -1个季度内B类错误总数 DC -1个季度内C类错误总数 S -1个季度内收到问题报告单总数 1)当D≥3时,如果P≥3%,将进行警告处理,并予以公告; 2)当D≥5时,如果P≥5%,将进行罚款处理,并予以公告
目录 第5页 逻辑类代码问题 变量指针在使用前就必须初始化 第5页 【案例111】 第5页 2、防止指针数组操作越界 第5页 【案例121】 第5页 【案例122】 第6页 案例123】 第7页 【案例124】 第8页 3、避免指针的非法引用 第9页 案例13.1】 第9页 4、变量类型定义错误 第10页 【案例141】 第10页 5、正确使用逻辑与&&、屏蔽&操作符 第17页 【案例151】 第17页 6、注意数据类型的匹配 第18页 【案例161】 第18页 【案例16.2】 第18页 7、用于控制条件转移的表达式及取值范围是否书写正确 第20页 【案例171】 第20页 【案例172】 第21页 【案例173】 第22页 8、条件分支处理是否有遗漏 第24页 案例181】 第24页 9、引用已释放的资源 第26页 【案例191】 第26页 10、分配资源是否已正确释放 第28页 案例110.1】 第28页 【案例110.2】 第29页 【案例110.3】 第30页
目 录 一、逻辑类代码问题 第 5 页 1、变量 /指针在使用前就必须初始化 第 5 页 【案例1.1.1 】 第 5 页 2、防止指针 /数组操作越界 第 5 页 【案例1.2.1 】 第 5 页 【案例1.2.2 】 第 6 页 【案例1.2.3 】 第 7 页 【案例1.2.4 】 第 8 页 3、避免指针的非法引用 第 9 页 【案例1.3.1 】 第 9 页 4、变量类型定义错误 第10 页 【案例1.4.1 】 第10 页 5、正确使用逻辑与&&、屏蔽 &操作符 第17 页 【案例1.5.1 】 第17 页 6、注意数据类型的匹配 第18 页 【案例1.6.1 】 第18 页 【案例1.6.2 】 第18 页 7、用于控制条件转移的表达式及取值范围是否书写正确 第20 页 【案例1.7.1 】 第20 页 【案例1.7.2 】 第21 页 【案例1.7.3 】 第22 页 8、条件分支处理是否有遗漏 第24 页 【案例1.8.1 】 第24 页 9、引用已释放的资源 第26 页 【案例1.9.1 】 第26 页 10、分配资源是否已正确释放 第28 页 【案例1.10.1 】 第28 页 【案例1.10.2 】 第29 页 【案例1.10.3 】 第30 页
案例1104】 第32页 【案例110.5】 第3页 【案例110.6】 第35页 【案例1107】 第38页 防止资源的重复释放 第39页 【案例1111】 第39页 12、公共资源的互斥性和竞用性 第40页 【案例112.1】 第40页 【案例1122】 第40页 第43页 接口类代码问题 1、对函数参数进行有效性检查 第43页 案例21.1】 第43页 【案例212】 第43页 【案例213】 第4页 【案例214】 第46页 【案例215】 第47页 案例216】 第48页 2、注意多出口函数的处理 第49页 案例221】 第49页 第51页 、维护类代码问题 1、统一枚举类型的使用 第51页 案例311】 第51页 注释量至少占代码总量的20% 第51页 【案例321】对XXX产品BAM某版本部分代码注释量的统计 第51页 第52页 四、产品兼容性问题 1、系统配置、命令方式 第52页 案例411】 第52页 【案例41.2】 第53页 2、设备对接 第54页
【案例1.10.4 】 第32 页 【案例1.10.5 】 第33 页 【案例1.10.6 】 第35 页 【案例1.10.7 】 第38 页 11、防止资源的重复释放 第39 页 【案例1.11.1 】 第39 页 12、公共资源的互斥性和竞用性 第40 页 【案例1.12.1 】 第40 页 【案例1.12.2 】 第40 页 二、接口类代码问题 第43 页 1、对函数参数进行有效性检查 第43 页 【案例2.1.1 】 第43 页 【案例2.1.2 】 第43 页 【案例2.1.3 】 第44 页 【案例2.1.4 】 第46 页 【案例2.1.5 】 第47 页 【案例2.1.6 】 第48 页 2、注意多出口函数的处理 第49 页 【案例2.2.1 】 第49 页 三、维护类代码问题 第51 页 1 、 统一枚举类型的使用 第51 页 【案例3.1.1 】 第51 页 2 、 注释量至少占代码总量的20 % 第51 页 【案例3.2.1】对XXX产品BAM某版本部分代码注释量的统计 第51 页 四、产品兼容性问题 第52 页 1、系统配置、命令方式 第52 页 【案例4.1.1 】 第52 页 【案例4.1.2 】 第53 页 2、设备对接 第54 页
案例421】 第54页 其他 第55页 【案例431】 第55页 第58页 五、版本控制问题 1、新老代码中同一全局变量不一致 第58页 案例511】 第58页 第59页 六、可测试性代码问题 1、调试信息打印信息的正确性 第59页 【案例611】 第59页
【案例4.2.1 】 第54 页 3、其他 第55 页 【案例4.3.1 】 第55 页 五、版本控制问题 第58 页 1、新老代码中同一全局变量不一致 第58 页 【案例5.1.1 】 第58 页 六、可测试性代码问题 第59 页 1、调试信息 /打印信息的正确性 第59 页 【案例6.1.1 】 第59 页
逻辑类代码问题 1、变量指针在使用前就必须初始化 案例111】 C语言中最大的特色就是指针。指针的使用具有很强的技巧性和灵活性, 但同时也带来了很大的危险性。在XXX的代码中有如下一端对指针的灵活使用: UC*puc card config tab Get Config Table( AMP CPM CARD CONFIG TABLE, &ul card config num &puc card config tab, use which data area b middle data ok-generate trans middle data from original data( puc card config tab Ul card config num) 其中红色部分巧妙的利用指向指针的指针为指针 puc card config tab赋值而 在兰色部分使用该指针。但在 Get Config Table函数中有可能失败返回而不给 该指针赋值。因此,以后使用的可能是一个非法指针 指针的使用是非常灵活的,同时也存在危险性,必须小心使用。指针使用的 危险性举世共知。在新的编程思想中,指针基本上被禁止使用(JAVA中就是 这样),至少也是被限制使用。而在我们交换机的程序中大量使用指针,并 且有增无减
一、逻辑类代码问题 1、变量/指针在使用前就必须初始化 【案例1.1.1】 C语言中最大的特色就是指针。指针的使用具有很强的技巧性和灵活性, 但同时也带来了很大的危险性。在XXX的代码中有如下一端对指针的灵活使用: ... ... _UC *puc_card_config_tab; ... ... Get_Config_Table( AMP_CPM_CARD_CONFIG_TABLE, &ul_card_config_num, &puc_card_config_tab, use_which_data_area ); ... ... b_middle_data_ok = generate_trans_middle_data_from_original_data( puc_card_config_tab, Ul_card_config_num) .... ... 其中红色部分巧妙的利用指向指针的指针为指针puc_card_config_tab赋值,而 在兰色部分使用该指针。但在Get_Config_Table函数中有可能失败返回而不给 该指针赋值。因此,以后使用的可能是一个非法指针。 指针的使用是非常灵活的,同时也存在危险性,必须小心使用。指针使用的 危险性举世共知。在新的编程思想中,指针基本上被禁止使用(JAVA中就是 这样),至少也是被限制使用。而在我们交换机的程序中大量使用指针,并 且有增无减