软件需求开发的18般武艺
在《软件工程最佳实践》一书中,罗列了18种软件需求方法论,这里逐一介绍如下:
1、引入用户代表的敏捷开发需求
“用户代表”代表的是用户,决定的是需求。有了用户代表,需求的确认和变更,以及需求优先顺序的确定,都会便捷很多。这种方法完美契合敏捷的“交流胜于文档”的思想。唯一的问题是,这种方法论只能适用于小型软件的开发,对于大型软件来说,它就无能为力;甚至某些特定的嵌入式系统软件,如燃油喷射控制系统,它也会力不从心。
2、需求蔓延
需求蔓延指的是软件开发完成后的功能点高于需求开发结束时的功能点。多出的功能点就是蔓延的需求。使用联合应用设计和原型模拟等方法,可以抑制甚至杜绝需求蔓延。
3、遗留应用的数据挖掘
对于那些“古老”的软件,代码的变更常常会领先需求和设计文档的变更几条街。如果因为维护或者其他原因,需要从这些软件收集需求,是没有办法依靠这些落后的文档,我们只能从代码中来提取需求。这种需求提取,除了代码审查的手工操作之外,还可以借助一些自动化工具。
4、可执行语言
可执行语言是一些自动化工具产生的,用它来对需求进行描述,可以帮助我们分析需求。MSDN就是目前已知的提供关于可执行语言信息的最好的网站。而且,在理论上,可执行语言还可以利用静态分析工具进行解析,以去除可执行语言中存在的逻辑错误和遗漏。
5、焦点小组
焦点小组是一个用户集合,这些用户会参与软件的功能、性能的讨论。焦点小组可以对软件产品提供建议,甚至提供软件原型。焦点小组非常适合多用户需求的场景。
6、功能性需求和非功能性需求
功能性需求会增加软件的规模,它可以用功能点估算方法来进行度量;非功能性需求是用户关心的一些限制和约束,如性能指标、可靠性知识,它可能需要一些工作量,但通常不会增加软件的规模。
7、联合应用设计
联合应用设计是正式的需求审查会,参会人员包括用户和开发方的架构师和设计师,双方使用需求检查表进行逐项需求的审查。联合应用设计是收集大型软件需求最有效的方法。
8、模式匹配
模式匹配的前提是软件的功能都以一种标准的方式记录下来,并建立完整的分类系统,这样通过模式匹配就可以对软件需求进行重用。但是,只要需求还在使用30多种图表并混杂各种各样的语言来描述的话,模式匹配就只能通过人工,自动化的模式匹配不可能实现。
9、原型分析
建立软件原型来展示软件的功能和逻辑结构,可以帮助我们进行需求确认。但是原型只会保留大约完整软件1/10的功能。所以,它只是适用少于1000个功能点的软件。因为规模太大,原型的建立会非常困难。原型有一次性和进化性两种。无论哪种原型,都可以成功的减少需求蔓延。
10、质量功能展开
质量功能展开,又叫质量屋,是一种源于日本的质量需求分析方法。一些计算机公司如惠普和IBM,已经将其用于软件产品。但是,要熟练使用质量功能展开并且在软件项目中成功应用,还需要付出大量的训练和实践。
11、需求工程
需求工程包括需求提取、需求分析、建立模型、需求检验等活动,它非常适用运行在复杂物理设备上对软件成功运行有着严格质量标准要求的系统软件或嵌入式软件,能够使用需求工程的组织,通常是已经通过了CMMI三级认证的组织。
12、需求审查
需求审查是最有效的缺陷去除方法,并有着最高的缺陷去除效率。审查是一项团队合作的活动,参与者包括好的主持人、记录员、审查者及审查对象。
13、需求追踪
理论上如果为每个确定的需求分配一个唯一识别码或序列号,那么需求的双向追踪就是可以实现的。我们通常使用二维矩阵来进行需求追踪:矩阵的一轴列出所有的需求,另一轴列出包含该需求的文档或代码段,两轴交叉点可以表示该需求是否已分析、已设计和已实现。如果多个软件使用同一个可重用需求,那我们可能就需要使用三维矩阵来跟踪了。
14、可重用需求
可重用对于软件质量和生产率都是意义非凡。但是,可重用的应用仍然任重道远,因为扩大可重用的比率,需要我们建立起一个完善的可重用功能组件的系统。而要建立这个系统,需要记录以下分类信息:
- 此功能的起源
- 此功能所建立的日期
- 此功能的版本号
- 此功能的认证等级
- 此功能的业务目标
- 此功能的名称
- 此功能用于进行追踪溯源的序列号
- 实现此功能所用的编程语言
- 和此功能相关联的可重用测试用例的链接
- 和此功能相关联的可重用文档的链接
- 相关功能的链接
- 此功能的输人数据
- 此功能的输出数据
- 此功能对其他软件功能的输出信息
- 此功能从其他软件处接收到的输入信息
- 此功能相关的实体及其相互关系
- 此功能所使用的逻辑文件
- 对此功能所使用的审查类型
- 如果此功能和其他软件的交互不仅限于信息的话那么此功能和其他功能的接口定义
- 此功能的容错方式
- 此功能的加密方式
- 此功能所使用的算法逻辑
15、安全需求部署
时至今日,使用防火墙和杀毒软件已经不足以保护软件的安全。安全需求要求我们提高软件代码防外部攻击的能力。一些先进的方法,包括提高软件逻辑运算速度、严格限制权限、使用安全性较高的编程语言等,可以帮助实现软件的安全需求。另外,软件的安全性需求还需要进行安全审查(使用静态分析工具来查找安全漏洞)和安全测试。
16、统一建模语言(UML)
统一建模语言是一套内容丰富的图表表示方法不仅包括软件需求的描述,也包括软件架构和数据库设计等描述。使用标准的审查方法,可以很容易地对uml图表进行有效性和一致性检查。
17、用例
用例的目标是直接描述功能需求,它是用一种有趣的视觉方式来展现用户使用软件时的动作,包括提出请求、修改请求、控制行为和完成请求。用例不仅可以用于正式的需求审查和设计审查,还可以通过功能点分析来预测软件的规模。
18、用户故事
用户故事是一种快速灵活的需求收集方式,它通常是和测试用例同时开发出来的。由于用户故事的简洁性,对其正式审查也很难发现其中的缺陷,但是我们可以通过审查测试用例来做一些弥补。
软件需求开发的18般武艺相关推荐
- 关于软件需求开发和项目的范围管理
从CMMI到CMM来看其变化 Req从只有一个PA叫RM,到两个PA,分别是Reqm.ReqD 目前我们的需求开发就如在一间黑屋子打着手电筒在看你需要装修的范围,你看到一个墙角墙上贴着白色的磁砖,铺着 ...
- 2018年高考数学全国卷1第16题的18般武艺
2018年高考已经结束,从全国卷1理科卷来看,出题中规中矩,覆盖知识点比较全面,难度并不是很大.若平时复习不是打酱油的话,很多基础题是没有问题的. 填空题第16题以三角函数为载体,考查求最值问题,考生 ...
- 产品研发过程管理专题——软件工程(软件目的需求开发与管理)
需求开发与管理是软件项目中一项十分重要的工作,据调查显示在众多失败的软件项目中,由于需求原因导致的约占到45%,因此,需求工作将对软件项目能否最终实现产生至关重要的影响.虽然如此,在项目开发工作中,很 ...
- 软件目的需求开发与管理
作者:云中客的专栏 出处:CSDN 需求开发与管理是软件项目中一项十分重要的工作,据调查显示在众多失败的软件项目中,由于需求原因导致的约占到45%,因此,需求工作将对软件项目能否最终实现产生至关重要的 ...
- 《软件需求十步走》阅读笔记06
开发因需求而来,需求开发以需求规划的成果为主要依据.软件需求开发首先要做的是获取需求,得到目标,系统关联情况以及用例的分析:其次是需求分析,软件系统的可行性,用户接口,系统功能,数据,优先级等在这些需 ...
- 软件需求说明书 概要设计说明书 项目开发计划 详细设计说明书 模版
一.软件需求说明书 1引言 2 1.1编写目的 2 1.2背景 2 1.3定义 2 1.4参考资料 2 2任务概述 2 2.1目标 2 2.2用户的特点 3 2.3假定和约束 3 3需求规定 3 3. ...
- 《软件需求分析(第二版)》第 13 章——需求开发面临的特殊难题 重点部分总结
文章目录 前言 一.简答题 二.名词解释 总结 前言 软件需求分析就是把软件计划期间建立的软件可行性分析求精和细化,分析各种可能的解法,并且分配给各个软件元素.需求分析是软件定义阶段中的最后一步,是确 ...
- 软件工程之需求分析②(软件需求规则说明书、数据要求说明书、初步用户手册、软件开发实施计划)
软件需求分析阶段研究的对象是软件项目的用户要求,如何准确表达用户的要求,怎 样与用户共同明确将要开发的是一个什么样的系统,是需求分析要解决的主要问题.也就 是说需求阶段的任务并不是确定系统怎样完成工作 ...
- RDM1 软件需求与开发
客户:公司准备推行软件需求与研发分离. 我:为什么要分开? 客户:公司希望可以提高需求的独立性,也希望需求可以与研发相互制衡.以前需求是研发团队的一部分,很多时候就会倾向于从研 ...
最新文章
- 走过2010,期盼2011!
- 如何在centos7上网卡名称回归传统
- 概率论与数理统计(三)
- 【NLP】预训练模型综述
- python使用近似公式计算e_python如何算自然底数e(方法二)
- es6 --- 正确获取Generator函数内部的this对象使其可以使用new
- 蓝桥杯 2011年第二届C语言初赛试题(3)
- vue2中的keep-alive使用总结及注意事项
- 根据Ping(ICMP协议)得到TTL并分析
- 离散元 python_离散元在土木工程领域的应用前景如何?
- gprMax 3.1.5 安装以及在pycharm或VScode中运行的方法
- SQL SERVER--单回话下的死锁
- 2021年12月最新大数据白皮书(附下载)
- linux SCALA 安装及环境配置
- 金融业大数据应用场景
- bzoj5369 [Pkusc2018]最大前缀和(状压dp)
- 面试阿里P6,过关斩将直通2面,结果3面找了个架构师来吊打我
- 数学专业的数学与计算机专业的数学的比较(转)
- 蚂蚁金服面试经历(内含大量干货)
- 施工行业项目管理软件
热门文章
- 黑科技,教你用Python打电话,控制手机技术,快来学一下
- python免安装环境 linux_python如何打包脚本(库也一起打包),直接在linux环境运行,不需要安装库?...
- springboot核心原理
- 迁移学习之DenseNet121(121层),DenseNet169(169层),DenseNet201(201层)(图像识别)
- 习题10-6 递归求Fabonacci数列 (10 分)
- [NC14301]K-th Number
- c语言一个偶数用两个素数表示,用java怎样编写一个偶数总能表示为两个素数之和的程序...
- 解题报告:简单瞎搞题(bitset的应用)
- 复旦大学计算机专业直博,上海复旦大学计算机科学技术学院2016博士招生选拔办法...
- .Net转Java自学之路—基础巩固篇一