软件工程导论  教学大纲
一、说明
(一)课程性质
软件工程导论是计算机科学与技术专业的核心课程之一,属于必修课程。该课程的先修课程有计算机导论、程序设计基础、数据结构、面向对象程序设计、离散数学等,后续课程有算法分析与设计,程序设计、软件测试等。
软件工程是研究软件开发维护和软件管理的一门工程科学,本课程是计算机科学与技术专业指导性教学计划规定的教学环节中的一部分。通过本课程的学习,使学生了解软件工程的概念、原理和技术,初步掌握软件开发的基本方法和常用工具,建立软件开发和维护的工程化意识,培养独立思考的能力和团队合作的精神,为后续相关课程的学习以及从事软件开发与维护的实际工作打下良好的基础。
(二)教学目的
本课程的教学目的,应使学生掌握大型复杂软件系统的开发方法、规则和工具。首先,应使其克服长期书写小程序形成的“重编码、轻分析设计;重编码、轻技术资料建设和管理”的习惯;其次,要理解软件工程原理/方法/规则的必要性和掌握其技术细节;第三,要了解软件工程学的进展和前沿动态;第四,要通过软件系统设计的练习,巩固和应用所学知识。
(三)教学内容
本课程面向软件工程专业的学生,介绍软件系统性质、目标、环境的分析方法,目标系统逻辑联系、功能联系、控制联系和状态转换过程的描述方法,软件结构、测试方案的设计要求和分析方法,软件工程学新进展,以及上述过程所用的规范化图文数表模型。具体包括:软件工程概念及其过程模型、结构化分析/设计/实现方法和工具,面向对象方法学及面向对象的概念、模型、分析方法、设计方法、实现方法,软件项目管理及其定量度量方法、相关国际标准。最后介绍佩特网等形式化方法、统一建模语言、软件常用技术和软构件的分类与检索。
(四)教学时数
本课程的教学总时数为90学时,其中,课堂教学时数为54学时,实验教学时数为36学时。
(五)教学方式
本课程的难点在于,学生不曾经过大型软件开发的训练,因此在讲解中要适时插入大量软件开发事例,要求教师具有一定的软件开发经验;本课程不安排具体编程环境和开发语言的学习,但必须以大型软件开发实例说明问题,因此要求教师熟悉多种开发环境和开发语言;此外,软件开发技术的滞后和软件应用的广泛性所形成的反差,要求教师了解并适时提出计算机辅助软件工程(CASE)的问题。因此,作为教师,应把案例的收集和规律的提取作为重点;作为学生,重点是掌握基本思想和基本方法及其综合应用。教学中以讲授和讨论为主,实验内容则是在Power Designer、Visio、Project、IBM Rational Rose等CASE环境下实习理论教学中的建模、分析和管理过程。
二、本文
理论部分
第1章  软件工程学概述
教学要点:
    本章对计算机软件工程学进行简短的概述。首先要通过回顾计算机系统软硬件关系的发展简史,说明开发软件的一些错误方法和观念是怎样形成的。然后列举这些错误方法带来的严重弊病(软件危机),澄清一些糊涂观念。为了计算机系统的进一步发展,需要认真研究开发和维护软件的科学技术。应总结计算机软件技术发展的历史经验教训,借鉴其他工程领域的管理技术。
教学时数:
    4学时。
教学内容:
1.1 软件危机  (0.5学时)
1. 软件危机的介绍。
2. 产生软件危机的原因。
3. 消除软件危机的途径。
1.2 软件工程  (1学时)
1. 软件工程的介绍;
2. 软件工程的基本原理;
3. 软件工程方法学。
1.3 软件生命周期  (0.5学时)
1.4 软件过程  (2学时)
1. 瀑布模型
2. 快速原型模型
3. 增量模型
4. 螺旋模型
5. 喷泉模型
6. Rational统一过程
7. 敏捷过程与极限编程
8. 微软过程
考核要求:
1. 识记:软件工程的概念、软件工程的基本原理和方法。
2. 领会:按照在软件生命周期全过程中应完成任务的性质,在概念上可以把软件生命周期划分为问题定义、可行性研究、需求分析、总体设计、详细设计、编码和单元测试、综合测试以及运行维护共8个阶段。
2章 可行性研究
教学要点:
    本章通过从技术、经济、操作可行性三个角度分析,用最小的代价在尽可能短的时间内确定文体是否能够解决。
教学时数:
  5学时。
