软件=程序+数据+文档
软件的基本特征
Complexity(复杂性)
Consistency(一致性)
Variability(易变性)
Invisibility(不可见性)
软件所具有的复杂性、一致性、可变性、不可见性等特性,使得软件开发过程变得难以控制,开发团队如同在焦油坑中挣扎的巨兽
软件开发面临的挑战
软件之道
定义:软件工程是一个技术,方法和工具的集合,帮助生产
一个高质量的软件系统
与给定的预算
在给定的期限
while change occurs
软件工程是一项解决问题的活动
我们想要软件解决的问题是“邪恶的”
现代系统的特点
是什么问题?
为什么需要软件工程?
什么是好的软件?
软件过程
基本活动包括:
需求定义和分析
设计
编码(实施)
测试
维护
开发包括(设计,编码,测试)
软件工程费用
软件开发生命周期(SDLC)
修复错误的相对成本
需求缺省的典型案例
为什么需求分析很困难?
用户解决问题或实现目标所需的条件或能力-------IEEE标准术语表
需求是期望系统的外部可观察特征
候选要求必须通过两项测试才能被视为有效: 需求的满足必须从系统外部的角度进行观察 需求必须有助于满足潜在客户或其他利益相关者的某些需求(涉众) -------艾伦·戴维斯2005
需求是系统中的一个必要属性,一种声明,它标识了系统的能力、特征或质量因素,以使其对客户或用户具有价值和效用----------The RE Handbook
IEEE 610.12-1990“要求”的标准定义:
用户解决问题或实现目标所需的条件或能力
系统或系统组件必须满足或拥有的条件或能力,以满足合同、标准、规范或其他强制文件的要求
如1或2所示的条件或能力的书面表示
2.3要求的类型
三级
一个常见的分类
功能需求:
质量需求:
约束:
非功能性需求(质量需求+约束)
住房信息系统的要求
质量需求
可用性:可用性是指系统实际可用和完全运行效率的时间百分比。
效率:是衡量系统利用硬件资源(如处理器时间、内存或通信带宽)的指标。
灵活性:灵活性表示需要多少努力来扩展系统的新功能完整性完整性表示系统在防止未经授权访问、违反数据隐私、信息丢失方面的保护程度。
互操作性:指的是系统与其他系统交换数据或服务的容易程度。
可靠性:指的是系统在一段时间内不发生故障的运行概率。
鲁棒性:鲁棒性是指当系统或部件面临无效输入、连接的系统或部件存在缺陷或意外运行条件时,其继续正常运行的程度。可用性衡量用户为准备输入、操作、并解释系统可维护性的输出。
可维护性:表明纠正缺陷或更改系统可移植性的容易程度。
可移植性:与将系统或组件从一个操作环境迁移到另一个操作环境所需要的工作有关。
可重用性:可重用性指的是一个组件可以在系统中使用的程度,而不是它最初开发的那个系统。
可测试性:可测试性指的是测试软件组件或集成系统以发现缺陷的容易程度。
非功能性需求
约束:约束是一种组织或技术需求,它限制了开发系统的方式。
约束类型
约束限制了需求实现的范围,也限制了整个系统的范围
约束可能导致需求的变更或新需求的定义。
一些例子
需求类型间存在一定的重叠
不切实际的期望
性能需求(performance)
什么是工程?
需求工程的定义
3.3需求工程活动
Inception
elicitation需求获取
analysis and negotiation需求分析和谈判
需求规范
需求验证
需求管理
需求开发过程
需求的三个维度
连续需求工程
Requirements Inception的主要任务
Requirements Inception的文档
Context aspect 环境方面
Goals 目标
问题分析
可行性分析和风险分析
RE过程的起点
它的主要任务包括
1.确定业务需求
2.Gain agreement on problem definition 就问题定义达成一致
3.确定利益相关者
谁使用这个系统?
谁是顾客?
谁受到产出的影响?
谁开发/评估/批准系统?
其他外部/内部用户?
谁维护这个系统?
有人在乎吗?
4.确定约束和风险
5.进行可行性研究
RE Inception的主要任务总结
Project Vision & Scope Document
项目可行性报告
项目计划书
4.4.1 A Template for Documenting Goals
使用非结构化自然语言的目标文档
记录目标的七条规则
1.简明扼要地记录目标
2.使用主动语态
G2:与以前的系统相比,季度报告的创建时间将缩短一半
The duration of creating the quarterly reports shall be cut down by
half compared with the predecessor system.
G2的改进定义:用户应能够在使用当前系统所需的一半时间内创建季度报告。
The duration of creating the quarterly reports shall be cut down by
half compared with the predecessor system.
3.准确记录利益相关方的意图
4.将高级目标分解成更具体的子目标
5.陈述目标的附加价值
6.记录引入目标的原因
7.避免定义不必要的限制
4.4.2 AND/OR Trees and AND/OR Graphs
4.4.3 i*(i-star)
I *框架是一个记录和分析目标和目标依赖关系的综合方法。
基于GRL的建模语言
基本概念
i*中参与者之间的依赖关系
i中对象之间的关系*
两种目标模型
4.4.4 KAOS
KAOS建模语言是KAOS框架的一部分,用于引出、指定和分析目标、需求、场景和责任分配。
六个补充视图或子模型
KAOS框架的基本结构,用于为目标建模并将目标责任分配给代理
目标
产品愿景:描述产品是关于什么的,以及它最终可能成为什么
边界:解决方案系统边界系统和参与者之间的
5.5.1分解策略
5.5.2分解步骤
项目的主要风险
◼不清楚的需求
◼不断变化的需求
◼不稳定的产品或设计
◼紧迫的项目和不可达到的里程碑
◼肤浅的或不准确的工作量和影响估计
◼没有跟踪的项目计划
◼没有控制的分包
减轻风险的技术
◼组合管理(portfolio management)中评价与选择的技术
◼在需求分析阶段就评估变更风险
◼项目管理要适应不确定性和变更
◼开发过程适应不确定性和变更
◼架构和设计适应不确定性和变更
◼严格的和系统性的变更管理
风险核查清单
◼项目里有没用过的新技术吗?
◼完整定义了与其他系统或组件的接口吗?
◼设计依赖于不切实际或过于乐观的假设吗?
◼考虑了系统的行为(性能等)吗?
◼外部组件质量达标了吗?
◼使用了专利、版权或专有技术吗?其法律或间接成本确定
了吗?
◼使用了什么开源软件,用的是什么协议?
◼有分包商(或外包,离岸外包)吗?
◼与供应商签订的是什么样的合同?供应商承担什么样的风
险?
◼对于关键零部件是否有替代供应商?
系统开发人员和工程师与客户和最终用户
引出需要及时完成
不仅仅是一个简单的过程需求,但是一个高度复杂的过程
Elicitation Notes笔记
正式文件
当前状态和所需状态场景
正面和负面情景
不当使用场景
描述性、探索性和解释性情景
实例、类型化和混合场景
系统内部、交互和上下文场景
系统内部(A型)场景
交互(B型)场景
记录系统与其参与者(上下文中的人和系统)之间的交互序列
eg.参见描述场景“enter destination”
上下文(C型)场景
记录系统与其参与者之间的直接交互
记录与系统使用或系统本身相关的附加上下文信息(例如参与者以及系统的间接用户之间的交互)
主场景、可替换场景和例外场景
用例:一个系统、子系统或类可以通过与外部对象交互来执行的动作序列(包括变量序列和错误序列)的规范,以提供有价值的服务。
用例包含:
上下文信息:
主要情景
备选方案
例外情况
用例的组成部分
叙事情景
结构化场景
用例的参考模板
记录场景的十一条规则
序列图
活动图
用例图
记录用例之间的关系
用例图的建模元素
用例图的重要建模元素
示例:用例图的建模元素
需求分析
充分了解所发现的需求
发现缺陷并将其反馈给涉众,通过协商过程来解决它们
创建一个解决方案
方法:结构化分析(SA),面向对象分析(OOA),问题域分析(PDA)
分析什么?
如何分析?
Problem Checklists分析清单检查表
Interaction Matrix分析需求交互矩阵
SA 结构化分析
OOA 面向对象分析
需求建模
需求协商
行为模型用于记录系统的反应行为。
状态图是一种常用的基于有限自动机的行为建模语言
有限自动机是一个五元组
( Q , ∑ , δ , q 0 , F ) (Q,\sum,\delta,q0,F) (Q,∑,δ,q0,F)
DFA & NFA
Mealy和Moore自动机
状态图
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-nR4rBhoA-1643256503700)(C:\Users\dell\AppData\Roaming\Typora\typora-user-images\image-20211220192848598.png)]
DD 数据字典
导航系统示例
数据视角
功能视角
行为视角
状态图
三个视角之间的关系示例
类:
属性:
用例图
任务:理清需求的结构框架(领域类图)和行为脉络(流程图和用例图)
输入:需求定义阶段产生的业务事件列表和报表列表
输出:领域模型和用例模型
过程:
4.1.1Business flow analysis业务流程分析
4.1.2Business entities analysis业务实体分析
领域建模/概念建模
分析过程:
产物:
4.1.3Roles and Use Case Analysis角色和用例分析(参见3.3、3.4)
细化领域类的数据窗口、字段、格式、派生数据的计算方法等
细化用例
决策图表
决策表
有分解的地方就有接口
说明要点:
用户:名称、业务目标、使用时间、使用频率
内容和格式:交互过程描述、数据包描述
设计约束:
数据包必须是TCP格式,数据交换必须由库交换实现
“接口调用必须在3秒内应答”
“用户可以通过Internet访问该界面”
设计约束是对设计的限制,通常来自非功能需求。
一种较新的技术,强调描述,较少强调建模
组成:
分析步骤:
核心:问题域
问题域的类型
Jackson问题域分类
Jackson基于不同问题子域的本质及存在于问题子域间的关系,将问题域分为:
域的特征
工件框架:系统必须完成针对只存在于系统中的对象的直接操作
控制框架:系统控制部分问题域的行为,包括待求行为框架(待求行为完全由规则预先确定)和受控行为框架(行为的控制取决于操作员发出的命令)
信息框架:
转换框架:系统必须将某种特定格式的输入书转换成相应的、另一种特定格式的输出
连接框架:系统必须维持那些相互没有直接连接的子域间的通信
各种问题域的特征
域属性:
要求:
规格:
根据文件编制的不同目的,不同RE活动产生的信息采用不同的表示格式、不同的详细程度、不同的指南和文件编制规则进行记录。
需求说明是一种特定的文档。只有当要求文件符合为项目定义的specification rules and guidelines规范规则和指南时,指定要求才是指定要求
Software Requirements Specification(SRS)
文档需求使用自然语言,如英语、汉语、法语、德语或类似语言
文档需求,使用参考模板
非正式规范
优势
缺点
eg.
歧义
词法歧义
语法歧义
语义歧义
参考模糊
术语模糊
避免歧义的技巧1
避免歧义的技巧2
避免歧义的技巧3
受控语言
Guidelines for specifying
结构化的语言规范
Form-based specifications 基于表单的规范
文档需求,使用图表,如DFD、ERD、类图、序列图等。
当您需要显示状态如何变化或需要在何处描述一系列操作时,图形模型最为有用。
UML:统一建模语言(UML)是一种用于指定、可视化、构造和记录软件系统工件的语言。
UML2中的十三种图表类型。
用例图
类图
行为图
状态图
活动图
交互图
实现图
组件图
部署图
对象图
时序图
复合结构
包装图
交互概述图
部署图方法=建模语言+方法/流程
RE related diagrams
形式规范的目标
使用正式规范
形式规范基础
正式的方法
正式规范是一个更一般的一部分的技术集合被称为‘正式的方法’
这些方法都是基于数学表示和分析软件
正式方法包括
接受正式的方法
形式化方法的使用
形式化规范工具概述
形式化规格说明语言的组成
形式化规格说明语言的分类
形式化规格说明的优势与不足
理论基础:基于集合论和一阶谓词逻辑
使用称为”模式(schema)”的图形结构进行形式说明
Z形式说明由一组”模式”构成
状态模式
操作模式
Z说明例1—停车场管理系统
Z说明例1—停车场管理系统
Z说明例2—电梯控制系统
Z说明例2—电梯控制系统
4.3四变量模型
4.4表格式(Parnas表)
Parnas Tables使用表格结构来组织数学表达式,其中
有十多种表类型。
一个表达式通常可以用几种表类型表示。文档编写者的目标是选择(或创建)一种表格式,为该表达式生成一个简单、紧凑的表示。
什么是Tabular Expression? 列表表达式?
不同的名称:
表格表达式或表或Parnas表
本质上:
内容:
应用:
优点:
例子
规范和描述
TE的发展
Summary of TE
Tabular expressions (table/Parnas table)是一种实用的形式化定义方式;
提供了如何采用表格化结构来组织(定义关系或函数的)数学表达式的方式;
Tabular expressions遵循“分而治之(divide and conquer)”的原则,对复杂的数学表达式进行分解和简化,在保持了定义的严格性同时,还提高了可读性;
Tabular expressions不仅可以定义需求文档,还可以用来定义软件开发中其他技术文档。
Tabular expressions具备了如下特点:
Tabular expressions为文档驱动软件开发方法提供了很好的支持。
10表列表达式类型
一些概念
Examples of TenTable Types
International Standard
IEEE Std 830-1998
组织
附样本说明
National Standard
国家标准
军队标准
动机
质量保证(QA)
目标
验证不足成本
软件测试:
测试用例
当观察到的输出与指定的输出相对应,且后置条件为真时,就认为测试通过。如果不是这样,则认为测试失败。
失败表示预期输出(在测试用例定义期间定义)与测试执行期间观察到的输出之间的偏差
测试用例定义
优点/缺点
好处:
努力:中等
关键成功因素:
软件需求管理是一种发现、记录、组织和跟踪需求变化的系统方法。它可用于获取、组织和记录系统需求,并使客户和项目团队就系统变更达成一致。
需求工程中需求管理的目标是:
需求在整个系统生命周期中都会发生变化。
需求变更是不可避免的。
系统运行期间遇到的问题可能导致需求变更:
更多的需求变更源于系统上下文。
主体、使用、IT系统、开发
可能的环境变化
管理需求工程活动
需求管理的内容
时间:前可追溯性与后可追溯性
方向:向前与向后跟踪
扩展的前后可追溯性
3.3.1One-Criteria Classification单准则分类
3.3.2 Kano分类
3.3.3Two-Criteria Classification双准则分类
3.3.4 Wiegers的优先级矩阵
3.3.5Cost-Value Approach 成本-价值法
计算投资回报(ROI)
估算成本和价值
两种方法:
比较过程-选项
基本排序-对于每一对需求(i,j),询问i>j?
需要n*(n-1)/2个比较
构造二叉排序树需要O(n logn)比较
构造最小生成树需要(n-1)比较
一些复杂的情况:
层次优先级
绘制ROI图
变更控制委员会(CCB)
职责:对变更进行评估(控制范围扩大和影响分析),做出决策,并确保已批准变更的实施
成员:
控制范围扩展
影响分析
1)为需求管理工具定义项目需求。确定下列事项:
最重要的功能是什么?
是否要与其它使用的工具连接以及通过Web远程数据处理是否重要?
决定是使用数据库存储全部数据还是只存储一部分。
2)列出影响决策的10~15个因素。既要有主观的也要有客观的因素(如裁剪能力、有效性及GUI的效率)
3)对步骤2中列出的因素打分(总计100分),对更重要的因素可以打更高的分。
4)获得有关可用的需求管理工具的最新信息,根据影响决策的因素对候选工具排序。对客观因素的评分只有在使用每个工具后才能进行。开发商的展示可能会增加一些感性认识。但展示往往不全面,所以最好还是亲自使用一个(几个小时).
5)根据给每个因素的加权值来计算每个候选工具的得分,从而确定最合适的产品。
6)从候选工具的其他用户那里获得一些体会,可以通过在线论坛获得经验,对自己的判断和开发商的投标进行补充。
7)从候选工具中前三名的开发商处得到评估拷贝。确定候选工具前先定义一个评估处理过程,确保获得足够的信息做出好的决策。
8)最好用一个实际的项目来评估工具,不要仅用工具所带的示教项目进行评估。完成评估后,如有必要调整排名分数。找出得分最多的工具。
9)经过对排名、许可权费、开发商后续支持费、当前用户的输入、工作小组主观印象等的考虑之后做出决定
需求管理工具选型要素
商业需求管理工具示例