软件测试实验室在建立软件测试体系或申请cnas/cma相关资质时,需要依据相关技术标准选择合适的测试方法,并明确在测试作业指导书中,指导后续软件测试工作的开展。GJB-8114是一部嵌入式软件安全测试相关的国家标准,本系列文章我们就针对GJB-8114《C/C++语言编程安全子集》的具体内容进行分析解读。
分支控制类
R-1-4-1在if…else if…else中不能省略else分支
在“if…else if…else”结构中,最后这个else分支是不能省略的。往往我们在写程序的时候写“if…else if…”后面没有程序要处理了,就不写了。这种情况下,程序的执行应该是没有问题的,但是咱们的规则要求,后面必须要带else,同时写上一个注释:其他情况不处理等等,后面一定要有一个else。
这个大家要记住,是if…else if…else”结构中最后的else必须存在,“if…else”这个语句,后面是可以不带else的。
R-1-4-2条件分支如果为空,必须以单独一行的分号加注释进行明确说明
这个实际上是为了让读程序的人知道这个是一个空的分支,不作处理,标准形式是单独一行的分号加注释。如果你什么都没有,或者只有一个分号,或者没有分号只有一个注释,这些都不符合规则。
为什么这么规定呢?这个就是为了阅读方便。就是一个强制性的规则,对程序没有任何影响,但是比较严格的测评机构就会给你提问题了。
R-1-4-3禁止使用空switch语句
凡是写过程序的人,基本上很少有犯这种错误的,咱们的GJB-8114规则中也提出了这样的要求。
R-1-4-4禁止对布尔变量使用switch语句
一个布尔变量它除了真的就是假的,所以不能用switch语句来判断,只能用if、else这种方式来判断。
R-1-4-5禁止switch语句中只包含default语句
也就是说一个switch语句中,至少有一个 case语句、一个default语句。
R-1-4-6除枚举类型列举完全外,switch必须要有default
比如说一个枚举类型里面有三种情况,就必须要把这三种情况列全,如果没有列全的话,就必须有default。换句话说,switch语句除非你把所有的情况都用case写完了,否则必须要有default语句。
R-1-4-7Switch中的case和default必须以break或return终止,共有case必须加以明确注释,要求必须以“/*shared*/”形式注
比如说我们的case1、case2、case3都想用同一种处理方式,像遵循示例中表示的,case2和case3处理相同,用一个注释说明,就直接跳到case3了,一定有一个明确的注释,而不是case2里面丢了一个break。
R-1-4-8Switch语句的所有分支必须具有相同的层次范围
像违背示例中展示的例子,它的层次范围构成了一个单独的单元,if后面用大括号括起来了,在里面用了一个break,else实际上是接着往下执行的,所以它是错的,当然我们写程序的时候很少会这样写。
以上就是GJB-8114《C/C++语言编程安全子集》分支控制类部分的解读,如需软件测试实验室作业指导书等文件可私信我。
本系列内容整理自优品软件培育计划百场前沿技术系列讲座直播第16期,中国航天科技集团公司软件评测中心研究员李国良为大家带来的《白盒测试——C/C++编程规范》专题讲座,他曾参与过多个大型航空、航天、军工、电子型号项目的测试任务,如需直播回放视频也可私信我获取。
(谢绝转载,更多内容可查看我的专栏)