软件需求工程

开课班次:
开课时间: 2019-03-01 — 2020-10-30
选课时间: 2019-02-01 — 2020-01-30
加入课程 11人 收藏
分享到

课程介绍

本课程是软件工程专业的专业核心课程。课程内容包括需求工程的基础知识、软件需求的基础理论、常用的需求获取方法与技术、常用的需求分析方法、常用的需求分析模型与建模技术、需求管理知识和初步的需求工程过程管理知识。课程在整个软件工程的背景下介绍需求工程知识,试图让学生理解需求工程工作可能给后继软件项目工作带来的影响,并在此基础上全面深入的了解软件需求领域的各项方法、技术与工具。

课程大纲

1会相关知识体系
本课程的知识体系如表B.25所示。

表B.25 软件需求工程课程相关知识体系
编号    描述    k, c, a    E, D, O    学时
MEP-EF.ec.0    软件的工程经济学            4
MEP-EF.ec.1    软件生命周期中的价值考虑    k    E    1
MEP-EF.ec.2    系统目标生成(如共享设计、stakeholder win-win,质量函数实施、原型等)    c    E    1
MEP-EF.ec.3    解决方案成本效益比分析(如收益的实现、折中分析、成本分析和投资收益等)    c    E    1
MEP-EF.ec.4    系统价值实现(如优先权、风险判别、成本控制等)    k    E    1
MEP-PF.pr.0    职业技能            1
MEP-PF.pr.6    软件的经济影响    c    E    1
SEF-MA.md.0    建模基础            2
SEF-MA.md.1    建模原理(例如分解、抽象、一般化、投影/视点、清晰化、使用形式化方法等)    a    E    *
SEF-MA.md.2    前置和后置条件,不变式    c    E    *
SEF-MA.md.3    数学建模和规范语言(Z、VDM等)    c    E    *
SEF-MA.md.4    建模语言的性质    k    E    *
SEF-MA.md.5    语法与语义(理解模型的表示)    c    E    *
SEF-MA.md.6    Explicitness(不作任何假设,或说明所有的假设)    k    E    *
SEF-MA.tm.0    模型类型            5
SEF-MA.tm.1    信息建模(例如实体关系建模、类图等)    a    E    2
SEF-MA.tm.2    行为建模(例如状态图、用例分析、交互图)    a    E    2
SEF-MA.tm.4    领域建模(如领域工程方法等)    k    E    *
SEF-MA.tm.6    企业建模(如业务过程、组织、目标等)    k    D    *
SEF-MA.tm.7    需求交互分析(如特征交互、视点分析等)    k    D    *
SEF-MA.tm.8    分析模式(如问题框架、规范重用等)    k    D    *
SEF-MA.af.0    分析基础            4
SEF-MA.af.1    良好形式分析(如完整性、一致性、健壮性等)    a    E    *
SEF-MA.af.2    正确性分析(如静态分析、模拟和模型检验等)    a    E    *
SEF-MA.af.3    分析质量(非功能性)需求(如安全性、保密性、易用性、性能、根本原因分析等)    a    E    *
SEF-MA.af.4    优先度,折中分析、风险分析和影响分析    c    E    *
SEF-MA.af.5    可追踪性    c    E    *
SEF-MA.af.6    形式化分析    k    E    *
SEF-MA.rfd.0    需求基础            4
SEF-MA.rfd.1    需求定义(如产品、项目、约束、系统边界、外部、内部等)    c    E    *
SEF-MA.rfd.2    需求处理    c    E    1
SEF-MA.rfd.3    需求的层/级    c    E    *
SEF-MA.rfd.4    需求特性    c    E    *
SEF-MA.rfd.5    需求与体系结构的交互    k    E    *
SEF-MA.rfd.6    需求与系统工程的关系、以人为本的设计等    k    D    *
SEF-MA.rfd.7    严重的问题(如结构错误、解决方案的问题等)    k    D    *
SEF-MA.rfd.8    COTS约束    k    D    *
SEF-MA.er.0    需求获取            6
SEF-MA.er.1    获取来源(如投资者、领域专家、操作和组织环境等)    a    E    2
SEF-MA.er.2    获取技术(如会谈、提问/调查、原型、用例、观察、共享技术等)    a    E    4
SEF-MA.er.3    高级技术(如ethnographic、知识获取等)    c    D    1
SEF-MA.rsd.0    需求规约和文档化            4
SEF-MA.rsd.1    需求文档化基础(如类型、受众、结构、质量、属性和标准等)    k    E    1
SEF-MA.rsd.2    软件需求规约    a    E    1
SEF-MA.rsd.3    规格说明语言(如结构化英语、UML等)    k    E    2
SEF-MA.rv.0    需求确认            2
SEF-MA.rv.1    评审和审查    a    E    *
SEF-MA.rv.2    需求确认的原型    c    E    *
SEF-MA.rv.3    确认测试设计    c    E    *
SEF-MA.rv.4    产品质量属性的确认    c    E    *
SEF-MA.rv.5    形式化需求分析    k    D    *
SEF-MA.rm.0    需求管理            2
SEF-MA.rm.1    需求变更管理    c    E    *
SEF-MA.rm.2    需求管理(如一致性管理、发行计划、重用等)    k    E    *
SEF-MA.rm.3    需求跟踪    k    E    *
STP-SD.mod.0    建模工具            4
STP-SD.mod.1    Rational Rose    a    E    4
STP-PM.rm.0    需求管理工具            2
STP-PM.rm.1    Rational RequisitePro    k    E    2

