1.建⽴以可靠性为核⼼的质量标准
在软件项⽬规划和需求分析阶段就要建⽴以可靠性为核⼼的质量标准。这个质量标准包括实现的功能、可靠性、可维护性、可移植性、安全性、吞吐率等等,虽然还没有⼀个衡量软件质量的完整体系,但还是可以通过⼀定的指标来指定标准基线。 软件质量从构成因素上可分为产品质量和过程质量。
产品质量是软件成品的质量,包括各类⽂档、编码的可读性、可靠性、正确性,⽤户需求的满⾜程度等。
过程质量是开发过程环境的质量,与所采⽤的技术、开发⼈员的素质、开发的组织交流、开发设备的利⽤率等因素有关。
还可把质量分为动态质量和静态质量。静态质量是通过审查各开发过程的成果来确认的质量,包括模块化程度、简易程度、完整程度等内容。动态质量是考察运⾏状况来确认的质量,包括平均故障间隔时间(MTBF)、软件故障修复时间(MTRF)、可⽤资源的利⽤率。在许多实际⼯程中,⼈们⼀般⽐较重视动态质量⽽忽视静态质量。 所定的质量标准度量,⾄少应达到以下两个⽬的:
(1).明确划分各开发过程(需求分析过程,设计过程,测试过程,验收过程),通过质量检验的反馈作⽤确保差错及早排除并保证⼀定的质量。
(2).在各开发过程中实施进度管理,产⽣阶段质量评价报告,对不合要求的产品及早采取对策。 确定划分的各开发过程的质量度量: (1).需求分析质量度量
需求分析定义是否完整、准确(有⽆⼆义性),开发者和⽤户间有没有理解不同的情况,⽂档完成情况等,要有明确的可靠性需求⽬标、分析设计及可靠性管理措施等。 (2).设计结果质量度量
设计⼯时,程序容量和可读性、可理解性,测试情况数,评价结果,⽂档完成情况等。 (3).测试结果质量度量
测试⼯时,差错状况,差错数量,差错检出率及残存差错数,差错影响评价,⽂档等,以及有关⾮法输⼊的处理度量。 (4).验收结果质量度量
完成的功能数量,各项性能指标,可靠性等。
最后选择⼀种可靠度增长曲线预测模型,如时间测量、个体测量、可⽤性,在后期开发过程中,⽤来计算可靠度增长曲线的差错收敛度。 在建⽴质量标准之后,设计质量报告及评价表,在整个开发过程中就要严格实施并及时作出质量评价,填写报告表。 2. 选择开发⽅法
软件开发⽅法对软件的可靠性也有重要影响。
⽬前的软件开发⽅法主要有Parnas⽅法、Yourdon⽅法、⾯向数据结构的Jackson⽅法和Warnier⽅法、PSL/PSA⽅法、原型化⽅法、⾯向对象⽅法、可视化⽅法、ICASE⽅法、瑞理开发⽅法等,其他还有BSP⽅法、CSF⽅法等。这⾥特别要提⼀下的是Parnas⽅法。 Parnas⽅法是最早的软件开发⽅法,是Parnas 在1972年提出来的,基本思想是在概要设计时预先估计未来可能发⽣变化,提出了信息隐藏的原则以提⾼软件的可靠性和可维护性。
在设计中要求先列出将来可能要变化的因素,在划分模块时将⼀些可能发⽣变化的因素隐含在某个模块的内部,使其他模块与此⽆关,这样就提⾼了软件的可维护性,避免了错误的蔓延,也就提⾼了软件的可靠性。还提出了提⾼可靠性的措施: (1)考虑到硬件有可能出故障,接近硬件的模块要对硬件⾏为进⾏检查,及时发现错误。
(2)考虑到操作⼈员有可能失误,输⼊模块对输⼊数据进⾏合法性检查,是否合法、越权,及时纠错。 (3)考虑到软件本⾝有可能失误,加强模块间检查,防⽌错误蔓延。 对瑞理⽅法可能许多⼈还不熟悉,这⾥简要介绍⼀下。
瑞理(Rational)模式是美国瑞理软件⼯程公司发展出来的,其模式是: ⾯向对象; 螺旋式上升; 管理与控制; ⾼度⾃动化;
以管理观点和技术观点把软件⽣命周期划分为起始、规划、建构、转移、进化五个阶段,也可把这五个阶段归并为研究时期(起始和规划)和⽣产时期(建构和转移),最后是维护时期(进化),特别适合对⾼风险部分及变动需求的处理。
在以上的众多⽅法中,可视化⽅法主要⽤于与图形有关的应⽤,⽬前的可视化开发⼯具只能提供⽤户界⾯的可视化开发,对⼀些不需要复杂图形界⾯的应⽤不必使⽤这种⽅法;ICASE 技术还没有完全成熟,所以可视在⽅法和ICASE⽅法最多只能⽤作辅助⽅法。⾯向数据结构的⽅法、PSL/PSA⽅法及原型化⽅法只适合于中⼩型系统的开发。
⾯向对象的⽅法便于软件复杂性控制,有利于⽣产率的提⾼,符合⼈类的思维习惯,能⾃然地表达现实世界的实体和问题,具有⼀种⾃然的模型化能⼒,达到从问题空间到解空间的较为直接⾃然的映射。
在⾯向对象的⽅法中,由于⼤量使⽤具有⾼可靠性的库,其可靠性也就有了保证,⽤⾯向对象的⽅法也利于实现软件重⽤。 所以建议采⽤⾯向对象的⽅法,借鉴Parnas和瑞理模式的思想,在开发过程中再结合使⽤其他⽅法,吸取其它⽅法的优点。 3.软件重⽤
最⼤限度地重⽤现有的成熟软件,不仅能缩短开发周期,提⾼开发效率,也能提⾼软件的可维护性和可靠性。因为现有的成熟软件,已经过严格的运⾏检测,⼤量的错误已在开发、运⾏和维护过程中排除,应该是⽐较可靠的。在项⽬规划开始阶段就要把软件重⽤列⼊⼯作中不可缺少的⼀部分,作为提⾼可靠性的⼀种必要⼿段。
软件重⽤不仅仅是指软件本⾝,也可以是软件的开发思想⽅法、⽂档,甚⾄环境、数据等,包括三个⽅⾯内容的重⽤: (1)开发过程重⽤,指开发规范、各种开发⽅法、⼯具和标准等。 (2)软件构件重⽤,指⽂档、程序和数据等。 (3)知识重⽤,如相关领域专业知识的重⽤。 ⼀般⽤的⽐较多的是软件构件重⽤。
软件重⽤的过程如下:候选,选择,资格,分类和存储,查找和检索。在选择可重⽤构件时,⼀定要有严格的选择标准,可重⽤的构件必须是经过严格测试的、甚⾄是经过可靠性和正确性证明的构件,应模块化(实现单⼀、的完整的功能)、结构清晰(可读、可理解、规模适当),且有⾼度可适应性。 4.使⽤开发管理⼯具
开发⼀个⼤的软件系统,离不开开发管理⼯具,作为⼀个项⽬管理员,仅仅靠⼈来管理是不够的,需要有开发管理⼯具来辅助解决开发过程中遇到的各种各样的问题,以提⾼开发效率和产品质量。
如Intersolv公司的PVCS软件开发管理⼯具,在美国市场占有率已超过70%,使⽤PVCS可以带来不少好处:规范开发过程,缩短开发周期,减少开发成本,降低项⽬投资风险;⾃动创造完整的⽂档,便于软件维护;管理软件多重版本;管理和追踪开发过程中危及软件质量和影响开发周期的缺陷和变化,便于软件重⽤,避免数据丢失,也便于开发⼈员的交流,对提⾼软件可靠性,保证质量有很⼤作⽤。 在我国,开发管理⼯具并没有得到有效地使⽤,许多软件公司还停留在⼈⼯管理阶段,所开发的软件质量不会很⾼。
⼈的管理⽐较困难,在保证开发⼈员素质的同时,要保持⼈员的稳定性,尽可能避免⼈员的经常流动。⼈员流动影响了软件的质量,⼯作连续性难保证,继承者不可能对情况了解很清楚等,也可能影响⼯作进程等。PVCS也提供了适当的⼈员管理⽅法。 5.加强测试
软件开发前期各阶段完成之后,为进⼀步提⾼可靠性,只有通过加强测试来实现了。为最⼤限度地除去软件中的差错,改进软件的可靠性,就要对软件进⾏完备测试。要对⼀个⼤的软件系统进⾏完备测试是不可能的,所以要确定⼀个最⼩测试数和最⼤测试数,前者是技术性的决策,后者管理性的决策,在实际过程中要确定⼀个测试数量的下界。总的来说,要在可能的情况下,进⾏尽可能完备的测试。
谁来做测试呢?⼀般说来,⽤户不⼤可能来进⾏模块测试,模块测试应该由最初编写代码的程序员来进⾏,要在他们之间交换程序进⾏模块测试,⾃⼰设计的程序⾃⼰测试⼀般都达不到好的效果。
测试前要确定测试标准、规范,测试过程中要建⽴完整的测试⽂档,把软件置于配置控制下,⽤形式化的步骤去改变它,保证任何错误及对错误的动作都能及时归档。
测试规范包括以下三类⽂档:
(1)测试设计规范:详细描述测试⽅法,规定该设计及其有关测试所包括的特性。还应规定完成测试所需的测试⽤例和测试规程,规定特性的通过/失败判定准则。
(2)测试⽤例规范:列出⽤于输⼊的具体值及预期输出结果。规定在使⽤具体测试⽤例时对测试规程的各种限制。 (3)测试规程规范:规定对于运⾏该系统和执⾏指定的测试⽤例来实现有关测试所要求的所有步骤。 测试的⽅法多种多样:
(1)⾛查(Walk-through),即⼿⼯执⾏,由不同的程序员(⾮该模块设计者)读代码,并进⾏评论。 (2)机器测试,对给定的输⼊不会产⽣不合逻辑的输出。
(3)程序证明或交替程序表⽰。 (4)模拟测试,模拟硬件、I/O设备等。
(5)设计审查,关于设计的所有各⽅⾯的⼩组讨论会,利⽤所获得的信息,找出缺陷及违反标准的地⽅等。 以上可以交替并⾏循环执⾏,在实际测试过程中要使⽤测试⼯具提⾼效率。
除正常的测试之外,还要对软件进⾏可靠性测试,确保软件中没有对可靠性影响较⼤的故障。制定测试计划⽅案,按实际使⽤的概率分布随机选择输⼊,准确记录运⾏时间和结果,并对结果进⾏评价。
没有错误的程序同永动机⼀样是不可能达到的。⼀般常⽤排错⽅法有试探法、追溯法、归纳法、演绎法。还要使⽤适当的排错⼯具,如UNIX提供的sdb和dbx编码排错⼯具,这些排错⼯具只有浏览功能,没有修改功能,是实际的找错⼯具。 6.容错设计
提⾼可靠性的技术⼀般可以分为两类,⼀类是避免故障,在开发过程中,尽可能不让差错和缺陷潜⼊软件,这类常⽤的技术有: 算法模型化,把可以保证正确实现需求规格的算法模型化。
模拟模型化,为了保证在确定的资源条件下的预测性能的发挥,使软件运⾏时间、内存使⽤量及控制执⾏模型化。 可靠性模型,使⽤可靠性模型,从差错发⽣频度出发,预测可靠性。 正确性证明,使⽤形式符号及数学归纳法等证明算法的正确性。
软件危险分析与故障树分析:从设计或编码的结构出发,追踪软件开发过程中潜⼊系统缺陷的原因。
分布接⼝需求规格说明:在设计的各阶段使⽤形式的接⼝需求规格说明,以便验证需求的分布接⼝实现可能性与完备性。 这些技术⼀般都需要⽐较深厚的数学理论知识和模型化技术。 另⼀类就是采⽤冗余思想的容错技术。
容错技术的基本思想是使软件内潜在的差错对可靠性的影响缩⼩控制到最低程度。 软件的容错从原理上可分为错误分析、破坏程度断定、错误恢复、错误处理四个阶段。 常⽤的软件容错技术有N-版本技术、恢复块技术、多备份技术等。
N-版本程序设计是依据相同规范要求独⽴设计N个功能相等的程序(即版本)。独⽴是指使⽤不同的算法,不同的设计语⾔,不同的测试技术,甚⾄不同的指令系统等。
恢复块技术是使⽤⾃动前向错误恢复的故障处理技术。
以上这些技术可参考有关⽂献,这⾥要说的是防错性程序设计,在程序中进⾏错误检查。被动的防错性技术是当到达检查点时,检查⼀个计算机程序的适当点的信息。主动的防错性技术是周期性地搜查整个程序或数据,或在空闲时间寻找不寻常的条件。采⽤防错性程序设计,是建⽴在程序员相信⾃⼰设计的软件中肯定有错误这⼀基础上的,有的程序员可能对此不⼤习惯,因为他可能太相信⾃⼰,相信⾃⼰的程序只有很少错误,甚⾄没有错误,作为⼀个项⽬管理员应该能说服他或者强制他采⽤这种技术,虽然在设计时要花费⼀定的时间,但这对提⾼可靠性很有⽤。
因篇幅问题不能全部显示,请点此查看更多更全内容