软件开发的那些事儿:软件开发的轮回

——对软件分析设计的一次深刻反思与探讨

前言:你干软件开发多少年了?你是否开始感到困惑了、累了、算了?你是否该找一个加州旅馆好好歇一歇脚了?这篇文章也许就是你的加州旅馆,它给你解惑,反思软件开发中出现的问题,探讨解决这些问题的办法,那就是建立模型——用例模型、领域模型、分析模型和设计模型。

谈起软件开发,我在10年前就开始了。那时天是蓝的,生活是美好的,程序设计也是轻松愉快的。如果当时有人告诉我,设计一个程序需要数十人、花数年的时间完成,我会张着大大的嘴盯上你足足十分钟。那时,设计一个应用系统实在太简单了,我和我老师,还有另一个同学,仨人花两、三个月就可以搞定一个系统。我们不必考虑什么中间件,什么技术架构,什么通用性。跟着老师去客户那里谈一下午的需求,画一堆ER图,然后用Power Designer工具生成数据库,就开始用Power Builder设计程序。设计程序也是相当简单,一个下午就可以设计出一堆数据窗口,一个人几天就可以设计出一个模块。那时的项目相当清楚,就是针对某个单位的某个部门,或是某个具体的业务。不用考虑通用性,设计好了很少需要变更,大不了又重做一套完事。

但后来事情就开始变化了,软件应用的范围越来越广了,起初是一个企业,然后是多个企业,后来是整个集团、整个系统,甚至整个行业。技术也在越来越复杂了,从C/S到B/S,各种框架和技术路线,各种产品的整合。随着软件发展的一步步深入,软件规模在日渐扩大,软件设计变得越来越困难。

我个人经历了无数项目,也看着别人做了无数个项目。虽然每个项目都各有不同,但整个过程却千篇一律,都是俩字:崩溃!几乎每个项目的开始都是美好的,项目负责人总要召集大家坐在一起召开一个讨论会,总结过去的经验教训,展望未来的美好前景。几乎每个讨论会大家都唾沫横飞,列举过去的种种不是,提出各种各样完美方案,所有人都群情激昂,感觉自己从此进入了某个崭新时代。随后各人就回到各自的座位开始废寝忘食地工作,小心谨慎地按照事先规定好的规约执行。数月过去了,一切进行得井然有序,曾经出现的问题没有再次出现,所有人都暗自庆幸。也许,终于可以经历一次完美的开发过程了。

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

随后的事情就发生了,用户急匆匆地跑过来说,程序的设计不如他所愿。OK,程序员不得不在自己完美的代码上进行修改,然而软件交付的日子又要如期将至了。怎么办?程序员顾不得过去的约定开始随意地修改代码了,功能实现了,但是一些糟糕的设计开始了。很多的变更已经改变了原来的设计了,哎,不管了,原有的设计文档也被撂到一边。软件如期完成后,开始测试了。不久,测试员邪恶地将一堆问题报告摆到了程序员面前。为了完成任务,另一堆糟糕的代码出现了。也许某个程序员会自言自语地对自己说,如果当初这样设计就好了,但重构代码得花上一晚的时间,算了,将就对出着吧。

再后来,软件交付客户了。正如那句经典的话描述的:I changed when I saw it(当我看到软件时,需求就开始变更了)。当我们的软件经历了客户数轮的变更,一切都变得面目全非。这种变更才是真正对软件设计的终极考验,但非常遗憾的是,至今还没有一个我参与的软件系统经历住了这样的考验。

有一次,客户需要修改一个业务逻辑,非常清晰的业务需求,非常明了的一次业务变更。但是我们真正开始着手修改的时候才发现非常困难,因为无数人在各自的模块实现了这个业务逻辑,也就是说这个业务逻辑被分散在了无数的代码中,这样一个业务逻辑的修改就意味着所有这些代码都必须进行相应地修改。崩溃啊,我们又猛地扎进了无尽的加班中。也许你会问,当初为什么不实现一个通用方法供所有人调用?是啊,我也想问这样的问题,但这样的情况还在继续,类似事件依然在延续。

就这样将就着,我们在痛苦中维护了一个又一个的系统,两三年、五六年,没有任何乐趣。随着时间的推移,维护系统的人员也在发生着变化,当新来的人员重新翻看过去那些设计资料时,不是残缺不全就是因为历次的变更而今非昔比,他不能从中获得有用信息。即使询问当事人也是记忆残缺不全,也许读取代码才是真正的人间正道,令人崩溃啊。人们只有通过大声地吵架来宣泄心中的郁闷。终于有一天,我们的客户慷慨地说,好吧,我们重新设计一套系统吧。OK,一切都解脱了,我们又开始了另一个轮回。 (续)

时间: 2024-12-22 13:12:33

软件开发的那些事儿:软件开发的轮回的相关文章

自己开发的免费小软件该如何宣传和推广让用户知道呢?

