遗留系统:软件工业时代的痛

我常常感到幸运,我们现在所处的是一个令人振奋的时代,我们进入了软件工业时代。在这个时代里,我们进行软件开发已经不再是一个一个的小作坊,我们在进行着集团化的大规模开发。我们开发的软件不再是为某个车间、某个工序设计的辅助工具,它从某个单位走向整个集团,走向整个行业,甚至整个社会,发挥着越来越重要的作用。一套软件所起到的作用与影响有多大,已经远远超越了所有人的想象,成为一个地区、一个社会,乃至整个国家不可或缺的组成部分。慢慢地,人们已经难以想象没有某某软件或系统的生活和工作会是怎样的。这就是软件工业时代的重要时代特征。

然而,在这个令人振奋的软件工业时代,处于时代中心的各大软件企业却令人沮丧。软件规模越来越庞大,软件结构越来越复杂的同时,却是软件质量越来越低下,软件维护变得越来越困难,以至于每个小小的变更都变得需要伤筋动骨。研发人员为此举足无措,测试人员成为唯一的救星,每个小小的变更都需要付出巨大代价进行测试。软件企业在这样一种恶性循环中苦苦支撑。毫无疑问,这也成为这个令人振奋的时代的另一个特征。

是的,面对软件工业时代我们并没有做好准备。过去,一套软件的生命周期不过2~3年时间,随着软件需求的变化,我们总是选择将软件推倒了重新开发,但是现在这样的情况在发生着改变。随着软件规模的扩大,软件数据的积累,软件影响力的提升,我们,以及我们的客户,都真切地感受到,要推倒一套软件重新开发,将变得越来越困难而不切实际。这样的结果就是,我们的软件将不停地修改、维护、再修改、再维护……直到永远。这是一件多么痛苦的事情啊!

一套软件,当它第一次被开发出来的时候,一切都十分清晰:清晰的业务需求、清晰的设计思路、清晰的程序代码。但经历了几次需求变更与维护以后,一切就变得不那么清晰了。业务需求文档变得模糊不清,设计思路已经跟不上变更的脚步,程序代码则随着业务逻辑的复杂而臃肿不堪。程序员开始读不懂代码,软件开发工作变得不再是一种乐趣。

随着时间的推移,软件经过数年、数十次的变更与维护,情况变得越来越糟。最初的程序员已经不愿再看到自己的代码而选择离去。他的继任者们变得更无所是从,由于看不懂程序,代码的每一次修改如同在走钢丝。测试人员变成了唯一的希望,开发人员的每一次修改都意味着测试人员需要把所有程序测试一遍。继任者们开始质问最初的设计者们,程序是怎么设计的。如果此时恰巧又有什么新技术出现,就会更显得原有系统的破旧与不堪。

相信这就是软件工业时代的所有企业都不得不面对的尴尬境地。难倒真的是我们最初的设计错了吗?是的,我们都这样质问过我们自己,因此我们开始尝试在软件设计之初投入更多的精力。我们开始投入更多的时间作需求调研,考虑更多可能的需求变化,做更多的接口,实现更加灵活但复杂的设计。然后呢,我们解决了我们的问题了吗?显然是没有。需求并没有像我们想象的那样发生变更:我们之前认为可能发生的变更并没有发生,使我们为之做出的设计变成了摆设;我们之前没有考虑到的变更发生了,让我们猝不及防,软件质量开始下降,我们被打回了原形。难倒真的是无药可解了吗?在我看来,如果我们没有看明白软件开发的规律与特点,那么我们永远找不到那份向往已久的解药。现在,让我们真正静下心来分析分析软件开发的规律与特点吧。

本栏目更多精彩内容:http://www.bianceng.cn/Programming/project/

软件,特别是管理软件,其实质是对真实世界的模拟。我们通过对真实世界的模拟,实现计算机的信息化管理,来提高我们的生产效率。然而,真实的世界复杂而多变的,我们认识世界却是一个由简单到复杂循序渐进的过程,这是一个我们无法改变的客观规律。因此,毫无疑问,遵循着这样一个客观规律,我们的软件开发过程必然也是一个由简单到复杂循序渐进的过程。

最初,我们开发的是一个对真实世界最简单、最主要、最核心部分的模拟。因为简单,我们的思路变得清晰而明了。但是,我们的软件不能永远只是模拟那些最简单、最主要、最核心的部分。我们的客户在使用软件的过程中,如果遇到那些不那么简单、不那么主要、不那么核心的情况时,我们的软件就无法处理了,这是客户无论如何不能接受的。因此,但软件的第一个版本交付客户以后,客户的需求就开始变更。