2 教学补充事项
10 对前驱课程的要求
要求计算与软件工程I、II课程向学生介绍初步的软件需求知识,让学生理解软件需求在整个软件工程过程中的定位。计算与软件工程实践课程使学生有初步的需求分析体验。
2 )本课程的教学考虑
教师必须举例说明不好的需求会导致的灾难(经济上和物理上的),以激励那些更加喜欢软件工程中技术和程序设计的学生。同时,力图模拟实际的需求应用环境,让学生理解真实的需求过程。
3) 对后续课程的教学建议
无。

3 教学计划
本课程的教学计划如表B.26所示。

表B.26 软件需求工程课程的教学计划
序号    主题    内容    课时    相关知识点
1    导论    需求在软件开发中的重要性;软件需求工程概述;需求工程的特性;需求工程师的知识要求;课程设置的目的及课程要求    2    SEF-MA.rfd.1~2
SEF-MA.rfd.5~7
2    需求基础    需求的概念和原理;需求的类型;需求的层次;需求开发的思路;优秀需求的特性;常见需求错误分析    2    MEP-PF.pr.6
SEF-MA.rfd.1~4
SEF-MA.rfd.7
SEF-MA.af.1
SEF-MA.af.3
3    需求工程过程    需求工程过程;各项需求工程活动细节;需求工程的迭代特性;有效实践方法的应用    1    SEF-MA.rfd.2
4    需求获取概述    需求获取活动过程;需求获取的常见问题和困难;需求获取的特性    2    SEF-MA.er.1~3
5    确定项目前景和范围    问题分析;建立解决方案;边界定义;前景和范围文档    2    MEP-EF.ec.1~4
SEF-MA.af.4
SEF-MA.rsd.1~2
6    涉众分析与硬数据采样    涉众识别;涉众描述;涉众评估;涉众采样;硬数据采样    2    MEP-EF.ec.1~4
SEF-MA.er.1
SEF-MA.rfd.8
7    需求获取方法    面谈、原型、观察法和文档审查    4    SEF-MA.er.2~3
MEP-EF.ec.3~4
8    需求获取结果的组织    面向目标的方法;基于场景的方法;基于用例的方法    3    SEF-MA.md.1~6
SEF-MA.tm.2
SEF-MA.tm.6~7
SEF-MA.af.1~3
SEF-MA.af.6
SEF-MA.rsd.3
9    需求分析概述    建模与分析理论基础;需求分析技术;需求分析方法;需求分析活动;优先级划分;冲突协商;多视角技术;Win-Win模型;前期需求阶段的需求分析    4    SEF-MA.md.1
SEF-MA.md.3~6
MEP-EF.ec.1~4
SEF-MA.af.3~4
10    过程建模    过程建模;DFD    2    SEF-MA.tm.2
SEF-MA.md.1~6
SEF-MA.rsd.3
SEF-MA.af.1~3
11    数据建模    数据建模;ERD    1    SEF-MA.tm.1
SEF-MA.md.1~6
SEF-MA.rsd.3
SEF-MA.af.1~3
12    面向对象分析    面向对象分析;类图;用例图;行为图;示例    4    SEF-MA.tm.1~2
SEF-MA.md.1~6
SEF-MA.rsd.3
SEF-MA.af.1~3
13    需求规格说明    文档化的作用、手段和类型;需求文档的标准规范;文档化技巧;优秀文档的特性    2    SEF-MA.rsd.1~3
SEF-MA.af.1
14    需求验证    需求验证的目的;需求验证的方法(审查、原型、测试设计、产品确认和形式化分析)    1    SEF-MA.rv.1~5
SEF-MA.af.2
SEF-MA.af.6
15    需求管理    需求管理(一致性管理、发布计划与重用等);可跟踪性;需求变更控制    2    SEF-MA.rm.1~3
SEF-MA.af.4~5
16    实验点评    实验点评    2    

