为什么说良好的需求是软件开发关键点?

在高质量软件项目中,需求工程的作用举足轻重。统计表明,软件缺陷一半以上的原因来自于需求分析中的问题。仅凭这个数字,就足以告诉我们提升需求开发水平是多么重要,这正是在软件项目中,我们需要对需求分析下功夫的最大原因。

所谓需求,就是构思未来的产品,说明产品应该是什么样的,定义开发的行动准则,并且定义产品的验收标准。

大部分在软件开发中遇到的问题,都是由于收集、编写、协商、修改产品需求过程中的手续和作法(方法)失误带来的。出现的问题包括:非正式信息的收集,未确定的或不明确的功能,未发现或未经沟通的假设,不完善的需求文档,以及突发的需求变更要求。这一切都告诉我们,必须深入地研究和建立良好的需求工程方法。

需求是站在用户的视角看问题,而设计是依据需求,站在设计人员的视角看问题。

这种视角的变化形成了分析与设计工作风格上有很大的不同。也就是说:需求专注于要做什么,而不是怎么做;设计专注于怎么做,但它的依据是需求。事实上这种工作风格的不同,本身也反映了企业降低机会成本的追求。

良好需求的特点

把所有的需求集成起来,就成为“需求规格说明”。从整体文档编写的角度上看,好的“需求规格说明”还应该具备如下特点:

完整性:不能遗漏任何必要的需求信息。注重用户的任务而不是系统的功能将有助于你避免不完整性。

一致性:一致性是指与其它软件需求或高层(系统,业务)需求不相矛盾。在开发前必须解决所有需求间的不一致部分。

可修改性:在必要时应维护与修订“需求规格说明”。这就要求每项需求要独立标出,并与别的需求区别开来。每项需求只应在“需求规格说明”中出现一次。这样更改时易于保持一致性。

可跟踪性:应能在每项软件需求与它的业务和设计元素、源代码、测试用例之间建立起准确的跟踪关系。

对于严肃的工程活动而言,良好的需求不但是必须的,也是项目成功的根本保障。

软件工程历经数十年的发展,已经形成了一些行之有效的标准,比较典型的是 GJB5000A,这个标准是目标驱动的。研究标准的意义是使我们的思考有是非、有依据,更可以让我们学会需求开发的途径,以及明确在需求开发中需要考虑哪些问题。

在 GJB 5000A 中,需求与整个工程过程的关系如下图所示。

要提升需求分析的水平关键之处在于:发现和纠正缺点要比处处做的好容易。因此我们需要直面现实中的问题,更深入的提炼出一些东西,去寻找解决问题的方法。凡事都有逻辑,我们需要理解一种体系和内在的逻辑关系,需要提炼出一套思想和方法论。

时间: 2024-10-29 03:07:34

为什么说良好的需求是软件开发关键点?的相关文章

传统软件开发VS敏捷软件开发

在上世纪60年代,由于计算机的计算能力显著提升,人们需要处理问题的复杂程度也得到提升,导致了一系列问题比如项目运行超过预算.项目运行超过时间.软件十分低效.软件质量很低.软件无法满足需求.项目缺乏管理,代码难以维护.软件难以交付,称为软件危机.人们意识到,软件开发不仅仅是让程序员编写程序那么简单,而是一项工程,需要科学的开发方法,从而人们提出了软件工程的概念,采用工程化的方法对软件开发进行管理.而在当今,软件工程中软件开发方法主要分为传统软件开发和敏捷软件开发.本文主要介绍这两种软件开发方法以及

iOS游戏开发 软件开发 UNITY3D软件外包 APP定制

iOS游戏开发 软件开发 UNITY3D软件外包 APP定制 软件开发是根据用户要求建造出软件系统或者系统中的软件部分的过程.软件开发是一项包括需求捕捉.需求分析.设计.实现和测试的系统工程.软件一般 是用某种程序设计语言来实现的.通常采用软件开发工具可以进行开发.软件分为系统软件和应用软件,并不只是包括可以在计算机上运行的程序,与这些程序相关 的文件一般也被认为是软件的一部分. 软件设计思路和方法的一般过程,包括设计软件的功能和实现的算法和方法.软件的总体结构设计和模块设计.编程和调试.程序联

软件开发模型

