版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
软件代码审查技术北京航空航天大学
可靠性与系统工程学院软件代码审查技术北京航空航天大学
可靠性与系统工程学院内容代码审查的概念代码审查的规程代码审查的检查单12/10/2022内容代码审查的概念12/9/2022什么是代码审查?什么是代码审查?软件测试静态测试动态测试人工检查自动静态分析白盒测试黑盒测试审查走查评审12/10/2022软件测试静态测试动态测试人工检查自动静态分析白盒测试黑盒测试1.代码审查的概念代码审查是组成审查组,依据软件详细设计文档,对照代码检查单,逐行检查软件编码中易出现的错误的方法。
12/10/20221.代码审查的概念12/9/20222.代码审查的规程2.代码审查的规程2.代码审查的规程进入条件测试内容实施步骤12/10/20222.代码审查的规程进入条件12/9/20222.1进入条件软件代码无错误通过编译;软件文档齐备并符合相关标准规范,包括:详细设计说明;代码清单必要时还应包括:需求规格说明;概要设计说明;数据字典;软/硬件接口说明;代码静态分析报告;以及上述文档引用的其他文档。12/10/20222.1进入条件软件代码无错误通过编译;12/9/2022检查代码和设计的一致性;检查代码的逻辑表达的正确性;检查代码对标准的遵循、可读性;检查代码结构的合理性。2.2测试内容12/10/2022检查代码和设计的一致性;2.2测试内容12/9/2022
软件代码审查按时间顺序分为:计划、提交软件概述、个人审查(会议准备)、会议审查、缺陷修改、回归审查、编写报告。
2.3实施步骤12/10/2022软件代码审查按时间顺序分为:计划、提交软件概述、1.4.1计划1.4.2提交软件概述1.4.3个人审查(会议准备)1.4.4会议审查1.4.5缺陷修改1.4.6回归审查1.4.7编写报告
1.4实施步骤12/10/20221.4.1计划1.4实施步骤12/9/2022检查进入条件确定审查内容确定审查人员确定审查辅助条件进度安排分发审查材料
1)计划编写《代码审查计划》12/10/2022检查进入条件1)计划编写《代码审查计划》12/9/2022
在个人审查前,由软件开发方以口头或书面形式提交软件概述,简要介绍待审查软件的基本概况,使审查人员对软件有初步的总体了解。
2)提交软件概述12/10/2022在个人审查前,由软件开发方以口头或书面形式提交软依据软件设计文档,参照代码检查单检查是否存在软件缺陷记录缺陷的位置、类型、性质等信息,填写个人审查记录汇总组内各审查人员发现的软件缺陷
3)个人审查(会议准备)12/10/2022依据软件设计文档,参照代码检查单检查是否存在软件缺陷3)讲解人:逐句讲解软件代码,并回答审查人员提出的问题;审查人员:提问和质疑,努力发现被审查软件代码中的缺陷;记录人:记录在审查会议中发现的所有软件缺陷;主持人:主持会议,保证会议按计划进行,并在发生争议时起调解作用。填写“软件代码审查确认缺陷列表”和“软件代码审查问题报告单”4)会议审查12/10/2022讲解人:逐句讲解软件代码,并回答审查人员提出的问题;4)为提高软件代码审查效率并保证审查质量,对会议时间和参加人数作如下规定:(1)每次审查会的参加人数至少3人,最多不超过7人;(2)每次审查会议的时间至少45分钟,最长不超过2小时。12/10/2022为提高软件代码审查效率并保证审查质量,对会议时间和HowfastisthecodeInspectionrate?500statements/hourduringoverview125sourcestatement/hourduringindividual
preparation90-125statements/hourcanbeinspectedInspectionisthereforeanexpensiveprocessInspecting500linescostsabout40man/hours
effort=£2800->£5.8/perline12/10/2022HowfastisthecodeInspectio
对于确认并要求修改的软件缺陷,由开发方人员分析缺陷产生的原因,修改相应的软件代码或文档,并编写《软件代码审查更改报告单》。
5)缺陷修改12/10/2022
对于确认并要求修改的软件缺陷,由开发方人员
待所有要求修改的软件缺陷修改完成后,组织全部或部分代码的回归审查,检查软件修改是否正确,是否引入新的软件缺陷。回归审查方法与第一次会议审查方法相同。
6)回归审查12/10/2022待所有要求修改的软件缺陷修改完成后,组织全部或部
由主持人确认软件是否满足通过准则,并编写《软件代码审查报告》。7)编写报告12/10/2022
由主持人确认软件是否满足通过准则,并编通过准则a.充分评定了全部代码清单,并且全部编码标准被遵守;b.代码准确地实现设计;c.对缺陷的解释已列在缺陷报告上;d.完成并检验了代码审查引起的全部修改。12/10/2022通过准则a.充分评定了全部代码清单,并且全部编码标准被遵守;3.代码审查的检查单3.代码审查的检查单代码检查单(checklist)可追溯性逻辑数据接口注释文档例外情况处理内存其它12/10/2022代码检查单(checklist)可追溯性12/9/2022可追溯性代码是否遵循详细设计?代码是否与需求一致?12/10/2022可追溯性代码是否遵循详细设计?12/9/2022逻辑赋值顺序表示优先级的括号用法是否正确?y=(a+b)*c;写成:y=a+b*c;代码是否依赖赋值顺序?
x=3;y=f(x,x++);
12/10/2022逻辑赋值顺序12/9/2022控制“if…else”和“switch”使用是否正确清晰?循环能否结束?复合语句是否被正确地用花括号括起来?Case语句中是否所有可能出现的情况均已考虑?“goto”和“label”是否只有在有恰当理由,而且代码有详细注释的情况下才使用?12/10/2022控制12/9/2022“if…else”和“switch”使用是否正确清晰?if(r1_count==1)if(r1_temp==0xbb){r1_ok=1;}if(r1_temp==0xaa){r1_count=1;}else{r1_count=0;}if(vb<0)vb=100;//最小表速限制在10012/10/2022“if…else”和“switch”使用是否正确清晰?if(禁止对实数类型的量做是否相等的比较如下代码:
intP=1000; floatd=0.435f; intH=435;if(H==(P*d)){i=1; }else{i=2; }到底走哪个分支?
走此分支?H=435P*d=1000*0.435=435是否相等?12/10/2022禁止对实数类型的量做是否相等的比较如下代码:走此分支?H=4if(DVLvdtZDemand<-50) wf+=200;elseif(DVLvdtZDemand>50) wf-=200;
接收数据出错情况下数控对流量的跟踪缺少对流量的最大、最小值保护,这样有出现负流量的可能。12/10/2022if(DVLvdtZDemand<-50)循环能否结束?
for(;;){…if(received==0xcc)break;… }12/10/2022循环能否结束?for(;;)12/9/2022复合语句是否被正确地用花括号括起来?if(state_1.eof==0&&status.eof==1) { status.eof=0; k=1; }else { status.eof=1; k=0;}12/10/2022复合语句是否被正确地用花括号括起来?if(state_1.eswitch(month)/*先计算某月以前月份的总天数*/{case1:sum=0;break;case2:sum=31;break;case4:sum=90;break;……case12:sum=334;break;}12/10/2022switch(month)/*先计算某月以前月份的总天数*数据1.变量变量在使用前是否已初始化?变量类型是否匹配?变量的声明是否按组划分为外部和内部的?每个命名是否仅用于一个用途?intm3_ps;……if(m3_ps>=1250)m3_ps=0;
CharsFlag;IntiTemp;……sFlag=iTemp;
12/10/2022数据1.变量intm3_ps;CharsFlag;12避免局部变量与全局变量同名unsignedintFire_Command;voidstatic_p(void){unsignedintFire_Command;……
Fire_Command=2;}
12/10/2022避免局部变量与全局变量同名unsignedintFire2.常量常量名是否都大写?常量是否都是通过“#define”定义?用于多个文件中的常量是否在一个INCLUDE头文件中定义?#definePI3.141512/10/20222.常量#definePI3.141512/9/2023.指针定义为指针的变量是否作为指针使用(而不是作为整数)?指针是否初始化?释放内存后是否将指针立即设置为NULL(或0)(大多数编译器释放内存时不将指针清空)?传递指针到另一个函数的代码是否首先检查了指针的有效性(非零)?通过指针写入动态分配内存的代码是否首先检查了指针的有效性(非零)?int*p;*p=100;12/10/20223.指针int*p;12/9/20224.其它宏的命名是否都大写?数组是否越界(上下界)?unsignedintHistoryRecord[9];……if(stime42>=1800){ HistoryRecord[9]=1; stime42=0}造成了数组HistoryRecord越界的错误。12/10/20224.其它unsignedintHistoryRecor接口在所有的函数及过程调用中,参数的个数都正确吗?形参与实参类型匹配吗?参数顺序正确否?如果访问共享内存,是否具有相同的共享内存结构模式?voidthree_hellos(charc){……}voidmain(void){ floatt=0.3;three_hellos(t);/*调用此函数*/}12/10/2022接口在所有的函数及过程调用中,参数的个数都正确吗?void注释注释是否与代码一致?用于理解代码的注释是否提供了必要的信息?除最明显的声明外,是否所有声明都有注释?12/10/2022注释注释是否与代码一致?12/9/2022文档软件文档是否与软件代码一致?是否对数组和变量的作用进行了描述?12/10/2022文档软件文档是否与软件代码一致?12/9/2022例外情况处理是否所有可能的错误情况都已加以考虑?在继续函数调用后代码之前是否检查了其返回值(指示请求成功或失败)?12/10/2022例外情况处理是否所有可能的错误情况都已加以考虑?12/9/2switch(month)/*先计算某月以前月份的总天数*/{case1:sum=0;break;case2:sum=31;break;……case11:sum=304;break;case12:sum=334;break;
default:printf("dataerror");break;}12/10/2022switch(month)/*先计算某月以前月份的总天数*/内存在向动态分配内存写入之前是否检查了内存申请是否成功?若采用动态分配内存,内存空间分配是否正确?当内存空间不再需要时,是否被明确地释放?int*p;p=newint;if(!p){…
12/10/2022内存在向动态分配内存写入之前是否检查了内存申请是否成功?in其它所有不能归于上述类型的12/10/2022其它所有不能归于上述类型的12/9/2022走查,有用例F(x,x++)P29,30if()P31ifelseif有误Extern函数变量P38全局未变野指针指向接口问题编译能通过吗?p=newint;野delete内存泄漏导致的失效#include<C:\VC\include\stdio.h>12/10/2022走查,有用例12/9/2022软件代码审查技术北京航空航天大学
可靠性与系统工程学院软件代码审查技术北京航空航天大学
可靠性与系统工程学院内容代码审查的概念代码审查的规程代码审查的检查单12/10/2022内容代码审查的概念12/9/2022什么是代码审查?什么是代码审查?软件测试静态测试动态测试人工检查自动静态分析白盒测试黑盒测试审查走查评审12/10/2022软件测试静态测试动态测试人工检查自动静态分析白盒测试黑盒测试1.代码审查的概念代码审查是组成审查组,依据软件详细设计文档,对照代码检查单,逐行检查软件编码中易出现的错误的方法。
12/10/20221.代码审查的概念12/9/20222.代码审查的规程2.代码审查的规程2.代码审查的规程进入条件测试内容实施步骤12/10/20222.代码审查的规程进入条件12/9/20222.1进入条件软件代码无错误通过编译;软件文档齐备并符合相关标准规范,包括:详细设计说明;代码清单必要时还应包括:需求规格说明;概要设计说明;数据字典;软/硬件接口说明;代码静态分析报告;以及上述文档引用的其他文档。12/10/20222.1进入条件软件代码无错误通过编译;12/9/2022检查代码和设计的一致性;检查代码的逻辑表达的正确性;检查代码对标准的遵循、可读性;检查代码结构的合理性。2.2测试内容12/10/2022检查代码和设计的一致性;2.2测试内容12/9/2022
软件代码审查按时间顺序分为:计划、提交软件概述、个人审查(会议准备)、会议审查、缺陷修改、回归审查、编写报告。
2.3实施步骤12/10/2022软件代码审查按时间顺序分为:计划、提交软件概述、1.4.1计划1.4.2提交软件概述1.4.3个人审查(会议准备)1.4.4会议审查1.4.5缺陷修改1.4.6回归审查1.4.7编写报告
1.4实施步骤12/10/20221.4.1计划1.4实施步骤12/9/2022检查进入条件确定审查内容确定审查人员确定审查辅助条件进度安排分发审查材料
1)计划编写《代码审查计划》12/10/2022检查进入条件1)计划编写《代码审查计划》12/9/2022
在个人审查前,由软件开发方以口头或书面形式提交软件概述,简要介绍待审查软件的基本概况,使审查人员对软件有初步的总体了解。
2)提交软件概述12/10/2022在个人审查前,由软件开发方以口头或书面形式提交软依据软件设计文档,参照代码检查单检查是否存在软件缺陷记录缺陷的位置、类型、性质等信息,填写个人审查记录汇总组内各审查人员发现的软件缺陷
3)个人审查(会议准备)12/10/2022依据软件设计文档,参照代码检查单检查是否存在软件缺陷3)讲解人:逐句讲解软件代码,并回答审查人员提出的问题;审查人员:提问和质疑,努力发现被审查软件代码中的缺陷;记录人:记录在审查会议中发现的所有软件缺陷;主持人:主持会议,保证会议按计划进行,并在发生争议时起调解作用。填写“软件代码审查确认缺陷列表”和“软件代码审查问题报告单”4)会议审查12/10/2022讲解人:逐句讲解软件代码,并回答审查人员提出的问题;4)为提高软件代码审查效率并保证审查质量,对会议时间和参加人数作如下规定:(1)每次审查会的参加人数至少3人,最多不超过7人;(2)每次审查会议的时间至少45分钟,最长不超过2小时。12/10/2022为提高软件代码审查效率并保证审查质量,对会议时间和HowfastisthecodeInspectionrate?500statements/hourduringoverview125sourcestatement/hourduringindividual
preparation90-125statements/hourcanbeinspectedInspectionisthereforeanexpensiveprocessInspecting500linescostsabout40man/hours
effort=£2800->£5.8/perline12/10/2022HowfastisthecodeInspectio
对于确认并要求修改的软件缺陷,由开发方人员分析缺陷产生的原因,修改相应的软件代码或文档,并编写《软件代码审查更改报告单》。
5)缺陷修改12/10/2022
对于确认并要求修改的软件缺陷,由开发方人员
待所有要求修改的软件缺陷修改完成后,组织全部或部分代码的回归审查,检查软件修改是否正确,是否引入新的软件缺陷。回归审查方法与第一次会议审查方法相同。
6)回归审查12/10/2022待所有要求修改的软件缺陷修改完成后,组织全部或部
由主持人确认软件是否满足通过准则,并编写《软件代码审查报告》。7)编写报告12/10/2022
由主持人确认软件是否满足通过准则,并编通过准则a.充分评定了全部代码清单,并且全部编码标准被遵守;b.代码准确地实现设计;c.对缺陷的解释已列在缺陷报告上;d.完成并检验了代码审查引起的全部修改。12/10/2022通过准则a.充分评定了全部代码清单,并且全部编码标准被遵守;3.代码审查的检查单3.代码审查的检查单代码检查单(checklist)可追溯性逻辑数据接口注释文档例外情况处理内存其它12/10/2022代码检查单(checklist)可追溯性12/9/2022可追溯性代码是否遵循详细设计?代码是否与需求一致?12/10/2022可追溯性代码是否遵循详细设计?12/9/2022逻辑赋值顺序表示优先级的括号用法是否正确?y=(a+b)*c;写成:y=a+b*c;代码是否依赖赋值顺序?
x=3;y=f(x,x++);
12/10/2022逻辑赋值顺序12/9/2022控制“if…else”和“switch”使用是否正确清晰?循环能否结束?复合语句是否被正确地用花括号括起来?Case语句中是否所有可能出现的情况均已考虑?“goto”和“label”是否只有在有恰当理由,而且代码有详细注释的情况下才使用?12/10/2022控制12/9/2022“if…else”和“switch”使用是否正确清晰?if(r1_count==1)if(r1_temp==0xbb){r1_ok=1;}if(r1_temp==0xaa){r1_count=1;}else{r1_count=0;}if(vb<0)vb=100;//最小表速限制在10012/10/2022“if…else”和“switch”使用是否正确清晰?if(禁止对实数类型的量做是否相等的比较如下代码:
intP=1000; floatd=0.435f; intH=435;if(H==(P*d)){i=1; }else{i=2; }到底走哪个分支?
走此分支?H=435P*d=1000*0.435=435是否相等?12/10/2022禁止对实数类型的量做是否相等的比较如下代码:走此分支?H=4if(DVLvdtZDemand<-50) wf+=200;elseif(DVLvdtZDemand>50) wf-=200;
接收数据出错情况下数控对流量的跟踪缺少对流量的最大、最小值保护,这样有出现负流量的可能。12/10/2022if(DVLvdtZDemand<-50)循环能否结束?
for(;;){…if(received==0xcc)break;… }12/10/2022循环能否结束?for(;;)12/9/2022复合语句是否被正确地用花括号括起来?if(state_1.eof==0&&status.eof==1) { status.eof=0; k=1; }else { status.eof=1; k=0;}12/10/2022复合语句是否被正确地用花括号括起来?if(state_1.eswitch(month)/*先计算某月以前月份的总天数*/{case1:sum=0;break;case2:sum=31;break;case4:sum=90;break;……case12:sum=334;break;}12/10/2022switch(month)/*先计算某月以前月份的总天数*数据1.变量变量在使用前是否已初始化?变量类型是否匹配?变量的声明是否按组划分为外部和内部的?每个命名是否仅用于一个用途?intm3_ps;……if(m3_ps>=1250)m3_ps=0;
CharsFlag;IntiTemp;……sFlag=iTemp;
12/10/2022数据1.变量intm3_ps;CharsFlag;12避免局部变量与全局变量同名unsignedintFire_Command;voidstatic_p(void){unsignedintFire_Command;……
Fire_Command=2;}
12/10/2022避免局部变量与全局变量同名unsignedintFire2.常量常量名是否都大写?常量是否都是通过“#define”定义?用于多个文件中的常量是否在一个INCLUDE头文件中定义?#definePI3.141512/10/20222.常量#definePI3.141512/9/2023.指针定义为指针的变量是否作为指针使用(而不是作为整数)?指针是否初始化?释放内存后是否将指针立即设置为NULL(或0)(大多数编译器释放内存时不将指针清空)?传递指针到另一个函数的代码是否首先检查了指针的有效性(非零)?通过指针写入动态分配内存的代码是否首先检查了指针的有效性(非零)?int*p;*p=100;12/10/20223.指针int*p;12/9/20224.其它宏的命名是否都大写?数组是否越界(上下界)?unsignedintHistoryRecord[9];……if(stime42>=1800){ Hist
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年大理州强制隔离戒毒所公开招聘辅警5人备考题库及一套答案详解
- 2025年监狱戒毒系统招聘475人备考题库及参考答案详解1套
- 2025年肇庆市德庆县教育局所属公办幼儿园公开招聘合同制工作人员备考题库完整参考答案详解
- 上海海事局2026年关于加强春节期间车辆安全管理的通知
- 建筑施工项目部党支部工作职责
- 推动高质量发展专题研讨发言
- 2025年云南大学附属中学星耀学校招聘备考题库及一套完整答案详解
- 2025年首都医科大学附属北京朝阳医院石景山医院派遣合同制职工招聘备考题库完整参考答案详解
- 2025年凤冈县人民政府行政执法协调监督局关于选聘行政执法人民监督员的备考题库及1套参考答案详解
- 2025年中国科学院力学研究所SKZ专项办公室人员招聘备考题库带答案详解
- 雨水管道工程施工组织设计
- GA 915-2010讯问椅
- 工业区位因素与工业布局教案 高中地理湘教版(2019)必修二
- 篮球英语介绍课件
- 肺结核共45张课件
- 美容岗位职责与标准篇
- 安全告知卡(甲醛 )
- 人教版物理八年级上实验通知单模板
- 保密技术防范试题
- 城市夜景照明设计规范JGJ T 163-2008
- 设备专业三查四定标准(参考)
评论
0/150
提交评论