4 课程的重点、难点及解决办法
1)、课程教学重点
(1)    培养学生了解软件需求的基本理论,尤其是关于质量需求的知识。
(2)    培养学生理解并掌握常用需求获取的方法与技术,并能处理获取中的心理因素。
(3)    培养学生理解并掌握各种常用的需求分析方法与技术。
(4)    培养学生理解需求规格说明、需求验证和需求管理的常用方法与技术。
(5)    培养学生理解需求工程中的“工程”性。

2)、课程教学难点
(1)    培养学生对需求获取常用方法与技术的判定与灵活运用能力。
(2)    培养学生对需求分析常用方法与技术的判定、运用与综合能力。
(3)    培养学生理解质量属性需求的重要性。
(4)    培养学生理解需求工程中的“工程”性。

3)、解决办法
(1)    从软件工程的根源着手,在软件工程的体系中讨论软件需求,让学生了解需求工程和软件需求的作用和意义,让学生知道软件需求的来源和去向。例如,课程仔细说明了软件需求怎样基于现实世界中的问题得以产生,也详细解释了软件需求是如何在整个项目周期内发挥作用的。这样使得学生更好地理解需求的作用,尤其是质量属性需求的作用。
(2)    针对需求工程中理论与实践并重的现状,对理论、技术和实践方法进行了全面融合。课程将讲授了需求的基础理论、分析理论等相关理论,又分析了模型驱动方法、建模与分析技术等相关技术,还描述了各种需求实践方法的应用。此外,课程还依据工业界的实践调查数据给出了每一种需求工程活动在实践中的实际表现。这些一方面可以帮助学生更深刻地理解课程涉及的各种方法与技术,另一方面又可以培养学生全面看待需求开发活动的工程观念。
(3)    针对需求工程各项活动,在过程中介绍需求工程的理论、技术和实践方法。需求工程是一个完整的软件开发活动,将它的一些片段独立抽取出来进行介绍不利于对需求工程的整体理解,课程给出了需求工程中每一个活动过程的相应数据流图描述。将所有活动的数据流图描述整合起来,就是一个完整详细的需求工程过程的数据流图描述。这保证了对学生工程观念的培养。
(4)    对需求工程中常见的技术和实践方法进行了梳理和比较分析。需求工程在很多工作的处理上都有着不同的技术和方法,它们各自具有一定的适用性和优缺点。仅仅全面掌握这些技术和实践方法远远不够,还需要能够区别和判定它们的使用差异,并灵活应用它们。为此,课程对常见的技术和实践方法进行了梳理和比较分析,使得学生能够更好的进行方法与技术的判定、运用与综合。
通过实验设计和实践分析,培养学生对质量属性和“工程”性的认知。课程模拟真实的工程环境设计了实验,可以让学生在实验的多方参与、交流和沟通中深刻体会质量属性的作用和软件需求开发的工程性。
5 实验
1)、实验目标
①    使学生掌握需求工程逐步展开的迭代过程;
②    使学生了解实际软件开发工作中的需求过程;
③    是学生更好的掌握需求的种类、特性及其书写规则;
④    使学生掌握需求获取和需求分析的各种技术,并能综合运用;
⑤    使学生掌握需求工程文档的要点和文档写作技巧;
⑥    使学生了解需求验证的常用方法与过程。
2)、实验内容
    实验分为下面几个阶段