作为一名程序员,开发过程就是一个最好的学习过程,在开发的过程中,不断寻找新的解决办法,学习新的开发技术,能更好的开阔我们的思路,让我们不断的进步. 临近毕业,着手准备毕业设计,我决定做一个在线考试系统,预计4月底完工,花费这么久来做这个项目,主要是因为,我要利用这个项目,将自己大学四年,学到的,没学到的东西 进行一次重新学习,第一站,软件开发模型. 软件开发模型(software development model)是指软件开发的整个过程,包括需求,设计,开发(写代码),测试,甚至是维护有时候也

让你提前认识软件开发(50):软件需求

第3部分 软件研发工作总结 软件需求 软件工程师的工作职责是什么?一句话,就是完成软件需求.大家每天都接触到的软件,都是从软件需求一步步进化而来的.那么,软件需求是什么?如何完成需求?在完成需求的过程中我们要注意哪些问题呢?本文将为你解答这些问题. 1. 什么是软件需求? 通俗地讲,软件需求是指要求软件开发工程师完成的软件的功能.例如,如果要求一个软件具备文件处理的能力,要求一个WEB页面具备显示客户信息的能力,要求一款手机具备指纹识别的能力,等等,这些要求都是软件需求. 用较为专业一点的术语来

软件开发用户源代码保护需求

软件开发研发企业的需求: 随着企业信息化发展的日益增长,软件行业厂商之间的竞争也愈加白热化,加上国内对知识产权的不够重视.山寨模仿产品的横行.保护源代码.保证企业的核心竞争力,成为众多软件研发企业的第一要务.那么企业应该如何保证源代码的安全呢?企业该如何选择一款合适自己的加密软件呢?     需求概要分析 通常,企业中存在如下状况: 1.内部人员可以把涉密文件通过U盘等移动存储设备从电脑中拷出带走: 2.内部人员可以把自带笔记本电脑接入公司网络,然后把涉密文件拷出带走: 3.内部人员可以通过互联

软件开发杂谈之从需求到上线---valen

背景 IT已经成为当代企业必不可少的竞争手段,从无到有到标配,可以说以后不懂IT的就是文盲这句一点也不过,而软件开发是个复杂工程,零零碎碎各种理论工具和技巧,一言难尽. 本文意在言简意赅,简述软件开发流程当中重要的环节,以此思路作为明灯,以更好地思考和完成工作. 开始 IT业务系统的开发(APP.网站,大中小型业务系统等等)生命周期大致可用一张图简单概括下: 无论那个环节都互相影响,产品和开发相对更紧密一些,运营相对独立,不断迭代产品直到产品周期终结 需求 产品是来解决问题的,所以做产品之前要做

让你提前认识软件开发(35):如何修改SQL脚本以完成需求?

第2部分 数据库SQL语言 如何修改SQL脚本以完成需求? SQL脚本的修改和C语言代码的修改流程是一样的,都要遵循以下步骤:         第一步,阅读需求,弄清楚自己要完成什么功能.         第二步,对照需求阅读原代码,找到本次要修改的内容的大致位置.         第三步,对代码进行修改(包括:添加.删除和修改等),将本次的功能添加上去.         第四步,对修改后的代码进行测试,验证新增功能是否满足需求. 本文以一个实际的需求完成过程为例,详细说明如何对SQL脚本进行修

让你提前认识软件开发(38):完毕第一个新需求

第3部分 软件研发工作总结 完毕第一个新需求 在入职后不久,我得到了第一个新任务:完毕某个版本号的一个新需求.所谓的"需求",就是用文档的形式告诉我们要做什么.要实现什么功能. 在得到需求文档之后,我仔细致细地阅读了好几遍.发现有些地方自己并非非常明确.假设在自己都不是非常确定的情况下改动代码,其后果是非常严重的,项目经理以前这样告诫我.我把自己的疑惑以邮件的形式发给了SE(系统project师).让他把需求讲明确.在我们公司,SE负责写需求,他们要把用户想要实现的功能写成文档,然后让

一种软件开发的需求优先级评估算法

软件项目一般经过需求分析.概要设计.详细设计.软件开发.测试与部署.培训与维护等阶段,其中需求分析阶段,项目经理在面对诸多收集来的需求如何确定哪些做哪些不做,哪些先做哪些放在项目二期去做?笔者认为应该根据需求的可行性.重要性.工作量进行量化评估,业务.开发.生产.维护等相关部门都参与评估,确定需求优先级,按优先级分批次迭代开发,做到公开.合理,为保障成果及时交付奠定基础. 那么如何根据需求的可行性.重要性.工作量确定需求的优先级指标呢?笔者给出以下具体算法: 可行性:1=可实现:0=无法实现 重