《软件工程思想.ppt》由会员分享,可在线阅读,更多相关《软件工程思想.ppt(36页珍藏版)》请在优知文库上搜索。
1、软件工程思想软件工程思想软件工程的目标软件工程的目标是提高软件的质量与生产率,最终实现软件的工业化生产。质量与生产率之间有着内在的联系,高生产率必须以质量合格为前提。如果质量不合格,对供需双方都是坏事情。质量与生产率之间不存在根本的对立,好的软件工程方法可以同时提高质量与生产率。质量与生产率的提高就指望程序员与程序经理。对开发人员而言,如果非得在质量与生产率之间分个主次不可,那么应该是质量第一,生产率第二。软件工程常用模型软件工程的主要环节有:人员管理、项目管理、可行性与需求分析、系统设计、程序设计、测试、维护等,如图1.1所示。软件工程模型建议用一定的流程将各个环节连接起来,并可用规范的方式
2、操作全过程,如同工厂的生产线。常见的软件工程模型有:线性模型(图1.2),渐增式模型(图1.3),螺旋模型,快速原型模型,形式化描述模型等等.线性模型太理想化,太单纯,已不再适合现代的软件开发模式,几乎被业界抛弃。但我们应该认识到,“线性”是人们最容易掌握并能熟练应用的思想方法。线性是一种简洁,简洁就是美。当我们领会了线性的精神,就不要再呆板地套用线性模型的外表,而应该用活它。软件开发的基本策略软件工程三十年的发展,已经积累了相当多的方法,但这些方法不是严密的理论。实践人员不应该教条地套用方法,更重要的是学会“选择合适的方法”和“产生新方法”。有谋略才会有好的战术。有谋略才会有好的战术。软件开
3、发中的三种基本策略:“复用”、“分而治之”、“优化折衷”。复用复用就是指“利用现成的东西” 。被复用的对象可以是有形的物体,也可以是无形的成果。复用的内涵包括了提高质量与生产率两者。“请不要再发明相同的车轮子请不要再发明相同的车轮子了了”由经验可知,在一个新系统中,大部分的内容是成熟的,只有小部分内容是创新的。一般地可以相信成熟的东西总是比较可靠的(即具有高质量),而大量成熟的工作可以通过复用来快速实现(即具有高生产率)。应该把大部分的时间用在小比例的创新工作上,而把小部分的时间用在大比例的成熟工作中。将具有一定集成度并可以重复使用的软件组成单元称为软构件(Software Component
4、)。软件复用可以表述为:构造新的软件系统可以不必每次从零做起,直接使用已有的软构件,即可组装(或加以合理修改)成新的系统。复用方法合理化并简化了软件开发过程,减少了总的开发工作量与维护代价,既降低了软件的成本又提高了生产率。另一方面,由于软构件是经过反复使用验证的,自身具有较高的质量。因此由软构件组成的新系统也具有较高的质量。软件复用不仅要使自己拿来方便,还要让别人拿去方便,是“拿来拿去主义”。分而治之分而治之是指把一个复杂的问题分解成若干个简单的问题,然后逐个解决。软件人员在执行分而治之的时候,应该着重考虑:n复杂问题分解后,每个问题能否用程序实现?n所有程序最终能否集成为一个软件系统并有效
5、解决原始的复杂问题? 诸如软件的体系结构设计、模块化设计都是分而治之的具体表现。软件的分而治之不可以“硬分硬治”。优化折衷软件的优化是指优化软件的各个质量因素,如提高运行速度,提高对内存资源的利用率,使用户界面更加友好,使三维图形的真实感更强等等。想做好优化工作,首先要让开发人员都有正确的认识:优化工作不是可有可无的事情,而是必须要做的事情。愿意做并不意味着就能把事情做好。优化工作的复杂之处是很多目标存在千丝万缕的关系。当不能够使所有的目标都得到优化时,就需要“折衷”策略。“折衷”软件中的折衷策略是指通过协调各个质量因素,实现整体质量的最优。“为了使整个组织具有最好的战斗力,我们要重用几个人,
6、照顾一些人,在万不得已的情况下委屈一批人”。软件折衷的重要原则是不能使某一方损失关键的职能,更不可以象“舍鱼而取熊掌”那样抛弃一方。人都有惰性,如果允许滥用折衷的话,那么一当碰到困难,人们就会用拆东墙补西墙的方式去折衷,不再下苦功去做有意义的优化。在保证其它因素不差的前提下,使某些因素变得更好。一些不正确的观念观念之一:我们拥有一套讲述如何开发软件的书籍,书中充满了标准与示例,可以帮助我们解决软件开发中遇到的任何问题。n规范常常无法套用n软件技术日新月异观念之二:我们拥有最好的开发工具、最好的计算机,一定能做出优秀的软件。n良好的开发环境只是产出成果的必要条件,而不是充分条件。如果拥有好环境的
7、是一群庸人,难保他们不干出南辕北辙的事情。观念之三:如果我们落后于计划,可以增加更多的程序员来解决。n新手会产生很多新的错误,使项目混乱。n老手向新手解释工作以及交流思想都要花费时间,使实际开发时间更少。所以科学的项目计划很重要,不在乎计划能提前多少,重在恰如其分。观念之四:既然需求分析很困难,不管三七二十一先把软件做了再说,反正软件是灵活的,随时可以修改。n对需求把握得越准确,软件的修修补补就越少。n有些需求在一开始时很难确定,在开发过程中要不断地加以改正。n软件修改越早代价越少,修改越晚代价越大。一些有争议的观念 如果软件运行较慢,是换一台更快的计算机,还是设计一种更快的算法?有最好的软件
8、工程方法,最好的编程语言吗?编程时是否应该多使用技巧?软件中的错误是否可按严重程度分等级?软件项目团队程序员真正的程序员都有如下秉性: 诚实 简单实用主义 爱憎分明 工作单调但不乏味 结论:优秀的程序员没有理由不让人喜欢,他们远比怪僻来得可爱。软件经理程序经理是技术性的基层或中层干部,是软件企业得以发展的生力军。在一个管理混乱的软件公司里,如果某个程序员能大喊大叫并且干劲十足,那他就能成为一名程序经理。微软公司在选择经理人员时,总是把他们的技术知识和运用技术去赚钱运用技术去赚钱的能力放在首位。程序经理一般就是程序员队伍中最聪明的那个家伙。n聪明人一定反应敏捷,善于接受新事物。他能迅速进入一个新
9、领域,给你一个头头是道的解释。他提出的问题往往一针见血、击中要害。他能及时掌握所学知识,并且博闻强记,他能把本来认为互不相干的领域联系在一起使问题得到解决。他富有创新精神与合作精神好的程序经理具备的条件能做最多且最难的工作 有人格魅力 技术水平是程序员队伍中的最高级别 结论:一个有活力的软件公司的各级经理都不会这样感叹,“因为我啥也不会干,所以只好当领导。” 程序经理是否要编程Windows NT 3.0项目的软件经理娄帕雷罗里让他手下的经理们像他一样每天花一半的时间编写代码: 我在组内制定了许多规则,其中最重要的一条是每个人都得编程,谁也别想坐在那儿发号施令我发现管理者很容易失去目标,他们总
10、是无法认识到问题的本质并且反应迟缓。如果你始终不放弃编写代码,你就能对项目的进展情况了如指掌,及时发现并解决问题我大概每天花一半的时间编写代码并寻找项目的缺陷。 作为应用软件领域的经理,克里斯彼得斯也持同样的看法。在他任Word项目总经理时就认为: 在一些大公司内部,各部门经理把具体操作的层次向下移。你一旦当上开发部门经理,很快就会以自己身居高位、日理万机为由放弃编程;同样地,开发小组的组长会以自己重任在肩而不愿编程;至于程序员也会觉得自己十分繁忙、分身无术而不再多编写程序。虽然我是270名员工的领导,似乎不再需要做什么具体的工作了,但我还是为Word新版本编写了一个特性。 经理与技术队伍的建
11、设把技术水平分为四级,第一级最低,第四级最高。把管理(这里仅指软件业务的管理,不考虑行政事务)水平也分成四级。第零级最低,第三级最高。技术人员第一级技术水平的程序员主要考核编程基本功,要求质量合格(他们主要来自刚毕业的大学生)。第二级技术水平的程序员编程质量要高,做过几个软件项目,有数年的工作经验,并能指导新手的工作。第三级技术水平的程序员主要考核系统分析与系统设计的能力,要求其技术有足够的深度和广度。第四级技术水平的程序员是成功的软件产品的设计师,他不仅技术超群,并且能使技术转化为有价值的商品。 管理人员第零级管理水平的人没有管理职务,就是普通员工。第一级管理水平的人是开发小组的组长,可带领
12、几名程序员工作。第二级管理水平的人是项目经理。第三级管理水平的人决定某些产品是否要开发,以及如何去占领市场。每个程序员都有明确的技术级别和管理级别。技术级别与管理级别有一定的联系。一般地,第一级技术水平的人只能做普通员工;第二级技术水平的人可以当一名组长;第三级技术水平的人可以当一名项目经理;第四级技术水平的人可成为公司产品的决策者。向错误与失败学习为了不让自己“傻”,善良的人们应该用脑子去多学一些知识,努力让自己来把握命运,不要急着把一生托给某个人或某个组织。 软件人员在遭受项目失败并开始反省时,不要只是就事论事地仅把眼光锁在特定的项目上,吃一堑应该长好几个智才对。当我们在工作中碰到挫折时,先要冷静地分析问题(事出有因哪),找出问题的内因与外因。内因是最主要的,应该予以最先解决。提高综合素责一个技术出色的程序员可以自豪,但不可以目空一切。上天不可能赋于一个人太多的优点,以致于他没有表示谦虚的余地。 我们在求学时可能太功利太挑剔,导致知识结构非常单薄,只怕到了晚年也成不了大器。当程序员擅长技术时,还要时刻留意弥补自己并不擅长的非技术才能非技术才能。扬长补短才能提高综合素质。技术人员不该因为幼稚而显得单纯,应该是成熟了才变得单纯