1 软件工程的基本观念
1.1 软件工程的主要环节
1.2 软件工程基本观念
1.2.1 复用
复用就是指“利用现成的东西”,但它不是简单的“拿来主义”,我们经常说“站在巨人的肩膀上”大概就是这个道理。
复用的内涵包括提高质量和生产率两者。有经验可知,在一个新系统中,大部分的内容是成熟的,只有一小部分内容是创新的。一般的可以相信成熟的东西总是比较可靠的(即具有高质量),二大量成熟的工作可以通过复用来快速实现(即具有高生产率)。我们要做一个勤劳而且聪明的人。
我们将具有一定集成度并可以重复使用的软件组成单元称为软构件。软构件复用可以表述为:构造新的软件系统可以不必每次从零做起,直接使用自己已有的软构件,即可组装(或加以合理修改)成新的系统。软件复用不仅要是自己拿来方便,还要让别人拿走方便,也就是“拿去主义”,米老师也经常说“教是最好的学”,有异曲同工之妙。
软构件生产应用软件的过程
1.2.2 分而治之
分而治之是指把一个复杂的问题分解成若干个简单的问题,然后逐个解决。软件人员分而治之的时候,应该着重考虑:复杂问题分解后,每个问题能否用程序实现:所有程序最终能否集成为一个软件系统并有效解决原始的复杂问题?诸如:软件的体系结构设计、模块化设计都是分而治之的具体表现。
1.2.3 优化——折衷
1.3 一些不正确的观念
1.4 一些有争议的观念
争议之一:如果软件运行较慢,是换一台更快的计算机,还是设计一种更快的算法?
争议之二:有最好的软件工程方法,最好的编程语言吗?
争议之三:编程时知否该多使用技巧?
就软件开发而言,技巧的优点在于能另辟蹊径地解决一些问题,缺点是技巧并不能为人熟知。若在程序中用太多的技巧,可能会留下隐患,别人也难以理解程序。鉴于一个局部的优点对整个系统而言是微不足道的,而一个错误可能是致命的。作者建议用自然的方式编程,少用技巧。
争议之四:软件中的错误是否可按严重程度分等级?
在定量分析时,可以将错误分为等级,以便于管理。微软的一些开发小组将错误分成四个等级:一级严重:错误导致软件崩溃;二级严重:错误导致一个特性不能运行并且没有替代的方案;三级严重:错误导致一个特性不能运行但有替代的方案;四级严重:错误是表面化的或是微小的。
2 项目计划与质量管理
2.1 项目计划
2.1.1 知己知彼
首先要了解项目的规模、难度与实践限制,才可以确定应该投入多少人力、物力去做这个项目。在可行性分析阶段就要考虑这个问题。但不幸的是,人们在陷入项目不能自拔之前总难以准确地估计项目的规模与难度。这里经验起到了最重要的作用。
项目的时间限制有两类。第一类,项目应该完成的日期写在合同中,如果延期了,则开发方要做出相应的赔偿。第二类是开发自己的软件产品,虽然只确定了该产品大致的发行日期并允许有延误,但如果拖延太久则会失去商机造成损失。
项目的资源分为三类:“人”、“可复用的软件构件”和“软硬件环境”
(1)人是最有价值的资源。项目计划的制定者要确定开发人员的名单,要根据他们的专长进行分工 。(2)可复用的软构件是次有价值的资源。复用软构件可提高软件的质量与生产率。软构件并非一定要用自己的,可以向专业的软件供应商购买。(3)软硬件环境虽然不是最重要的资源,却是必需的资源。原则上软硬件环境只要符合项目的开发要求即可。有些项目可能要用到特殊的设备,则要事先做好准备,以免用时找不到二耽搁了进程。
2.1.2进度安排
有些事件经常会导致项目被延误
(1)上级领导主观臆断,制定了不现实的期限。项目经理与程序员按照不合理的进度表开展工作。
(2)客户的需求发生了变化,但没有对进度表做出相应的修改。
(3)低估了项目的规模与难度,导致投入的人力和物力不足。
(4)并未预见到存在难以克服的技术障碍。
(5)并未预见到开发人员会发生问题,如生病,辞职等等。
(6)开发人员之间不能很好的交流、协作,导致各阶段任务难以如期完成。
真对以上原因,有如下建议:
(1)制定进度表的人最好是项目负责人,他最了解项目和开发人员。进度表要经过开发小组的讨论,在得到大部分人的支持后才能实施。避免出现一厢情愿的局面。
(2)进度安排并不见得一定要符合逻辑顺序。应尽可能地先做技术难度好的事,后做难度低的事。也就是辛苦在前,轻松在后。
(3)开发一个大的软件项目,应该将进度分为若干个里程碑。一个里程碑之内的多个任务可以同步进行。程序员极容易沉迷于技术,要么乐不思蜀,要么焦头烂额。里程碑就像心灵的灯塔,使忙碌的人群不混乱,不迷失方向。
(4)进度中必须留有缓冲时间,并将缓冲时间用到不确定的事情上
(5)如果发现项目应交付的期限非常不合理,就要跟领导或客户据理力争,请求放款期限、调整进度。
2.2 零缺陷质量管理的观念
2.2.1 高目标
人在做一件事情时,由于存在很多不确定的因素,一般不可能100%地达到目标。假设平常人做事能完成目标的80%。如果某个人的目标是100分,那么他最终成绩可达80分。如果某个人的目标60分,那么他人在做一件事情时,由于存在很多不确定的因素,一般不可能 100% 地达到目标。假 设平常人做事能完成目标的 80%。如果某个人的目标是 100 分,那么他最终成绩可达 80 分。如果某个人的目标只是 60 分,那么他最终成绩只有 48 分。我们在考场上身经百战,很清楚 那些只想混及格的学生通常都不会及格,那些想得高分的学生也常为自己的失误而捶胸顿 足。
做一个项目通常需要多个人的协作。假设项目的总质量(最高为 1)是十个开发人员的 工作质量之积。如果每个人的质量目标是 0.95,那么十个人的累积质量不会超过 0.19。如果 每个人的质量目标是 0.9 分,那么十个人的累积质量不会超过 0.03。只有每个人都做到 1,项目总质量才会是 1。
如果没有高目标,人的堕落就很快。如果没有“零缺陷”的质量目标,也许缺陷就会成 堆。
2.2.2可执行的规范
软件是如此的灵活,如果没有规范来制约,就容易因无序的喜好而导致混沌;但规范如 果太严密了,就会扼杀程序员生机勃勃的创造力。制定软件规范是进退两难的事。程序员必 须深入了解软件多方面的质量因素,把那些能提高软件质量因素的各种规范植入脑中,才能 在各个实践环节自然而然地把高质量设计到软件中。关于软件工程的思想还在每个阶段还有很多,例如软件的质量因素:正确性与精确性,性能与效率,易用性,可理解性与简洁性 ,可复用性和可扩充性等,这些都需要我们在日后的学习和工作中慢慢体会和总结,任重而道远,加油。