关键字:CMMI 需求管理 软件测试        
近年来,“需求管理”正成为中国当前工程应用和商业热域的热点。目前,有关需求管理的实践大量应用于软件开发工程等领域,软件开发团队在开始一个新的项目之前,会通过详细的用户需求调研准确捕获了用户需求并汇总分析后,再进行下一步的设计与实施工作,以避免因未能正确识别用户的真正需求而导致不断返工和工作成本增加。对于从事软件工程的程序员们来说,在进行项目开发之前创建和管理良好的需求是非常重要的第一步,同时也是一项挑战。需求表述不当可带来重大影响,如耗时返工、延期交付及预算超支,严重的还可造成业务违规。因此,开发团队需要首先有效定义和管理需求,才能确保在保证进度和控制预算的同时,产品能够满足用户所需。本文旨在阐述良好需求描述的特征,并介绍有助于更好地编写软件工程需求说明文档的几点经验,以帮助软件开发团队能够更快更好地取得投资收益。
1.高质量需求的特征
        首先的问题是,何为良好的需求?一般而言,一项编写良好的需求描述,应该包含以下特征:
        良好需求的特征 含义
        正确(Correct) 技术可行,内容合法
        完整(Complete) 能够表达一个完整的想法
        清晰(Clear) 不模棱两可,不易被误导
        一致性(Consistent) 不与其它需求相冲突
        可验证性(Verifiable) 可验证系统能够满足用户需要
        可追踪性(Traceable) 可唯一识别并进行跟踪
        可行性(Feasible) 可在预期成本和计划进度内完成
        模块化(Modular) 可单独变更而不会造成较大影响
        独立于设计(Design-independent) 不包括项目设计和实现的细节、计划信息等
2. 提高需求编写质量的十佳经验
        在明确了何为良好的需求之后,以下介绍几点可以帮助开发团队编写出更好的需求描述的方法,加速软件工程投资回报率。
经验1:将需求结构化(Structuring)
        每一项需求既不能被重复描述也不能被遗漏,诀窍之一是将需求结构化。需求组织应具有良好的结构,以增进理解,同时避免出现重复和忽略的情况。同时,须具备对需求的向上和向下的追溯能力之后,团队才能够评估需求的覆盖范围。结构化组织需求是控制和改善需求质量的第一步。
经验2:重视非功能性需求(Constraints)
        对于编写需求说明书而言,涉及法规遵从和提高软件系统质量的非功能性需求(又称约束条件,Constraints)同样重要,它们通常包括软件的性能、界面和可维护性等方面。编写良好需求应包含对约束条件的覆盖,原因是一旦如下领域(例如,性能、可靠性和易用性等)在开发完成后出现缺陷,通常都无法在系统中对其进行重新设计。因此,在项目初期将所有类型的非功能性需求考虑在内,可帮助开发团队大幅提高项目成功的几率。
经验3:将需求可视化(Visualization)
        大多数需求分析人员发现建模有助于直观化文字形式的需求。无论是在白板上绘图、使用Microsoft PowerPoint演示工具,还是仅仅在脑海中构建一个模型,都可视为一种建模方法。以上这种图型化的文档应与文字形式的需求描述一起统一管理,以确保一致性、可跟踪性和变更控制能力。可视化需求建模提供了一种与客户及最终用户沟通的简单而有效的方法,通过该方法可较容易地掌握客户和最终用户的需求。此外,图型化还有助于阐明需求,增进软件项目所有相关人员之间的沟通与协作。
经验4:使需求具备可测试性(Testable)
        产生良好需求的另一种行之有效的方法,就是从初期就确保每个需求具备明确的可验证性,这种做法不仅有助于为项目后续阶段做好准备,还可以帮助编写者保持正确的思路。对于非功能性需求此规则也同样适用,例如,对于“软件必须具有高可用性”这种表述的需求我们无法进行测试,而改写为明确的“普通用户应能够在3分钟内生成一个报告”就使该需求具备了可测试性。
