《CH1软件工程课件.ppt》由会员分享,可在线阅读,更多相关《CH1软件工程课件.ppt(87页珍藏版)》请在三一办公上搜索。
1、软件工程学概述,计算机系 任洪敏HmR2009.9.,2,软 件 工 程,软件工程导论(第五版)张海藩 清华大学出版社(2007),教 材,3,软 件 工 程,实用软件工程(第四版)郑人杰 殷人昆 陶永雷 清华大学出版社(1996),软件工程-实践者的研究方法(英文版 第八版)Roger S.Pressman 机械工业出版社,参考书目,4,软 件 工 程,课程评分方法平时 30%+期末考试 70%=总评 100%作业、课堂表现 课程设计:单独计算成绩,5,软 件 工 程,Software Engineering Laboratory ProjectHome Design and Improve
2、ment System The Home Design and Improvement System,HDIS,is intended to integrate and unify all activities related to construction and improvements of homes.Constructing a new home or renovating an existing home can require a high number of interactions with numerous individuals,companies,and stores.
3、The purpose of HDIS is to utilize computing technology in a positive way to enhance,facilitate,and promote this activity.,6,软 件 工 程,计划:工作内容 Contractor Management Home Owner Management Architectural Management Interior Designer Landscape Management Schedule&Supplier Management Funding Management Land
4、 Office Management,7,图书管理系统,图书管理系统针对的用户是中型图书室,藏书的种类包括中、英、俄、德、日文书籍和期刊,读者的数量和来源仅限于本单位职工及通过馆际互借认可的读者。相应的需求有:能够存储一定数量的图书信息,并方便有效的进行相应的书籍数据操作和管理,这主要包括:,8,图书信息的录入、删除及修改。图书信息的多关键字检索查询。图书的出借、返还和资料统计。图书的远程预约和续借。馆际互借(通过电子邮件或现场录入)能够对一定数量的读者进行相应的信息存储与管理,这其中包括:,9,读者信息的登记、删除及修改。读者资料的统计与查询。能够对需要的统计结果提供打印输出。能够提供一定的
5、安全机制,提供数据信息授权访问,防止随意删改,同时提供信息备份的服务。,鼓励项目,移动互联网项目李开复:创新工作室,11,应提交的文档,软件需求规格说明书软件设计规格说明书系统测试报告书演示程序,12,软 件 工 程,要求:每组不超过5人,建议3-4人;组长负责:组织、分工、安排进度等 组长奖罚:带领全组顺利完成任务,总评+5分,否则-5分。小组成绩不过,组长负责 注意:标明每个人所做的工作与贡献 每人提问检查 程序代码不是第一位,13,软 件 工 程,目的 体验软件工程各阶段的主要工作,特别注意吸取教训;学会与他人合作,培养团队精神,单干户将得不到成绩。,现在开始:构想、分组行 动 起 来!
6、,第一次进度要求:1周分组,班长发到我处,指明组长,14,Late 1950s:,1.软件危机(Software Crisis),In 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,15,Ear
7、ly 1960s:Very few large software projects were done by some experts.,Hacker,Middle to late 1960s:Truly large software systems were attempted.例:美国IBM公司在1963年至1966年开发的IBM360机的操作系统。这一项目花了5000人一年的工作量,最多时有1000人投入开发工作,写出了近100万行源程序。.据统计,这个操作系统每次发行的新版本都是从前一版本中找出1000个程序错误而修正的结果。.,Cracker,16,这个项目的负责人F.D.Brook
8、s事后总结了他在组织开发过程中的沉痛教训时说:“.正像一只逃亡的野兽落到泥潭中做垂死的挣扎,越是挣扎,陷得越深,最后无法逃脱灭顶的灾难。.程序设计工作正像这样一个泥潭,.一批批程序员被迫在泥潭中拼命挣扎,.谁也没有料到问题竟会陷入这样的困境.”。IBM360操作系统的历史教训成为软件开发项目的典型事例为人们所记取。,Software Crisis!,17,一些数据:大约70的软件开发项目超出了估算的时间,大型项目平均超出计划交付时间20到50,90以上的软件项目开发费用超出预算,并且项目越大,超出项目计划的程度越高美国政府审计局:只有不到2的合同定购软件在发布时具有可用性98以上的项目都失败了
9、,yet,Success Hasnt Come Easily,31%,53%,16%,Successfully,Challenged,Canceled,19,软件危机,相关术语“两难境地(Crunch Mode)”:处于两难境地的项目面临着无法达到最初目标的威胁(费用、进度表、功能性等等),而项目团队在努力想要跨越该困境。“我们正处于两难境地,在半夜之前是不会回家的”“死亡行军(Death March)”:用来描述其进度表几乎不可能完成的项目。“这是一个死亡行军项目,我希望自己不要参与进去”,20,“Computer software has become a driving force.It
10、 is the engine that drives business decision making.It servers as the basis for modern scientific investigation and engineering problem solving.It is a key factor that differentiates modern products and services.It is embedded in systems of all kinds:transportation,medical,telecommunications,militar
11、y,industrial processes,entertainment,office products,the list is almost endless.Software is virtually inescapable in a modern world.And as we move into the twenty first century,it will become the driver for new advances in everything from elementary education to genetic engineering.”,21,更准确的说法:慢性痛苦(
12、chronic affliction)Suggested by Prof.Daniel Tiechrow,University of Michigan尽管忍受痛苦,但是软件依然在我们这个世界起着越来越重要的作用,但是如果能够医治痛苦,那么软件业将发展得更加健康。如何医治这种软件业的慢性痛苦?,22,1.软件危机,项目没有被很好地理解;计划不周,最终导致进度拖延。,例1.In the late 1960s,a bright-eyed young engineer*was chosen to“write”a computer program for an automated manufacturi
13、ng application.The reason for his selection was simple.He was the only person in his technical group who had attended a computer programming seminar.He knew the ins and outs of assembler language and Fortran,but nothing about software engineering and even less about project scheduling and tracking.,
14、问题出在哪里?,23,His boss gave him the appropriate manuals and a verbal description of what had to be done.He was informed that the project must be completed in two months.He read the manuals,considered his approach,and began writing code.After two weeks,the boss called him into his office and asked how t
15、hings were going.“Really great,”said the young engineer with youthful enthusiasm,“This was much simpler than I thought.Im probably close to 75 percent finished.”The boss smiled.“Thats really terrific,”he said.He then told the young engineer to keep up the good work and plan to meet again in a weeks
16、time.,24,A week later the boss called the engineer into his office and asked,“Where are we?”“Everythings going well,”said the youngster,“but Ive run into a few small snags.Ill get them ironed out and be back on track soon.”“How does the deadline look?”the boss asked.“No problem,”said the engineer.“I
17、m close to 90 percent complete.”If youve been working in the software world for more than a few years,you can finish the story.Itll come as no surprise that the young engineer stayed 90 percent complete for the entire project duration and only finished(with the help of others)one month late.,25,1.软件
18、危机,例2:In the early 1980s,the United States Internal Revenue Service(IRS)hired Sperry Corporation to build an automated federal income tax form processing system.According to the Washington Post,the“system has proved inadequate to the workload,cost nearly twice what was expected and must be replaced
19、soon”(Sawyer 1985).In 1985,an extra$90 million was needed to enhance the original$103 million worth of Sperry equipment.In addition,because the problem prevented the IRS from returning refunds to taxpayers by the deadline,the IRS was forced to pay$40.2 million in interest and$22.3 million in overtim
20、e wages for its employees who were trying to catch up.,26,1.软件危机,In 1996,the situation had not improved.The Los Angeles Times reported on March 29 that there was still no master plan for the modernization of IRS computers,only a six-thousand-page technical document.Congressman Jim Lightfoot called t
21、he project“a$4-billion fiasco that is floundering because of inadequate planning”(Vartabedian 1996).,Myth:If we get behind schedule,we can add more programmers and catch up.Reality:Software development is not a mechanistic process like manufacturing.In the words of Brooks,“adding people to a late so
22、ftware project makes it later.”,27,1.软件危机,没有充分的文档资料(documentation)Myth:The only deliverable for a successful project is the working program.Reality:A working program is only one part of a software configuration that includes programs,documents,and data.Documentation forms the foundation for successf
23、ul development and,more important,provides guidance for the software maintenance task.,VITAL!,人与人的交流比写程序困难得多。,Managers evaluate,track progress,.Programmers communicate to each otherMaintainers,28,1.软件危机,软件可靠性(reliability)缺少度量的标准,质量无法保证。如何保证软件产品的质量,是非常复杂困难的问题。特别对于规模庞大的软件,如:.,The software supporting t
24、he American space shuttle consists of 3 million lines of code,including computers on the ground controlling the launch and the flight;there were one hundred thousand lines of code in the shuttle itself in 1985.President Reagans proposed Strategic Defense Initiative(SDI)is estimated to require 10 to
25、100 million lines of code.Many computer scientists and software engineers continue to believe there is no way to write and test the software to guarantee adequate reliability.,29,1963年美国飞往火星的火箭爆炸,造成1000万美元的损失。原因是FORTRAN程序:DO 5 I=1,3 误写为:DO 5 I=1.3,1967年苏联“联盟一号”载人宇宙飞船在返航时,由于软件忽略一个小数点,在进入大气层时因打不开降落伞而烧
26、毁。,30,1.软件危机,软件难以维护(maintainability)不易升级evolvability),Myth:Once we write the program and get it to work,our job is done.Reality:Someone once said that“the sooner you begin writing code,the longer itll take you to get done.”Industry data indicate that between 50 and 70 percent of all effort expended
27、on a program will be expended after it is delivered to the customer for the first time.,31,1.软件危机,Better management Different team organizations Better languages&tools Uniform coding conventions 必须意识到:“软件”编程,它有自己的生命周期(life cycle)。大型软件系统的开发与其它工程项目如建造桥梁、制造飞机、轮船等的开发是同理的。,“软件工程”(Software Engineering)NAT
28、O Conference,Garmisch,Germany,1968.,解决问题的想法:,32,2 软件的概念,软件的概念:软件是计算机系统中与硬件相互依存的另一部分,它 是包括程序,数据及其相关文档的完整集合。其中,程序是按事先设计的功能和性能要求执行的指令序列。数据是使程序能正常操作所需的数据结构;文档是与程序开发,维护和使用有关的图文材料。,33,2.1 软件特点,软件的特点:软件的生产与硬件不同,它没有明显的制造过程。硬件在制造过程中进行质量控制,软件在开发过程中进行质量控制。软件是一种逻辑实体,不是具体的物理实体,具有抽象性.软件的运行和使用期间,没有硬件那样的机械磨损和老化问题,但
29、存在软件退化问题。,34,2.1 软件的特点(续),软件的开发和运行常常受到计算机系统的限制,不同程度依赖计算机系统。软件移植的问题。软件的开发至今尚未完全摆脱手工艺的开发方式。软件本身的复杂性。软件的复杂性可能来自它所反映的实际问题的复杂性,也可能来自程序逻辑结构的复杂性。软件成本相当昂贵。软件的研制工作需要投入大量的、复杂的、高强度的脑力劳动,它的成本是比较高的。相当多的软件工作涉及到社会因素。许多软件的开发和运行涉及机构、体制及管理方式等问题,甚至涉及到人的观念和人们的心理。它直接影响到项目的成败,35,2.2 软件的分类,软件的分类:按照功能划分:系统软件、支撑软件、应用软件按照规模划
30、分:微型、小型、中型、大型、甚大型、极大型按照工作方式划分:实时处理软件、分时软件、交互式软件、批处理软件按照服务对象划分:项目软件、产品软件按照使用频度划分:使用一次、一年一次、一天一次、频繁使用按照失效影响划分:高可靠性软件、一般可靠性软件,36,计算机软件经历了三个发展阶段:程序设计阶段,约为50至60年代程序系统阶段,约为60至70年代软件工程阶段,约为70年代以后计算机软件发展三个时期及其特点:参见下表。表注:软件语言包括需求定义语言、软件功能语言、软件设计语言、程序设计语言。,37,软件发展阶段(续),特点 时期,时期,特点,38,软件发展的根本变化,数十年来根本的变化:人们对软件
31、有了新的认识。50年代到60年代时,程序设计曾经被看做是一种任人发挥创造才能的技术领域。程序的写法可以不受任何约束。随着计算机的广泛使用,人们要求这些程序容易看懂、容易使用,并且容易修改和扩充。于是,程序便从个人按自己意图创造的“艺术品”转变为能被广大用户接受的工程化产品。软件的需求是软件发展的动力。早期的程序开发者只是为了满足自己的需要,这种自给自足的生产方式仍然是其低级阶段的表现。进入软件工程阶段以后,软件开发的成果具有社会属性,它要在市场中流通以满足广大用户的需要,软件开发者和用户的分工和责任也是十分清楚的软件工作的范围从只考虑程序的编写扩展到涉及整个软件生存周期,包括制定计划、需求分析
32、、软件设计、软件实现、软件测试和软件维护。,39,3 软件工程定义,Boehm:运用现代科学技术知识来设计并构造计算机程序及为开发、运行和维护这些程序所必需的相关文件资料IEEE:软件工程是开发、运行、维护和修复软件的系统方法Fritz Bauer:建立并使用完善的工程化原则,以较经济的手段获得能在实际机器上有效运行的可靠软件的一系列方法工程:系统、规范、可度量,40,软件工程的定义,软件工程是一类求解软件的工程,它应用计算机科学,数学以及管理科学等原理,借鉴传统工程的原则、方法,创建软件以达到提高质量,降低成本的目的。其中计算机科学、数学用于构造模型与算法,工程科学用于制定规范、设计范型、评
33、估成本以及确定权衡,管理科学用于计划、资源、质量、成本等管理。软件工程是一门指导计算机软件开发和维护的工程学科。,41,软件工程的产生和发展,软件工程的发展已经历了四个重要阶段:,4、第四代软件工程 构件工程,3、第三代软件工程 过程工程,2、第二代软件工程 对象工程,1、第一代软件工程 传统的软件工程,42,1.1.1软件程的产生和发展,软件工程的发展已经历了四个重要阶段:1、第一代软件工程 传统的软件工程2、第二代软件工程 对象工程3、第三代软件工程 过程工程4、第四代软件工程 构件工程,60年代末到70年代为了克服“软件危机”(Software crisis)提出“软件工程”的名词,将软
34、件开发纳入工程化的轨道,基本形成软件工程的概念、框架、技术和方法。称为传统的软件工程。,43,1.1.1软件工程的产生和发展,1.1.1 软件工程的产生和发展,软件工程的发展已经历了四个重要阶段:1、第一代软件工程 传统的软件工程2、第二代软件工程 对象工程3、第三代软件工程 过程工程4、第四代软件工程 构件工程,80年代中到90年代,面向对象的方法与技术得到发展,研究的重点转移到面向对象的分析与设计,演化为一种完整的软件开发方法和系统的技术体系,称为对象工程。,44,1.1.1软件工程的产生和发展,1.1.1 软件工程的产生和发展,软件工程的发展已经历了四个重要阶段:1、第一代软件工程 传统
35、的软件工程2、第二代软件工程 对象工程3、第三代软件工程 过程工程4、第四代软件工程 构件工程,80年代中开始,人们在软件开发的实践过程中认识到:提高软件生产率,保证软件质量的关键是“软件过程”,是软件开发和维护中的管理和支持能力,逐步形成软件过程工程。,45,1.1.1软件工程的产生和发展,1.1.1 软件工程的产生和发展,软件工程的发展已经历了四个重要阶段:1、第一代软件工程 传统的软件工程2、第二代软件工程 对象工程3、第三代软件工程 过程工程4、第四代软件工程 构件工程,90起年代,基于构件(Component)的开发方法取得重要进展,软件系统的开发可通过使用现成的可复用构件组装完成,
36、而无需从头开始构造,以此达到提高效率和质量,降低成本的目的。称为构件工程。,46,软件工程本质特性,软件工程关注大型复杂程序构造软件工程的中心课题是控制复杂性软件经常变化:keeping software soft软件开发的效率非常重要和谐合作是软件开发的关键软件必须有效地支持它的用户软件工程相关的知识和文化背景的分离,47,软件工程管理的基本原理,用分阶段的生命周期计划严格管理坚持进行阶段评审实行严格的产品控制基准配置管理采用现代程序设计技术结果应能清楚地审查开发小组的人员应该少而精承认不断改进软件工程实践的必要性,48,软件工程技术的基本原理,抽象:抽取事物最基本的特性和行为,忽略非基本的
37、细节。采用分层次抽象,自顶向下、逐层细化的办法控制软件开发过程的复杂性。信息隐蔽:将模块设计成“黑箱”,实现的细节隐藏在模块内部,不让模块的使用者直接访问。这就是信息封装,使用与实现分离的原则。使用者只能通过模块接口访问模块中封装的数据。模块化:模块是程序中逻辑上相对独立的成分,是独立的编程单位,应有良好的接口定义。如C语言程序中的函数过程,C+语言程序中的类。模块化有助于信息隐蔽和抽象,有助于表示复杂的系统。局部化:要求在一个物理模块内集中逻辑上相互关联的计算机资源,保证模块之间具有松散的耦合,模块内部具有较强的内聚。这有助于控制解的复杂性。,49,软件工程技术的基本原理(续),确定性:软件
38、开发过程中所有概念的表达应是确定的、无歧义性的、规范的。这有助于人们之间在交流时不会产生误解、遗漏,保证整个开发工作协调一致。一致性:整个软件系统(包括程序、文档和数据)的各个模块应使用一致的概念、符号和术语。程序内部接口应保持一致。软件和硬件、操作系统的接口应保持一致。系统规格说明与系统行为应保持一致。用于形式化规格说明的公理系统应保持一致。完备性:软件系统不丢失任何重要成分,可以完全实现系统所要求功能的程度。为了保证系统的完备性,在软件开发和运行过程中需要严格的技术评审。可验证性:开发大型的软件系统需要对系统自顶向下、逐层分解。系统分解应遵循系统易于检查、测试、评审的原则,以确保系统的正确
39、性。,50,软件工程研究的内容,软件开发一整套技术方法的集合软件工程方法学包括三个要素:方法、工具和过程。软件工程方法为软件开发提供了“如何做”的技术。它包括了多方面的任务,如项目计划与估算、软件系统需求分析、数据结构、系统总体结构的设计、算法过程的设计、编码、测试以及维护等。,tool,method,procedure,Quality focus,Software engineering layers,52,软件工具为软件工程方法提供了自动的或半自动的软件支撑环境。计算机辅助软件工程(CASE)将各种软件工具、开发机器和一个存放开发过程信息的工程数据库组合起来形成一个软件工程环境。软件工程的
40、过程则是将软件工程的方法和工具综合起来以达到合理、及时地进行计算机软件开发的目的。过程定义了方法使用的顺序、要求交付的文档资料、为保证质量和协调变化所需要的管理、及软件开发各个阶段完成的里程碑。,53,生命开发方法学,结构化方法:结构化分析、结构化设计、结构化编码过程:划分阶段、依此进行、技术和管理复审、文档 驱动工具:大量辅助工具简单、有条不紊、广泛应用不适合:规模庞大、需求模糊和变化、维护困难,54,面向对象方法学,面向对象技术:面向对象分析、面向对象设计、面向对象编码(OO的思想)过程:主动地多次反复迭代的演化过程。工具:VS、ROSE易于理解、易于复用、易于维护,55,计算机系统工程,
41、基于计算机的系统和其元素,56,计算机系统工程,软件:计算机程序、数据结构、相关文档硬件:计算设备(如CPU,存储器)和外部机电设备(如传感器、马达等)人:硬件和软件的用户数据库:一个大型的有组织的信息集合文档:手册、表格和其它用以描述系统使用和操作的信息过程:定义每一种系统元素的特定使用步骤,或系统驻留的过程性环境,57,Software and systems engineering,The proportion of software in systems is increasing.Software-driven general purpose electronics is repla
42、cing special-purpose systemsProblems of systems engineering are similar to problems of software engineeringSoftware is(unfortunately)seen as a problem in systems engineering.Many large system projects have been delayed because of software problems,58,4 软件生命周期,正如同任何事物一样,软件也有一个孕育、诞生、成长、成熟、衰亡的生存过程。我们称其
43、为计算机软件的生存周期。生命周期的三个时期:软件定义、软件开发、软件维护,59,软件生命周期(续),问题定义:“要解决的问题是什么”简要写出问题性质、工程目标、工程规模的书面报告可行性研究:“该问题有可行的解决办法吗?”高层、压缩和简化的系统分析和设计过程研究问题的范围、值得吗、行吗需求分析:“目标系统必须做什么”系统的逻辑模型需求规格说明书,60,软件生命周期(续),总体设计:“概括地说,系统怎样实现?”设计和分析多种方案,推荐方案和其计划系统的体系结构详细设计:“系统具体怎样实现?”程序的详细规格说明,编码的蓝图确定模块的算法和数据结构,61,软件生命周期(续),编码和单元测试:编码程序模
44、块测试该模块综合测试集成测试验收测试系统分析,62,软件生命周期(续),软件维护改正性维护完善性维护适应性维护预防性维护没有一个四海皆准的统一的过程,63,问题定义,编 码,需求分析,设 计,可行性研究,运行与维护,测 试,开发时期,运行时期,计划时期,(目标与范围说明书),(可行性论证论告),(维护报告),(测试报告),(程序),(设计文档),(需求说明书),瀑布模型,图1.3 瀑布模型,1.3 软件生存期,64,软件过程生命周期模型,瀑布模型,65,图1-3 软件生存周期工作量分配,66,图1-4 开发期工作量分配,67,软件过程生命周期模型,快速原形模型,快速原形,规格说明,设计实现,系
45、统维护,68,软件过程生命周期模型,增量模型,69,软件过程生命周期模型,增量模型,构件n,构件2,构件1,70,增量模型(incremental model),增量模型是一种非整体开发的模型。该模型具有较大的灵活性,适合于软件需求不明确、设计方案有一定风险的软件项目。增量模型和瀑布模型之间的本质区别是:瀑布模型属于整体开发模型,它规定在开始下一个阶段的工作之前,必须完成前一阶段的所有细节。而增量模型属于非整体开发模型,它推迟某些阶段或所有阶段中的细节,从而较早地产生工作软件。,71,螺旋模型 对于大型软件,只开发一个原型往往达不到要求。螺旋模型将瀑布模型和增量模型结合起来,并加入了风险分析。
46、,螺旋模型将开发过程分为几个螺旋周期,每个螺旋周期可分为4个工作步骤:1.确定目标、方案和限制条件;2.评估方案、标识风险和解决风险;3.开发确认产品;4.计划下一周期工作。,螺旋模型,72,软件过程生命周期模型,喷泉模型,重复,演进,各阶段间无明显界限,73,统一过程概述,Rational公司的RUP发展而来的一套软件工程方法,是目前最有效的软件开发过程模型。基于构件的用UML制定软件系统所有蓝图突出特点:用例驱动、架构优先、迭代和增量过程四个阶段:初始、细化、构造、移交强调开发过程五个核心工作流:需求捕获、分析、设计、实现、测试,74,RUP工作流与阶段,75,在RUP中,项目生命周期被划
47、分为四个阶段:(1)初始阶段(Inception)(2)细化阶段(Elaboration)(3)构造阶段(Construction)(4)交付阶段(Transition)每个阶段开始时都有特定的目标,结束时有里程碑。在每个阶段中存在一个或多个迭代。在每个迭代中,可以有多个工作流。,2 统一过程四个工作阶段,76,智能模型,77,Software Myths(1),Management Myths(管理神话)Managers with software responsibility,like managers in most disciplines,are often under pressur
48、e to maintain budgets,keep schedules from slipping(松弛),and improve quality.Like a drowning person who grasps at a straw(抓住稻草的要淹死的人),a software manager often grasps at belief in a software myth,if that belief will lessen the pressure(even temporarily).,78,Management Myths,Myth:We already have a book
49、thats full of standards and procedures for building software,wont that provide my people with everything they need to know?Reality:The book of standards may very well exist,but is it used?Are software practitioners aware of its existence?Does it reflect modern software engineering practice?Is it com
50、plete?Is it streamlined to improve time to delivery while still maintaining a focus on quality?In many cases,the answer to all of these questions is“no”.,79,Management Myths,Myth:My people have state-of-the-art software development tools,after all,we buy them the newest computers.Reality:It takes mu