1、第一章 绪论,武汉大学 计算机学院 软件工程课程组,软件工程Software Engineering,计算机系统,计算机系统的实质是模拟或延伸人对主客观世界问题求解的脑力劳动工具系统。 如何模拟与延伸主客观世界,其表示方法与工具(软件)是关键。,裸机,系统,支持软件,表示(建模),需求解问题,应用软件,软件工程,计算机系统,硬件 摩尔法则(戈登-摩尔) 1929年出生,英特尔公司的创始人之一和名誉董事会主席,摩尔早在1965年就预言,半导体芯片上的晶体管数量,即芯片的总体性能将每两年增加一倍。随后摩尔又预言上述晶体管数量将每20个月增加一倍,这就是著名的“摩尔法则”。在此后的40年里,摩尔法则
2、一直有效,而且成为推动计算机芯片业发展的一大动力. 摩尔法则至少未来十年内依然有效 。有通用的结构、生产完全自动化。问题:计算机工程技术人员必须集中精力研究克服能量外泄和减少散热的 课题。 软件有计算机运行就有软件,软件是计算机上可执行的任何程序及相关文档。硬件是舞台,软件是演员,演绎着精彩的计算机世界,而生产演员的从业人员却很无奈。找不到通用的结构,自动化程度低。问题:难以按计划完成,成本难以控制在预算的范围之内,质量差,达不到用户要求 难以维护。,软件工程-软件行业的出路?,1.问题的引出先看几个图例,简陋的小屋不用设计,新农村别墅造型图,别墅的平面图、切面图,图书馆信息管理系统需求表,图
3、书馆信息管理系统功能设计,图书馆信息管理系统物理模型设计,图书馆信息管理系统逻辑模型设计(部分),图书馆信息管理系统数据设计,过程设计,图书馆信息管理系统界面设计,软件生产过程,需求解的问题陈述,语义等价的分阶段符号系统,机器可执行的代码,建模,建模方法与规范,验证与测试,软件工程,计划与管理,软件工程40年,科学家们对软件工程的关注域总是“与时俱进”网络时代迫使软件工程寻找新的解决办法,专家使用,早期流行,公众认识,全民普及,大型机-终端,客户-服务器,互联网,网络计算,40年软件工程的尴尬,一直以自我为中心软件开发从编码开始程序规模越来越大很少考虑本系统之外的事情程序正确性证明在软件工程中
4、没有彻底解决软件工程师的知识和智能始终无法从编程过程中剥离出来任何编程技巧都没有能够带来程序生产率成数量级的提高软件全自动化生产没有能够实现,课程性质,计算机科学与技术专业 必修课 信息安全专业 选修课 54学时,3学分 教学目的从工程化角度培养学生从事大型软件系统的开发方法、软件测试与管理的能力。 教学方式讲授与学生选择实际软件项目按工程化方法实践相结合,教材,软件工程原理及应用陈世鸿等武汉大学出版社A Concise Introduction to Software EngineeringPankaj Jalote软件工程简明教程原著:ankaj Jalote译:罗飞,邵凌霜审校:陈世鸿,
5、参考书,软件工程导论张海藩 清华大学出版社,SOFTWARE ENGINEERINGA Practitioners ApproachRoger S. Pressman 清华大学出版社,评分方式,期末考试 闭卷 70% 课程实习 + 课堂提问 30%课程实习:每个小组由46人组成:组 长: 负责制定计划,协调各项工作系统分析员:负责系统分析,编写系统分析说明书系统设计员:负责系统设计,编写概要和详细设计说明书编 码 员: 负责编码,编写主程序软件测试员:负责测试,编写测试报告用 户 代表: 负责用户需求,编写用户手册,培训用户实习报告要求及格式开发标准:GB8567-88,课程内容,第1章 绪论
6、第2章 软件质量的评价第3章 软件计划第4章 软件需求分析第5章 传统软件设计方法第6章 什么是面向对象第7章 面向对象的开发技术第8章 面向对象的程序设计第9章 面向对象的软件工程第10章 软件编码第11章 软件测试第12章 软件维护第13章 软件管理,第1章绪论,什么是软件?有何特点? 何谓软件危机?如何解决? 软件工程是一门什么学科? 什么是软件的生存期? 有哪些软件开发模型?,思考?,什么是软件? 在软件开发过程中遇到哪些问题? 如何解决这些问题?,一、软件及其发展,软件的组成软件的特点软件的发展,1. 软件的组成,software = programsoftware developi
7、ng = programming/coding,1983年IEEE为软件下的定义是:计算机程序、方法、规则和相关的文档资料以及在计算机上运行所必需的数据。,20世纪50年代:software = program20世纪60年代:software = program + documents20世纪70年代:software = program + documents + data20世纪80年代:software = program + documents + data+environment,程序 用程序设计语言描述的,适合于计算机处理的语句序列,文档,分类 开发文档 维护文档 用户文档 管理
8、文档,作用 记录,软件开发过程的标准描述,解决不可视性 通信和交流 管理和维护用户服务,软件(Software),计算机系统中与硬件相互依存的另一部分,它是包括程序,数据及其相关文档的完整集合。软件的分类方法很多。,2. 软件的特点,软件是一种逻辑实体,具有抽象性。 更依赖于人 不磨损、不老化 开发成本、进度难估计 正确性难保证 维护困难 纠错性维护 完善性维护 适应性维护 预防性维护 软件的生产与硬件不同,软件一旦研制开发成功,其生产过程变成简单的复制过程。 软件对硬件和环境有着不同程度的依赖性。 软件本身是复杂的。,软件可长期使用,3. 软件的发展,二、软件危机与软件工程,软件危机(Sof
9、tware Crisis) 软件萧条 depression 软件困扰 affliction,1. 软件危机,含义 表现 原因 克服危机的途径,(1)软件危机的含义,如何开发软件,满足需求 如何维护已有软件,(2)软件危机的表现,软件成本高,软件成本在计算机系统中所占比例逐年增长,(2)软件危机的表现,难于控制开发进度 进度拖延,成本失去控制 损害软件质量,引起用户不满 软件开发中人的因素导致,对项目进度和工作量估计的“二八定律”:一般人主观上认为已经完成了80,但实际上只完成了20。,(2)软件危机的表现,软件工作量估计困难如果有一个软件项目,估计需要12人月工作量。指定由3个人,在4个月内完
10、成。假定第一个月的任务花了两个月才完成,则管理者该怎么办呢?Brooks:“在已拖延的软件项目上,增加人力只会使其更难按期完成。 ”,(2)软件危机的表现,软件质量低1979,US Government Accounting Office对政府项目进行了调查,(2)软件危机的表现,软件修改、维护困难,19761981数据:维护成本约占总成本的67%,“纠正一个错误带来更多新错误 ” “错误发现得越晚,纠正错误所要付出的代价也就越大 ”维护成本所占比例大,(3)原因,需求问题 用户描述不精确 开发人员理解不一致、随意性大 管理问题 “软件开发离不开管理!” 方法、工具问题 软件本身的特点,(4)
11、克服危机的途径,对计算机软件有一个正确的认识(软件程序)必须充分认识到软件开发不是某种个体劳动的神秘技巧,而应该是一种组织良好、管理严密、各类人员协同配合、共同完成的工程项目过程。开发和使用更好的软件工具。推广使用在实践中总结出来的开发软件的成功技术和方法。软件工程(Software Engineering,SE) 1968,NATO,Fritz Bauer提出工程的概念、原理、技术和方法以及好的工具进行 软件的开发、管理和维护,2. 软件工程,研究“大型”软件开发和维护的技术、方法、工具、环境和管理的工程学科。,软件工程的定义,1983年IEEE:“软件工程是开发、运行、维护和修复软件的系统
12、方法。” Fairly:“软件工程学是为了在成本限额以内按时完成开发和修改软件产品所需要的系统生产和维护技术及管理学科。” Fritz Bauer:“软件工程是为了经济地获得可靠的且能在实际机器上有效地运行的软件,而建立和使用的完善的工程化原则。” 1993年IEEE:软件工程是:把系统化的、规范的、可度量的途径应用于软件开发、运行和维护的过程,也就是把工程化应用于软件中;研究中提到的途径。,软件工程框架,软件工程 本质特征,软件工程关注于大型程序的构造软件工程的中心课题是控制复杂性软件经常变化开发软件的效率非常重要和谐地合作是开发软件的关键软件必须有效地支持它的用户在软件工程领域中是由具有一
13、种文化背景的人替具有另一种文化背景的人创造产品,软件工程面临的问题,软件生产率:设计方法和开发工具软件重用软件的价格软件可靠性软件维护,单元测试25%,综合测试20%,需求分析20%,设计15%,编码20%,开发33%,维护67%,开发各个阶段的百分比,开发与维护所占的百分比,软件工程定义 经典定义,“The application of a systematic, disciplined, quantifiable approach to the development, operation, and maintenance of software” IEEE 1990软件工程是将系统的、规
14、范的、可度量的方法应用于软件的开发、运行和维护的过程,即将工程化应用于软件中,并研究上述提到的途径。,本教材中关于软件工程的定义,软件工程是研究“大型”软件开发的技术、方法、工具和管理工程的学科。,软件工程内容,以有组织的质量保证为基础软件工程过程是进行一系列有组织的活动,从而能够合理地和及时地开发出计算机软件软件工程方法为软件开发提供“如何做”的技术软件工具为过程和方法提供自动的或半自动的支持计算机辅助软件工程(CASE,Computer Aided Software Engineering),软件工程方法,结构化方法(传统方法)面向对象的方法,传统方法 (生命周期方法),仍然是使用十分广泛
15、的软件工程方法学。采用结构化技术来完成软件开发的各项任务,并使用适当的软件工具或软件工程环境来支持结构化技术的运用。从上而下,顺序地完成软件开发的各阶段任务。数据和行为分离,面向对象的方法,出发点和基本原则是尽量模拟人类习惯的思维方式,使开发软件的方法与过程尽可能接近人类认识问题解决问题的方法与过程,从而使描述问题的问题空间与实现解法的解空间在结构上尽可能一致。它的基本做法是用对象模拟实际问题域中的实体,以对象间的关系刻画实体间的联系。对象通过消息传递相互联系,协同完成某一活动。,软件工程过程,软件过程必须科学、合理,才能开发出高质量 的软件产品。软件过程是将用户的需求转化成有效的软件的一系列
16、活动。又称软件生存周期过程,是软件生存周期内为达到一定目标而必须实施的一系列相关活动的集合。包括:立项、需求分析、设计、编码、测试、交付、维护、退役又加入了:管理各种活动、质量保证环境基础设施配置、文档管理等。,三、软件的生存期(Software Life Cycle),软件产品从形成概念开始,经过开发、使用和维护,直到最后退役的全过程。 生命周期方法学 “各个击破”、“分而治之”的思想 里程碑(Milestone) 软件生存期中各开发阶段末尾的特定点,软件生存期的3个时期、6个阶段,维护,软件的生存期,传统的生命周期方法的特点,顺序性、依赖性 推迟程序的物理实现“the sooner you
17、 begin writing code, the longer itll take you to get done” 质量保证的观点(利于尽早发现错误) 阶段文档 评审,错误的“积累效应”和“放大效应”,大部分的错误是在编码之前造成的错误发现、改正得越晚,需付出的代价越高,发现并改正一个错误的开销,四、软件过程模型,软件开发全部过程、活动和任务的结构框架。 普遍适用的框架,而非具体的方法 作用 描述各阶段关系 为软件工程管理提供里程碑和进度表 里程碑(Milestone) 软件生存期中各开发阶段末尾的特定点 为开发过程提供原则和方法,1. 编码修正模型(code and fix model),
18、软件开发只有两个阶段编写程序代码修改程序代码 作坊式生产方式 缺点低估设计,代码结构差,难修改不重视需求,开发风险大,用户不满意难修改、难维护,2. 瀑布模型(Waterfall Model),1970,W. Royce提出 软件生存周期模型,流水式过程模型 生命周期方法学 阶段划分方法 控制复杂性,Definition,Feasibility Study,Requirements Analysis,System Design,Program Design,Coding & Module Testing,Integration & System Testing,Delivery & Maint
19、enance,System Lifecycle,Waterfall Model,传统的瀑布模型,瀑布模型的特点,基本思想:“分而治之” 优点 规范管理开发过程文档驱动、易于维护 缺点 需求难开始就完全确定 文档驱动,风险大用户必须有耐心开发效率不高,传统的瀑布模型,带“反馈环”的瀑布模型,瀑布模型的特点,适用范围 结构化方法,面向过程的软件开发方法 需求变化少 开发人员熟悉应用领域 低风险项目 使用环境稳定,3. 原型模型(Prototyping Model),针对:软件开发初期需求难以确定 工程上经常使用的“原型” 快速原型法(Rapid Prototyping) 基本思想:快速建立原型,完
20、善用户需求 快速建立起来的可以在计算机上运行的程序,他所能完成的功能往往是最终产品能完成的功能的一个子集。,原型模型,Prototyping Model,需求的采集和细化,快速设计,建造原型,客户评价原型,针对原型完善需求,生产样品,开始,停止,快速开发原型的途径,模拟软件系统的人机界面和人机交互方式 开发工作原型,实现软件系统的部分功能 找来正在运行的类似软件,原型模型的特点,优点处理模糊需求 用户参与 快速 缺点 快速(弱功能)资源规划和管理较为困难 对开发环境要求高,适用范围已有产品(原型)简单而熟悉的领域有快速原型开发工具进行产品移植或升级,软件开发的风险,产品交付给用户之后用户可能不
21、满意到了预定的交付日期软件可能还未开发出来实际的开发成本可能超过预算产品完成前一些关键的开发人员可能“跳槽”了产品投入市场之前竞争对手发布了一个功能相近、价格更低的软件,4. 螺旋模型(Spiral Model),1988,TRW公司BARRY W. Boehm提出 风险分析,Waterfall Model,Prototyping Model,Risk Analysis,Spiral Model,螺旋模型的特点,针对:前面的模型没有提供“驾驭软件风险”的功能 基本思想:降低风险制定计划 planning风险分析 risk analysis实施工程 engineering, constructi
22、on and release客户评估 customer evaluation,PART ONE The Process,Spiral Model,Risk analy-sis,Prototype 1,Simulations, models, benchmarks,Requirements plan, life-cycle plan,Concept of operation,Prototype 2,Risk analysis,Software requirements,Requirements validation,Develop-ment plan,Risk analysis,Prototyp
23、e 3,Software product design,Design validation and verification,Integration and test plan,Risk analysis,Operational prototype,Detailed design,Unit test,Code,Integration and test,Acceptance test,Implementation,Plan next phases,Develop, verify next-level product,Determine objectives, alternatives, cons
24、trains,Evaluate alternatives, identify, resolve risks,Cumulative cost,Progress through steps,Not yet widely used.,螺旋模型的特点,优点风险驱动质量保证利于维护 缺点 风险驱动 对开发人员要求高要求用户参与阶段评价,对用户来说比较困难,不易取得好的效果,适用范围庞大、复杂、高风险的系统内部开发的大规模软件项目,5 增量模型 ( Incremental Model ),基本思想:遵循递增方式来进行软件开发 优点 任务或功能模块驱动,可以分阶段提交产品 缺点 条件比较苛刻,PART ON
25、E The Process,Incremental Model,Core product,More features and functionality, Makes a better use of resources.,增量模型的特点,适用范围在整个项目开发过程中,需求都可能发生变化,客户接受分阶段交付分析设计人员对应用领域不熟悉,难以一步到位中等或高风险项目用户可参与到整个软件开发过程中使用面向对象语言或第四代语言软件公司自己有较好的类库、构件库,6 喷泉模型(Fountain Model),面向对象生命周期模型特点 迭代、演进 无缝,7 组合模型(Combining Model),把几种模型组合在一起,配套使用利用优点,避免不足,小 结,软件及其发展 软件危机与软件工程 软件的生存期 软件过程模型,思考题,什么是软件?它具有哪些区别于硬件的特点?试详细说明“软件生存周期”的概念。什么是软件危机?产生原因和主要表现是什么?如何解决?软件工程包含哪些要素?试说明之。有人说:软件开发时,一个错误发现得越晚,为改正它所付出的代价就越大。对否?请说明理由。,