1、软件工程理论教学大纲(2000 年制订,2004 年修订)课程编号:210024英 文 名:Software Engineering课程类别:专业主干课前 置 课:计算机导论、程序 设计基础、数据 结构、面向对象程序设计、离散数学后 置 课:毕业设计和毕业论文学 分:3 学分课 时:48 课时(其中理论教学 32 课时,实验教学 16 课时)主讲教师: 韩忠愿等选定教材: 张海藩. 软件工程 . 北京:人民邮电出版社. 2002 年.课程概述:本课程面向信息系统与信息管理专业的学生,介绍软件系统性质、目标、环境的分析方法,目标系统逻辑联系、功能联系、控制联系和状态转换过程的描述方法,软件结构、
2、测试方案的设计要求和分析方法,软件工程学新进展,以及上述过程所用的规范化图文数表模型。具体包括:软件工程概念及其过程模型、结构化分析/设计/ 实现方法和工具,面向对象方法学及面向对象的概念、模型、分析方法、设计方法、实现方法,软件项目管理及其定量度量方法、相关国际标准。最后介绍佩特网等形式化方法、统一建模语言、软件常用技术和软构件的分类与检索。教学目的:本课程的教学目的,应使学生掌握大型复杂软件系统的开发方法、规则和工具。首先,应使其克服长期书写小程序形成的“重编码、轻分析设计;重编码、轻技术资料建设和管理”的习惯;其次,要理解软件工程原理/方法/ 规则的必要性和掌握其技术细节;第三,要了解软
3、件工程学的进展和前沿动态;第四,要通过软件系统设计的练习,巩固和应用所学知识。教学方法:本课程的难点在于,学生不曾经过大型软件开发的训练,因此在讲解中要适时插入大量软件开发事例,要求教师具有一定的软件开发经验;本课程不安排具体编程环境和开发语言的学习,但必须以大型软件开发实例说明问题,因此要求教师熟悉多种开发环境和开发语言;此外,软件开发技术的滞后和软件应用的广泛性所形成的反差,要求教师了解并适时提出计算机辅助软件工程(CASE) 的问题。因此,作为教师,应把案例的收集和规律的提取作为重点;作为学生,重点是掌握基本思想和基本方法及其综合应用。教学中以讲授和讨论为主,实验内容则是在 Power
4、Designer、Project、 IBM Rational Rose 等 CASE 环境下实习理论教学中的建模、分析和管理过程。各章教学要求及教学要点第一章 软件工程概述课时分配:2 课时教学要求:本章对计算机软件工程学进行简短的概述。首先要通过回顾计算机系统软硬件关系的发展简史,说明开发软件的一些错误方法和观念是怎样形成的。然后列举这些错误方法带来的严重弊病(软件危机),澄清一些糊涂观念。为了计算机系统的进一步发展,需要认真研究开发和维护软件的科学技术。应总结计算机软件技术发展的历史经验教训,借鉴其他工程领域的管理技术。教学内容:第一节 软件工程一、什么是软件工程概括地说,软件工程是指导计
5、算机软件开发和维护的工程学科。采用工程的概念、原理、技术和方法来开发与维护软件,把经过时间考验而证明正确的管理技术和当前能够得到的最好的技术方法结合起来,以经济地开发出高质量的软件并有效地维护它,这就是软件工程。二、软件工程的基本原理1用分阶段的生命周期计划严格管理;2坚持进行阶段评审;3实行严格的产品控制;4采用现代程序设计技术;5结果应能清楚地审查;6开发小组的人员应该少而精;7承认不断改进软件工程实践的必要性。第二节 软件工程方法学一、方法学(methodology)范型(paradigm)瀑布模型、喷泉模型、快速原型模型、增量模型、螺旋模型。二、软件工程方法学三要素:方法、工具和过程。
6、三、传统方法学和面向对象方法学思考题:1.什么是软件工程?怎么应用软件工程消除软件危机?2.软件工程化的观点认为,软件生命周期包含哪些阶段?3.简要论述结构化范式和面向对象范式的要点,并比较这两种范式的优缺点。第二章 软件过程课时分配:2 课时教学要求:本章需要明确:软件过程是为了获得高质量软件产品所需要完成的一系列任务的框架,它规定了完成各项任务的工作步骤。软件过程必须科学、合理,才能开发出高质量的软件产品。按照在软件生命周期全过程中应完成任务的性质,在概念上可以把软件生命周期划分成问题定义、可行性研究、需求分析、概要设计、详细设计、编码和单元测试、综合测试以及维护等八个阶段。实际从事软件开
7、发工作时,软件规模、种类、开发环境及使用的技术方法等因素,都影响阶段的划分。因此,一个科学、有效的软件过程应该定义一组适合于所承担的项目特点的任务集合。据此,本章讲授五类典型的软件生命周期模型及其特点。教学要点第一节 软件生命周期的基本任务一、问题定义“要解决的问题是什么?”二、可行性研究“上一个阶段所确定的问题是否有行得通的解决办法?”三、需求分析用规格说明(specification) 定义“目标系统必须做什么?”四、概要设计“怎样实现目标系统?”五、详细设计“怎样具体地实现这个系统?”六、编码和单元测试写出正确的容易理解、容易维护的程序模块。七、综合测试通过各种类型的测试及相应的调试,使
8、软件达到预定的要求。八、软件维护通过各种必要的维护活动使系统持久地满足用户的需要(改正性维护、适应性维护、完善性维护、预防性维护)。第二节 瀑布模型一、阶段间具有顺序性和依赖性。二、推迟实现的观点。三、质量保证的观点。思考题:1.什么是软件过程?它与软件工程方法学有什么关系?2.假设你要开发一个软件,它的功能是把某个数开平方,所得的结果应该精确到小数点后 4 位。一旦实现并测试完毕后,该产品将会被抛弃。你打算选用哪种软件生命周期模型?3.列出上一题所述软件产品在开发过程中可能遇到的风险。第三章 结构化分析课时分配:3 课时教学要求:本章讲授用户需求的发现、求精、建模、规格说明和复审的过程。本章
9、还要说明模型的以下作用:1.模型能帮助分析员更好地理解软件系统的信息、功能和行为,从而使得需求分析工作更容易完成,使需求分析的结果更系统化。2.模型是复审需求分析成果时的焦点,因此,也成为验证规格说明的完整性、一致性和准确性的重要依据。3.模型是设计的基础,为设计者提供软件的实质性表示,通过设计工作将把这些表示转化成软件实现。在此基础上,引导学生使用实体关系图来建立数据模型,掌握数据流图的基本符号,并能正确地使用这些符号建立目标系统的功能模型。此外,简要说明状态转换图和数据字典。教学内容:第一节 概述一、需求分析的含义(发现、求精、建模、规格说明和复审的过程) 。二、模型为了理解事物而对事物做
10、出的一种抽象,是对事物的一种无歧义的书面描述。三、结构化分析通常建立数据模型、功能模型和行为模型等三种模型。四、用分析模型表示软件需求并写出准确的软件需求规格说明。第二节 需求分析与需求工程一、访谈访谈(或称为会谈 )。最早开始运用的获取用户需求的技术,也是迄今为止仍然广泛使用的主要的需求分析技术。二、规格说明技术。这种方法提倡用户与开发者密切合作,共同标识问题,提出解决方案的要素,商讨不同的方法并指定基本的需求。三、软件原型化方法。构建原型的要点是,它应该实现用户看得见的功能(例如屏幕显示或打印报表) ,省略目标系统的“隐含”功能(例如修改文件 )。第三节 软件需求规格说明一、软件需求规格说
11、明简略大纲。引言、信息描述、功能描述、行为描述、确认标准、参考书目、附录。二、需求规格说明书各部分的撰写要点。第四节 实体关系图数据模型包含三种相互关联的信息:数据对象、描述数据对象的属性及数据对象彼此间相互连接的关系。第五节 数据流图一、数据流图符号。正方形(或立方体)表示数据的源点或终点;圆角矩形(或圆形)代表变换数据的处理;开口矩形( 或两条平行横线)代表数据存储;箭头表示数据流,即特定数据的流动方向。二、例子。三、图元命名。第六节 状态转换图一、状况转换图的各种图形结构要素。二、换图的应用实例。第七节 数据字典一、数据字典是为了描述在结构化分析过程中定义的对象的内容而使用的一种半形式化
12、的工具。二、数据字典是所有与系统相关的数据元素的有组织的列表。三、数据字典是对系统中使用的所有数据元素的定义的集合。四、数据字典的内容(名字、别名、使用地点与方式、内容描述、补充信息) 。五、数据字典中表示数据构成的符号。思考题:1.银行计算机储蓄系统的工作过程大致如下:储户填写存款单和取款单,由业务员键入系统。如果是存款,则系统记录存款人姓名、住址(或电话号码) 、身份证号、存储类型、存款日期、到期日起、利率及密码等信息,并打印存款单给储户;如果是取款而且存款时留有密码,则系统首先核对储户密码,若密码正确和存款时未留密码,则计算利息并打印利息清单。2.用数据流图描绘本系统的功能,并用实体联系
13、图描绘系统中的数据对象。第四章 结构化设计课时分配:6 课时教学要求:本章应使学生学会用各种图形描绘软件结构。描述程序处理过程的工具,可分为图形、表格和语言三类,这三类工具各有所长,教学中应该让学生能够根据需要选用适当的工具。教学内容:第一节 结构化设计与结构化分析的关系结构化分析的结果为结构化设计提供了最基本的输入信息,结构化设计是结构化分析的继续。第二节 软件设计的概念和原理一、模块化。模块是由边界元素限定的相邻的程序元素(例如,数据说明,可执行的语句) 的序列,而且有一个总体标识符来代表它。像 Pascal 或 Ada 这样的块结构语言中的 Beginend 对,或者 C, C+和 Ja
14、va 语言中的对,都是边界元素的例子。因此,过程、函数、子程序和宏等,都可作为模块。面向对象范型中的对象是模块,对象内的方法也是模块。模块是构成程序的基本构件。模块化就是把程序划分成独立命名且可独立访问的模块,每个模块完成一个子功能,把这些模块集成起来构成一个整体,可以完成指定的功能满足用户的需求。1.模块可分解性;2.模块可组装性;3.模块可理解性;4.模块连续性;5.模块保护性。二、抽象。三、逐步求精。四、信息隐藏。第三节 模块独立一、耦合。耦合是对一个软件结构内不同模块之间互连程度的度量,分为数据耦合,控制耦合,公共环境耦合,内容耦合。二、内聚。内聚标志一个模块内各个元素彼此结合的紧密程
15、度,它是信息隐蔽和局部化概念的自然扩展。分为功能内聚、顺序内聚、通讯内聚、过程内聚、时间内聚、逻辑内聚、偶尔内聚。第四节 启发规则一、改进软件结构提高模块独立性。二、模块规模应该适中。三、深度、宽度、扇出和扇入都应适当。四、模块的作用域应该在控制域之内。五、力争降低模块接口的复杂程度。六、设计单入口单出口的模块。七、模块功能应该可以预测。第五节 表示软件结构的图形工具一、层次图。二、HIPO 图。三、层次图和 HIPO 图的区别和所适用的情况。第六节 面向数据流的设计方法一、概念。1.变换流如果数据流图中的输入经过加工处理后才沿输出通道变换成外部形式后离开软件系统,这种数据流称为变换流。2.事
16、务流如果数据流图中的输入未经加工处理后就沿多个输出通道离开软件系统进入下一个分支,这种数据流称为变换流。二、变换分析。复查基本系统模型、复查并精化数据流图、确定数据流图具有变换特性还是事务特性、确定输入流和输出流的边界,从而孤立出变换中心、完成“第一级分解” 、完成“第二级分解” 、使用设计度量和启发规则对第一次分割得到的软件结构进一步精化。三、事务分析。事务分析的设计步骤和变换分析的设计步骤大部分相同或类似,主要差别仅在于由数据流图到软件结构的映射方法不同。四、设计优化。第七节 过程设计一、经典的结构程序设计。只允许使用顺序、IF-THEN-ELSE 型分支和 DO-WHILE 型循环这三种
17、基本控制结构。二、扩展的结构程序设计。除了上述三种基本控制结构之外,还允许使用 DO-CASE 型多分支结构和 DO-UNTIL型循环结构。三、修正的结构程序设计。在上述结构的基础上,再加上允许使用 LEAVE(或 BREAK)的结构。第八节 过程设计的工具描述程序处理过程的工具称为过程设计的工具,它们可以分为图形、表格和语言三类。一、程序流程图。二、盒图(N-S 图) 。盒图没有箭头,因此不允许随意转移控制。坚持使用盒图作为详细设计的工具,可以使程序员逐步养成用结构化的方式思考问题和解决问题的习惯。三、PAD 图。用二维树形结构的图来表示程序的控制流,将这种图翻译成程序代码比较容易。四、判定
18、表。当算法中包含多重嵌套的条件选择时,判定表能够清晰地表示复杂的条件组合与应做的动作之间的对应关系。五、判定树。判定表虽然能清晰地表示复杂的条件组合与应做的动作之间的对应关系,但其含义却不是一眼就能看出来的,初次接触这种工具的人要理解它需要有一个简短的学习过程。判定树是判定表的变种,也能清晰地表示复杂的条件组合与应做的动作之间的对应关系。六、过程设计语言(PDL)。思考题:1.分析模型中的哪些信息为数据设计奠定了基础?哪些信息为软件体系结构设计奠定了基础?那些信息为接口设计奠定了基础?那些信息为过程设计奠定了基础?2.为每种类型的模块偶合举一个具体例子。3.对每种类型的模块内聚举一个具体例子。
19、4.举例说明信息隐藏和模块独立的关系。5.举例说明藕合和可移植性的关系。第五章 结构化实现课时分配:3 课时教学要求:学习本章后,为了设计出有效的测试方案,学生必须深入理解并应用指导软件测试的基本准则,应该能够应用各种测试方法设计软件系统的测试方案,并根据测试结构进行错误定位、软件调试和软件可靠性估计等后续工作。教学内容:第一节 软件实现的基本问题一、选择程序设计语言。二、编码风格。程序内部的文档、数据说明、语句构造、输入/输出、效率。第二节 软件测试基础一、测试目标。1.测试是为了发现程序中的错误而执行程序的过程;2.好的测试方案是极可能发现迄今为止尚未发现的错误的测试方案;3.成功的测试是
20、发现了至今为止尚未发现的错误的测试。二、黑盒测试和白盒测试。三、测试准则。1.所有的测试都应该能追溯到用户需求;2.应该在测试开始之前的相当长时间,就制定出测试计划;3.测试发现的错误中的 80%很可能是由程序中 20%的模块造成的;4.测试应该从“小规模”开始,并逐步进行“大规模”测试;5.穷举测试是不可能的;6.为了达到最佳的测试效果,应该由独立的第三方来从事测试工作。四、流图。第三节 逻辑覆盖一、语句覆盖。二、判定覆盖。三、条件覆盖。四、判定/条件覆盖。五、条件组合覆盖。第四节 控制结构测试一、基本路径测试。1.根据过程设计结果画出相应的流图;2.计算流图的环形复杂度;3.确定线性独立路
21、径的基本集合;4.设计可强制执行基本集合中每条路径的测试用例。二、条件测试。三、数据流测试。四、循环测试。1.简单循环;2.嵌套循环;3.串接循环。第五节 黑盒测试技术一、等价划分。1.如果规定了输入值的范围,则可划分出一个有效的等价类输入值在此范围内(两个无效的等价类输入值小于最小值或大于最大值)。2.如果规定了输入数据的个数,则类似地也可以划分出一个有效的等价类和两个无效的等价类。3.如果规定了输入数据的一组值,则每个允许的输入值是一个有效的等价类,此外还有一个无效的等价类(任一个不允许的输入值) 。4.如果规定了输入数据必须遵循的规则,则可以划分出一个有效的等价类(符合规则) 和若干个无
22、效的等价类(从各种不同角度违反规则) 。5.如果规定了输入数据为整型,则可以划分出正整数、零和负整数等三个有效类。6.如果程序的处理对象是表格,则应该使用空表,以及含一项或多项的表。二、边界值分析。三、错误推测。第六节 测试策略一、测试步骤。二、单元测试。1.代码审查;2.软件测试。三、集成测试。1.自顶向下集成;2.自底向上集成;3.回归测试;4.不同集成测试策略的比较。四、确认测试。第七节 调试一、调试过程。二、调试途径。1.蛮干法;2.回溯法;3.原因排除法。思考题:航空公司向软件公司订购了一个规划飞行路线的程序。假设你是另一软件公司的软件工程师。航空公司已雇用你在的公司对上述程序进行验
23、收测试。你的任务是,根据下述事实设计验收测试的输入数据,并解释你选取这些数据的理由:领航员向程序输入出发点和目的地,以及根据天气和飞机型号而初步确定的飞行高度。程序读入途中的风向风力等数据,并且制定出三套飞行计划(高度、速度、方向及途中的五个位子校核点) 。所制定的飞行计划应做到燃油消耗和飞行时间都最少。第六章 面向对象的概念与模型课时分配:3 课时教学要求:面向对象方法学比较自然地模拟了人类认识客观世界的思维方式,本章教学应使学生了解面向对象方法的概念和规律和工具,能够用面向对象的思想描述问题域,从而建立关于软件系统的对象模型,当然,出于面向对象建模的需要,也要重温过程建模和功能建模方法。教
24、学内容:第一节 概述一、面相对象思想基本内涵:OO=Objects+ Classes+ Inheritance+ Communication with messages。二、 面向对象方法学的主要优点。与人类习惯的思维方法一致、稳定性好、可重用性好、较易开发大型软件产品、可维护性好。三、面向对象方法的其他概念。(类 Class)、对象、消息(Message) 、方法(Method)、属性(Attribute)、封装(Encapsulation)、继承(Inheritance)、多态性(Polymorphism)、重载(Overloading)。第二节 对象模型一、表示类&对象的图形符号。二、表
25、示结构的图形符号。三、对象模型之例。第三节 动态模型一、概念。二、符号。第四节 功能模型一、表示方法。二、三种模型之间的关系。思考题:1.试分析传统的生命周期方法学的优缺点。2.什么是面向对象方法学?这种方法有什么优点?3.什么是对象?它与传统的数据有何关系?有何不同?4.什么是模型?开发软件为什么要建立模型?5.什么是对象模型?6.什么是动态模型?7.什么是功能模型?第七章 面向对象分析课时分配:2 课时教学要求:本章介绍面向对象思想和方法在具体软件系统分析中的应用,包括一些具体的操作技术,如对象、属性、联系和行为的初选和求精等。本章讲述的自动取款机系统和电梯系统这两个实例,应该有助于读者更
26、深入、具体地理解面向对象分析的方法与过程。教学内容:第一节 分析过程一、概述。二、三个子模型与五个层次。第二节 需求陈述一、书写要点。二、例子。第三节 建立对象模型一、确定类&对象。1.找出候选的类&对象;2.筛选出正确的类&对象。二、确定关联。1.初步确定关联;2.筛选;3.进一步完善。三、划分主题。四、确定属性。1.分析;2.选择。五、识别继承关系。六、反复修改。第四节 其他过程一、建立动态模型。二、建立功能模型。三、定义服务。第五节 面向对象分析实例思考题:1.用面向对象方法分析研究一个储蓄系统,试建立它的对象模型、动态模型和功能模型。2.用面向对象方法分析研究一个机票预定系统,试建立它
27、的对象模型、动态模型和功能模型。3.用面向对象方法分析研究一个患者监护系统,试建立它的对象模型、动态模型和功能模型。第八章 面向对象设计课时分配:2 课时教学要求:本章在前面两章关于面向对象思想及其基本应用的系统介绍的基础上,考虑到面向对象分析与结构化分析在过程、要求和原则等方面的相似性,讲授从略;同时考虑到具体实现技术的差异,着重介绍在面向对象方法中实现模块化、信息隐蔽的若干技术。教学内容:第一节 面相对象设计方法与过程一、面向对象设计的准则。二、启发规则。三、系统分解。四、设计问题域子系统。五、设计人-机交互子系统。六、设计任务管理子系统。七、设计数据管理子系统。八、设计类中的服务。九、设
28、计关联。十、设计优化。十一、面向对象分析与设计实例。第九章 计划课时分配:4 课时教学要求:软件工程包括技术和管理两方面的内容,是管理与技术紧密结合的产物。只有在科学而严格的管理之下,先进的技术方法和优秀的软件工具才能真正发挥出它们的威力。因此,本章教学应使学生在认识软件管理特点的基础上,掌握主流的估算和评价指标,并能据此安排和优化软件项目的进度。教学内容:第一节 度量软件规模一、代码行技术。二、功能点技术。功能点技术依据对软件信息域特性和软件复杂性的评估结果,估算软件规模。1.信息域特性输入项数(Inp)、输出项数(Out)、查询数(Inq),主文件数(Maf) 和外部接口数(Inf)。2.
29、计算未调整的功能点数 UFP。3.计算技术复杂性因子 TCF。第二节 工作量估算一、静态单变量模型:E=A+B(ev) C 。二、动态多变量模型:E=LOC B0.333/P 3(1/t)4。三、COCOMO 模型。第三节 进度计划一、基本原则。二、Gantt 图。三、工程网络。四、估算进度。五、关键路径。六、机动时间。思考题:分析研究一个仓库管理信息系统,要求:1.用代码行技术估算本系统的规模;2.用功能点技术估算本系统的规模;3.用静态单变量模型估算开发本系统所需的工作量;4.假设由一个人开发本系统,请制定进度计划;5.假设由两个人开发本系统,请制订进度计划。第十章 软件工程项目管理组织课
30、时分配:2 课时教学要求:本章教学要具体介绍国外比较流行的民主制程序员组、主程序员组和现代程序员组的组织方式,讨论不同组织方式的优缺点和适用范围。然后再从更广阔的角度进一步讨论通用的软件项目组的组织结构问题,主要讲述风险管理、质量保证和配置管理等三类软件工程控制活动。教学内容:第一节 组织策略一、民主制程序员组;二、主程序员组;三、现代程序员组;四、软件项目组。第二节 控制策略一、风险管理;二、质量保证;三、配置管理。第十一章 国际标准课时分配:3 课时教学要求:本章简要地介绍几个与软件项目管理有关的国际标准,供学生在实际工作中参考、借鉴。教学内容:第一节 常用标准一、IEEE1058.1 软
31、件项目管理计划标准。二、ISO9000 质量标准。三、ISO/IEC12207 软件生命周期过程标准。四、ISO/IECTR15504 软件过程评估标准。五、能力成熟度模型。附 录:参考书目 1.齐治昌等. 软件工程M. 北京:高等教育出版社,北京. 1997.2.王选. 软件设计方法M. 北京:清华大学出版社, 1992.3.Pont M J. Software Engineering with C+ and CASE ToolsM. Addison-Wesle,1996.4.周之英. 现代软件工程M. 北京:科学出版社, 1999.5.张海藩. 软件工程导论(第三版 ) M. 北京:清华大
32、学出版社, 1998.6.张海藩. 牟永敏.面向对象程序设计实用教程M. 北京:清华大学出版社, 2001.7.张海藩等. 计算机第四代语言M. 北京:电子工业出版社, 1996.8.蒋慧等. UML 设计核心技术 M. 北京:希望电子出版社, 2001.9.柏路等译. C+面向对象的程序开发技术M. 北京:电子工业出版社, 1996.10.Roger S. Pressman. Software EngineeringA Practitioners Approach. Fourth EditionM. McGraw-Hill,1997.11.Stephen R. Schach. Software Engineering with JavaM. McGraw-Hill,1999.执笔人: 韩忠愿 2004 年 6 月 审定人: 程国达 2004 年 6 月 院(系、部) 负责人:韩忠愿 2004 年 6 月