客户的需求永远不会脱离真实世界,也就是说,真实世界不存在的事物、现象、关系永远都不可能出现在软件需求中。但是,真实世界的事物、规则与联系并不是那么的简单与清晰的。随着我们的软件对它模拟得越来越细致,程序的业务逻辑开始变得不再那么清晰而易于理解,这就是软件质量下降最关键的内因。

任何一个软件的设计,总是与软件的复杂度有密切的关系。举例来说吧,客户资料是许多系统都必须要记录的重要信息。起初,我们程序简单,客户资料只记录了一些简单的信息,如客户名称、地址、电话等等,但随着程序复杂度的增加,客户资料开始变得复杂。比如,起初“地址”字段就仅仅需要一个字符串就可以了,但随着需求的变更,它开始有了省份、城市、地区、街道等信息。随后还会有邮政编码、所属社区、派出所等信息。起初增加一个两个字段时我们还可以在“客户信息表”里凑合一下,但后来我们必须要及时调整我们的设计,将地址提取出来单独形成一个“地址信息表”。如果不及时予以调整,“客户信息表”将越来越臃肿,由10来个字段,变成50个、80个、上100个……

信息表尚且如此,业务操作更是如此。起初的业务操作是如此的简单而明了,以至于我们不需要花费太多的类就可以将它们描述清楚。比如开票操作,最初的需求就是将已开具的票据信息读取出来,保存,并统计出本月开票量及金额。这样一个简单操作,设计成一个简单的“开票业务类”合情合理。但随后的业务逻辑变得越来越复杂,我们要检查客户是否存在、开票人是否有权限、票据是否还有库存,等等。起初的开票方式只有一种,但随着非正常开票的加入,开票方式不再单一,而统计方式也随之变化……随着业务的不断增加,软件代码的规模也在发生着质的变化。如果这时我们不及时调整我们的设计,而是将所有的程序都硬塞进“开票业务类”,那么程序质量必然会退化。“开票业务类”由原有的数十行,激增到数百行,甚至上千行。这时的代码将难于阅读,维护它将变成一种痛苦,毫无乐趣可言。

面对这样的状况,我们应当怎样走出困境呢?毫无疑问,就是重构,软件的重构。开票前的校验真的属于“开票业务类”吗?它们是否应当被提取出来,解耦成一个一个的校验类。正常开票与非正常开票真的应该写在一起吗?是否我们应当把“开票业务类”抽象成接口,以及正常开票与非正常开票的实现类。这就是我给大家的良方:当软件因为需求变更而开始渐渐退化时,运用软件重构改善我们的结构,使之重新适应软件需求的变化。

时间: 2024-09-10 08:59:37

遗留系统:软件工业时代的痛的相关文章

GE:从全球工业巨人到顶级软件公司——解读数字工业时代GE的数字化转型实践

第四次工业革命正在成为全世界关注的焦点,"无限可能"成为这个不确定世界的代名词.在达沃斯举办的2016年世界经济论坛(WEF)上,将会议主题定义为"掌控第四次工业革命",充分表明第四次工业革命已经成为世界发展面临的重大问题,创新的商业模式开始不断打破原有的屏障,正在改变和重塑着我们的生活方式.在工业领域,GE(通用电气)于2012年创造了"工业互联网"的概念,德国政府于2013年推出"工业4.0"战略,中国政府也在2015年实

电子商务迎来“工业时代”

林其玲 专业分工引领人类社会进入工业时代,人们织毛衣不再需要亲自养羊.纺线,只需购买现成的毛线就好.同样,专业分工也将引领电子商务进入工业时代,网商们也不用再集平台开发.物流等于一身了,只管"买毛线织毛衣"就好. 经过5个月的仓促准备,一个名不见经传的卖鞋网站"购鞋网"终于在去年8月8日正式上线.CEO雷开海认为,2009年网购行业进入快车道,他必须赶在时机过晚之前搭上这班车,并通过在2010年开展大规模网络营销活动,给购鞋网的发展打上一针强心剂. 购鞋网只是成千上

遗留系统的技术栈迁移