①    项目启动
a)    在该阶段,每个小组构想一个需要解决的实际问题,并申请其他小组提供解决方案。
b)    每个小组通过随机选择的方式,选择解决其他小组提出的问题。
c)    提出问题的小组扮演用户方,负责解决问题问题的小组扮演需求工程团队,以需求工程团队为主,完成项目的业务需求分析,建立有效的高层解决方案及系统特性,完成项目前景和范围文档。
②    项目展开
a)    需求工程团队以前景和范围文档为依据,安排计划,展开需求获取活动。
b)    利用需求获取方法,通过4~5次结合获取与分析的迭代过程,获取用户需求。
c)    完成用户需求文档(招标书)。
③    项目定型
a)    每个小组随机选择其他小组完成的用户需求文档(招标书),作为开发方,原问题提出小组仍然为用户方。
b)    开发方在用户方的配合下,负责为用户需求文档设计解决方案。
c)    开发方细化系统需求,建立分析模型,完成软件需求规格说明文档。
④    项目评审
a)    随机选择一个用户方、需求工程团队以外的小组作为软件开发技术人员
b)    每个问题的用户方、需求工程团队、开发方和软件开发技术人员联合进行前景和范围文档、用户需求文档、系统需求规格说明文档和软件需求规格说明文档的综合评审,共同总结整个需求开发中的得失。
3) 实验组织
实验以小组为单位,3~4人一组;每个阶段结束后,所有的小组互相交流工作经验,助教集中讲解该阶段存在的问题。
4 )实验报告
下列实验报告是考核的依据,每次评审的得分为基本数据,计算得到最后的实验得分,其中:
①    前景和范围文档,20%。
②    用户需求文档(招标书),20%。
③    软件需求规格说明文档,30%。

5  课后作业
课后作业应该包含:
(1)    要求学生了解需求工程的实践状况,形成对需求工程方法的基本认知。
(2)    要求学生阅读针对指定技术的经典文献,形成对技术的深入理解。
(3)    要求学生了解并尝试使用需求管理工具。
(4)    完成相应的课后习题,包括:
○1给出有缺陷的需求描述,要求学生进行相关特性的判断,并予以修正。
○2给出具体的应用情景,要求学生设计需求获取的方案。
○3给出简单的需求描述,要求学生使用不同的技术进行建模并加以比较,以加强学生的技术选择与判断能力。
○4给出实际工程中产生的SRS,要求学生尽可能的发现其中的问题并修正。

6  评分体系
   笔试×60%+实验×30%+课后作业×10%。

学习目标

通过本课程的学习,学生应该能够:
(1)    理解需求工程及其各个活动,掌握常用的需求工程技术,能够组织并完成复杂系统的各项需求工程工作。
(2)    掌握常用的需求获取方法与技术,能够用多种方法与技术发现或者提取需求。
(3)    掌握常用的需求分析方法与技术,能够完成需求分析、目标分析和用例分析等建模工作,能够正确的描述和度量质量属性,能够检测并解决特征交互。
(4)    理解常用的需求规格说明技术,能够使用形式化、半形式化和非形式化技术为不同类型系统表示功能性和非功能性需求。
(5)    理解常用的需求确认与验证技术,能够根据标准确认需求,如可行性、清晰性和无二义性。
(6)    理解与需求工程相关的软件“工程性”,能够组织需求,确定需求的优先次序,能够与不同人员会谈得到一致的需求集。

学习要求

