2010-12-1 来源:网络
近年来,“需求管理”正成为中国当前工程应用和商业热域的热点。目前,有关需求管理的实践大量应用于软件开发工程等领域,软件开发团队在开始一个新的项目之前,会通过详细的用户需求调研准确捕获了用户需求并汇总分析后,再进行下一步的设计与实施工作,以避免因未能正确识别用户的真正需求而导致不断返工和工作成本增加。对于从事软件工程的程序员们来说,在进行项目开发之前创建和管理良好的需求是非常重要的第一步,同时也是一项挑战。需求表述不当可带来重大影响,如耗时返工、延期交付及预算超支,严重的还可造成业务违规。因此,开发团队需要首先有效定义和管理需求,才能确保在保证进度和控制预算的同时,产品能够满足用户所需。本文旨在阐述良好需求描述的特征,并介绍有助于更好地编写软件工程需求说明文档的几点经验,以帮助软件开发团队能够更快更好地取得投资收益。
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)”所表明的那样,如果前期用户需求收集得不明确,那么后期的开发过程注定生产错误的产品。开发团队可以通过经验提升需求编写质量。此外,通过应用业界领先的需求管理工具,可以优化项目开发的沟通和协作的过程,提升软件项目过程质量。
好的开发还需要好的测试才能保证开发质量,如何确保好的测试呢,来测试技术论坛看看把吧。
分享到:
相关推荐
### 需求编写的几点经验之谈 #### 一、引言 在软件开发过程中,良好的需求管理是至关重要的第一步。它不仅关乎项目的成功与否,还直接影响到产品的质量和用户体验。错误的需求描述可能会导致时间浪费、项目延期...
需求规格说明书是软件开发过程中的关键文档,它详尽地定义了软件系统应当具备的功能和特性,以便开发团队能够明确地了解用户需求并据此进行设计和实现。在编写需求规格说明书时,遵循一定的原则和最佳实践能显著提高...
在软件开发过程中,需求编写是至关重要的第一步,它直接影响到项目的成功与否。需求管理作为CMMI中的关键环节,已经成为当前工程应用和商业领域的热点。本文主要探讨了编写高质量需求的特点以及提高需求编写质量的...
下面,我们将根据标题和描述中的线索,探讨一些关键的软件开发知识点。 首先,架构师的角色并不仅仅是画出漂亮的图表,而是要理解业务需求,将这些需求转化为技术解决方案。他们需要具备良好的沟通技巧,以便与团队...
"项目开发设计模板"集合了著名软件设计师的经验之谈,为开发者提供了一套完整的项目管理框架,帮助我们规范流程,提高开发效率。以下是根据这个模板可能涵盖的一些关键知识点: 1. **需求分析**:这是项目开发的第...
在沟通方面,敏捷开发提倡在项目进行过程中边做边写文档,这意味着文档的编写是与软件开发同步进行的,而不是在所有开发工作完成之后才开始。这种做法可以保证文档总是最新的,并且真正反映了当前软件的状态。 敏捷...
### iPhone入门开发经验之谈 #### 1. Objective-C概述 Objective-C是一种强大的面向对象的编程语言,由Brad Cox在20世纪80年代发明,旨在结合C语言的强大功能和Smalltalk语言的优雅特性。Objective-C是C语言的一个...
在IT行业的快速发展中,Web开发技术不断迭代更新,为了满足日益增长的业务需求和技术挑战,选择合适的开发框架至关重要。本文作者通过亲身经历,深入探讨了一套开发框架组合:**Struts + Spring + [Hibernate|JPA] +...
本文将详细讨论机电设计中的几个关键知识点,并结合经验之谈来深入理解这些知识的实际应用。 1. 失败的选型 在机电设计过程中,选型是一个关键步骤,合理的选型直接影响到设备的性能和成本。选型失败通常是由于设计...
"挺进嵌入式----来自多年嵌入式开发工程师的经验之谈" 嵌入式专业是一门实践性非常强的学科,只有多动手,多实践,多编程,多调试,多看书,多思考才能真正掌握好嵌入式开发技术。这门学科涉及知识面非常广泛,包括...
9. **持续集成/持续部署(CI/CD)**:林锐博士提到,随着敏捷开发的普及,CI/CD成为软件开发流程中的关键部分。它能确保代码的一致性和可靠性,加速产品迭代。 10. **软件工程方法论**:林锐博士讲解了瀑布模型、...
- 需求调研与分析后的结果,即《用户需求说明书》和《软件需求规格说明书》,必须获得客户的签字确认。 - 在EAS项目初期,由于对需求不够重视,导致了需求理解上的偏差,影响了项目的进度。 - 项目需求变更时,...
"经验之谈myeclipse10导入项目中文乱码"这个问题,是很多开发者在使用MyEclipse 10这款强大的集成开发环境(IDE)时可能会遇到的典型问题。MyEclipse作为Eclipse的扩展版本,对Java Web项目的开发提供了很好的支持,...
企业培训--服装订货会代理商培训的一点经验之谈.doc
软件测试中总结出的有关功能测试的经验之谈从事软件测试这么长时间了,以前一直只是听同事朋友们学起功能测试有多么的利害,自己却一直没有去学习过。后来在网上看了一些有关功能测试方面的教学课程,至今我也学习了...
学习过ARM的人经验之谈,对正在学习ARM的人有个正确的规划
FlashPaper是一款由Adobe公司开发的软件,主要用于将各种文档快速转换为交互式的Flash(SWF)格式,使得用户能够在网页上方便地查看和分享这些内容。这篇“FlashPaper经验之谈”涵盖了我在使用该工具时积累的一些...
在实际应用中,有以下几个关键知识点: 1. **盒模型**:理解CSS的盒模型至关重要,包括内容(content)、内边距(padding)、边框(border)和外边距(margin)。正确设置这些属性可以控制元素的尺寸和位置。 2. **定位...
软件测试的经验之谈软件测试软件工程中有相当部分是关于软件测试的:1、测试概念的范畴广义上讲,测试是指软件产品生存周期内所有的检查、评审和确认活动。如:设计评审、系统测试。狭义上讲,测试是对软件产品质量...
内涵DirectShow开发笔记,适合初学者使用。