版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、软件工程,主讲:冶红 信息科学技术学院,2020年9月9日星期三,2,答疑时间: 周三14:0016:00(扬帆楼403) email:,我的联系方式,2020年9月9日星期三,3,1995年,Standish Group针对软件系统开发成功的研究表明,所有的开发项目中有32%的项目在它们结束之前被中止。 多于一半的软件项目花费的成本相当于原来预算的2倍。 只有42%的软件项目完成时达到了预期的功能,事实上,许多系统只完成了部分预期的需求。,软件工程,2020年9月9日星期三,4,软件工程就是在这样的背景下,由许多计算机科学家经过多方面的探索和总结而形成的。 1968年首次提出“软件工程”,目
2、前已经成为计算机软件的一个重要分支和研究方向。,软件的开发是一个很困难的活动,要求很仔细的计划和执行。,软件工程,2020年9月9日星期三,5,通过本课程的学习,掌握软件工程的概念和技术方法,提高软件开发机构的软件开发能力和软件过程能力,提高软件生产率、提高软件质量、降低软件成本。 课程对象:软件技术人员、管理人员等。,课程目的,对于培养学生的软件素质,提高学生的软件开发能力与软件项目管理能力具有重要的意义。,2020年9月9日星期三,6,课程内容,软件工程概念与软件工程的基本要素; 软件开发活动及其常用的系统定义技术,软件设计技术和软件测试技术; 软件开发中典型的软件开发模型; 软件工程标准
3、化与软件文档; 软件工程管理和软件质量保证。,教学日历,掌握开发高质量软件的方法,有效地策划和管理软件开发活动,2020年9月9日星期三,7,参考教材,1.软件工程与软件文档写作 清华大学/北京交通大学出版社 文斌 刘长青 田原 编著 2.软件工程导论(第4版) 清华大学出版社, 张海藩 3.实用软件工程(第2版) 清华大学出版社,郑人杰 4.软件工程 机械工业出版社/中信工业出版社, Ian Sommerville 程一剑等译,2020年9月9日星期三,8,课程要求,要求刻苦学习,持之以恒的精神。本课程与其说是一门技术性很强的课程,不如说更像一门管理学科的课程,很多规定都是国内外大师的经验总
4、结,不能误认为无用或现在用不上而放弃学习。,要求学以致用,善于将理论与实际结合,才能巩固课内学到的知识,并能融会贯通。,2020年9月9日星期三,9,第一章 软件工程概念,1.1 软件的定义与分类 1.2 软件的发展和软件危机 1.3 软件工程 1.4 软件生存周期、过程模型,2020年9月9日星期三,10,历史的回顾,1946年,第一台计算机诞生,信息技术拉开了序幕; 硬件芯片的集成度按照摩尔定律每十八个月翻番; 20世纪80年代,微软为首的新兴软件企业开辟了独立软件产业,成为信息产业中最重要的力量;,很多传统型企业逐渐“软化”,信息产业“软盛硬衰”; 2002年,美国从业硬件工程师约为74
5、000,软件工程师约为675000; 硬件设计过程本身出现“软化”趋势,离不开软件的支持; 2004年3月,盖茨的演讲“十年后”,通用化,标准化,专业化,多样化,2020年9月9日星期三,11,1.1 软件的定义与分类,软件由计算机程序、数据及文档组成。,按事先设计的功能和性能要求执行的指令序列。,使程序能够正常操纵信息的数据结构。,与程序开发、维护和使用有关的图文材料。,2020年9月9日星期三,12,软件的特点,抽象性:逻辑实体 软件生产无明显的制造过程 无磨损性,退化,2020年9月9日星期三,13,抽象性 软件生产无明显的制造过程 无磨损性 对硬件的依赖性 手工开发方式 软件本身复杂性
6、,软件的特点,2020年9月9日星期三,14,抽象性 软件生产无明显的制造过程 无磨损性 对硬件的依赖性 手工开发方式 软件本身复杂性 软件高成本,软件的特点,2020年9月9日星期三,15,例:美国一家公司在1982年计划用FORTRAN语言开发一个在VAX750计算机上运行的应用程序,估计这个程序的长度为10,000条指令。如果平均每人每天可以开发出10条指令,请问: () 开发这个程序将用多少人日? () 假设程序员月平均工资为4000美元,每月按20个工作日计算,这个软件的成本是多少美元? () 1982年VAX750计算机硬件价格约为125,000美元,在那一年这个软件的成本在总成本
7、中占多大比例? () 20年后,一台性能远远优于VAX750的微型计算机的价格约为2000美元,这时软件开发生产率已提高到平均每人每天可以开发出40条指令,程序员的月平均工资也涨到8000美元。如果在2002年开发上述FORTRAN应用程序,则该软件的成本在总成本中占多大比例?,10,000/10=1000(人日),每月工作20天,故开发这个软件用: 1000/20=50(人月) 每人工资4000元,故软件成本约为:4000*50=200,000(元),200,000/(200,000+125,000)=61.5%,2002年开发该软件的工作量为:10,000/(40*20)=12.5(人月)
8、 软件成本:8000*12.5=100,000(元) 软件成本所占比例:100,000/(100,000+2,000)=98%,2020年9月9日星期三,16,抽象性 软件生产无明显的制造过程 无磨损性 对计算机硬件依赖性 软件的手工开发方式 软件本身复杂性 软件的高成本性 相当多的软件工作涉及社会因素,软件的特点,从以上分析可以看出,出现软件危机是必然的。60年代以来人们所担心的软件危机到目前为止并没有真正被排除。,机构体制 管理方式 思想观点,2020年9月9日星期三,17,软件与硬件、数据库、人、过程等共同构成计算机系统。 软件的种类可以从几个方面进行划分: 按功能分类 系统软件协调计算
9、机系统 支撑软件协助用户开发软件的工具性软件 应用软件为特定领域开发的软件,软件的分类,类别 参加人员数 研制期限 源程序行数 微型 1 14周 0.5k 小型 1 16月 1k2k 中型 25 12年 5k50k 大型 520 23年 50k100k 甚大型 1001000 45年 1M(=1000k) 极大型 20005000 510年 1M10M,按规模分类,微型、小型、中型、大型、甚大型、极大型,按工作方式分类 批处理软件 实时软件 分时软件 交互式软件 按服务对象分类 项目软件 产品软件 按使用频度分类 一次性使用软件 频繁使用软件,也称定制软件,是受某特定客户的委托,由软件承包商在
10、合同的约束下开发出来的软件。,由软件开发机构开发出来直接提供给市场,可以公开销售。,区别:项目软件的软件描述由客户给出,开发者必须按客户要求进行开发;而产品软件的软件描述由开发者自己完成。,2020年9月9日星期三,20,第一章 软件工程概念,1.1 软件的定义与分类 1.2 软件的发展和软件危机 1.3 软件工程 1.4 软件生存周期、过程模型,2020年9月9日星期三,21,1.2 软件的发展和软件危机,早期 第二阶段 第三阶段 第四阶段 面向批处理 多用户 分布式系统 强大的桌面系统 有限的分布 实时 嵌入“智能” 面向对象技术 自定义软件 数据库 低成本硬件 专家系统 软件产品 消费者
11、的影响 人工智能 并行计算 网络计算机,软件的发展经历了四个阶段,2020年9月9日星期三,22,由于缺乏软件开发经验和相关数据的积累,使开发计划很难制定,在进度、费用上估计不准确,引起用户不满; 软件需求很难确定或不确定,这一点非常关键; 开发过程缺乏统一、公认的方法论和规范指导,缺乏文档规范,使软件很难维护; 测试工作不充分,导致错误多,可靠性降低。,软件危机,2020年9月9日星期三,23,软件危机的主要特征,软件开发周期大大超过规定日期 软件开发成本严重超标 软件质量难于保证 软件难于维护 原因,32%的项目在结束之前中止,多于一半的软件项目花费的成本相当于原来预算的2倍,按期、按预算
12、完成的项目不足20%。,2020年9月9日星期三,24,例1:1963年美国的火箭控制系统程序。 把FORTRAN语句 DO 5 I=1,3 写成了 DO 5 I=1.3, 使发往火星的火箭爆炸,造成1000多万美元的损失。 例2:IBM公司1966年开发的IBM360机的操作系统。 花费5000人年的工作量,写出近100万行源程序,却得到一个很不成功的软件。每更新一次版本,都能找到1000多个错误,成为用之不灵、弃之可惜的系统。,软件危机,2020年9月9日星期三,25,解决软件危机的方法:按工程化的原则和方法组织软件开发工作,并制定相应的标准。,成功软件的标准,用户在用 用户的使用是最关键
13、的因素 用户可以很容易做完要做的事,软件危机,2020年9月9日星期三,26,第一章 软件工程概念,1.1 软件的定义与分类 1.2 软件的发展和软件危机 1.3 软件工程 1.4 软件生存周期、过程模型,2020年9月9日星期三,27,软件工程就是采用工程的概念、原理、技术和方法来开发和维护软件,将工程管理技术的成功经验和思想与软件的开发过程、研究技术相结合,形成一套适合于软件开发的方法、规范和技术。 软件工程的目标在于:提高软件生产率,提高软件质量,降低软件成本。,1.3 软件工程,2020年9月9日星期三,28,软件工程,软件工程是应用计算机科学、数学及管理科学等原理开发软件的工程。它借
14、鉴传统工程的原则、方法,以提高质量,降低成本为目的。,工程学科,软件生产的各个方面,软件工程的内容不是一成不变的,随着人们对软件系统研制开发的理解而发展。,2020年9月9日星期三,29,计算机科学研究的是构成计算机和软件系统基础的有关理论和方法; 软件工程研究软件制作中的实际问题; 软件工程既要以计算机科学理论作为坚实的基础,又要有特定的软件开发方法。,软件工程和计算机科学,2020年9月9日星期三,30,系统工程研究复杂系统的开发、进化的各个方面,包括硬件开发、系统决策、过程设计、系统实施和软件工程等。 系统工程人员要描述整个系统,定义总的体系结构,集成各组件以完成整个系统,较少关注各组件
15、的工程实际问题。,软件工程和系统工程,2020年9月9日星期三,31,2001年5月ISO发布了 SWEBOK指南V0.95(试用版),即 Guide to the Software Engineering Body of Knowledge。 将软件工程学科的主体知识分为10个知识领域: 软件需求 软件设计 软件构造 软件测试 软件维护 软件配置管理 软件工程管理 软件工程过程 软件工程工具和方法 软件质量,软件工程的知识结构,2020年9月9日星期三,32,每个软件项目都是新的,体现在新的需求和功能、新的技术实现手段和部署方式上; 每个项目都是不断变化的; 软件项目的胜算不大,或者超预算开
16、支,或者延期,或者干脆一刀砍掉; 软件项目是团队合作,但人多力量不一定大,生产力和人数并不成正比。,软件工程的特点,软件 软件产业,够用,少而精,2020年9月9日星期三,33,软件工程三个要素:方法、工具、过程,软件工程必须以有组织的质量保证为基础,软件工程的层次,2020年9月9日星期三,34,软件工程的三要素,软件工程包括三个基本要素:方法、工具和过程。,方法:主要研究“如何做”的问题; 工具:为了软件开发提供一个支撑环境; 过程:将软件工程的方法和工具结合起来,以达到合理、及时地进行计算机软件开发的目的。主要从进度、成本、质量三个方面加以控制。,一个软件开发机构针对某一类软件产品为自己
17、规定的工作步骤。,2020年9月9日星期三,35,P D C A,软件工程过程包含四种基本的过程活动:,软件工程过程,方法及使用顺序 为保证质量所需的管理 要求交付的文档资料,Plan:软件规格说明(软件描述) Do:软件开发 Check:软件确认(有效性验证) Action:软件演进(进化),2020年9月9日星期三,36,传统的软件工程方法:,结构化分析方法SA 面向数据流的设计方法(DeMarco,1978) JSD方法 面向数据结构的设计方法(Jackson,1983),软件工程方法,这些方法旨在识别系统中基本的功能模块,现仍广泛应用。,面向对象的软件工程方法:,1997年推出了UML
18、,通过统一的语义和符号将建模过程和表示统一起来,成为面向对象建模的工业标准。,Unified Modeling Language,2020年9月9日星期三,37,软件工程方法,没有放之四海而皆准的方法,每种方法都有其适用的特定领域。 各种方法基于的思路开发出能够用图形表示的系统模型,并用这些模型来描述或设计系统。,2020年9月9日星期三,38,CASE(Computer-Aided Software Engineering)即为计算机辅助软件工程。 CASE包括多种程序工具,覆盖面很广,支持软件过程活动。 CASE工具集还包括代码生成器,可从系统模型和过程指南自动生成源代码。,计算机辅助软件
19、工程CASE,2020年9月9日星期三,39,计算机辅助软件工程CASE,高端CASE工具 支持分析和设计的CASE工具,支持软件过程中的早期阶段。 低端CASE工具 支持实现和测试的工具,如调试器、程序分析系统、测试用例生成器和程序编辑器等。,2020年9月9日星期三,40,遗留系统的挑战 多样性的挑战 交付上的挑战,软件工程在21世纪面临以下三大挑战:,为了应对这些挑战,需要有新的工具和技术以及融合使用现有软件工程方法的创新举措。,软件工程面临的主要问题,2020年9月9日星期三,41,第一章 软件工程概念,1.1 软件的定义与分类 1.2 软件的发展和软件危机 1.3 软件工程 1.4
20、软件生存周期、过程模型,2020年9月9日星期三,42,软件有一个从孕育、诞生、成长、成熟到衰亡的生存过程,这个过程即为软件的生存周期。 生存周期包含三个阶段:软件定义、软件开发及软件运行维护。,1.4 软件生存周期,问题定义 可行性研究 需求分析,概要设计 详细设计 编码 测试,持久地满足用户的需要,2020年9月9日星期三,43,也称软件开发模型、软件过程模型或软件工程范型,它能直观表达软件开发全过程,明确规定要完成的主要活动、任务和开发策略。 是软件工程思想的具体化,是跨越软件生存周期的系统开发、运行、维护所实施的全部活动和任务的过程框架。,软件生存周期模型,2020年9月9日星期三,4
21、4,瀑布模型,原型模型,增量模型,螺旋模型,喷泉模型,软件生存周期模型,常用的软件生存期模型有:,2020年9月9日星期三,45,1.瀑布模型,各阶段的任务完成后,产生相应的文档,经过评审确认后,进入下一阶段,2020年9月9日星期三,46,瀑布模型,确定要开发软件系统的总目标; 完成该软件任务的可行性研究; 估计资源、成本、开发进度; 制定开发任务的实施计划,连同可行性研究报告,提交管理部门审查。,2020年9月9日星期三,47,瀑布模型,对提出的需求进行分析给出详细的定义(功能、性能); 编写软件需求说明书或系统功能说明书及初步的用户手册; 提交管理机构评审。,2020年9月9日星期三,4
22、8,瀑布模型,概要设计:把需求转换成软件的体系结构,确定各功能模块; 详细设计:具体描述各模块完成的工作,为源程序编写打基础; 编写设计说明书,提交评审。,2020年9月9日星期三,49,将设计转换成以某种特定语言表示的源程序; 编码应结构良好、清晰易读,与设计一致。,瀑布模型,2020年9月9日星期三,50,按规定的需求进行有效性测试,确定软件是否合格、能否交付; 单元测试:查找各模块在功能和结构上存在的问题; 组装测试:已测试过的模块按一定顺序组装起来。,瀑布模型,2020年9月9日星期三,51,改正性维护:运行中发现了软件中的错误 适应性维护:为了适应变化的软件环境 完善性维护:为增强软
23、件的功能,瀑布模型,2020年9月9日星期三,52,瀑布模型的特点,阶段间具有顺序性和依赖性; 以软件需求完全确定为前提,推迟实现; 每个阶段必须完成规定的文档,每个阶段结束前完成文档审查; 每个阶段以上一阶段的文档作为开发的基础,若某文档出现问题,则返回重新工作。,文档驱动的模型,2020年9月9日星期三,53,瀑布模型的优点,在消除软件非结构化、促进软件开发工程化方面起了很大作用,提供软件开发的基本框架。 适合功能需求明确、完整、无重大变化的软件产品的开发。 是一种整体开发模型,当开发完成时,向用户提交的是一个完整的系统。,2020年9月9日星期三,54,瀑布模型的局限性,将软件开发生硬地
24、分成若干确切的阶段,一种理想的线性开发模式,缺乏灵活性。,简洁的美 活用它?,无法解决软件需求不明确或不准确的问题,导致开发出的软件不是用户真正需要的软件。 相当长的时间才能得到软件的最初版本,发现错误为时已晚,大量修改必须付出巨大的代价。 生成和确认大量文档,极大地增加了工作量。,2020年9月9日星期三,55,瀑布模型,原型模型,增量模型,螺旋模型,喷泉模型,软件生存周期模型,常用的软件生存期模型有:,2020年9月9日星期三,56,2.原型模型(快速成型模型),业务和需求在不断变化,采用线性开发方式不实际。,根据用户的需求,快速开发一个“原型”,完成部分主要功能,展示给用户。 在征求用户
25、意见的过程中,逐步修改、完善,最终获得满意的软件产品。,2020年9月9日星期三,57,开发快速原型的途径,找来一个或几个正在运行的类似软件,利用这些软件向客户展示软件需求中的部分功能; 利用个人计算机模拟软件系统的人机界面和人机交互方式; 开发一个工作模型,实现软件系统的部分功能,这部分功能是重要的或易产生误解的。,2020年9月9日星期三,58,建造/修改 原型,用户测试 运行原型,听取用 户意见,原型模型(快速成型模型),回炉改造,大行不顾细谨,百闻不如一见,2020年9月9日星期三,59,原型模型的优点,统一用户和开发人员的理解,有助于需求的定义和确认;,可以快速实现和提交一个有限的版
26、本,应付市场竞争的压力; 评估关键技术和性能瓶颈;,及早发现存在的风险和不确定性。,展示新概念和方法的可行性。,采用原型模型的软件生存周期,走 向 产 品,2020年9月9日星期三,61,瀑布模型,原型模型,增量模型,螺旋模型,喷泉模型,软件生存周期模型,常用的软件生存期模型有:,2020年9月9日星期三,62,. 增量模型,增量模型是迭代和演进的过程。 增量模型把软件产品分解成一系列的增量构件,在增量开发迭代中分批、逐步加入。,每个构件由多个相互作用的模块构成,并且能够完成特定的功能。 早先完成的增量可以为后期的增量提供服务。,先完成一个系统“子集”的开发,再按同样的开发步骤增加功能,如此递
27、增下去直至满足全部需求。,总体架构在初始阶段就应设计好,要求软件必须具备开放式的体系结构。,日历时间,实现基本需求、最核心功能,分解的约束条件:新构件集成到现有软件时,形成的产品必须是可测试的。,2020年9月9日星期三,65,增量模型的优点,客户无需等到整个系统的实现,第一个增量会满足最关键的要求,软件很快就能使用; 客户可以将早期的增量作为原型,从中获得对后续增量的需求;,具有最高优先权的服务首先交付,接受了最多测试,意味着最重要的部分不太可能失败。因此,项目总体性失败的风险比较低。,2020年9月9日星期三,66,增量应相对较小(不超过20,000行代码),每个增量应该包含一定的系统功能
28、,因此,有时很难把客户的需求映射到适当规模的增量上。,增量模型存在问题,此外,多数系统需要一组在各个部分都会用到的基本服务,但由于增量实现前,需求不能被详细定义,所以明确所有增量都会用到的基本服务比较困难。,增量开发方法的一个新演进版本“极限程序设计”建立在开发和交付非常小的功能增量上。,2020年9月9日星期三,67,瀑布模型,原型模型,增量模型,螺旋模型,喷泉模型,软件生存周期模型,常用的软件生存期模型有:,2020年9月9日星期三,68,. 螺旋模型,在软件开发过程中,有各种各样的风险。项目越大越复杂,设计方案、资源、成本和进度等因素的不确定性越大、开发风险越大。,应及时进行风险识别、分
29、析和采取对策,从而消除或减少风险的危害。,螺旋模型是一种风险驱动的模型。,是否真正反映用户的实际需求? 不同的模块和子系统能否配合? 质量上能否过关?缺陷一大堆? 能否按时按预算完成?资源够? 相关部门的配合协调达成共识? 产品完成前关键的人员“跳槽”?,2020年9月9日星期三,69,螺旋模型,对复杂的大型软件,开发一个原型往往达不到要求,考虑将瀑布模型与原型模型结合起来,加入风险分析,弥补以往模型的不足。,螺旋模型将开发过程分为几个螺旋周期,每个螺旋周期和瀑布模型大致相符。 每个螺旋周期分为四个工作步骤。,使用原型方法降低风险,2020年9月9日星期三,70,制定计划 确定目标,选定实施方
30、案,弄清项目开发的限制条件; 风险分析 分析评估所选方案,考虑如何识别和消除风险; 实施工程 实施软件开发; 客户评估 评价开发,提出修正建议。,螺旋周期的工作步骤,螺旋模型沿着螺线旋转,自内向外每转一圈便开发出一个更加完善的新版本。,制定计划,风险分析,实施工程,客户评估,半径的大小代表了完成现在步骤所需的费用累加,螺旋角度的大小代表了完成螺旋的每次循环需做的工作,螺旋模型可以看作在每个阶段之前都加入了风险分析过程的原型模型。,2020年9月9日星期三,72,螺旋模型特点,使用该模型需要有相当丰富的风险评估经验和专业知识,这使该模型的应用受到一定限制。,螺旋模型适合于大型软件的开发,它吸收了软件工程“演化”的概念,使开发人员和用户对每个螺旋周期出现的风险有所了解,从而作出相应的反应。,2020年9月9日星期三,73,5.喷泉模型,喷泉模型是对象驱动的模型,主要用于支持面向对象开发过程。 体现了迭代和无间隙的特性。,系统某个部分常常重复工作多次,对象在每次迭代中加入演进的软件成分。,在各项开发活动,即分析、设计和编码间不存在明显的边界。,喷泉模型,2020年9月9
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年上海海事大学单招职业技能测试题库附参考答案详解(满分必刷)
- 2026年上海工程技术大学单招职业倾向性考试题库附答案详解(培优)
- 2026年云南省文山壮族苗族自治州单招职业适应性考试题库及参考答案详解
- 2026年乌海职业技术学院单招职业技能测试题库及答案详解(历年真题)
- 2026年上海电机学院单招职业倾向性测试题库附答案详解(完整版)
- 2026年云南财经职业学院单招职业倾向性测试题库含答案详解(满分必刷)
- 2026年乌鲁木齐职业大学单招职业适应性测试题库附参考答案详解(典型题)
- 2026年三亚城市职业学院单招综合素质考试题库含答案详解(能力提升)
- 2026年丽水学院单招综合素质考试题库及参考答案详解1套
- 2026年云南省昆明市单招职业适应性测试题库含答案详解(研优卷)
- 肠吻合口狭窄的护理查房
- 2025年及未来5年中国透平压缩机行业市场发展数据监测及投资前景展望报告
- 2025年武汉市中考数学试卷(含答案解析)
- T/BIKE 7.1-2020电动自行车锂离子蓄电池换电柜技术要求第1部分:柜体
- 智能化生产流程重组-洞察阐释
- 2025届河南省郑州市高三下学期第二次质量预测英语试题(原卷版+解析版)
- 2025年临沂科技职业学院高职单招语文2019-2024历年真题考点试卷含答案解析
- 家居行业创业风险管理与防范措施
- 产科新生儿交接流程
- 2024天融信日志收集与分析系统部署操作手册
- 交通事故授权委托书
评论
0/150
提交评论