基于软件历史信息的软件工程实践

时间:2022-10-28 06:18:20

基于软件历史信息的软件工程实践

摘要:在软件工程的研究实践中,如何降低软件的开发成本、如何最小化软件在演化过程中带来的各种问题是软件工程实践者长期追求的目标,提高软件质量和自动化的软件维护过程是软件工程研究的热点问题。虽然人们付出了各种各样的努力,软件缺陷修复和软件维护的成本依然很高,软件的可靠性仍然无法满足用户的需求。经常发生的软件故障问题使软件生产者和使用者渐渐丧失了对软件的信心。本文基于软件的演化历史,探讨了关于软件质量度量和预测以及改善软件维护的框架。

中图分类号:TP311 文献标识码:A 文章编号:1007-9416(2012)04-0000-00

1、引言

软件的开发和维护是一个时间、劳动力和资源密集的过程,软件缺陷的修复成本也非常高。软件的修复和维护通常占据了软件项目90%的资源,即使在开源的环境中,软件的维护也是一个艰巨的过程。研究人员在改善软件维护过程方面已经进行了大量的研究,主要包括设计良好的编程语言和可适应的集成开发环境以提高编程的效率;构建自动编译工具;实施更加严格的软件安全策略等等。可是这些研究工作并没有涉及如何降低软件的维护成本。虽然在软件开发和维护方面的研究已经取得了很大的进展,然而与软件演化过程相关的成本仍然很高。在目前这样一种情况下,我们需要研究(1)编程语言对软件开发效率以及软件质量的影响。(2)软件缺陷修复的分派机制。(3)设计基于图的模型来预测软件维护的成本。(4)设计一个自动化的框架来集成各种各样的软件产品资源库以帮助软件开发人员和研究人员进行相关的数据挖掘活动。

2、编程语言对开发和维护的影响

编程语言对软件开发和维护影响的定量评估长期以来都是一个具有挑战性的问题。目前,由于新的应用的产生,编程语言的选择也在发生着变化。随着Web2.0的出现,编程语言受欢迎程度的统计数据显示动态的高级语言越来越受到编程人员的青睐。这些语言提高了抽象水平,有希望加快高质量软件产品的开发。可是,我们仍然缺乏静态检测工具。由于缺乏成熟的分析和验证工具,使得程序员在编写代码时非常容易出错,以至于软件难以维护。有研究人员曾经分析过编程语言对软件开发和维护的影响,但是他们并没有将编程语言和具体的应用联系起来,也没有考虑进行的研究是否恰当。例如,有的研究者将开发人员分成几个小组针对某些项目进行研究,可是他们并没有考虑到开发者的水平因素,而且这些项目通常是比较小、不被经常使用而且生命周期比较短。使用这样一些方法产生的结果通常不能推广到现实世界中比较大的一些应用项目。

3、软件缺陷的分派机制

流行的开源软件项目通常每天都会收到上百份缺陷报告。理想的情况下,每个缺陷应该在最短的时间内分派给相应的软件开发人员进行修复。缺陷的分配过程比较复杂,通常受几个因素的影响。如果手工来处理缺陷的分配过程,那么这个过程将会消耗很多劳动力和时间,而且非常容易出错。不仅如此,对于每一个项目,跟踪每个活动的开发者和他们的经验也是一件非常困难的事情。有的研究者通过使用机器学习的方法来自动的分配缺陷,然而效率和准确性却比较低。

4、基于图的方法

在软件维护的研究中使用基于图的度量最早应用在软件缺陷预测领域。Zimmermann等人使用函数调用关系图预测一个文件发生故障的概率。Pinzger等人构建了一个开发者网络来预测软件故障。Nagappan等人通过提取函数调用关系图中的复杂性度量集来预测缺陷。但是,这些研究都没有建议使用基于图的度量来预测软件维护的成本,以及识别软件代码中的关键点,这些关键点往往更容易发生故障。可以通过构建基于图的软件模型来计算软件中各种元素之间的关系,通过分析软件的结构来找到提高软件质量和降低软件维护成本的方法。

5、集成软件产品的框架

开源软件项目在开发过程中使用不同的资源库来存储项目和演化的信息,例如:源代码,缺陷和补丁等。一个集成系统必须整合这些不同的资源库,采用先进的查询技术允许软件开发人员和研究人员在这些不同的资源库之间进行查询和浏览,以帮助他们解决在开发和研究过程中所遇到的各种问题。例如:软件开发者在编写代码的时候经常遇到这样一个问题:为什么代码要按照这种方式来实施?开发者为了得到这个问题的答案,他们需要使用软件缺陷资源库和代码资源库中的信息,由于这两个资源库是互相独立的,这使得查找信息的效率非常低。手工集成这些资源库的信息通常非常的繁琐、耗时、也比较容易出错,对于大型的项目更是如此。以前解决这些问题的方法是限制用户查询和浏览的方式,例如:查询只能按照规定的查询模版来进行。为了解决这些问题,需要建立一个框架来支持各种查询语言,允许软件的开发人员和研究人员在更加广泛和深层的空间中去寻找问题的答案或线索,从而帮助开发人员和研究人员完成相关的开发和经验分析任务。

6、结语

本文主要探讨了在软件演化过程中如何提高软件维护和软件质量的问题,提出了一个软件资源库的集成框架,对于软件产品的开发和分析活动是很有帮助的。

参考文献

[1] 宿为民.支持过程度量的软件过程建模及软件过程评价平台的研究[D].上海:复旦大学, 1999.

[2] 李健,金茂忠.中小型企业软件过程改善研究[J].计算机工程与应用,2001,37(19):1072111.

[3] 李健,金茂忠.有效改善软件过程方法研究[J].计算机研究与发展,2001,38 (1): 26234.

[4] N. Nagappan, T. Ball, and A. Zeller. Mining metrics to predict component failures. In ICSE ’06.

[5] NIST. The economic impacts of inadequate infrastructure for software testing. Planning Report, May 2002.

[6] M. Pinzger, N. Nagappan, and B. Murphy. Can developer-module networks predict failures? In FSE, 2008.

[7] T. Zimmermann and N. Nagappan. Predicting defects usingnetwork analysis on dependency graphs. In ICSE ’08.

上一篇:计算机辅助概念设计中的协同设计 下一篇:三维软件“maya”在设计方向的运用