问题描述 自己开发的免费小软件该如何宣传和推广让用户知道呢?我最近写了一个可以对QQ群聊天记录进行统计和排名的小程序,便于群主及时了解群内成员的活动状态.可以对群成员的发言次数.发言字数以及综合贡献率进行统计和排名,并自动生成excel或文本报表输出.写的过程中得到了论坛里很多朋友的帮助.下载地址:但是苦于没有合适的宣传和推广的手段,无法让需要的人知道和使用.请教论坛里的高手,我该如何做呢?哪位大神能帮我推广下啊.应该有不少人会需要这个小程序的. 解决方案 解决方案二:这个估测卖不到钱吧,如果是

关于 软件开发工程师 和 Android软件应用开发工程师 以及云计算工程师发展前景

问题描述 关于 软件开发工程师 和 Android软件应用开发工程师 以及云计算工程师发展前景 高级软件开发工程师 和 Android软件应用工程师 以及云计算工程师. 当下这三个方向怎么样,或者说未来一段时间的发展前景.求分析

ios-IOS 软件开发,24小时候软件闪退,求解决

问题描述 IOS 软件开发,24小时候软件闪退,求解决 公司开发的APP,装上用得时候没有问题, 但是过了一天就打不开了,一打开就闪退,急急急 解决方案 找出崩溃日志,贴上来

如何用H5来开发安卓手机App软件?用哪个开发软件?想做一下混合开发。求大神回复。

问题描述 如何用H5来开发安卓手机App软件?用哪个开发软件?想做一下混合开发.求大神回复. 如何用H5来开发安卓手机App软件?用哪个开发软件?想做一下混合开发.求大神回复. 解决方案 phonegap居于phonegap的cordova可以将html页面编译的兼容ios,Android及其他平台的安装包

asp.net-现在用C#做软件或者是系统之类的开发团队,用ASP.NET MVC的多吗?

问题描述 现在用C#做软件或者是系统之类的开发团队,用ASP.NET MVC的多吗? 现在用C#做软件或者是系统之类的开发团队,用ASP.NET MVC的多吗? 最近公司要做一个管理系统,我感觉用一个框架加非常好做了,但是他非要用mvc做,感觉满蛋疼的,我就问哈 ,现在做开发的,不论大公司小公司,用MVC的多吗? 解决方案 MVC只是一个概念,只要将逻辑.数据.界面显示分离即可.和用什么语言无关.现在开发web应用,用MVC框架的比较普遍. 解决方案二: 和多少没有关系.乘坐公交车的人比乘坐私家

unity+高通开发 ar-unity导出ar软件没有模型只有材质贴图

问题描述 unity导出ar软件没有模型只有材质贴图 unity导出ar软件没有模型只有材质贴图,制作过程完全按照网络制作方法,之前也做过立方体的没问题,这次做的事比较复杂的模型,显示效果如下.开发 ar-unity导出ar软件没有模型只有材质贴图-unity3d 高通ar教程">

国内首款基于asp.net技术开发的服务器管理软件

数据王服务器系列软件是国内首款基于asp.net技术开发的服务器管理软件.本系列软件是由沈阳泷泉信息技术有限公司独立自助开发完成,我司是一家以asp.net为主的技术型公司,我们的团队不仅汇集了国内顶尖的.net程序员和专业级的美工 更有着雄厚的资金及技术实力,立志做中国最优秀的服务器软件供应商. 目前本系列软件已正式发布两款,数据王域名虚拟主机管理系统,数据王IIS还原备份专家! 数据王域名虚拟主机管理系统 全球首创三个第一 第一个让虚拟主机用户支持防盗链 可自定义需要防盗的文件扩展名及被盗时

用vs2013开发平板的winform软件怎么能用钩子获取到WM_TOUCH消息

问题描述 用vs2013开发平板的winform软件怎么能用钩子获取到WM_TOUCH消息. 解决方案

软件开发,标准化流水线式开发的实施构想

 软件开发,标准化流水线式开发的实施构想        近日看到一篇博文,讨论标准化流水线开发模式的话题,但是这篇博文仅仅提出这个问题,未见回应.        这其实是一个很大的问题,我从事软件开发这么多年,仍然未见到国内有任何一家公司真正做到,这个问题也是我一直到思考的.一直以来我也尝试推行这种模式,但是仍然未见起色,从中我不仅学习到一些经验,但是也深知其困难.通过这篇博文来跟到家分享下我的经验. Ø         一个问题.什么是标准化和流水线开发模式,为什么要实施?        可能

体感开发的重点在于软件

[编者按]本文作者David Cardinal,David具有20余年的科技行业技术从业经验.他是DigitalPro for Windows的合作开发者,后者是Windows上首个专业的图像管理解决方案.本文是其结合今年Build大会上微软的开发经验,对Kinect和Leap Motion的体感开发所做的理解. 当年Leap Motion的CTO David Holz第一次告诉我不要将太多的精力放在他们的硬件上,理由是大部分的诀窍都在软件--我半信半疑.而后来在微软的Build大会上,Kine