软件开发方法对软件的可靠性也有重要影响。
目前的软件开发方法主要有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)测试用例规范:列出用于输入的具体值及预期输出结果。规定在使用具体测试用例时对测试规程的各种限制。
原文转自:http://www.uml.org.cn/rjzl/200612011.htm