摘要:1988年,Peat Marwick针对600家成功公司的调查结果显示,35%的公司有过软件项目失控的经历。(Rothfeder 1988) 1982年,Allstate公司宣布其公司运营全部要实行自动化。他们启动了一个将耗时5年投资800万美元的大型项目,而在花费了6年和1500万美元后,Allstate公司重新调整了目标和最终期限,重新调整后的预算大约1亿美元。 1988年,Westpac Banking公司决定重新设计他们的信息系统。他们做了5年、8500万美元的计划。3年后,在花费了1.5亿美元却依然收效甚微时,Westpac Banking公司为了减少损失,取消了这个项目,并...
阅读全文
摘要:“回顾一下被选为‘最佳项目’的十个软件项目,如果说有所发现的话,那就是——最佳的项目一定是建立在最佳的软件开发基础之上的。我们都知道软件开发基础对于优秀软件的作用,但差别在于大多数软件的基础薄弱,这样不可避免地使自己陷入麻烦之中”(Bill Hetzel 1993) 本章的范畴只限定在确定软件开发的基本原则,解析他们是如何影响开发计划的,同时提供参考信息。本章书把软件开发基本原则实践分为三类:管理实践,技术实践和质量保证实践。管理的基本原则 管理原则由以下几部分组成:判定产品规模(包括功能、复杂度和其它产品特性)根据产品规模分配资源制定资源计划监控、引导资源以保持项目方向不会偏离1. ...
阅读全文
摘要:大多数典型错误其表面都具有诱惑性,给人们一种诱人的前景,但通常却不能产生期望的结果。 “想挽救进度已经落后的项目吗?---- 给项目补充更多人员!” 下面分别按照人员、过程、产品和技术四个维度列出36个典型错误。人 员典型错误1:挫伤积极性 对人员不够关心和重视;过度的进度压力;缺乏激励;过分夸张的激励等。典型错误2:人员素质低 人员能力欠佳,工作效率低,甚至做多错多。典型错误3:对有问题的员工失控 不对有问题的人员采取措施是项目组成员对领导最常见的抱怨。典型错误4:英雄主义 强调个人英雄主义会导致发生额外的风险,也会削弱在软件开发过程中多个角色的合作。典型错误5:项目后期加入...
阅读全文
摘要:前 言 前段时间一直在写技术方面的文章,现在想转转口味,从软件开发过程和项目管理的角度来谈论软件开发。本座也知道,从这两个角度来谈论软件开发对谈论者来说是非常冒险的一件事情,它不像技术,对就对错就错,有一个客观的评判标准,别人想喷你也得自己先好好研究等拿到了足够的论据才能喷,但开发过程和项目管理就不同了,别人仅凭一点点所谓的管理经验甚至是主观推断就能喷得你体无完肤,摇摇欲坠 ~ 因为没有什么所谓的事实标准与放之四海皆有效的软件开发过程和项目管理方法。保守估计,100个人中至少有150种想法。本座也深知其中的凶险,因此避重就轻,从基本原理谈起,宏观的角度阐述相关问题,尽量减少中弹的机会。欢迎大.
阅读全文
摘要:现在我们看看一个实际的例子,从不同设计原则的角度来观察它的设计。这个例子是信息处理中心-数据传输控制组件的消息处理模块,首先看看它的结构图、类实现伪代码和主体程序伪代码: 图3-1 消息处理模块结构图程序3-1 类实现伪代码/////////////////////////////////////////////////////////////////////////////////// Command 类///////////////////////////////////////////////////////////////////...
阅读全文
摘要:随着应用程序的规模和复杂度的增加,需要在更高的层次对它们进行组织。类对于小型应用程序来说事非常方便的组织单元,但是对于大型应用程序来 说,如果仅仅使用类作为唯一的组织单元,就会显得粒度过细。因此,就需要比类“大”的“东西”来辅助大型应用程序的组织。这个“东西”就是包 (package)。 本节描述了6个原则。前3个原则关注包的内聚性,这些原则能够指导我们如何把类划分到包中。后3个原则关注包的耦合性,这些原则帮助我们确定包之间的相互关系。 在UML的概念中,包可以用作包容一组类的容器。通过把类组织成包,我们可以在更高层次的抽象上来理解设计。我们也可以通过包来管理软件的开发和发布。目的就是...
阅读全文
摘要:提起面向对象,大家也许觉得自己已经非常“精通”了,起码也到了“灵活运用”的境界。面向对象设计不就是OOD吗?不就是用C++、Java、Smalltalk等面向对象语言写程序吗?不就是封装+继承+多态吗? 很好!大家已经掌握了不少对面向对象设计的基本要素:开发语言、基本概念、机制。Java是一种纯面向对象语言,是不是用Java写程序就等于面向对象了呢?我先列举一下面向对象设计的11个原则,测试一下大家对面向对象设计的理解程度~^_^~单一职责原则(The Single Responsibility Principle,简称SRP)开放-封闭原则(The Open-Close Princip...
阅读全文
摘要:我们如何知道软件设计的优劣呢?以下是一些拙劣设计的症状,当软件出现下面任何一种气味时,就表明软件正在腐化。僵化性(Rigidity):很难对系统进行改动,因为每个改动都会迫使许多对系统其他部分的其他改动。脆弱性(Fragility):对系统的改动会导致系统中和改动的地方在概念上无关的许多地方出现问题。牢固性(Immobility):很难解开系统的纠结,使之成为一些可在其他系统中重用的组件。粘滞性(Viscosity):做正确的事情比做错误的事情要困难。不必要的复杂性(Needless Complexity):设计中包含有不具任何直接好处的基础结构。不必要的重复(Needless Repet..
阅读全文
摘要:“面向对象软件设计”这个术语及其相关话题对于很多开发人员来说已经是耳熟能详了,甚至听腻了。但是,对不住各位,为了吸引眼球和引起“异性” 注意,本座还是落入俗套选择这个热门话题作为本博客的开张炒作篇目。请见谅,也希望各位看官能放下架子,略读一下本系列的所有文章再喷,可赞可弹可BS, 但勿吐槽,毕竟不想因为本座的文字噪音降低看官的SZ,伤不起呀!! 言归正传,在如何阐述“面向对象软件设计”这个问题上,本座琢磨了良久,毕竟命题宽泛,表达方式和层次多样。最终决定用相对通俗,以本座的读书和工作经历,在中等层次上进行阐述。 本座从十年多前走出校门之时就确信软件架构(设计)、数据结构和算法是软件的根...
阅读全文