经验5:管理好需求变更
        大多数软件工程项目中,来自用户的需求经常会发生变化。随着项目的进展,开发团队要保持清醒的头脑、按照工程要求做出相应调整,并响应不断变化的市场形势和客户需要。仅仅编写出完美的首版需求描述是不够的,如果未能对需求的变更过程进行恰当管理,那么控制不善的变更便可能导致系统和软件功能缺失、返工以及利润损失。开发团队应该实施可靠的、可重复的变更控制流程。
经验6:在客户需求和开发能力之间找到平衡
        许多情况下,较少的需求数量有助于产生更加优秀的需求描述。软件工程项目不可能实现既采纳和满足企业所有用户的需求、营销理念和商业计划,同时还符合预算并能按期交付。项目经理必须找到客户需求和开发能力之间的平衡点,确定可为客户带来最大价值,并帮助企业提升创新能力的那些需求,而不是一味地试图满足用户所有需求。
经验7:正确的重用以往优秀需求
        当之前项目的已编写的良好需求适用于当前情况时,不要单纯地将原有需求直接复制。重新使用以往需求的正确方法是继续维持两个需求之间的联系,如通常打上re-use标记。此标记使分析人员能够随时查找到原始需求,以检查需求分解分配等信息。通过灵活的方法重新用以往需求,开发团队可以获得技能、经验和知识的共享。
经验8:建立范例知识库( Knowledge Database)
        提高需求质量的另一有效途径是建立范例知识库,并参考其中的典型范例。知识库内容应该包括:良好需求和文档的正、反面示例,以往项目中可反映团队在特定领域内专门知识的良好(和不良)需求。为了使开发团队可以更好的参考,知识库中的需求案例应具备明显的积极或消极意义,而非中规中矩的。通过知识库示例开发团队可以参考以往的经验、吸取教训,避免重蹈覆辙,进而提高需求编写的质量、一致性和完整性。
编写好的需求说明是一个开发项目最为重要的活动之一,优秀的需求描述可以改善并加速项目的投资回报。就好像“垃圾输入,垃圾输出(garbage in, garbage out)”所表明的那样,如果前期用户需求收集得不明确,那么后期的开发过程注定生产错误的产品。开发团队可以通过经验提升需求编写质量。此外,通过应用业界领先的需求管理工具,可以优化项目开发的沟通和协作的过程,提升软件项目过程质量。

更多相关的软件测试文章:需求管理技术白皮书、需求开发与需求管理

转载于:https://blog.51cto.com/218686/80431

需求编写的几点经验之谈相关推荐

  1. 【需求专题】如何写好需求——INCOSE需求编写指南(1)

    已剪辑自: https://mp.weixin.qq.com/s/Z5VBTyV6j07JylDdOsFSxQ [编者按] 如何写好需求是INCOSE 需求工作组编写的需求文本化表达指南.本指南是专门 ...

  2. 软件需求说明书 编写实例

    你的工程应该有个好的起点.一个小组要带领客户进入需求启发阶段而且你要写软件需求说明书.这份说明有些大,但客户会很重视,所以说明必须得到赞同. 现在你正在设计其中的一个特性,已经发现了需求的一些问题.你 ...

  3. 税务软件需求说明书的编写方法与实例

    近年来,我国税务行业信息化建设取得了很大进展,信息软件已经被广泛应用于税收管理的各个领域.一套好的税务应用软件与调研论证.需求.设计.开 发.测试和用户使用有很大关系,这其中需求又是关键中的关键,以下 ...

  4. logback 配置文件编写

    Logback 配置 本文讲logback的xml文件的配置,其中主要是在介绍各类appender. logback 的简单例子 xml文件大概结构 导图链接 xml <?xml version ...

  5. 方法论:写好一份产品需求的系统化思考模型

    前言:阅读须知 在开始进入正文之前,先对内容做一些概要说明,若未能满足你的阅读需求,可自行绕过,避免造成不必要的时间浪费,引起身心不适哈哈~~ 1.适用人群 作为一个2年级产品新生,认知边界肯定有一些 ...

  6. 《软件需求十步走》阅读笔记5

    第五篇介绍的是需求工程的开发篇,需求的思路,获取,分析,编写,认证是这一部分的关键. 需求开发的思路和过程 需求开发工作是"以技术为核心.以业务为辅助"作为指导思想,以要说清楚软件 ...

  7. Choerodon猪齿鱼敏捷管理实践(一)——需求管理

    2019独角兽企业重金招聘Python工程师标准>>> 本文是敏捷管理系列的第一篇,将介绍敏捷中重要的需求管理,涉及需求的获取和管理,以及后续规划问题. ▌主要内容: 瀑布流开发模式 ...

  8. 《软件需求》学习笔记

    为什么80%的码农都做不了架构师?>>>    <软件需求>学习笔记 前几天读了Karl E.Wiegers<软件需求>,书的内容写得非常好.我这里谈谈读了此 ...

  9. python编写一个程序、输入一个数判断其是偶数还是奇数_编写一个程序,判断用户输入的整数是偶数还是奇数。 (7.0分)_学小易找答案...

    [其它]已知info=[1,2,3,4,5],请通过两种编程方法,将列表变成info=[5,4,3,2,1] (6.0分) [其它]阅读下面的程序,分析代码是否可以编译通过,如果能编译通过,请列出运行 ...

