非结构化维护和结构化维护
软件的开发过程对软件的维护产生较大的影响。如果采用软件工程的方法进行软件开发,保证每个阶段都有完整且详细的文档,这样维护会相对容易,被称为结构化的维护。反之,如果不采用软件工程方法开发软件,软件只有程序而欠缺文档,则维护工作变得十分困难,被成为非结构化的维护。
在非结构化维护过程中,开发人员只能通过阅读、理解和分析源程序来了解系统功能、软件结构、数据结构、系统接口和设计约束等,这样做是十分困难的,也容易产生误解。要弄清楚整个系统,势必要花费大量的人力和物力,对源程序修改产生的后果难以估计。在没有文档的情况下,也不可能进行回归测试,很难保证程序的正确性。
在结构化维护的过程中,所开发的软件具有各个阶段的文档,它对于理解和掌握软件的功能、性能、体系结构、数据结构、系统接口和设计约束等有很大的作用。维护时,开发人员从分析需求规格说明开始,明白软件功能和性能上的改变,对设计说明文档进行修改和复查,再根据设计修改进行程序变动,并用测试文档中的测试用例进行回归测试,最后将修改后的软件再次交付使用。这种维护有利于减少工作量和降低成本,大大提高软件的维护效率。
维护的困难
软件维护是一件十分困难的工作,其原因主要是由于软件需求分析和开发方法的缺陷造成的。软件开发过程中没有严格而又科学的管理和规划,便会引起软件运行时的维护困难。软件维护的困难主要表现在以下几个方面:
(1) 读懂别人的程序是很困难的,而文档的不足更增加了这种难度。一般开发人员都有这样的体会,修改别人的程序还不如自己重新编写程序。
(2) 文档的不一致性是软件维护困难的又一个因素,主要表现在各种文档之间的不一致以及文档与程序之间的不一致性,从而导致维护人员不知所措,不知怎样进行修改。这种不一致性是由于开发过程中文档管理不严造成的,开发中经常会出现修改程序而忘了修改相关的文档,或者某一个文档修改了,却没有修改与之相关的其他文档等现象,解决文档不一致性的方法就是要加强开发工作中文档的版本管理。
(3) 软件开发和软件维护在人员和时间上存在差异。如果软件维护工作是由该软件的开发人员完成,则维护工作相对比较容易,因为这些人员熟悉软件的功能和结构等。但是,通常开发人员和维护人员是不同的,况且维护阶段持续时间很长,可能是10~20年的时间,原来的开发工具、方法和技术与当前有很大的差异,这也造成了维护的困难。
(4) 软件维护不是一件吸引人的工作。由于维护工作的困难性,维护经常遭受挫折,而且很难出成果,所以高水平的程序员自然不愿主动去做,而公司也舍不得让高水平的程序员去做。
软件维护的费用
软件维护是需要花钱的,且费用是在不断上升的,这是软件维护的有形代价。除此之外,还有无形的代价,即占用更多的资源,包括硬件、软件和人力资源,这有可能使新的软件开发因投入的资源不足而受到影响。况且,由于维护时对软件的修改,在软件中引入了潜在的故障,从而降低了软件的质量。
软件维护活动分为生产性活动和非生产性活动。生产性活动包括分析评价、修改设计和编写程序代码等;非生产性活动包括理解程序代码功能、数据结构、接口特点和设计约束等。维护活动的总工作量可以用以下公式表示:
M=P+K×exp(C-D)
其中,M表示维护工作的总工作量,P表示生产性活动的工作量,K表示经验常数, C表示复杂性程度,D表示维护人员对软件的熟悉程度。
这个公式表明,若C越大,D越小,则维护工作量将成指数规律增加。C增加表示软件未采用软件工程方法开发,D减小表示维护人员不是原来的开发人员,对软件的熟悉程度低,重新理解软件花费很多的时间。
|