《第一讲.软件危机与软件工程.ppt》由会员分享,可在线阅读,更多相关《第一讲.软件危机与软件工程.ppt(38页珍藏版)》请在课桌文档上搜索。
1、软件工程 Software Engineering第一讲,王玉善,课程简介,授课内容授课方式考核方式参考书目:软件工程:实践者的研究方法(第5版),Roger S.Pressman 机械工业出版社,议题,第1章 软件工程学概述软件软件危机软件工程,计算机软件已经成为一种驱动力。它是进行商业决策的引擎;它是现代科学研究和工程问题寻求解答的基础;它也是鉴别现代产品和服务的关键因素。它被嵌入在各种类型的系统中:交通、医疗、电信、军事、工业生产过程、娱乐、办公、难以穷举。软件在现代社会中确实是必不可少的。而且我们进入21世纪,软件将成为从基础教育到基因工程的所有领域新进展的驱动器。,什么是软件,软件是
2、计算机系统中与硬件相互依存的另一部分,它是包括程序,数据及其相关文档的完整集合程序是按事先设计的功能和性能要求执行的指令序列数据是使程序能正常操纵信息的数据结构文档是与程序开发,维护和使用有关的图文材料,软件的特点,软件是一种逻辑实体,而不是具体的物理实体。因而它具有抽象性软件的生产与硬件不同,在它的开发过程中没有明显的制造过程在软件的运行和使用期间,没有硬件那样的机械磨损,老化问题,软件的特点,软件的特点,软件的开发和运行常受到计算机系统的限制,对计算机系统有着不同程度的依赖性软件本身是复杂的实际问题的复杂性程序逻辑结构的复杂性 软件成本相当昂贵相当多的软件工作涉及到社会因素,软件的发展,I
3、n the early days:“Software”=“Place a sequence of instructions together to get the computer to do something useful”.User Computer,Computer became cheaper and more commonHigh level languages were invented,Programmer,User,Computer,Late 1950s:,Early 1960s:Very few large software projects were done by so
4、me experts.,Middle to late 1960s:Truly large software systems were attempted.,After 1968:Software Engineering,软件危机(Crisis),软件危机是指在计算机软件的开发和维护过程中所遇到的一系列严重问题:成本和进度软件产品的质量可维护性软件通常没有适当的文档资料。软件成本在计算机系统总成本中所占的比例逐年上升。软件开发生产率,产生软件危机的原因,项目没有被很好地理解;计划不周,最终导致进度拖延。,例 在20世纪60年代后期,一位热情的年青工程师受命为一个自动化制造应用项目“编写”计算机程
5、序。选择他的理由非常简单,因为在整个技术小组中他是唯一参加过计算机编程培训的人。这位工程师对汇编语言的IN和OUT指令以及Fortran语言有所了解,但是却根本不懂软件工程,更不要说项目进度安排和跟踪了。他的老板给了他一大堆相关的手册,以及需要做些什么的口头描述。年轻人被告知该项目必须在两个月之内完成。他阅读了这些手册,想好了解决方法,就开始编写代码。两周后,老板将他叫到办公室询问项目进展情况。,问题出在哪里?,“非常好”工程师以年轻人的热情回答道,“这个项目远比我想像的简单。我差不多已经完成了75%的任务。老板笑了,说道:“真是太棒了”然后他嘱咐年轻人继续努力工作,准备好一周后再汇报一次工作
6、进度。一周后老板将年轻人叫到办公室,问他说:“现在进度如何?”“一切顺利”年轻人回答说,“但是我遇到了一些小麻烦。我会排除这些困难,很快就可以回到正轨上来。”“你觉得在最后期限之前能否完成?”老板问道。“没有问题”工程师答道。“我差不多已经完成了90%”如果你在软件领域中工作过几年,你一定可以将这个故事写完。毫不奇怪,年轻工程师在整个项目工期内始终停留在90%的进度上,(在别人的帮助下)直到交付期限之后一个月才做完,没有充分的文档资料(documentation),Managers evaluate,track progress,.Programmers communicate to each
7、 otherMaintainers,人与人的交流比写程序困难得多。,.软件缺乏”可见性”,软件可靠性缺少度量的标准,质量无法保证。如何保证软件产品的质量,是非常复杂困难的问题。特别对于规模庞大的软件.,软件难以维护(maintainability)不易升级(evolvability),负责软件的管理者像大多数其他行业的管理者一样,都有巨大的压力,要维持预算、保持进度,还要提高质量。就像溺水者抓住一根救命稻草,软件管理者常常抓住软件神话不放,这些神话能够缓解其压力的话(哪怕是暂时的)。神话1:我们已经有了关于建造软件的标准和规程的书籍,难道它们不能给人们提供所有它们需要知道的信息吗?现实:不错,
8、关于标准的书籍已经存在,但真正使用它们了吗?软件实践者知道它们的存在吗?它们是否反映了现代软件工程实践?它们完备吗?它们对在保持关注质量的情况下改善交付时间是简便有效的吗?很多情况下,这些问题的答案是否定的。,软件神话管理神话,神话2:如果我们已经落后于计划,可以增加更多的程序员赶上进度。现实:给一个已经延迟的软件项目增加人手只会使其更加延迟。神话3:如果我决定向第三方外包软件项目,我可以放松并让承包公司去建造它。现实:如果一个机构不了解如何在内部管理和控制软件项目,当它外包软件项目时将总是处于挣扎的境地。,软件神话客户神话,在许多情况下,客户相信关于软件的神话,因为负责软件开发的管理者和开发
9、人员很少去纠正客户的错误理解。导致客户过高的期望值,并最终引起对开发人员的不满意。神话1:有了对目标的一般性描述就足以开始写程序了,我们可以以后再补充细节。现实:糟糕的系统定义是软件项目失败的主要原因。关于信息领域、功能、行为、性能、接口、设计约束及确认标准的形式化的、详细的描述是必要的。这些内容只有通过客户和开发者之间彻底地交流后才能确定。神话2:软件需求确实是经常变更的,但这些变更能够很容易地满足,因为软件是灵活的。现实:软件需求确实是变更的,但这些变更产生的影响会随着其被引入的时间而不同的。,软件神话实践者神话,在软件的早期阶段,程序设计被看成是一门艺术。神话1:一旦我们写出了程序并使其
10、正常运行,我们的工作就结束了。现实:越早开始写代码,就要花越长的时间才能完成它。研究表明在一鼐软件上所投入的60%到80%的工作量是花费在软件第一次交付客户之后。神话2:在程序真正运行之前,没有办法评估其质量。现实:从项目一开始就可以应用的最有效的软件质量保证机制之一是正式的技术评审。神话3:一个成功项目唯一应该提交的就是运行程序。现实:运行程序仅是软件配置的一部分,软件配置包括很多东西。神话4:软件工程将使我们创建大量的、不必要的文档,并总是延缓我们的进度。现实:软件工程并不是为创建文档,而了创建质量。,消除软件危机的途径,了解产生软件危机的原因,澄清错误认识,建立起关于软件开发和维护的正确
11、概念,还仅仅是解决软件危机的开始,全面解决软件危机需要一系列综合措施。软件工程 Software Engineering,人们对软件生产提出了许多疑问:为什么需要那么长的时间才能完成软件开发。为什么开发成本如此高为什么我们不能在把软件提交客户之前就发现所有的错误为什么在软件开发过程总是难以度量其进展造成以上问题的原因主要是:软件行业发展的速度太快,对经验总结不足人们对自身处理能力的认识不清解决的方法:多实践,积累成功和失败的案例总结、思考、提取经验建立软件的模型和模式,软件工程,软件工程是指导计算机软件开发和维护的工程学科。采用工程的概念、原理、技术和方法来开发与维护软件,把经过时间考验而证明
12、正确的管理技术和当前能够得到的最好的技术方法结合起来,以经济地开发出高质量的软件并有效地维护它,软件工程,Fritz Bauer:建立并使用完善的工程化原则,以较经济的手段获得能在实际机器上有效运行的可靠软件的一系列方法IEEE:软件工程是开发、运行、维护和修复软件的系统方法,软件工程的本质特性,软件工程关注于大型程序的构造软件工程的中心课题是控制复杂性软件经常变化开发软件的效率非常重要和谐地工作是开发软件的关键软件必须有效的支持它的用户在软件工程领域中是由一种文化背景的人替具有另一种文化背景的人创造产品,软件工程的基本原理,分阶段的生命周期计划严格管理坚持进行阶段评审实行严格的产品控制基准配
13、置管理采用现代程序设计技术结果应能清楚地审查开发小组的人员应该少而精 1+12承认不断改进软件工程实践的必要性,软件工程三要素:方法、工具和过程软件工程方法为软件开发提供了“如何做”的技术 传统软件工程方法学 与面向对象方法学软件工具为软件工程方法提供了自动的或半自动的软件支撑环境软件工程过程定义了:方法使用的顺序 要求交付的文档资料 为保证质量和适应变化所需要的管理 软件开发各个阶段完成的里程碑,软件工程三要素,A Layered Technology,Object-oriented method,Rational Rose,谁需要软件工程程序员项目组成员项目负责人为什么需要软件工程项目延迟
14、用户需求维护困难项目超支,我国软件业的现状,我国软件业的规模目前,我国从事软件开发、研制、销售、维护和服务的软件企业有2000家左右,加上兼营的企业,总数大约有10000多家,其中具有自主软件研发能力的软件企业约5700家,从事软件销售、维护和服务的企业5000多家。在这里面,营业规模超过一亿元的软件企业达到100家以上,超过5亿元的达到18家,超过10亿元的达到12家。,我国软件业的现状,2001年,世界软件产品市场销售额超过1865亿美元,我国当年的销售额为285亿元人民币,只占世界市场不到2的份额。国内软件市场有限的份额中大部分为国外软件厂商所瓜分,国内所开发的软件产品仅占小部分。,我国
15、软件业的现状,2001年我国软件销售总额963亿美元,软件企业约5000家,从业人员29万。2001年印度软件销售总额1023亿美元,软件企业约6000家,从业人员40万。2001年我国软件的出口额仅为7.2亿美元,2000年与1999年分别为4亿美元及2.5亿美元。印度在软件出口方面,则一直保持高速的增长。1990年印度软件出口只有5000万美元,1999年就达到了39亿美元,2000年达到了62亿美元,而2001年印度软件出口额为778亿美元,已经占到了印度全部出口总额的10.5。,我国软件业的现状,我国软件业发展不理想的原因除了政策和盗版外,最大的问题是我国绝大多数软件企业对其软件开发工
16、作过程缺乏有效的管理和控制。多数软件企业开发和生产基本上处于“技术少标准、开发缺规范、生产无检验、质量无保证”的状态。在这方面印度软件业的发展能够给我们以启发。,它山之石,印度软件业能够这么迅速地发展起来,除了有政府支持、英语程度、人才储备等原因外,最重要的是从标准化与产品流程入手,重视管理。印度的软件开发管理的特点是流程重于项目,流程管理人员独立于研发部门,专门检查研发部门的开发流程是不是按照既定流程走,如果流程不对,项目肯定就此停止。另外,所谓的项目经理一般都是从编码人员升上来的,至少有四年以上的经验,而公司所有的东西(包括草稿)都有文档,其详细文档要求达到只有这个文档就可以编码的程度。,于是,印度软件公司开发出来的软件整个体系架构非常清晰,而且相当稳定。由于印度企业不是靠一两个软件英雄搞研发,而是靠一大批软件技术人员的分工协作,所以,他们必须注重标准化,注重开发的流程管理,以与国际接口。,目前印度软件公司中有170家公司获得ISO9000质量标准认证,是世界上获得质量认证软件企业最多的国家。在得到卡内基梅隆大学软件工程学会最高级别的全球23家计算机软件公司中,有15家是印度公司。,