最新文章

  1. 编写高质量代码:改善Java的151个建议五(类、对象、方法)31-51
  2. iphone刷基带_iphone7基带坏了怎么办,iphone7基带修复多少钱
  3. 940mx黑苹果驱动_专业黑苹果系统安装 win macos双系统10.13/14/15
  4. 三极管驱动(讲的比较好)
  5. qq语音识别_qq语音红包自动识别_qq语音红包一直未识别 - 云+社区 - 腾讯云
  6. BZOJ1095 动态点分治
  7. MySQL 游标(CURSOR)
  8. C语言面试题 - 结构体对齐
  9. Recovery启动流程(1)--- 应用层到开机进入recovery详解
  10. Windows2008server系统搭建DHCP服务器
  11. LUP分解法求解线性方程组
  12. mysql的ndb引擎_NDB Cluster (分布式存储引擎)存储引擎简单简介及Mysql cluster的实现...
  13. 基于matlab的pwm波形仿真与分析,基于Matlab的单相电压型PWM整流电路仿真与设计
  14. 不只是A/B测试:多臂老虎机赌徒实验
  15. 计算机网络第六章复习笔记(JLU复习版)
  16. 计算机类本科专业国家质量标准,计算机专业国家职业标准
  17. 【第52题】常用的数学工具类9-大乐透号码生成器
  18. unity 接入 Facebook 登录
  19. 数据治理指标标准实践
  20. 程序员应了解的著作权(版权)

热门文章

  1. Windows Pe 第三章 PE头文件-EX-相关编程-1(PE头内容获取)
  2. 【错误记录】GitHub 网站和仓库无法访问 ( 域名重定向 | 检查 C:\Windows\System32\drivers\etc\hosts 配置文件中的 GitHub 地址域名配置 )
  3. 【Git】Git 版本管理 ( 补充提交版本 git commit --amend | 版本库提取文件 git checkout -- filename | 删除文件 git rm )
  4. 【C 语言】内存四区原理 ( 栈内存与堆内存对比示例 | 函数返回的堆内存指针 | 函数返回的栈内存指针 )
  5. 【Android FFMPEG 开发】Android 中使用 FFMPEG 对 MP3 文件进行混音操作
  6. 【Android NDK 开发】JNI 引用 ( 全局引用 | NewGlobalRef | DeleteGlobalRef )
  7. Nike Barkley Foamposite Max “Rayguns”
  8. Python爬虫selenium、PhanmJs
  9. vue java 使用AES 前后端加密解密
  10. Epplus:导出Excel