1、知识要求
①    理解功能需求和质量属性需求。
②    了解预算、价值实现等软件工程的经济学知识,理解可行性分析方法。
③    掌握面谈、原型、观察等常用的需求获取方法与技术,理解其中与涉众交互、不确定性处理等心理学知识。
④    掌握目标分析、用例分析、结构化分析、面向对象分析等常用的需求分析方法与技术。
⑤    理解形式化语言、半形式化模型、非形式化语言等常用的需求规格说明技术。
⑥    理解评审、原型、测试用例开发等常用的需求确认与验证技术。
⑦    理解优先级划分、冲突协商等与需求工程相关的软件“工程性”。
2、能力要求
①    从技术、经济等多方面因素进行项目的可行性分析,并确定项目目标。
②    用多种方法与技术发现或者提取需求。
③    完成需求分析、目标分析和用例分析等建模工作,能够正确的描述和度量质量属性,能够检测并解决特征交互。
④    使用形式化、半形式化和非形式化技术为不同类型系统表示功能性和非功能性需求。
⑤    根据标准确认需求,如可行性、清晰性和无二义性。
⑥    组织需求,确定需求的优先次序,能够与不同人员会谈得到一致的需求集。
3、实践要求
①    掌握需求工程逐步展开的迭代过程。
②    了解实际软件开发工作中的需求过程。
③    更好的掌握需求的种类、特性及其书写规则。
④    理解和掌握需求获取各种方法、技术的灵活运用。
⑤    掌握需求分析的各种技术,并能综合运用。
⑥    掌握需求工程文档的要点和文档写作技巧。
⑦    了解需求验证的常用方法与过程。
⑧    强化对质量属性和“工程”性的认知。

考核标准

课件浏览100%,客观练习0%,主观练习0%,课内讨论0%。
课程内容不断迭代,成绩以当时的课程内容为准,一旦合格,可以申请证书。申请证书后,以结课处理,成绩不再改动

教材教参

教材:
骆斌, 丁二玉  需求工程——软件建模与分析(第2版)高等教育出版社
教参:
(1)    1 Wiegers K E. 软件需求. 2版. 北京:机械工业出版社,2004.
(2)    Kovitz B L.实用软件需求. 北京:机械工业出版社,2005.
(3)    Leffingwell D, Widrig D. 软件需求管理——统一方法. 北京:机械工业出版社,2002.
(4)    Young R R. 有效需求实践. 北京:机械工业出版社、中信出版社,2002.
(5)    Hay D C. Requirement Analysis. 影印版. 北京:清华大学出版社,2003.
(6)    Larman C, Kruchten P. UML和模式应用. 3版. 北京:机械工业出版社,2006.
(7)    Booch G. 面向对象分析与设计. 2版. 北京:机械工业出版社,2003.
(8)    Kendall K E, et al. 系统分析与设计. 6版. 北京:清华大学出版社,2006.
(9)    Allen S. 数据建模基础教程. 北京:清华大学出版社,2004.
(10)    相关课程:http://www.cs.toronto.edu/~sme/CSC2106S/index.html .
(11)    相关课程:http://www.cs.uta.fi/re/ .
(12)    需求工程论文汇总:http://web.uccs.edu/adavis/UCCS/reqbib-demog.html .
(13)    需求管理工具:http://www.volere.co.uk/tools.htm .
(14)    软件工程经典案例:
a)    Ariane 5 launcher explosion. Ian Sommerville's presentation giving an overview of the causes of the system software failure. The Ariane 5 rocket failed on its maiden flight due to software problems. The presentation discusses how these occurred.
b)    Airbus 340 flight control system. Ian Sommerville's presentation prepared from the case study in Storey's book that give an overview of the A340 system. The presentation discusses the use of redundancy in the Airbus flight control system.
c)    London Ambulance Despatching System. Ian Sommerville's presentation gives an overview of the London Ambulance Despatching System and discusses the failure of the system.
d)    N.G. Leveson and C.S. Turner, "An Investigation of the Therac-25 Accidents," IEEE Computer, vol. 26, no. 7, pages 18-41, July 1993. (16)
e)    Leveson, Nancy G. "Appendix A, Medical Devices: The Therac-25 Story," Safeware: System Safety and Computers. Reading, MA: Addison-Wesley, 1995, pp. 515-553. (16)
f)    IAEA, August 2001, "Investigation of an Accidental Exposure of Radiotherapy Patients in Panama: Report of a Team of Experts", 26 May-1 June 2001, IAEA (Vienna, Austria).
g)    James Oberg, "Why The Mars Probe Went Off Course", IEEE Spectrum 36:12, December 1999. (For more detailed information, see the official MCO Report). (6)
h)    Mike Jones, "What really happened on Mars?." (1.5)
i)    Glenn Reeves, "What really happened on Mars? -- Followup." (1.5)