教学内容:软件工程学什么
2.1 可行性研究的任务  (0.5学时)
2.2 可行性研究过程  (0.5学时)
2.3 系统流程图  (1学时)
1. 符号
2. 例子;
3. 分层。
2.4 数据流图  (2学时)
1. 符号
2. 例子;
3. 命名;
4. 用途。
2.5 数据字典 (1学时)
    1. 数据字典的内容;
2. 定义数据的方法;
3. 数据字典的用途;
4. 数据字典的实现。
2.6  成本/效益分析  (选讲)
1. 成本估计;
2. 成本/效益分析的方法。
考核要求:
1. 识记:数据流图的基本符号只有4种,它是描绘他对未来的物理系统的设想时,系统流图是一个很好的工具;数据字典精确定义了数据流图中每个元素。
2. 领会:可行性研究进一步探讨问题定义阶段所确定的问题是否可行的解。
3. 综合应用:使用数据流图和数据字典来分析系统的流程和复杂数据信息,更好分析软件系统的可行性。
第3章  需求分析
教学要点:
  本章主要是介绍了需求分析阶段要做的任务,需求分析的方法,以及通过实体-联系图,层次方框图和IPO图来直观描述需求内容
教学时数:
    7学时。
教学内容:
3.1 需求分析的任务  (1学时)
1. 确定对系统的总和要求
2. 分析系统的数据要求;
3. 导出系统的逻辑模型;
4. 修正系统的开发计划。
3.2 与用户沟通获取需求的方法  (1学时)
1. 访谈;
2. 面向数据流自顶向下求精;
3. 简易的应用规格说明书;
4. 快速建立软件原型。
3.3 分析建模与规格说明书  (0.5学时)
1. 分析建模;
2. 软件需求规格说明
3.4 实体-联系图  (2学时)
1. 数据对象;
2. 属性;
3. 联系;
4. 实体-联系图的符号。
3.5 数据规范化  (选讲)
3.6 状态转换图  (1学时)
1. 状态;
2. 事件;
3. 符号;
4. 例子。
3.7 其他图形工具  (1.5学时)
1. 层次方框图;
2. Warnier图;
3. IPO图。
3.8 验证软件需求  (选讲)
1. 从哪些方面验证软件需求的正确性;
2. 验证软件需求的方法;
3. 用于需求分析的软件工具。
考核要求:
1. 识记:为了更好的理解问题,人们常常采用建立模型的方法,结构化分析实质上就是一种建模活动,在需求分析阶段通常建立数据模型、功能模型和行为模型
2. 领会:需求分析是发现、求精、建模、规格说明和复审的过程
3. 综合应用:使用E-R图建立数据模型,使用数据流通建立功能模型,使用状态图建立行为模型。
第5章  总体设计
教学要点:
  本章应使学生学会用各种图形描绘软件结构。描述程序处理过程的工具,可分为图形、表格和语言三类,这三类工具各有所长,教学中应该让学生能够根据需要选用适当的工具。
教学时数:
    6学时。
教学内容:
5.1 设计过程 (1学时)
5.2 设计原理  (1学时)
1. 模块化;
2. 抽象;
3. 逐步求精
4. 信息隐藏和局部化;
5. 模块独立
5.3 启发规则  (2学时)
5.4 描绘软件结构的图形工具  (2学时)
1. 层次图和HIPO图;
2. 结构图。
5.5 面向数据流的设计方法 (1学时)
1. 概念;
2. 变换分析;
3. 事务分析;
4. 设计优化。
考核要求:
1. 识记:模块耦合和模块内聚是模块独立化的必然结果,我们力争在软件开发中做到高内聚低耦合
2. 领会:总体设计阶段主要由两个小阶段组成。首先需要进行系统设计,从数据流图出发设想完成系统功能的若干种合理的物理方案,最终确定一个最佳方案。然后进行软件结构设计,确定软件由哪些模块组成以及这些模块之间的动态调用关系。
第6章  详细设计
教学要点:
    本章主要介绍了软件开发中对系统的详细设计,根本目标是确定应该怎样具体实现所要求的系统,得出对目标系统的精确描述,从而在编码阶段可以把这个描述直接翻译成用某种程序设计语言书写程序。
教学时数:
    7学时。
教学内容:
6.1  结构程序设计  (0.5学时)
6.2  人机界面设计  (1.5学时)
1. 设计问题;
2. 设计过程;
3. 人机界面设计指南。
6.3  过程设计工具  (3学时)
1. 程序流图;
2. 盒图;
3. PAD图;
4. 判定表;
5. 判定树;
6. 过程设计语言。
6.4  面向数据结构的设计方法  (1学时)
1. Jackson图;
2. Jackson方法。