——对软件分析设计的一次深刻反思与探讨
前言:你干软件开发多少年了?你是否开始感到困惑了、累了、算了?你是否该找一个加州旅馆好好歇一歇脚了?这篇文章也许就是你的加州旅馆,它给你解惑,反思软件开发中出现的问题,探讨解决这些问题的办法,那就是建立模型——用例模型、领域模型、分析模型和设计模型。
谈起软件开发,我在10年前就开始了。那时天是蓝的,生活是美好的,程序设计也是轻松愉快的。如果当时有人告诉我,设计一个程序需要数十人、花数年的时间完成,我会张着大大的嘴盯上你足足十分钟。那时,设计一个应用系统实在太简单了,我和我老师,还有另一个同学,仨人花两、三个月就可以搞定一个系统。我们不必考虑什么中间件,什么技术架构,什么通用性。跟着老师去客户那里谈一下午的需求,画一堆ER图,然后用Power Designer工具生成数据库,就开始用Power Builder设计程序。设计程序也是相当简单,一个下午就可以设计出一堆数据窗口,一个人几天就可以设计出一个模块。那时的项目相当清楚,就是针对某个单位的某个部门,或是某个具体的业务。不用考虑通用性,设计好了很少需要变更,大不了又重做一套完事。
但后来事情就开始变化了,软件应用的范围越来越广了,起初是一个企业,然后是多个企业,后来是整个集团、整个系统,甚至整个行业。技术也在越来越复杂了,从C/S到B/S,各种框架和技术路线,各种产品的整合。随着软件发展的一步步深入,软件规模在日渐扩大,软件设计变得越来越困难。
我个人经历了无数项目,也看着别人做了无数个项目。虽然每个项目都各有不同,但整个过程却千篇一律,都是俩字:崩溃!几乎每个项目的开始都是美好的,项目负责人总要召集大家坐在一起召开一个讨论会,总结过去的经验教训,展望未来的美好前景。几乎每个讨论会大家都唾沫横飞,列举过去的种种不是,提出各种各样完美方案,所有人都群情激昂,感觉自己从此进入了某个崭新时代。随后各人就回到各自的座位开始废寝忘食地工作,小心谨慎地按照事先规定好的规约执行。数月过去了,一切进行得井然有序,曾经出现的问题没有再次出现,所有人都暗自庆幸。也许,终于可以经历一次完美的开发过程了。
随后的事情就发生了,用户急匆匆地跑过来说,程序的设计不如他所愿。OK,程序员不得不在自己完美的代码上进行修改,然而软件交付的日子又要如期将至了。怎么办?程序员顾不得过去的约定开始随意地修改代码了,功能实现了,但是一些糟糕的设计开始了。很多的变更已经改变了原来的设计了,哎,不管了,原有的设计文档也被撂到一边。软件如期完成后,开始测试了。不久,测试员邪恶地将一堆问题报告摆到了程序员面前。为了完成任务,另一堆糟糕的代码出现了。也许某个程序员会自言自语地对自己说,如果当初这样设计就好了,但重构代码得花上一晚的时间,算了,将就对出着吧。
再后来,软件交付客户了。正如那句经典的话描述的:I changed when I saw it(当我看到软件时,需求就开始变更了)。当我们的软件经历了客户数轮的变更,一切都变得面目全非。这种变更才是真正对软件设计的终极考验,但非常遗憾的是,至今还没有一个我参与的软件系统经历住了这样的考验。
有一次,客户需要修改一个业务逻辑,非常清晰的业务需求,非常明了的一次业务变更。但是我们真正开始着手修改的时候才发现非常困难,因为无数人在各自的模块实现了这个业务逻辑,也就是说这个业务逻辑被分散在了无数的代码中,这样一个业务逻辑的修改就意味着所有这些代码都必须进行相应地修改。崩溃啊,我们又猛地扎进了无尽的加班中。也许你会问,当初为什么不实现一个通用方法供所有人调用?是啊,我也想问这样的问题,但这样的情况还在继续,类似事件依然在延续。
就这样将就着,我们在痛苦中维护了一个又一个的系统,两三年、五六年,没有任何乐趣。随着时间的推移,维护系统的人员也在发生着变化,当新来的人员重新翻看过去那些设计资料时,不是残缺不全就是因为历次的变更而今非昔比,他不能从中获得有用信息。即使询问当事人也是记忆残缺不全,也许读取代码才是真正的人间正道,令人崩溃啊。人们只有通过大声地吵架来宣泄心中的郁闷。终于有一天,我们的客户慷慨地说,好吧,我们重新设计一套系统吧。OK,一切都解脱了,我们又开始了另一个轮回。 (续)
相关文章:
《 谈谈软件开发的那些事儿 之 解决之道 》
《 谈谈用例模型的那些事儿 之 用例图 》
《 谈谈用例模型的那些事儿 之 用例说明 》
《 谈谈用例模型的那些事儿 之 注意什么 》
《 谈谈领域模型的那些事儿 之 从领域获取知识 》
《 谈谈领域模型的那些事儿 之 注意什么 》
分享到:
- 2009-10-12 21:18
- 浏览 3620
- 评论(1)
- 论坛回复 / 浏览 (0 / 1558)
- 查看更多
相关推荐
1. 软件开发的轮回:早期的软件开发往往由少数开发者在短时间内完成,需求明确,设计简单。然而,随着业务需求的多样化和扩展,软件系统逐渐庞大,涉及的技术和人员数量也大幅增长。从单一的C/S架构到现在的B/S架构...
### 低功耗开发的关键知识点 ...综上所述,低功耗开发是一个涉及硬件设计与软件编程的综合过程,需要从多个角度出发进行全面优化。通过合理的规划和细致的设计,可以有效降低功耗,实现更高效、更环保的产品设计。
首先,我们来谈谈图标在软件开发中的作用。图标作为一种视觉语言,能够快速引导用户理解和执行相应的操作。例如,保存图标(一般表现为一个硬盘或磁盘的图像)让用户知道点击后会保存当前的工作;撤销图标(通常是一...
在探讨Windows 8降级那些事儿时,首先要明确的是,微软在Windows 8的最终用户许可协议(EULA)中确实赋予了用户一项特殊权利,那就是降级权。这意味着购买预装了Windows 8专业版的用户有权限将操作系统降级至Windows...
【如何成为优秀的软件开发人员】 在当今信息化时代,软件开发人员是推动科技进步的重要力量,而如何从普通人成长为一名优秀的软件人才,是许多志在IT行业的人士关注的问题。本篇文章将探讨这一主题,分析现状,指出...
在软件开发过程中,软件测试是一项至关重要的环节,它确保了产品的质量和稳定性。而测试用例设计则是测试过程的核心部分,它定义了如何对软件进行有效的验证,以发现并修复潜在的缺陷。本资料集《软件测试用例设计》...
上周末去参加了第二届(杭州)互联网测试技术...这个话题引起了各位嘉宾们的踊跃讨论,infoQ的泰稳整理了这次讨论(推荐看1楼回复),我也想谈谈自己的一些看法。 其实算上实习,我已经在4个公司工作过了,回头来看看这些
本篇将深入探讨软件开发过程及其与架构设计的关系,特别是面向对象的架构设计。 首先,软件开发过程通常分为几个主要阶段,其中包括项目立项、可行性报告、需求分析、架构设计、成本分析、技术方案选择、风险评估、...
在软件开发过程中,美工图标的设计与选择是至关重要的一个环节。"非常丰富的软件开发美工图标库" 提供了一套全面的图标资源,旨在帮助开发者们提升软件的视觉效果和用户体验。图标作为用户界面(UI)的重要组成部分...
现代软件工程在软件开发中的应用 作者:崔宁 来源:《电子技术与软件工程》2016年第22期 摘 要 随着近年来社会主义市场经济的迅猛发展,越来越多的科技产品逐渐为人们所 了解和关注。正如我们所知,科技产品的运行离...
现代软件工程在软件开发中的应用 作者:崔宁 来源:《电子技术与软件工程》2016年第22期 摘 要 随着近年来社会主义市场经济的迅猛发展,越来越多的科技产品逐渐为人们所 了解和关注。正如我们所知,科技产品的运行离...
现代软件工程在软件开发中的应用 作者:崔宁 来源:《电子技术与软件工程》2016年第22期 摘 要 随着近年来社会主义市场经济的迅猛发展,越来越多的科技产品逐渐为人们所 了解和关注。正如我们所知,科技产品的运行离...
在软件开发过程中,软件测试是不可或缺的一环,它确保了产品的质量和用户体验。面试时,面试官通常会针对软件测试的专业知识、实践经验以及问题解决能力来评估候选人。以下是一些常见的软件测试面试问题及其背后的...
本文将围绕“谈谈汽车软件研发安全体系”这一主题,深入探讨其重要性、面临的挑战以及实施策略。 #### 信息安全的重要性 在当今数字化时代,信息安全已经成为各行各业不可或缺的一部分,尤其是在金融行业及头部...
在软件开发领域,无论是新手还是经验丰富的开发者,都需要掌握一定的编码规范、开发模板以及常见问题的解决方案。"软件开发这点事(开发模板等)"这个主题涵盖了这些关键知识点,旨在帮助提升开发效率和代码质量。 ...
汽车软件研发安全体系是当前汽车行业面临的重要议题,随着软件定义汽车的发展,汽车制造商正在积极提升其应用软件的安全性。安全不仅是产品质量的体现,也是赢得消费者和政府信任的关键因素。华为内部信件强调了可信...
总而言之,"linux那些事儿.rar"压缩包文件提供了一个深入了解Linux驱动开发和USB技术的平台。通过学习,无论是对于想成为Linux系统管理员还是硬件驱动工程师的人来说,都将极大地提升他们的专业技能和解决问题的能力...
在软件开发领域,掌握扎实的数据结构知识是至关重要的,尤其是当使用C++这种强大的编程语言时。C++以其高效、灵活和面向对象的特性,成为了编写数据结构的理想选择。本资料包“软件开发技术基础(C++描写数据结构)”...
根据毕业时间的不同一般集中在5、6月份和9、10月份,那么最近一段时间也是学校毕业答辩的高峰时期,作为检验论文是否成功的最后一道关卡,有很多学生都不知道应该如何准备,今天我们就谈谈论文答辩那些事儿~ ...
2. 软件学院的不足之处在于无法培养软件开发高手,真正的软件开发高手都是通过自学和实践获得的。 3. 攻读计算机研究生需要具备充分的开发经验,否则将无法达到预期的效果。 4. 具备开发经验的标志包括对C++和汇编...