1. 课程概要
本课程概要如表1-1所示。
表1-1 “现代软件工程”课程概要
课程编号 |
304064030 |
学分 |
3 |
学时 |
48 |
开课学期 |
三年级秋季学期 |
课程名称 |
中文名现代软件工程 |
||||||
英文名Modern Software Engineering |
|||||||
课程定位 |
软件工程是计算机科学与技术专业的一门重要的专业必修课。它是软件设计与开发以及各种计算机应用系统开发的重要基础。在计算机科学与技术等专业人才培养中,对提高学生的能力、素质和形成良好的知识结构都具有重要意义。通过该课程的学习,可以培养学生用工程化的方法高效地开发高质量软件的初步能力,以及项目管理的初步能力,为以后从事计算机软件的开发和研制打下良好的基础。 |
||||||
课程简介 |
软件工程是计算机学科中一个新兴的并且充满活力的研究领域,软件工程的重要性在于它对贯穿软件的开发过程、运行以及维护的系统化研究。本课程主要内容包括软件过程、方法和工具三个层次,分为两个部分进行课堂讲授:第一部分为软件过程及过程模型,包括软件工程的基本概念和原则,软件过程的通用框架活动和保护性活动,常用的主要软件过程模型和敏捷开发及其过程模型;第二部分为软件建模、构造的方法,包括软件需求分析和建模、软件设计原则、体系结构设计、构件级设计、界面设计和测试策略与技术,软件需求建模与软件设计方法侧重于面向对象技术和UML建模方法,涵盖了WebApp和移动App的分析和设计方法。
|
||||||
教学要求 |
通过授课和实践,使学生: (1) 掌握软件工程的概念和原则,理解软件过程的通用框架活动(沟通、策划、建模、构造和部署),了解软件过程的保护性活动(项目跟踪与监控、风险管理、可复用管理、软件配置管理等); (2) 掌握瀑布模型、增量模型、演化模型等常用软件过程模型及适用条件,理解敏捷开发的理念和常用的敏捷过程模型:XP(IXP)和scrim; (3) 理解需求分析建模原则,掌握软件功能、信息和行为的需求建模方法;理解软件设计概念和基本原则,掌握软件体系结构设计、构件级详细设计和软件界面的设计方法;了解WebApp和移动App的分析和设计方法。 (4) 理解软件测试的概念,掌握软件单元测试、集成测试、确认测试和系统测试等测试策略,掌握白盒测试和黑盒测试技术及其应用; (5) 通过课程实践,实际运用软件工程的原则和方法,掌握软件项目管理和团队开发的工作方法。 |
||||||
教学特色 |
(1)教材与教案均为英语,授课以中文为主,英语为辅; (2)课堂讲授为主,结合课堂小组讨论 (3)软件工程原理、方法与案例相结合 |
||||||
课程类型 |
☑专业基础课程☐专业核心课程 ☐专业选修课程☐实践训练课程 |
||||||
教学方式(单选) |
☑讲述为主☐实验/实践为主 ☐专题讨论为主 ☐案例教学为主☐自学为主☐其他(为主) |
||||||
授课语言(单选) |
☐中文☑中文+英文(英文授课比例10%) ☐英文☐其他外语 |
||||||
考核方式 |
☑考试 ☐考查 ☐考试+考查 |
||||||
成绩评定标准 |
期末成绩40%+(期中成绩30%+作业40%+平时表现30%)*60% |
||||||
教材及主要参考资料 |
教材: [1] (美)罗杰.S.普莱斯曼 软件工程实践者的研究方法(英文精编版 第8版) 机械工业出版社2016.1 或 [2] (美)罗杰.S.普莱斯曼 软件工程实践者的研究方法(英文 原书第8版) 机械工业出版社2016.11 [3] (美) 罗杰.S.普莱斯曼 软件工程实践者的研究方法(原书第8版本科教学版)出版社:机械工业出版社2016.12 注:[1]、[3]为[2]的节选版。 主要参考资料: [1] 伊恩·萨默维尔 软件工程(原书第10版) 机械工业出版 2018.02 [2] 张海藩 软件工程导论 第6版 清华大学出版社 2013.8 [3] D Jeya Mala,S Geetha,马恬煜UML面向对象分析与设计清华大学出版社2018.5 [4] http://www.mhhe.com/engcs/compsci/pressman |
||||||
先修课程 |
本课程面向计算机学院大三学生,要求学生具备良好的沟通能力,掌握了基本的高级编程语言,如C、C++或Java等,此外要求学生已经完成以下课程的学习:1.操作系统;2.数据库系统;3.计算机网络 |
2. 课程教学内容
以下章节为教材[3]
第一章 The Nature of software
内容:介绍软件定义、软件的本质以及其变化
要求:正确理解软件的定义及软件的本质
第二章 Software engineering
内容:介绍软件工程定义、软件过程软件过程:软件过程是工作产品构建时所执行的一系列活动、动作和任务的集合。及过程框架活动1.沟通(Communication):目的是理解利益相关者的项目目标,并收集需求以定义软件特性和功能。
2.策划(Planning):定义和描述了软件工程工作,包括需要执行的技术任务、可能的风险、资源需求、工作产品和工作进度计划。
3.建模(Modeling):利用模型哎更好地理解软件需求并完成符合这些需求的软件设计。
4.构建(Construction):它包括编码和测试以发现编码中的错误。
5.部署(Deployment):软件交付到用户,用户对其进行评测并给出反馈意见。
、软件过程的保护性活动、软件工程实践的精髓和基本原则;
要求:理解软件工程学科的定义和软件过程的含义,掌握沟通、策划、建模、构造和部署5个通用的框架活动,了解项目跟踪和监控、风险管理、技术评审、配置管理等保护性活动及及其作用
第三章 Software process structure
内容:通用的过程模型、框架活动及其任务、过程模式过程模式(process pattern):描述了软件工程工作中遇到的过程相关的问题、明确了问题环境并给出了针对该问题的一种或几种可证明的解决方式。
要求:理解软件过程、通用过程模型、动作和任务之间的关系
第四章 Process model
内容:常用的过程模型:瀑布模型、增量模型、演化模型(原型模型和螺旋模型)、统一过程模型统一过程模型是一种“用例驱动、以体系结构为核心、迭代及增量”的软件 过程框架,由 UML 方法和工具支持。它是一种增量模型和专用过程模型,过程模型的优缺点及其适用范围
要求:理解过程模型的作业,掌握瀑布模型、增量模型、演化模型等过程模型的特点和适用范围,理解增量和迭代是现代软件过程的特点。
第五章 Agile development
内容:敏捷开发理念及宣言敏捷宣言(Agile development manifesto):
个人和这些个人之间的交流胜过了开发过程和工具
可运行的软件胜过了宽泛的文档
客户合作胜过了合同谈判
对变更的良好响应胜过了按部就班地遵循计划,主要的敏捷开发过程模型极限编程XP(IXP工业极限编程IXP是XP的一种有机进化。它由XP的最低限要求、以客户为中心、测试驱动精神组成。IXP和XP的主要差别在于其管理具有更大的包容性,它扩大了用户角色,升级了技术实践。)、Scrum和其它敏捷过程
要求:理解敏捷开发哲学和敏捷宣言,掌握XP和IXP过程模型,了解其它敏捷过程模型,理解敏捷过程模型与传统软件过程模型的区别
第六章 Human aspects of Software engineering (要求自学)
要求学生了软件工程师的素质要求和开发团队的构建
第七章 Understand requirements
内容:需求工程的目的;需求工程的7个不同任务及工作产品:起始、导出、细化、协商、规约、验证和管理,
1.起始(Inception):在项目起始阶段,要建立基本的理解,包括对问题、谁需要解决方案、所期望解决方案的性质、与项目利益相关者和开发人员之间达成初步交流合作的效果。
2.导出(Elicitation –gathering requirements):询问客户、用户和其他人,系统或产品的目标是什么,想要实现什么,系统和产品如何满足业务的要求,最终系统或产品如何利用于日常工作。
3.精化(Elaboration-requirement modeling):在起始和导出阶段获得的信息将在精化阶段进行扩展和提炼该任务集中于开发一个精确的需求模型。
4.协商(Negotiation-win-win):使用迭代的方法给需求排序,评估每项需求对项目产生的成本和风险,表述内部冲突,删除、组合和修改需求,以便参与各方均能达到一定的满意度,实现双赢。
5.规格说明(Specification-document,Model,prototype):一个规格说明可以是一份写好的文档、一套图形化的模型、一个形式化的数学模型、一组使用场景、一个原型或上述各项的任意组合。
6.确认(Validation-Quality assess):在确认这一步对需求工程的工作产品进行质量评估。
7.需求管理(Management-Change):基于计算机的系统其需求会变更,并且变更的要求贯穿于系统的整个生存期。需求管理是用于帮助项目组在项目进展中标识、控制和跟踪需求以及需求变更的一组活动。
如何创建需求工程基础,需求的收集和创建需求分析模型
要求:理解需求工程的重要性、需求工程任务集及工作产品,理解软件需求分析模型包括:功能、信息和行为,了解软件项目的利益攸关者及其协作在理解软件需求中的重要性。
第八章 Requirement Modeling:scenario-based methods
内容:用例和参与者,用例图UML**活动图**在特定场景通过提供迭代流的图形表示来补充用例。,用例场景规约,活动图和泳道图泳道图**是活动图的一种有用变化,可以让建模人员表示用例所描述的活动流,同时指示哪个参与者或分析类是由活动矩形所描述的活动来负责。 ,用例建模案例讲解
要求:理解参与者与用例的概念,掌握用例场景规约的模板及其应用,掌握活动图(泳道图)的基本元素
第九章 Requirement Modeling: Class-based methods
内容:类的定义,分析类的识别识别分析类
外部实体(其他系统、设备、人员),产生或实验基于计算机系统的信息。
事物(报告、显示、字母、信号),问题信息域的一部分。
偶发事件或事件(所有权转移或完成机器人的一组移动动作),在系统操作环境内发生。
角色(经理,工程师,销售人员),由和系统交互的人员扮演
组织单元(部门,组,团队),和某个应用系统相关
场地(制作车间或码头),建立问题的环境和系统的整体功能
结构(传感器、交通工具、计算机),定义了对象的类或与对象相关的类。
,定义分析类的属性和操作,CRC建模方法类-职责-协作者建模(CRC)
CRC模型实际上是表示类的标准索引卡片的集合。
顶部写类名,左侧列出类的职责,右侧部分列出了类的协作者。 ,类与类的关系:关联(泛化和聚合)、依赖,包(Package)的概念及其作用
要求:理解类的概念类:
Entity classes 实体类:一般代表保存在数据库中和贯穿应用程序的事物。
Boundary classes 边界类:创建用户可见的和在使用软件时交互的接口
Controller classes 控制类:管理“控制单元”,掌握类、属性和操作属性:描述了已经选择包含在需求模型中的类 操作:定义了某个对象的行为。的标识方法,理解CRC建模方法,掌握类之间的关联、泛化、聚合和依赖关系,了解Package及其作用
第十章 Requirement Modeling: Behavior, pattern and Web/mobile Apps
内容:行为模型:事件和状态,状态表示和状态图UML状态图就是一种行为模型,该图为每个类呈现了主动状态和导致这些主动状态变化的事件,需求模式(requirement pattern)
要求:理解行为模型的作用和目的,掌握状态图及其元素,了解需求模式。
第十一章 Design concepts
内容:包括软件设计过程、软件质量指导和属性;软件设计概念:抽象、体系结构、模式、关注点分离、模块化、信息隐藏、功能独立、重构、面向对象设计概念、设计类、依赖倒置;
1.抽象(Abstraction):
过程抽象是指具有明确和有限的指令序列(描述动作)
数据抽象是描述数据对象的冠名数据集合(描述动作怎么做)
2.体系结构(Architecture):软件的整体结构和这种结构为系统提供概念完整方式。构件表示主要的系统元素及其交互。
3.模式(Patterns):模式承载了已证实的解决方案的精髓。设计模式描述了在某个特定场景与可能影响模式应用和使用方法的“影响力”中解决某个特定的设计问题的设计结构。
4.关注点分离(Separation of concerns):它表明任何复杂问题如果被分解为可以独立解决和优化的若干块,该复杂问题能够更容易的被处理。
5.模块化(Modularity):模块化是关注点分离最常见的表现。模块化设计使得开发工作更易规划
6.信息隐蔽(Hiding):隐蔽意味着通过定义一系列独立的模块可以得到有效的模块化,独立模块互相之间只交流实现软件功能所必须的那些信息。隐蔽定义并加强了对模块内过程细节的访问约束和对模块所使用的任何局部数据结构的访问约束。
7.功能独立(Functional independence):开发具有“专一”功能和低耦合性的模块即可实现功能独立。
8.求精(Refinement):通过连续精化过程细节层次来实现程序的开发,通过逐步分解功能的宏观陈述直到形成程序设计语言的语句来进行层次开发。
抽象和精化是互补的概念。
9.方面(Aspects):一个方面作为一个独立的模块进行实施,而不是作为“分割的”或者和许多构件“纠缠的”软件片段进行实施。设计体系结构应当支持定义一个方面,该方面即一个模块,该模块能够使该关注点经过它横切的所有其他关注点而得到实施。
10.重构(Refactoring):重构是使用这样一种方式改变软件系统的过程:不改变代码的外部行为而是改进其内部结构。
11.面向对象的设计概念(OO design concepts):
面向对象概念(类、对象、继承、消息和多态)
12.设计类(Design Class):提供设计细节,使程序得以实施。
软件设计模型:数据设计、体系结构设计、接口设计、构件级设计和部署设计
要求:了解软件设计模型的内容,
理解软件设计的主要概念抽象、信息隐藏、关注点分离、模块化、重构、功能独立、面向对象设计概念等,了解模式
第十二章 Archectural Design
内容:软件体系结构的概念软件体系结构是指系统的一个或者多个结构,它包括软件构件、构件的外部可见属性以及它们之间的相互联系。 和重要性1.软件体系结构的表示有助于对计算机系统开发感兴趣的各方展开交流。
2.体系结构突出了早期的设计决策,这些决策对随后所有的软件工程工作有深远影响,同时对系统作为一个可运行实体的最后成功有重要作用。
3.体系结构“构建了一个相对小的、易于理解的模型,该模型描述了系统如何构成以及其构件如何一起工作”
、体系结构的类型和风格1.以数据为中心的体系结构。
2.数据流体系结构。
3.调用和返回体系结构
4.面向对象体系结构
5.层次体系结构、体系结构的设计和评估,WebApp和移动App的设计
要求:了解体系结构的重要性,掌握常见体系结构的风格和体系结构设计方法,了解WebApp和移动App的设计
第十三章 Component-level Design
内容:构件概念1.构件是计算机软件中的一个模块化的构造块。
2.OMG定义构件:系统中模块化的、可部署的和可替换的部件,该部件封装了实现并暴露一组接口。、传统观点的构件(Traditional View):一个构件就是程序的一个功能要素,程序由处理逻辑及实现处理逻辑所需的每部数据结构以及能够保证构件被调用和实现数据传递的结构构成。和面向对象观点(Object-Oriented view):构件包括一组协作的类。 的构件异同、构件设计的基本原则(OCP、LSP、DIP、ISP
开闭原则(Open-Closed Principle ,OCP):模块应该对外延具有开放性,对修改具有封闭性。
依赖倒置原则(Dependency Inversion Principle ,DIP):依赖于抽象,而非具体实现。
Liskov替换原则(Liskov Substitution Principle (LSP)):子类可以替换他们的基类。
接口分离原则(The Interface Segregation Principle (ISP)):多个客户专用接口比一个通用接口好
等)、内聚内聚性(Cohesion):内聚性意味着构件或者类只封装那些相互关联密切,以及与构件或类自身有亲密关系的属性和操作。分为功能内聚,分层内聚,通信内聚 和耦合耦合性(Coupling): 耦合是类之间彼此联系程度的一种定性度量。
随着类(构件)相互依赖越来越多,类之间的耦合程度亦会增加。;构件的详细设计;WebApp/移动App的详细设计
注:为什么要高内聚?
模块之间的关系越紧密,出错就越少!
为什么要低耦合?
子程序间的关系越复杂,就会产生更多的意想不到的错误!会给以后的维护工作带来很多麻烦!
高内聚低耦合,是软件工程中的概念,是判断设计好坏的标准,主要是面向对象的设计,主要是看类的内聚性是否高,耦合度是否低。
要求:理解构件及不同观点的区别,掌握构件设计的基本原则OCP、LSP、DIP、ISP)、内聚和耦合的概念;掌握构件的详细设计;了解WebApp/移动App的详细设计
第十四章 User Interface Design
内容:用户界面的三个黄金原则;
1.用户操纵控制
(1)以不强迫用户进入不必要的或不希望的动作的方式来定义交互模式
(2)允许用户交互被中断和撤销
(3)当技能级别增长时可以使交互流线化并允许定制交互
(4)使用用户与内部技术细节隔离开来
(5)设计应允许用户与出现在屏幕上的对象直接交互
2.减少用户的记忆负担
(1)减少对短期记忆的要求
(2)建立有意义的缺省
(3)定义直观的快捷方式
(4)以不断进展的方式揭晓信息
3.保持界面一致
(1)允许用户当前任务放入有意义的环境中
(2)在应用系统家族内保持一致性
(3)如果过去的交互模型已经建立起了用户期望,除非有迫不得已的理由,否则不要改变它。
用户界面分析(用户分析设计师能够将用户心理模型与设计模型聚合在一起的唯一办法就是努力了解用户,以及了解用户是如何使用系统的、任务分析任务分析的目标就是将这些技术应用到用户界面:用例,任务细化,对象细化,工作流分析,层次分析、显示内容分析、工作环境分析)和用户界面设计(用户模型、心理模型、设计模型和实现模型
工程师建立用户模型。软件工程师创建设计模型。最终用户在脑海中对界面产生映像,称为用户的心理模型或系统感觉。系统的实现者创建实现模型。
用户模型:确定了系统最终用户的轮廓。
设计模型:用户界面的设计
心理模型:最终用户在脑海里对系统产生的印象。
实现模型:组合了计算机系统的外在表现,结合了所有用来描述系统语法和语言的支撑信息。):界面模式和界面评估
要求:理解软件可用性可用性是指用户在使用高科技产品所提供的功能和特性时,对使用的容易程度和有效程度的定量测量。和三个黄金原则,掌握用户界面分析的内容和界面设计用户界面的分析和设计过程是迭代的,用户界面分析和设计过程开始于螺旋模型的内部,并且包括4个阶段:(1)界面分析及建模。(2)界面设计。(3)界面构造。(4)界面确认。界面设计的目标是定义一组界面对象和动作,使得用户能够以满足系统所定义的每个使用目标的方式完成所有定义对的任务。,了解用户界面模式和用户界面评估
第十七章 软件测试策略
内容:软件测试的概念测试:测试是在交付给最终用户之前以特定意图找出错误为目的来执行程序的过程。 和测试策略,从小到大
传统应用软件和面向对象应用软件的测试策略,单元测试、集成测试、确认测试和系统测试
要求:理解软件测试的概念,掌握传统应用软件和面向对象应用软件在单元测试和集成测试上的差别,了解系统测试的类型
第十八章传统应用的测试
内容:测试基础,白盒测试:程序流图、程序独立路径(环路复杂度)和测试用例设计和黑盒测试:等价划分和边界值分析)
要求:理解测试基础,掌握白盒测试和黑盒测试及其应用
第十八章面向对象应用的测试
内容:面向对象分析和设计模型的测试、面向对象环境下的单元测试、集成测测试和确认测试,面向对象测试方法,类及类间的测试方法
要求:理解面向对象环境的单元测试、集成测试与传统应用的单元测试和集成测试的区别,掌握基于故障、基于场景的测试方法及应用;理解类及类的测试方法及应用。
3. 课程实验
该课程的实验为单独课程:现代软件工程课程设计