什么是遗留系统(Legacy System)?根据维基百科的定义,遗留系统是一种旧的方法.旧的技术.旧的计算机系统或应 用程序[1].这一定义事实上并没有很好地揭露遗留系统的本质.我认为,遗留系统首先是一个还在运行和使用,但已步入 软件生命周期衰老期的软件系统.它符合所谓的"奶牛规则":奶牛逐渐衰老,最终无奶可挤:然而与此同时,饲养成本却 在上升.这意味着遗留系统会逐渐随着时间的推移,不断地增加维护成本. 维护一个软件系统,就需要了解该软件 系统的知识.若知识缺失,就意味着这会给维护人

IT遗留系统是云计算所需面对一大挑战

奇怪的是,IT总花费仍在增加,并且增加得很多.现在云计算行业内有大量关于讨论Jevon悖论的说法,他们认为:仅仅在商品或服务方面降低成本,而不是减少总支出,实际上仍然是IT总花费增加. 在这种增加的推动下,IT功能已然融入了当今的商业社会的方方面面,每一项新增的业务都包含所需要的IT相关投资,所以,就事论事的话,总的IT投资必然增加.这种情况和今天的情况之间的区别是,IT不仅仅是一个后台支持功能,而将是面向客户的一个先决条件.IT将成为业务部门实现其长期的目标的合作伙伴,而不会在某个项目结束之后

云计算最大挑战是IT遗留系统

本文摘要:奇怪的是,IT总花费仍在增加,并且增加得很多.现在云计算行业内有大量关于讨论Jevon悖论的说法,他们认为:仅仅在商品或服务方面降低成本,而不是减少总支出,实际上仍然是IT总花费增加. 奇怪的是,IT总花费仍在增加,并且增加得很多.现在云计算行业内有大量关于讨论Jevon悖论的说法,他们认为:仅仅在商品或服务方面降低成本,而不是减少总支出,实际上仍然是IT总花费增加.在这种增加的推动下,IT功能已然融入了当今的商业社会的方方面面,每一项新增的业务都包含所需要的IT相关投资,所以,就事论

《面向对象的思考过程(原书第4版)》一1.2 对象及遗留系统

本节书摘来自华章出版社<面向对象的思考过程(原书第4版)>一书中的第1章,第1.2节,[美] 马特·魏斯费尔德(Matt Weisfeld) 著 1.2 对象及遗留系统 在面向对象成为主流之前,开发人员面临的问题一直就是如何将新的面向对象技术与现有的系统集成起来.面向对象与结构化(或命令式)编程之间拥有明显的界限,而结构化编程当时则是主流的开发范式.而我始终反对面向对象和结构化编程是不兼容的这一观点,因为我认为面向对象与结构化编程绝不是互斥的.它们是互补的,因为对象可以与结构化代码很好地集成.

新iPad结束软件赚钱时代 或逼微软让步

原标题:新iPad结束靠软件赚钱时代昨日,第五代平板iPad Air.第二代iPad mini以及Macbook笔记本终于亮相,在硬件配置更新的同时,苹果还首次对 Mac电脑搭载的OS X新操作系统实行免费,一举结束了苹果16年操作系统许可销售的历史.从此次发布的新品来看,无论是iPad Air. iPad mini,还是Macbook,硬件升级的同时,苹果还宣布对 iOS设备的iLife和iWork两组套件应用实行免费.同时,苹果还有史以来首次对Mac电脑(包含笔记本电脑和台式电脑)的最新操作

后工业时代的后规范思考

07年,我是极力推崇网站规范制作,好处很多,对商业,对用户,对设计师.我们走了两年,现在有了一定的成效,我们也看到了规范所带来的好处和便利.看看我们通过规范,模板,标准控件,能快速制作出多少页面,产品来,这种工业化的操作的确给一个大网站带来了天翻地覆的效率. 现在,我又要开始极力去推崇后规范时代的重构与打破思维了! 为什么?因为现在是后工业时代,我们要从大环境背景说起. 17世纪工业革命之前,世界产品制造基本属于手工作坊,产品完全依靠每个劳动者的手工制作,也发明过简单的流水线作业,这样出来的产品

八个改善Java遗留系统的技巧

你没看错,就是这个题目:即使是Java系统也会变成"遗留"系统.每当我们想起遗留系统时,我们就会想起那些存储着大量文件数据并只能用COBOL访问的嘎吱嘎吱作响的大型主机.但事实是,Java已经是一门具有15年历史的开发语言,用Java写就的成千上万的系统已经成功运行了十年甚至更久. 因此,考虑到许多读者都会工作在某个遗留的Java系统上,我根据自己的经验特地攒了这八个技巧,来帮助团队更新和激活他们的遗留Java应用. 技巧1:使用分析器 分析器提供了任何其他工具无法提供的功能,从而能够