软件工程导论教案课程章程Word格式文档下载.docx
《软件工程导论教案课程章程Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《软件工程导论教案课程章程Word格式文档下载.docx(50页珍藏版)》请在冰豆网上搜索。
这个词现在还适用吗?
板
书
设
计
教学课件《第1章软件工程的范畴》
1.历史方面
2.经济方面
3.维护性方面
4.需求、分析和设计方面
5.小组编程方面
6.为什么没有计划阶段
7.为什么没有测试阶段
8.为什么没有文档阶段
9.面向对象范型
10.术语
11.道德问题
第 1 次教学活动设计
教学
环节
内容设计与手段
导
入
新
课
由两个实例引入:
Ø
工程学的意义。
软件生产过程虽然很多方面与传统工程相似,但是仍然有自己的属性和问题。
软件工程定义为一门学科,目的是生产出满足客户要求的、未超出预算的、按时交付的、没有错误的软件。
需要在软件生产的各个阶段使用恰当的技术,包括何时进行分析、设计和交付后维护。
软件工程结合人类各个领域的许多知识,包括经济和社会科学。
讲
授
内
容
1.1历史方面
1968年在德国Garmisch召开的NATO软件工程会议上签署了声明,正式确立了软件工程的概念。
目标:
软件工程应当是一项类似工程的活动,应当使用已建立的工程学科的基本原理和范型来解决“软件危机”。
软件交付所出现的问题
•推迟完成
•超出预算
•特性缺失错误
软件危机仍然伴随着我们,告诉我们两件事情:
(1)软件生产过程虽然很多方面与传统工程相似,但是仍然有自己的属性和问题。
(2)可能应当重新命名为“软件萧条”(SoftwareDepression)
•周期长
•难预测
1.2经济方面
举例:
使用新的编码技术CTnew编码时间比使用旧的编码技术CTold少花1/10的时间。
是否应该使用新的编码技术?
通常的答案时:
当然选择新的编码技术。
从软件工程的经济观点来看:
•考虑培训的成本
•考虑采用新技术CMnew对维护工作的影响
1.3维护性方面
传统维护观点:
传统意义上,维护是根据不同时期所开展的活动来进行定义的
客户想要增加该软件产品的功能
•传统维护(完善性)
客户想要在软件之前做同一改变(“移动目标问题”)
•传统开发范畴
现代维护定义
是软件因存在问题或因有改进或适应性需求时,对代码及相应文档所进行的修改过程
1.4需求、分析和设计方面
提高需求、分析和设计技术是非常重要的
•可以尽早发现错误
•降低错误的总体数量(需求、分析和设计中错误所占比例较高)
1.5小组编程方面
硬件成本不断降低
•产品太大了无法由一个人在规定时间内编写完成
这种产品需要由一个小组去完成
•模块之间的接口问题
•小组成员之间的交流协调问题
1.6为什么没有计划阶段
在项目的开始,对管理需求和分析阶段进行初步计划
一旦明确之道将要开发什么,就制定出软件项目管理计划
在整个项目过程中,管理者需要监督SPMP的执行情况,并且注意是否有偏离计划的情况发生
1.7为什么没有测试阶段
在一个软件准备好交付给客户时才检查它实在是太晚了
持续测试活动必须始终贯穿于软件生命周期中
测试活动是
•每个软件正确建造的保证
•软件质量保证(SQA)小组的责任
1.8为什么没有文档阶段
在一个软件准备好交付给客户时才编制文档实在是太晚了
软件行业中的人员流动性较大
如果前一阶段的文档不是完整、正确和最新的,几乎不可能执行下一阶段的步骤
除非提供文档来说明对一个软件产品期望的性能,否则不可能测试该软件产品是否正确工作
如果没有一套完整、正确的文档精确地描述产品的当前版本做些什么,维护几乎是不可能的
1.9面向对象范型
优点
1.由于信息隐藏,交付后维护更安全
•极大地减少了出现回归错误的机会
2.使软件开发变得更加容易
•对象在现实中都存在对应物
•能够简化建模(建模在面向对象范型中起着非常重要的作用)
3.设计良好的对象是独立的单元
•产品中与现实世界相关的、被该对象模拟的部分都可以在对象本身中找到—封装encapsulation
•与外界通信的唯一形式就是给对象发消息
•由对象执行特定操作,怎样执行操作完全是对象自身的职责–职责驱动设计responsibility-drivendesign
4.降低了软件产品的复杂度,从而简化了软件开发与维护
5.提高了重用度
1.10正确看待面向对象范型
1.必须正确使用面向对象范型
•所有范型都很容易被错误地使用
2.当正确使用的时候,面向对象范型可以解决一些(但不是全部)传统范型遇到的问题
3.面向对象范型有其自身的问题
4.面向对象范型是目前可用的最好方法
•然而,将来它一定会被更先进的技术所取代
1.11术语
对一些主要术语概念做出解释
1.12道德问题
介绍软件从业人员必须遵守的道德规范
归
纳
总
结
通过本章的学习,明确软件工程的各个方面的含义,描述传统软件工程生命周期模型和面向对象范型,感受遵守道德规范的重要性。
第 2 次课程教学方案
第2章软件生命周期模型
(1)掌握各种不同的软件生命周期模型
(2)能够针对某一具体项目选用合适的生命周期模型,对比和比较各种生命周期模型。
(1)迭代的定义;
(2)递增的定义;
(3)生命周期模型。
迭代-递增生命周期模型。
√课堂讲授 □小组活动 □实验演示 √难点答疑 √提问
√文字教材 √电子教案 □录像材料 □录音材料 □直播课堂
(1)描述什么情况下螺旋生命周期模型不适用?
(2)描述什么样的产品是螺旋生命周期模型的理想应用?
(3)在迭代-递增生命周期模型中如何使用逐步求精?
教学课件《第2章软件生命周期模型》
第 2 次教学活动设计
复习上节课内容,包括软件工程的概念、传统开发范型和面向对象范型。
复习完这些重点知识后,向学生提问:
能否举个例子说明理想状况下软件开发的过程是什么?
2.1理论上的软件开发
在理想世界中。
软件产品像第一章所描述的那样开发。
–线性Linear
–从零开始Startingfromscratch
在现实实践中,软件开发完全不同。
–软件专业人员是人,因此会犯错误。
–当软件正在开发时,客户的需求会发生变化。
2.2-2.4小型实例研究
(一)通过Winburg小型系统实例描述进化树生命周期模型,并对比瀑布生命周期模型。
(二)通过野鸭拖拉机公司小型实例研究说明公司业务需求发生变化的时候对软件开发过程所产生的危害。
2.5迭代和递增
基本的软件开发过程是迭代的。
–每个版本比前一个版本离我们的目标更进一步。
处理信息量的限制的一个办法是使用逐步求精的方法。
stepwiserefinement
–集中精力于目前最重要的那些方面。
–那些不紧急的方面延后。
–事情的那个方面最终都要处理,但是要按照目前的重要性依次进行。
2.6修订的Winburg小型实例研究
通过Winburg小型实例把进化树模型添加在迭代-递增模型之上,说明递增的含义。
2.7迭代和递增的风险和其他方面
阐述迭代-递增模型的优点和存在的风险。
2.8迭代和递增的控制
阐述为什么需要对迭代-递增模型进行控制。
2.9其他生命周期模型
描述编码-修补生命周期模型、瀑布生命周期模型、快速原型开发生命周期模型、开源生命周期模型、敏捷过程、螺旋生命周期模型,分别描述几种模型的特点和适用条件。
2.12生命周期模型的比较
对比几种生命周期模型的优点和缺点。
通过本章的学习,掌握各种不同的软件生命周期模型,能够针对某一具体项目选用合适的生命周期模型,对比和比较各种生命周期模型。
第 3 次课程教学方案
3
第3章软件过程
3.1统一过程
3.2面向对象范型内的迭代和递增
3.3需求流
3.4分析流
3.5设计流
3.6实现流
教学目标和要求
掌握统一过程中的五个核心工作流和四个阶段,
掌握统一过程的工作流和阶段之间的差别
重点
难点
(1)统一过程的五个核心工作流;
(2)统一过程的四个阶段。
统一过程工作流与阶段之间的差别。
■课堂讲授 □小组活动 □实验演示 □难点答疑 □提问
■文字教材 ■电子教案 □录像材料 □录音材料 □直播课堂
□CAI课件 □IP课件 □其他资源:
作业或练习
(1)统一过程的“阶段”是什么意思?
(2)瀑布生命周期模型的缺点是交付后的产品可能不满足客户的需求。
统一过程是如何解决这个问题的?
教学课件《第3章软件过程》
第 3 次教学活动设计
复习上节课内容,包括迭代和递增的概念,回顾几种常用的软件开发模型。
举例分析不同的软件开发组织之间的软件开发过程的差异。
3.1统一过程
软件开发过程描述了构造、部署以及维护软件的方式。
统一过程(UnifiedProcess)是一种构造面向对象系统的迭代软件开发过程。
迭代和演化式开发是UP和其它方法中普遍采用的开发方法。
开发被组织成一系列固定的短期小项目,每次迭代都产生可执行的局部系统,都具有各自的需求分析、设计、实现和测试活动。
3.2面向对象范型内的迭代和递增
统一过程是一种建模技术
●模型是一套UML图表,表示要开发的软件产品的一个或多个方面。
UML是一种建模语言
●表示(模拟)目标软件产品的工具
面向对象范型是一种迭代和递增方法
●每个工作流由一些步骤组成,为了完成该工作流,重复执行工作流的步骤直至开发小组成员认为UML图的表示是正确的。
需求流的目标
●确定客户需求
任务
●首先,理解应用领域(applicationdomain)
⏹特定的业务环境
●其次,业务建模
⏹利用UML描述业务过程
分析流目标
●分析和提取需求,以获得正确开发软件产品和易于维护产品所必需的需求
为什么没有在需求流中进行?
●需求流的输出必须完全能够被客户理解
●分析流的输出必须是精确的
需求制品必须用客户的语言表达
●所有的自然语言都是不精确的
●需求流和分析流的分离是必要的
目标
●是细化分析流的制品,使程序员根据设计制品可以直接编程实现
传统设计
●体系结构设计(总体设计)
⏹将产品分解为各个模块
●详细设计
⏹设计每个模块:
––数据结构
––算法
面向对象设计
●“类”(可被视为特殊类型的模块)在分析流期间被提取出来,在设计流期间进行设计。
●传统的体系结构设计对应于分析流的一部分
●传统的详细设计对应于设计流的一部分
实现流的目标
●是用选择的实现语言实现目标软件产品
大型软件产品被分为一个个的子系统
子系统包含组件和代码制品
通过本章的学习,掌握统一过程中的五个核心工作流和四个阶段。
第 4 次课程教学方案
4
3.7测试流
3.8交付后维护
3.9退役
3.10统一过程的各阶段
3.11一维和二维生命周期模型
3.12改进软件过程
3.13能力成熟度模型
(1)解释统一过程的工作流和阶段之间的差别
(2)理解软件过程改进的重要性
统一过程的四个阶段。
课本第63页10-16题
板书
设计
第 4 次教学活动设计
复习上节课内容,回顾软件过程中的几种过程流。
从统一过程模型导入。
参加人员
●每个开发人员和维护人员
●质量保证小组
制品的可追踪性是成功测试的重要保证
在统一过程中,测试从始至终与其他工作流并行进行
测试流的性质随着被测试的制品的不同而不同
软件开发过程的重要组成部分
各类文档的缺乏会给维护带来很大的困难
需要两种类型的测试
●针对更改本身的测试
●回归测试
软件使用了若干年后,当进一步的交付后维护已经不值得时,软件就达到了退役阶段
四个递增阶段
●初始阶段(Inceptionphase)
●细化阶段(Elaborationphase)
●构造阶段(Constructionphase)
●转换阶段(Transitionphase)
统一过程中执行的每一个步骤属于五个核心工作流之一,也属于四个阶段之一。
对比瀑布模型和进化树模型
软件开发的根本问题在于人们不能对软件过程进行管理。
CMM提供了一个成熟度等级框架:
1级-初始级、2级-可重复级、3级-已定义级、4级-已管理级和5级-优化级。
关键过程域(KPA):
是一个组织进入级别时要实现的目标
通过本次课的学习,掌握统一过程的工作流和阶段之间的差别,理解软件过程改进的重要性。
第 5 次课程教学方案
5
第4章软件小组
4.1小组组织
4.2民主小组方法
4.3传统的主程序员小组方法
4.4主程序员小组和民主小组之外的编程小组
(1)明确一个组织良好的软件小组的重要性
(2)掌握现代分级小组是如何组织的,
(1)民主小组方法;
(2)传统的主程序员小组方法。
分散决策形式下的技术管理沟通渠道。
课本第73页1-9题
教学课件《第4章软件小组》
第 5 次教学活动设计
回顾第一章软件工程范畴的内容,说明软件工程领域不仅仅包含开发技术的应用和研究,同时还涉及经济学、管理学等相关的内容,引入软件开发团队的组织的重要性。
通过实例说明分模块完成任务,并非简单的各自完成模块任务,还存在协调问题
开发小组的组织是一个管理问题,与程序员的技术能力无关;
布鲁克斯法则:
向一个已经延期的软件项目增加人员会使该项目完成得更晚;
无我编程(egolessProgramming),鼓励他人找出自己程序中的错误
强调集体,小组成员是平等的,打破程序员对自己开发程序的“护短”心理,主要目的尽可能多地发现BUG,这种方法的优点就是对查找错误的积极态度
需要成员都是有经验的专家
一般适合开源项目的开发(10人)
主程序员小组的两个关键特性:
⏹专业化:
小组的每个成员只承担其接受过培训的那部分工作;
⏹等级性:
主程序员指导小组所有其他成员的行动,并且对该项目的每个方面负责;
主程序员既是一个成功的管理者,也是一个训练有素的程序员,他完成结构化设计以及代码中的关键和复杂的部分
其他的小组成员在主程序员指导下进行具体的细节设计和编写代码
在程序员之间没有沟通的渠道,所有的接口问题都由主程序员解决;
最后,主程序员审查其他小组成员的工作,因为主程序员个人要对每行代码负责;
备程序员应该在各方面与主程序员一样有能力,并且需要与主程序员一样深入了解这个项目,另外,为让主程序员集中精力进行结构化设计,备程序员应进行黑盒测试的用例规划,并承担其他与设计过程独立的任务;
编程秘书是主程序员小组中一个精通专业、收入颇丰的核心人物;
4.4主程序员小组和民主小组之外的编程小组
从民主小组和主程序员小组的优点中得出的另一种方法是适当分散决策过程。
通过本次课的学习,明确一个组织良好的软件小组的重要性,描述现代分级小组是如何组织的。
第 6 次课程教学方案
6
4.5同步-稳定小组
4.6敏捷过程小组
4.7开源编程小组
4.8人员能力成熟度模型
4.9选择合适的小组组织
掌握现代分级小组是如何组织的
了解各种不同小组组织的优缺点。
同步-稳定小组
选择合适的小组组织
课本第73页10-15题
第 6 次教学活动设计
回顾上次课内容,包括民主小组组织和主程序员小组组织。
通过分析这两种组织形式的优缺点引入新课。
微软公司采用的方式
程序员与测试员1:
1比例配备(3-8)
构件并行小组(3-4小组,每组一个程序管理者)
具备民主小组的特点(鼓励单个程序员的创新),同时为了协同工作,每天必须进行工作同步-(每天将产品输入数据库,进行同步编译或测试),发现问题当天解决
结对编程(一个编写程序代码,另一个编写测试用例),同一台计算机上工作
具备无我编程的特点
水平弱的可以向水平高的学习
参与开源项目的个人志愿者出于两个原因:
●完成一项值得做的任务的成就感;
●得到培训的经验,得到较新技术方面的技能。
对于一个成功的开源项目
●目标产品的特性
●组织者的个性
●核心小组成员的天资
描述管理合开发一个组织的人力资源的最佳实践
举例
●Level2:
关键过程区
安置员工,沟通合协调,工作环境,性能管理,培训和开发以及补偿
●Level5:
连续能力提高,组织的能力联合以及连续人力资源改革
没有一个解决方案可以解决编程小组组织的所有问题.
较为“正确”方法是
●依据需要建造的软件产品本身
●各种小组结构经验
●组织文化
通过本次课的学习,掌握现代分级小组是如何组织的,了解各种不同小组组织的优缺点。
第 7 次课程教学方案
7
第5章软件工程工具
5.1逐步求精法
5.2成本-效益分析法
5.3分治
5.4关注分离
5.5软件度量
5.6CASE
通过本章的学习,理解逐步分离法,理解分治,理解关注分离的重要性,选择适当的软件度量。
逐步求精法、分治、关注分离
选择适当的软件度量
?
课堂讲授 □小组活动