软件可重用性的一点思考

原创 2004年08月24日 21:50:00
  软件的可重用性一直是软件工程所追求的目标之一,软件工程界希望有一天能和其它工业领域一样,利用标准化的软件模块快速构建特定的应用系统。事实上,这种努力也取得了相当大的进展,但是与人们所期望的目标还是有不少差距,软件模块还远没有象汽车上的轮胎那样拆卸、维修、更换方便和简单。

  大多数情况下所讨论的软件可重用性指软件本身的可重用性,即软件代码实现的可重用性。而实际上,软件的可重用性远不止这些,软件开发的全生命周期都有可重用的价值,包括项目的组织、软件需求、设计、文档、实现、测试方法和测试用例都是可以被重复利用或借鉴的有效资源。可以说,一个成功的软件项目的全过程都是宝,就看你会不会利用。

  当然,软件代码的可重用性是最直观、最容易想到的部分,也是程序员们最乐意追求和有成就感的部分。但怎样才能开发可重用的代码呢?

  也许有些程序员会说:这很容易啊,我用C++封装了很多类,我用Visual Studio开发了很多COM组件,不都是可以重用的吗?事实是如此吗?就我所了解和经历过的很多软件开发项目,很多类和组件都是昙花一现,项目一过就再也没人提起。很多程序员认为利用C++开发的类或COM组件天然就是应该可重用的,这是错误的想法,开发工具只是促进代码可重用性的工具而不是决定性的因素,决定代码是否可重用的关键还是对于软件系统所面向的问题域的分解方式,即将一个复杂问题分解成简单问题或独立个体的方法和策略。我一直确信,如果一个程序员使用C的时候,不能很好的使用模块化的结构构造一个软件系统,你就不能期望他能使用C++写出可重用性很高的类结构。不是开发工具决定了软件的可重用性,而是如何分解一个复杂问题。无论是分层的软件思想(TCP/IP协议栈)、模块化的软件思想(C / Fortran)、还是可重用组件的软件思想(C++/COM),它们之间并非是矛盾和排斥,而是一个问题的三个方面,是对同一个问题域的不同视角。

  144101.gif

  还有些程序员可能会说:我们开发的软件都是针对特定的用户需求,要求都不一样,没有办法实现软件的可重用。听起来似乎也有道理,其实不然,软件的可重用性也是有应用范围的,当然不能期望很多程序员能开发放之四海而皆准的通用软件模块,也许有些程序员永远也不会去开发这样的软件,是不是软件的可重用性就跟他没关系了呢?当然不是,可重用性体现在软件的各个层次,通用的、可复用性高的软件模块往往已经由操作系统或开发工具提供,如通用库、标准组件、标准模板库等,并不需要程序员重新开发。那么一般的程序员如何开发可重用的软件呢?而正常情况下,一个软件企业或软件小组往往专注于解决某一领域的问题,针对这一领域的软件项目虽不完全相同,但也有很多共同之处,比如财务或ERP领域的软件大多需要各种各样定制的表格和图表。所以开发软件时,开发针对某一特定领域或问题域的可重用软件是大多数程序员需要重点考虑的问题和方向。

  144102.gif

  那么在实际开发过程中,程序员们如何提高自己开发可重用软件的能力呢,我有几个小小的建议也许会对大家有所帮助。

  建立开发可重用软件的意识:

  首先建立开发可重用软件的意识,不管你所开发的软件有多么特殊,其中必定含有一些公共的逻辑和功能,将公共的逻辑或模块同真正特定的逻辑分开,学会从一个特定的问题集中抽象出几个逻辑层次,分开实现。可重用软件模块将作为一个特定软件产品的副产品而重放光芒。

  保持类或模块的简单和纯粹:

  保持类或模块的简单和纯粹,越是简单、功能纯粹的软件越可能被重用。"越是简单,越是复杂",就象搭积木,提供的积木越简单,就越有可能搭建复杂的形状和物品。

  也许有一天,你的一位同事对你说:"嘿,哥们,我刚刚用了你在上一个项目开发的那个模块,挺不错"。你已经实现了软件的可重用。

软件可重用性的一点思考

软件的可重用性一直是软件工程所追求的目标之一,软件工程界希望有一天能和其它工业领域一样,利用标准化的软件模块快速构建特定的应用系统。事实上,这种努力也取得了相当大的进展,但是与人们所期望的目标还是有不...
  • wishfly
  • wishfly
  • 2007-10-30 17:32:00
  • 791

谈软件测试用例的可重用性

      软件测试发展几年之后,一些软件开发商逐渐才有点重视。测试技术发展相对于软件的开发技术有点缓慢,感觉还是处于新生阶段。测试和开发一样面临一个重用问题。    在软件测试过程中,先进行测试分析...
  • oldroom
  • oldroom
  • 2008-11-07 16:28:00
  • 336

软件可重用性思考

软件的可重用性一直是软件工程所追求的目标之一,软件工程界希望有一天能和其它工业领域一样,利用标准化的软件模块快速构建特定的应用系统。事实上,这种努力也取得了相当大的进展,但是与人们所期望的目标还是有不...
  • SmartTony
  • SmartTony
  • 2007-12-11 23:45:00
  • 707

软件的可维护性和可复用性

本文转载自http://wasiker.javaeye.com/blog/232174软件的可维护性和可复用性关键字: 设计模式 可维护性 可扩展性一般来说,一个易于维护的系统,就是复用率较高的系统;...
  • phenixIII
  • phenixIII
  • 2009-06-21 12:13:00
  • 3946

最大限制地提高代码的可重用性

showbanner(6,6,1);google_ad_client ="pub-2141342037947367";google_ad_width = 120;google_ad_height =2...
  • njchenyi
  • njchenyi
  • 2005-04-10 18:39:00
  • 1677

软件工程-可重用构件的特点

本文参考自自张海藩老师和牟永敏的《软件工程导论》 目标:在各种各样的软件系统中方便的重复的使用 需要满足的要求: 可靠  经过反复测试,被确认是正确的。具备一定的健壮性。 模...
  • time_hunter
  • time_hunter
  • 2013-12-19 22:39:59
  • 1056

可重用性-一旦一个函数被写入

新的程序员经常问:“我们不能把代码里面的代码直接放在里面吗?”“在许多情况下(特别是简单的例子),它可以。然而,函数提供了一些好处,使他们非常有用的非平凡的程序。 组织程序越来越复杂,有所有的代码都...
  • shazhugw
  • shazhugw
  • 2016-08-22 17:12:11
  • 673

oop三大特性--继承性

原文来自:http://www.cnblogs.com/zizhuyuan/archive/2011/06/15/2081105.html /* * 继承性: * 1.面向对象的三大特...
  • liujihaozhy
  • liujihaozhy
  • 2016-03-31 17:08:55
  • 690

怎么实现代码的重用性?

代码重用
  • zsyoung
  • zsyoung
  • 2016-10-14 10:28:05
  • 2505

设计一个具有健壮性,灵活性,可重用性的Web应用架构(一)--->实验总结

 虽然这是一个功能很简单的基于Web的应用程序,但是经过认真地探索,最终设计出了具有健壮性,灵活性,可重用性的基于层模式的Web应用的架构。Ø         基于层模式的Web应用的架构中不同层的作...
  • lin_bei
  • lin_bei
  • 2006-12-10 22:33:00
  • 2734
收藏助手
不良信息举报
您举报文章:软件可重用性的一点思考
举报原因:
原因补充:

(最多只允许输入30个字)