《需求工程:软件建模与分析》笔记(一)
第一章 需求工程导论
1.1 软件生产中的需求问题
-
软件的模拟特性
软件的模拟特性来源于其只是载体的特性:软件在运行中表现出来的特性、行为应该和现实情况保持一致。即软件“模拟”了现实。
软件的冗余功能问题也反映了他的模拟特性
- 专业用户纯工具型软件:以创新性为主要关注点,技术创新是生存之道
- 普通用户纯工具型软件:有效性是首要成功标准
- 应用软件:
- 目的性:直接或间接满足用户的某些目的或解决用户的某些问题
- 正确性:保证目标的正确实现
- 现实可理解性:在用户领域内现实可理解的,软件系统实在理解其现实环境的基础上,通过挺想现实的某些环节,或者改变现实个部分的通信方式,作中达成某些目的或者解决某些问题的
-
不同软件在生产中的侧重点
- 面向专业用户的纯工具型软件:充分利用创新优势进行巧妙的功能安排
- 面向普通用户的纯工具型软件:进行方案权衡,寻找一套且是有限的功能配置
- 应用型软件:发现人们利用软件的原因,找出需要软件解决的问题,理解应用环境中的领域知识,保证“模拟性”
-
需求问题具体原因分析
-
非技术性和社会性因素重视不足
-
从需求处理的人物来看
需求处理的主要问题是:发现问题并解决问题
只有软件熊和现实之间形成一种有效的互动才能解决问题
-
从需求处理的手段来看
主要手段:建模与分析技术
利用这些技术构建的解决方案一定是和具体应用环境相关的,不存在不依赖于具体应用环境的解决方案
-
从需求处理的过程来看
试图单纯通过技术的运用来建立一个一致、完整的需求模型是不可能的
-
-
传统需求分析方法的缺陷
- 传统的需求分析方法(结构化分析、面向对象分析)并不非常适合需求阶段的技术处理需要,有一定的先天缺陷
- 无法实现理解现实
-
软件规模的日益扩大
- 以企业为中心的软件应用范围扩大,组织的种种关系会对需求分析正确产生一定的影响,利益冲突会加剧
- 需求分析队规格说明恪裂解醒的要求加强
-
需求问题的高代价性
- 为后续阶段的正确性提供前提
-
1.2 需求工程
-
需求工程简介
-
定义:
-
简单:
需求工程是所有需求处理活动的综合,即手机信息、分析问题、整合观点、记录需求并验证其正确性,最终反映软件应用被应用后与其环境互动形成的期望效应
-
细节来看:
需求工程是软件工程的一个分支,他关注软件系统所应实现的现实世界目标、软件系统的功能和软件系统应当遵守的约束,同时也关注以上因素和准去的软件行为规范说明之间的联系,关注以上因素与其随时间或跨产品族而演化之后的相关因素之间的联系
-
-
主要任务
-
说明软件系统将被应用的环境及其目标,说明用来达成这些目标的软件功能,说明在设计和实现这些功能室上下文环境队软件完成任务所用方式、方法所施加的限制和约束
——软件需要“做什么”和“为什么”需要做
-
必须将目标、功能和约束反映到软件系统中,映射为可行的软件行为,并对软件行为进行准确的规格说明
-
需要妥善处理目标、功能和约束随时间的变化,对目标、功能和约束在软件产品族中的演化和分布情况进行综合考虑和处理。
-
-
基本活动
-
需求开发:“需求“特性
- 需求获取:从项目的战略规划开始建立最初的原始需求
- 需求分析:保证需求的完整性和一致性
- 需求规格说明:将完整一致的需求与能够满足需求的软件行为以文档的方式明确地固定下来
- 需求验证:保证需求及其文档的正确性,即需求正确地反映用户的真实意图;通过检查和验证,保证需求及其文档的完整性和一致性。
-
需求管理:”管理“特性
- 跟踪后续阶段中的需求实现和需求变更情况,确保需求得到正确的理解和实现
-
-
-
需求工程和系统工程
系统需求开发被称为需求工程的早期阶段
- 主要目的:获得整个系统的期望目标,包含功能特征和非功能特征
- 该阶段的需求分析主要是分析系统的成本效率及系统的组织和行政策略,处理相互依赖、冲突、重叠或不一致的涉众需求,检查并弥补需求缺失,检查技术储备、外部系统等环境约束。
- 结果会写入需求规格说明
软件需求开发被称为需求工程的后期阶段
-
需求工程的重要性
- 软件开发是利用通用的计算机结构构件一个通用的软件系统来满足人们的某些目的
- 需求一旦有错就会给系统带来极大损害,并且对他的修改也极为困难
- 特定问题的具体特性掩盖了需求工程的重要性
- 问题广为人知
- 问题小而简单
-
需求工程的复杂性
-
处理范围广泛
要理解现实世界,还要了解计算机系统
-
涉及诸多参与方
来自不同领域的参与者的交流复杂,产生利益冲突和观念冲突
-
处理内容多样
既有用户的功能需求和非功能需求,还有软件将来所处的环境及其约束
-
处理活动相互交织
需求获取、需求分析、需求规格说明、需求验证四个步骤互相衔接、顺序处理
-
处理结果要求苛刻
需求规格说明要满足正确性、完整性和一致性等苛刻要求
-
1.3 需求工程师
-
需求工程师是涉众和开发者之间的桥梁
负责衔接现实世界和计算机世界
-
需求工程师需要具备的技能
- 熟练掌握软件开发方法与技术
- 非常精确的表达能力,尤其是文档化能力
- 非常好的交流沟通能力,抽象建模与分析的能力
-
需求工程师要重视“软技能”
- 交流技能
- 掌握交谈和提问的技巧
- 具有倾听的技巧
- 观察技能
- 抽象分析与问题解决的技能
- 具有抽象的能力
- 具有整合全局的能力
- 具有系统化思想
- 写作能力
- 关系协调和团队工作技能
- 交流技能
-
需求工程师需要创新
表现在两个方面
-
软件系统不仅仅是模拟现实,还要让现实变得更好
——需要需求工程师以现实为基础构思现实中不存在的软件解决方案,运用创新能力剥离细节约束或者丰富抽象概念细节,建立更好的软件解决方案
-
给出具有飞跃意义上的创新
积极与涉众保持一致
-
-
需求开发是团队行为