《软件工程》教学大纲
一、 说明
(一)
课程性质
《软件工程》课程是高校计算机及应用专业的重要专业课程,为了掌握开发优质软件的方法和工具,本课程从理论和实用的角度全面系统地讲述了软件工程的基本原理、概念和技术方法,对于培养学生的软件素质,提高学生的软件开发能力与软件项目管理能力具有重要的意义。教材中按软件生存周期的各个部分顺序介绍各个阶段的任务、过程、方法和工具。同时也讲述了近年来迅速发展的面向对象方法学,为以后进行研究和实际开发工作奠定基础。
本课程要求已经开设“计算机语言”、“数据结构”、“数据库原理”、“操作系统”,“面向对象程序设计”等课程为基础。
(二) 教学目的
本课程的目的是使学生通过本课程的学习,了解软件项目开发和维护的一般过程,掌握软件开发的传统方法和最新方法,为更深入地学习和今后从事软件工程实践打下良好的基础。
本课程的具体任务是:
1.概括介绍软件工程学产生的历史背景以及它的基本原理、概念和方法。
2. 按软件生存周期的顺序介绍各个阶段的任务、过程、方法和工具。
3. 讨论软件工程的管理技术。
(三) 教学内容
正文共13章,第一章概括介绍软件工程学产生的历史背景以及它的基本原理、概念和方法。第二章到第八章按软件生存周期的顺序介绍各个阶段的任务、过程、方法和工具。第九章到第十二章对面向对象的方法作了全面、系统、深入的介绍,强调了软件工程与人工智能的相互结合、互相促进的发展趋势。第十三章着重讨论软件工程的管理技术。
(四) 教学时数
课堂教学:36学时 实验教学:36学时 总学时:36+36=72(学时)
(五) 教学方式
以讲授法为主,结合讨论法和案例分析法。
二、 本文
第一章
软件危机与软件工程
教学要点:
什么是软件工程学、软件工程的基本原理、软件工程学所面临的问题、软件工程的现状及其发展前景、软件生命周期及软件开发模型等问题。
教学时数:
2学时
教学内容:
第一节 软件危机
1、 软件危机介绍
2、 产生软件危机的原因
3、 解决软件危机的途径
第二节 软件工程
1、 软件工程的介绍
2、 软件工程的基本原理
3、 软件工程方法学
第三节 软件生命周期
第四节 软件过程
1、瀑布模型
2、快速原型模型
3、增量模型
4、螺旋模型
教学要求:
了解软件危机产生的原因及解决软件危机的途径;掌握软件工程的基本原理和生命周期法;了解瀑布模型、快速原型模型、增量模型、螺旋模型。
考核要求:
领会软件工程的基本原理及生命周期方法学,要求学生明确本课程研究的范围及其所涉及到的领域,从而对软件工程学有一个初步而全面的认识。
1、 领会软件危机的定义;
2、 掌握软件工程的基本原理及生命周期各个阶段的基本任务。
3、 领会软件过程所提供的四种模型。
第二章
可行性研究
教学要点:
可行性研究的必要性,以及它的基本任务和步骤,用于可行性研究的具体方法和工具。
教学时数:
4学时
教学内容:
第一节 可行性研究的任务
第二节 可行性研究的过程
1、 复查系统规模和目标
2、 研究目前正在使用的系统
3、 导出新系统的高层逻辑模型
4、 进一步定义问题
5、 导出和评价供选择的解法
6、 推荐行动方针
7、 草拟开发计划
8、 书写文档提交审查
第三节 系统流程图
1、 符号
2、 例子
3、 分层
第四节 数据流图
1、 符号
2、 例子
3、 命名
4、 用途
第五节 数据字典
1、 数据字典的内容
2、 定义数据的方法
3、 数据字典的用途
4、 数据字典的实现
第六节 成本/效益分析
1、 成本估计
2、 成本/效益分析的方法
教学要求:
掌握可行性分析的任务;掌握可行性研究的步骤;能够应用系统流程图、数据流图及数据字典;了解成本效益分析。
考核要求:
领会可行性研究的必要性,以及它的基本任务和基本步骤,在此基础上再进一步学习具体方法和工具。
1、熟练掌握可行性研究的目的、任务,了解分析的步骤.
2、理解如何绘制系统流程图及数据流图、数据字典的建立方法.
3、掌握数据流图的基本符号,定义数据的方法.
4、掌握成本/效益分析的方法.
第三章
需求分析
教学要点:
需求分析的任务与步骤、需求分析方法与工具、需求分析说明与评审。
教学时数:
2学时
教学内容:
第一节 需求分析的任务
1、 确定对系统的综合要求
2、 分析系统的数据要求
3、 导出系统的逻辑模型
4、 修正系统的开发计划
第二节 与用户沟通获取需求的方法
1、访谈
2、面向数据流自顶向下求精
3、简易的应用规格说明技术
4、快速建立软件原型
第三节 分析建模与规格说明
1、 分析建模
2、 软件需求规格说明
第四节 实体-联系图
1、数据对象
2、属性
3、联系
4、实体-联系图的符号
第五节 数据规范化
第六节 状态转换图
1、状态
2、事件
3、符号
4、例子
第七节 其他图形工具
1、 层次方框图
2、 Warnier图
3、 IPO图
第八节 验证软件需求
1、从哪些方面验证软件需求的正确性
2、验证软件需求的方法
3、用于需求分析的软件工具
教学要求:
理解需求分析的任务;掌握状态转换图、层次方框图、Warnier图、IPO图的使用方法;理解数据规范化概念,掌握INF、2NF、3NF。
考核要求:
领会需求分析的方法,理解需求分析的任务和原则,熟练应用需求分析的工具。
1、了解与用户沟通获取需求的方法;
2、理解快速建立软件原型;
3、了解分析建模与规格说明;
4、理解实体-联系图;
5、理解数据规范化概念,掌握INF、2NF、3NF;
6、掌握状态转换图;
7、掌握层次方框图、Warnier图、IPO图的使用方法;
8、理解验证软件需求的方法;
第四章 形式化说明技术
教学要点:
非形式化方法的缺点,形式化方法的优点,应用形式化方法的准则,有穷状态机,Petri网,Z语言
教学时数:
2学时
教学内容
第一节 概述
第二节 有穷状态机
第三节 Petri网
教学要求:
了解非形式化方法的缺点,形式化方法的优点,应用形式化方法的准则,有穷状态机,Petri网,Z语言的概念
考核要求:
1、了解非形式化方法的缺点,形式化方法的优点,应用形式化方法的准则
2、领会Petri网的概念及方法
第五章
总体设计
教学要点:
软件设计的目标和任务,软件设计概念及原理,模块的独立性,启发式规则,结构化设计方法。
教学时数:
4学时
教学内容:
第一节 总体设计的过程
1、 设想供选择的方案
2、 选取合理的方案
3、 推荐最佳方案
4、 功能分解
5、 设计软件结构
6、 数据库设计
7、 制定测试计划
8、 书写文档
9、 审查和复审
第二节 设计原理
1、 模块化
2、 抽象
3、 逐步求精
4、 信息隐蔽和局部化
5、 模块独立
第三节 启发式规则
1、 改进软件结构提高模块独立性
2、 模块规模应该适中
3、 深度、宽度、扇出和扇入都应适当
4、 模块的作用域应该在控制域之内
5、 力争降低模块接口的复杂程度
6、 设计单入口单出口的模块
7、 模块功能应该可以预测
第四节 庙会软件结构的图形工具
1、 层次图和HIPO图
2、 结构图
第五节 面向数据流的设计方法
1、 概念
2、 变换分析
3、 事务分析
4、 设计优化
教学要求:
理解总体设计的过程;掌握软件设计的概念和原理;理解启发式规则;会应用图形工具和面向数据流的方法解决实际问题。
考核要求:
领会软件设计的概念与原则、概要设计的步骤、方法;
1. 理解总体设计各个过程的内容;
2. 熟练掌握以下概念:模块化、信息隐蔽、局部化、耦合、内聚、模块的深度、,宽度、扇入、扇出、作用域、控制域、变换流、事务流等。
3. 理解内聚的种类及优劣评价、耦合的种类及评价、抽象在总体设计中的应用。
4. 应用总体设计中的图形工具进行系统设计。
5. 理解和掌握面向数据流的设计方法。
6、掌握变换分析及事务分析,了解变换分析和事务分析的区别。
第六章
详细设计
教学要点:
详细设计的任务、详细设计的原则详细设计的方法、程序流程图PFC、N-S图、PAD图、HIPO图、过程设计语言PDL、详细设计方法的选择。
教学时数:
4学时
教学内容:
第一节 结构程序设计
第一节 人机界面设计
第二节 过程设计的工具
1、 程序流程图
2、 盒图(N-S图)
3、 PAD图
4、 判定表
5、 判定树
6、 过程设计语言(PDL)
第三节 面向数据结构的设计方法
1、Jackson图
2、改进的Jackson图
3、Jackson方法
第四节 程序复杂程度的定量度量
1、 McCabe方法
2、 Halstead方法
教学要求:
熟练掌握结构程序设计;会应用详细设计的工具;理解Jackson程序设计方法;掌握程序复杂程度的定量度量。
考核要求:
领会详细设计方法,综合应用详细设计的工具。
1、用程序流程图进行系统设计;
2、熟练掌握程序流程图、N-S图、PAD图等程序设计描述工具;
3、综合应用PAD图及N-S图进行系统设计;
4、掌握判定表、判定树方法进行系统设计;
5、了解PDL语言的特点。。
6、掌握程序复杂程度的定量度量方法。
第七章 实现
教学要点:
选择程序设计语言、编程风格、软件测试基础、单元测试、集成测试、确认测试、白盒测试技术、黑盒测试技术、调试、软件可靠性。
教学时数:
4学时
教学内容:
第一节 编码
1、 选择程序设计语言
2、 编码的风格
第二节 软件测试基础
1、软件测试的目标
2、软件测试准则
3、测试方法
4、测试的步骤
5、测试阶段的信息流
第三节 单元测试
1、测试重点
2、代码审查
3、计算机测试
第四节 集成测试
1、自顶向下集成
2、自底向上集成
3、不同集成测试策略的比较
4、回归测试
第五节 确认测试
1、确认测试的范围
2、软件配置复查
3、Alpha
第六节 白盒测试技术计
1、 逻辑覆盖
2、 控制结构测试
第七节 黑盒测试技术
1、等价划分
2、边界值分析
3、错误推测
第八节 调试
1、 调试过程
2、 调试途径
第九节 软件可靠性
1、 基本概念
2、 估算平均无故障时间的方法
教学要求:
能熟练掌握和应用一门程序设计语言;掌握软件测试的基本概念;会应用软件测试的方法;能综合应用测试方法设计测试方案;掌握调试技术和调试策略;理解软件可靠性的重要性。
考核要求:
要求学生领会程序设计的途径、明确模块测试、组装测试、确认测试分别针对着编码、概要设计、需求分析等不同阶段上的测试,能够运用黑盒法和白盒法设计测试试用例。
1、领会程序的风格并能在开发过程中熟练应用;
2、领会软件测试的目标和软件测试基础;
3、理解单元测试的步骤和方法;
4、领会集成测试和确认测试方法和策略;
5、熟练掌握白盒测试技术并能设计测试方案;
6、掌握黑盒测试技术;
7、了解调试技术以及软件可靠性。
第八章 维 护
教学要点:
软件维护的定义、分类、特点、 软件维护步骤及组织、软件的可维护性。
教学时数:
2学时
教学内容:
第一节 软件维护的定义
第二节 维护的特点
1、 结构化维护与非结构化维护的对比
2、 维护的代价
3、 维护的问题
第三节 软件维护的过程
1、 维护组织
2、 维护报告
3、 维护的事件流
4、 保存维护记录
5、 评价维护活动
第四节 软件可维护性
1、 决定软件可维护性的因素
2、 文档
3、 可维护性复查
第五节 预防性维护
第六节 软件再工程过程
教学要求:
掌握软件维护的定义;能够区分结构化维护和非结构化维护;了解维护过程;理解可维护性的重要性。
考核要求:
领会软件质量保证的概念、策略和方法,软件评审或测试的方法和步骤,软件维护过程。
1、 掌握软件维护的定义;
2、 领会维护的各个过程。
3、 了解软件可维护性
第九章
面向对象方法学引论
教学要点:
传统方法学存在的问题,面向对象方法学的优点,以及对象模型、动态模型、功能模型的基本概念.
教学时数:
4学时
教学内容:
第一节 面向对象方法学概述
1、 面向对象方法学的要点
2、 面向对象方法学的优点
3、 喷泉模型
第二节 面向对象的概念
1、 对象
2、 其他概念
第三节 面向对象建模
第四节 对象模型
1、 类图的基本符号
2、 表示关系的符号
第五节 动态模型
第六节 功能模型
1、 用例图
2、 用例建模
教学要求:
了解传统方法学和软件工程的新途径;掌握基本概念;掌握对象模型、动态模型、功能模型的表示方法以及三种模型的区别和联系。
考核要求:
领会面向对象方法学的基本概念
1、 领会面向对象方法学的优点和概念;
2、 领会面向对象建模和对象模型所定义的图形符号际关系的符号;
3、 掌握对象模型、动态模型、功能模型的概念及方法。
第十章
面向对象分析
教学要点:
面向对象分析过程中的三个子模型和五个层次,对象模型、动态模型、功能模型的建立,以及服务的定义。
教学时数:
2学时
教学内容:
第一节 面向对象分析的基本过程
1、 概念
2、 三个子模型与五个层次
第二节 需求陈述
1、 书写要点
2、 例子
第三节 建立对象模型
1、 确定类与对象
2、 确定关联
3、 划分主题
4、 确定属性
5、 识别继承关系
6、 反复修改
第四节 建立动态模型
1、 编写脚本
2、 设想用户界面
3、 画事件跟踪图
4、 画状态图
5、 审查动态模型
第五节 建立功能模型
1、 画出基本系统模型图
2、 画出功能级数据流图
3、 描述处理框功能
第六节 定义服务
1、 常规行为
2、 从事件导出的操作
3、 与数据流图中处理框对应的操作
4、 利用继承减少冗余操作
教学要求:
掌握面向对象分析的基本过程;掌握需求分析的方法;会实际应用建立对象模型、建立动态模型、建立功能模型;掌握定义服务。
考核要求:
综合应用对象模型、动态模型、功能模型进行面向对象的建模。
1、 领会三个子模型和五个层次;
2、 理解和掌握综合应用对象模型、动态模型、功能模型进行系统开发;
第十一章 面向对象设计
教学要点:
模块化、抽象、信息隐藏、弱耦合、强耦合、可重用的概念,系统分解以及各个子系统的设计。
教学时数:
2学时
教学内容:
第一节 面向对象设计的准则
1、模块化
2、抽象
3、信息隐藏
4、弱耦合
3、 强耦合
6、可重用
第二节 启发规则
1、 设计结果应该清晰易懂
2、 一般—特殊结构的深度应适当
3、 设计简单的类
4、 使用简单的协议
5、 使用简单的服务
6、 把设计变动减至最小
第三节 软件重用
1、 概述
2、 类构件
3、 软件重用的效益
第四节 系统分解
1、 子系统之间的两种交互方式
2、 组织系统的两种方案
3、 设计系统的拓扑结构
第五节 设计问题域子系统
1、调整需求
2、重用已有的类
3、 把问题域类组合在一起
4、 增添一般化类以建立协议
5、 调整继承层次
6、 ATM系统之例
第六节 设计人-机交互子系统
第七节 设计任务管理子系统
第八节 设计数据管理子系统
1、选择数据存储管理模式
1、 设计数据管理子系统
2、 例子
第九节 设计类中的服务
1、 确定类中应有的服务
2、 设计实现服务的方法
第十节 设计关联
1、关联的遍历
2、实现单向关联
3、实现双向关联
1、 链属性的实现
第十一节 设计优化
1、 确定优先级
2、 提高效率的几项技术
3、 调整继承关系
教学要求:
掌握软件维护的定义
考核要求:
领会模块化、抽象、信息隐藏、弱耦合、强耦合、可重用的概念。
1、 了解面向对象设计的准则;
2、 领会启发式规则以及软件重用的定义;
3、 了解各个子系统的设计方法。
第十二章 面向对象实现
教学要点:
面向对象的语言以及程序设计的风格。
教学时数:
2学时
教学内容:
第一节 程序设计语言
1、 面向对象语言的缺点
2、 面向对象语言的技术特点
3、 选择面向对象语言
第二节 程序设计风格
1、 提高可重用性
2、 提高可扩充性
3、 提高健壮性
第三节 测试策略
1、面向对象的单元测试
2、面向对象的集成测试
3、面向对象的确认测试
第四节 设计测试用例
1、测试类的方法
2、集成测试方法
教学要求:
了解面向对象的程序设计语言;理解程序设计风格;掌握面向对象的测试。
考核要求:
领会面向对象的语言以及程序设计的风格。
1、 掌握程序设计语言及其风格;
2、 理解和领会对象测试的概念。
第十三章 软件项目管理
教学要点:
了解成本估计、进度计划、人员组织、质量保证以及项目计划。
教学时数:
2学时
教学内容:
第一节 估算软件规模
1、代码行技术
2、功能点技术
第二节 工作量估算
1、静态单变量模型
2、动态多变量模型
3、COCOMO2模型
第三节 进度计划
1、 估算开发时间
2、 Gantt图
2、工程网络
4、 估算工程进度
5、 关键路径
6、 机动时间
第四节 人员组织
1、 民主制程序员组
2、 主程序组
3、 现代程序员组
第五节 质量保证
1、 软件质量
2、 软件质量保证措施
第六节 软件配置管理
1、 软件配置
2、 软件配置管理过程
第七节 能力成熟度模型
教学要求:
理解成本估计的重要性;了解进度计划;了解人员组织、质量保证、项目计划以及软件管理工具。
考核要求:
领会管理技术在软件工程中的重要性,并能应用一些软件管理技术进行软件开发。
1、领会成本估计、进度计划及人员组织;
2、领会质量保证、项目计划的概念;
3、 掌握Gantt图、工程网络制定进度计划的方法;
4、综合应用软件管理工具进行软件的管理。