软件质量和可靠性保证-no4避错下_第1页
软件质量和可靠性保证-no4避错下_第2页
软件质量和可靠性保证-no4避错下_第3页
软件质量和可靠性保证-no4避错下_第4页
软件质量和可靠性保证-no4避错下_第5页
免费预览已结束,剩余78页可下载查看

下载本文档

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

文档简介

软件避错设计(下航空航天大学可靠性与系

1软件避错设2软件避错设计原简单原同型原对称原层次原线型原易证原安全原3目4内 件需求分析阶段的避错分析准345设计阶段如何进行避错设计6软件设计阶段的工软件需求分析解决“做什么”的问题,关注软件的输入输出及之间关系。软件设计,考“怎么做”的问题,关7避错设计的四个方8程序结构化设计准9准则A:模块化和模块独立 模块化是简单化原则的具体体果C(P1)>C(P2),则有E(P1)>E(P2)。C(P1+P2)>C(P1)由上面三个式子可得:E(P1P2EP1E这个结论导致所谓的“分治法 将一个复杂问题模块耦合类耦合性是模块间相对独立性(相互依赖程度)的度类型(从低到高非直接耦合(Nondirect数据耦(Data开如果一个模 另一个开块时,彼此之间是通过简数据参数(不是控制参数 单 则称这种耦合为数据耦号实发金号实发金新棋新棋金如果一个模块金如果一个模块银过传送开关、银铜 铜记记同一组模同

中各个模块都公共耦合(Common公共耦合举,,一个模块 正常转到另 。

模块…模块…GOTOEND模块模块内聚类类型(从低到高信息内聚(顺序准则B:模块的 和单出每一个模块都应该只有一 一个出准则C:改进软件结构提高模块独立通过模块分解或合并,力求降低耦合提高内聚数据文件的模块)改进软件结构提高模块独立①完全相似:在结构上完全相似,可能只是在②局部相似:找出其相同部分,分离出去,重消除重复功XYXYCCYXCCYXXY

CC改进方法软件简化设计准准则A:模块规模应该适中型软件:语句数在60~150大型软件:语句数在200行左右,最多不要超过500准则B:深度、宽度、扇出和扇入 深度、宽度、扇入、扇出示意A扇BA扇BC扇深DEFGHI宽宽度最大扇最小扇准则C:力争降低模块接口的复杂程例:求一元二次方程的接口复杂或不一致,是紧耦合或低内聚的征 准则D:必须对程序圈复杂度进行程序圈复圈复杂度115的控制流 控制流国军标:软件单元的圈复杂度应小于圈复杂度示V(G)=m-V(G):有向图G中的环m:有向图G中的n:有向图中的节点Example:12edges9nodesVG=12-9+2=软件健壮性设计准准则A:配合硬件进行处理的若干设计系统不稳检测方法…检测示例:当检查输入数据不可为空,可写成{if{returnfalse;}}}准则C:须要进行异常情况设 软件冗余设计准准则A:确定实现软件容错的范围及容错的方容错容错容错容错代时间容低信息容低结构容结构资源、模块级和系高准则B:确 的冗余设计方例:开关量的裁采用多数票的裁决,如3取2、5取3当然这种裁决被认可量比5取3例:模拟量的裁准则C:安全安辑””非成 。 编码阶段如何进行避错编程风格举例if(pUserCR==NULL)if(pUserCR=={}编程风格举例for(...)...//program}if{...//program}

for{...//program}if{...//program}软件编码阶段的避错设计准C程序设计语言汇编语言编程。程序设计风准则A:程序内部必须有正确的源程序文档化应该尽量使程序布局清晰、明了。可有效使用注释举例

//函数功能、性能等的描//被本函数调用的Called //调用本函数的函 的表(此项仅对于牵扯到数据库操作的程序TableUpdated://被修改的表(此项仅对于牵扯到数据库操作的程序

//输入参数说明,包括每个参数//用、取值说明及参数间关//对输出参数的//函数返回值的说注释举例示例:如下注释意义/*ifreceive_flagisTRUEif而如下的注释则给出了额外有用的信/*ifmtpreceiveamessagefromlinksif准则B:数据说明应便于查阅易下述做法有助显式说明所有变量准则C:语句应该尽量简单清下述原则有助举例示例:如下例子不符合规范rect.length=0;rect.width=应如下书rect.length=rect.width=C语言程序设计避错头文件结内IF语SWITCH语函头文件结准则 头文件时须使用相对路径而非绝对路反例正例 准则B:不提倡使用全局变全局变量是量的同时,应对其含义、作用及取值范围进行详顺序结准则B:赋值运算两边数据类型应反例#defineDELEY10000chartTime;准则C:对于 算语句时,应检查数据是否有例内是否为NULL。防止使用指针值为NULL的内存 动态内存的申请与释放必须配对,防止内存泄避免数组或指针的下标越界,特别要当心发生“多1”或者“少1”操作用free或delete释放了内存之后,立即将指针设置NULL,防止产生“野指针“内存正例{

Unsignedchar*pucBuffer=NULL;If(NULL!=pucBuffer)//申请的内存指针必须进行有{}FreeBuff(pucBuffer);//申请的内存使用完毕必须释;//}IF语准则A:不可将布尔变量直接与TRUE、FALSE或者1、0进行比反例:假设布尔变量名字为flag,if语句不可写成if(flag==TRUE)if(flag==1)if(flag==FALSE)if(flag==0)正例:假设布尔变量名字为flag,if语句应写成准则B:应当将整型变量用“==”或“!=”直接与0比if(valuevalue是布尔变量if的标准if语句如下:if(value==0)if(value!=0)准则C:不可将浮点变量用“==”或“!=”与任何数字比例:假设浮点变量的名字为xifx0.0的误差(即精度)准则D:应当将指针变量用“==”或“!=”与NULL比反例:不要写成ifp0容易让人误解pif(p!=或ifp)容易让人误解pif正例:它与零值比较的标准ififpNULLp与NULL显式比较,强调pif(p!=准则E:在判断语句中,不允许对其他变量进行计算或赋反例If{……//处理语}正例If{……//处理语bflag=}准则F:真的没有ELSE反例 RD_Valid=1;//电台有效成立一次,电台将有效,这显然与实际不符,所以必须增加elseRD_Valid=0语句设置电台无效。准则G:把正常情况放在if后面而不是else反例准则H:尽量避 条件嵌 case语句来代替,而不是if-else 准则 记else分支作例外情况处if{……//处理语}elseif{……//处理语}elseif{}{}

……//处理语PrintErrorMsg(“Error905:CallCustomerassistance.”)//例外情况处理语SWITCH语准则A:每个case语句的须以break正例:下面的代码中每个例子每个分支都有break{casebreak;}casebreak;}准则C确保循环出口条件能满足,循环能终止,避免L1L3{…L12}L14 L164.3.7函准则A:检查函数所有输入的有参数非参数输入:包括全局变量、数据文件的输

温馨提示

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

评论

0/150

提交评论