谈谈如何应对软件开发中的需求变更

令人烦恼的需求变更

    在软件开发中,大家都会遇到过这样的问题:客户的一个新想法,就推翻了之前与客户经过再三讨论而确认定下来的需求。如果是功能性需求变更还会让人容易接受一些,毕竟功能性需求不实现的话,是会大大影响到软件产品的质量。但是一些非功能性的变更会让人很头疼,许多是看起来无关痛痒的、鸡毛蒜皮的变更,却是极为令人无语和无奈,甚至是烦恼和厌恶的。

    (1)什么是软件需求?

    在IEEE中,软件需求的定义是:用户解决问题或达到目标所需的条件或功能。一般包含业务需求、用户需求、功能需求、行业隐含需求和一些非功能性需求。业务需求反映了客户对系统、产品高层次的目标要求;功能需求定义了开发人员必须实现的软件功能。所谓非功能性需求,是指为满足用户业务需求而必须具有除功能需求以外的特性。包括系统性能、可靠性、可维护性、易用性和对技术和对业务适应性等。其中最常见的是软件界面、操作方便等一系列要求。

    (2)非功能性需求变更的特点

    让我们从客户角度和开发人员角度去看看非功能性需求的特点。首先,有些非功能性小需求从客户角度看起来工作量不大,但是实际上开发人员要耗费比较长的时间去完成这些小功能。其次,许多非功能性需求,如界面美观、操作方便等都是客户头脑一热、或领导一拍脑袋就部署下去的需求,往往是原来在需求分析阶段所没有注意的内容。

    其实,非功能性需求是常常被轻视,甚至被忽视的。原因是非功能性需求描述很困难,它很难像功能性需求那样,可以通过结构化和量化的词语来描述清楚。在描述这类需求时候,我们经常采用软件性能要好、操作要方便、软件界面要美观大方等较模糊的描述词语。例如,易用性就同时涉及到美工和UI界面、人机工程、交互式设计、心理学、用户行为模式等内容。这类描述词语都是脱离了软件的执行环境,是对人和相关的场景的描述,因此很难体现到软件架构设计和具体的实现中。

     国内的很多软件公司,对于这种情况趋之若鹜,认为是负担,影响软件公司的工作安排,工作量以及工作进度,直接导致了软件公司的效益,几乎是很多软件公司的最大隐患,因此我们如何认识、对待这个普遍存在的问题就成了软件公司以及员工需要解决的问题;

1) 首先,要从心理上彻底根除对需求变更的恐惧,从认识上明确需求变更是软件开发过程中不可缺少的部分,从方针上明确需求变更的存在性和必然性;

a) 从软件公司角度,认清自身存在的不足, 客观面对需求的变更

b) 从职员角度,提高本身的业务和技术能力

2) 从技术角度上使需求变更的处理简单化,明确化,增加可维护性;

a) 使用更好的技术手段,设计更灵活以用来适应更多变的需求;

b) 使用更完善的软件工程的理念,让软件各个步骤细化,更易维护和修改;

c) 使用完善的测试流程,最大的降低需求变更带来的软件风险;

3) 对需求变更进行有效的管理,让需求变更可以规范化管理,做到有效的处理需求的变更,用有限的资源获得最大的效益;

a) 软件的初期,就要考虑最大限度的减少将来可能存在的需求变更

b) 需求的控制,减少需求的来源,过滤不合理的需求

c) 文档化管理,有备可查,有据可依;

d) 合适的公司体制和运作,找到一条适合自己公司发展的运作体制和管理模式;

    可能大家觉得上面说的话有些空,那么我就从技术角度上再具体的谈谈。

    就像刚才说过的,需求变更是必然存在的。从技术的角度来降低或避免需求变更给我们带来的影响就显得极为重要。

    1. 设计之初,充分理解需求,更好对需求进行整理和规划,预测可能变更的需求。

需求难做,业务难做,非功能性的需求变更更是难做。所以当我们在收集了用户需求后,不仅仅是简单的分类,然后按部就班的开发,而是要深入挖掘需求,一些看似固定业务的需求,可能由于业务的变更而使得你的系统不能使用。我们要做的就是拆分需求,把一些可能会发生变化的需求拆开,改成工作流程可配置的。就像面向过程转向面向对象的那样,面向过程是死的,而面向对象重新组合后,就特别简单。

    就说说我们刚做的这个收银系统吧,用户要求结账时,要打印小票,并自动打开钱箱。这就是最最原始的需求。但是我们最终把它做成了这样:打印机是外部设备,可以增删和配置;打印次数可配置;打印样式可配置;打印时,要判断打印机状态,非正常状态要给出各种提示(不一一列举);钱箱可以自动打开,也可以手动打开。另外还设定了许多功能配置:如禁用/启用全部打印机,禁用/启用某个打印机,是否打印订单小票,是否自动打开钱箱,是否显示错误提示信息等等(如图)。

    我们把这个固定的需求,拆分成可配置的,这样就把这个需求可能的变更已经分析的差不多了。不论它怎么变化,我们的应对都会变得从容。就在前2天部署的时候出现问题了,打印机是新买的,不只是什么原因,在打印多个换行之后,就会失败,不能继续打印。这个问题是我们所料不及的,因为我们测的我们这里的所有打印机,都完美打印,而新买的也是同品牌,同型号的打印机。最终分析出这个问题后,我们不用更改系统,只要修改一下小票样式配置,就可以完美打印了。

小票样式设定(图):

硬件设置(图):

单个打印机设置(图):

功能设置(图):

    2. 系统完成之后,客户再提新需求后,要分析这个需求的深层次含义,分析客户要的到底是什么。对于一些需求,如果适合于大部分客户,而且改动很少,就可以完成,那么可以在下个升级版本中集成。而对于某些非功能性的需求,改动太大,或者基本的核心功能都需要更改的话,那么就不要先去急着实现,而是放置起来,等待系统需要进行大的升级或者重构时,再考虑添加。而且要防止客户滥用提需求的权力,对于一些不合理的需求,还要去引导客户,让他们理解这个功能的不合理的地方,从而重新修改需求或者放弃。

时间: 2024-10-30 23:27:53

谈谈如何应对软件开发中的需求变更的相关文章

软件开发中要注意的25个问题

软件开发中要注意的25个问题 软件项目从开始到结束,由于资源.人员.管理.方法等等各方面的因素,往往不可避免的会存在一些问题,如需求沟通不明确.项目管理失败等等,今天总结了一下结合网上的一些经验,整理了25个软件开发中的问题. 1.不能很好的理解用户的需求,与用户之间的沟通存在问题. 2.错误的预估项目的大小和难易度. 3.没有排期计划就匆匆开始编码. 4.没有在项目初期就开始做测试,一直拖到项目后期才做,或者根本不做什么测试. 5.选择时下的高新技术还是已经被团队使用比较成熟的技术,往往不能做

评审技术在高质量软件开发中的应用分析(下)

接评审技术在高质量软件开发中的应用分析(上) 三.评审在高质量软件开发的实际应用 3.1 高质量软件开发项目介绍 高质量软件,如电信软件.金融证券类软件等,有较严格的要求:可用性要求非常高,并且不会因为系统维护和扩展而带来运营中断:支持使用现有管理工具和标准进行远程管理:能够提供更出色的性能以及运营在高可用性集群上的能力,减少任何单点的软硬件失效现象.五个九(99.999%)意味着一个系统的宕机时间一年不超过5分26秒.因此高质量软件项目是一种对可用性.可靠性.稳定性要求非常高的软件项目,要求软

软件开发中的“格调”

在三年之前,我从学校毕业,进入公司,正式开始了软件开发工作.我从完成第一个开发任务的过程中学到了很多东西,包括:1)编写程序只是软件开发中的一个流程,并非全部:2)程序编写需要遵循一定的规范,远远不只是实现功能那么简单:3)程序编写者是程序的第一负责人,要对自己的程序进行充分的自测,而非只要程序编写完成便万事大吉了.大家在学校里面也编写过程序,但那并非规范的软件开发活动.从学校里面的"业余"进化为正式工作岗位上的"专业",就需要提升我们的"编程格调&quo

需求分析在软件开发中的角色问题

问题描述 我是一名软件需求分析师,大家都知道,在软件开发中,需求分析是整体功能设计的第一步,也是十分重要的一步.但是,现在来看,需求分析在国内软件开发中并没有十分得到十分重要的体现.其实,作为号称全球最大的中文IT论坛的CSDN似乎也没有把"需求分析"作为与诸多开发语言平等对待,不知道是何原因.当然,这样说并没有诽谤或责备的意思,请斑竹见谅!所以,想请教诸多专家,想听听你们对软件开发中需求分析的理解,以及需求分析应该如何去做才能更加有利于软件设计.以上言论仅供大家分享,谢谢! 解决方案

《软件需求工程(第2版)》一2.3 需求工程在软件开发中的地位

2.3 需求工程在软件开发中的地位 2.3.1 需求工程对软件开发的影响 从软件工程提出的各种开发模型中可看出,需求工程是软件开发过程中的一个阶段.有些改进的开发模型,如快速原型模型也是因用户需求问题而提出的.需求工程处于软件开发的开始阶段,提供了软件项目其余部分得以实施的根基.显然,如果在开发的后期出现错误,受到影响的只是与后期阶段相关的工作,修正错误通常也是相对容易的事情.然而,如果错误出现在开始的阶段,而且没有立即发现和纠正,那么所有后续阶段的工作都是在错误的基础上进行的,修正错误的成本将

为什么敏捷方法能在软件开发中行之有效?

以下是为什么敏捷方法行之有效的原因: 1. 敏捷方法和传统的计划驱动方法的两个主要区别 i. 预测性计划(Predictive Planning)和自适应计划(Adaptive Planning) 计划驱动方法首先计划要做的工作(plan your work),然后着手工作以完成计划(work your plan).这是一种带有预测性质的方法,其衡量项目成功的标准则是我们是否按计划.按时.按预算完成了工作.这种方法在很多领域里是适用的.但是对于软件开发而言,如果我们的需求没有办法做到不变更的话,

软件开发中的数据库测试技术

摘要:根据以往软件测试经验,对数据库测试的内容和方法,进行了详细的分析,阐明了数据库测试在软件开发中的重要性. 关键词:数据库测试:性能测试:DataFactory 1.引言 数据库系统的开发在应用软件开发中所占的比重越来越大,随之而来的问题也越来越突出.比如:数据冗余,功能和性能方面存在的问题已经严重影响应用软件的使用.软件测试人员往往重视对软件功能和编码的测试,而忽略对软件性能,特别是数据库访问并发测试.因为,他们固有的思想中认为数据库设计存在问题对系统性能影响不大,或从根本上忽略了数据库在

讨论四种关键的质量保证实践在软件开发中的重要性

软件开发和工程被视为非常年轻的职业:但是,它们得到了广泛应用,并且正以比以往更快的速度增长.在许多国家,软件行业目前通常被视为经济增长的主要支柱之一.软件公司常常面临着提供高质量软件的许多困难挑战,而他们也在竭尽所能地让客户满意. 软件质量不可或缺 随着软件变成日常生活中不可或缺的一部分,对软件的需求也明显增长.相应地,高软件质量目前被视为是 "必须具备的" 而不是 "应该具备的".让质量保证团队从一开始就参与到项目规划和执行中,这一点至关重要.然而,仍然有一些公司

基于CruiseControl和Rational统一变更管理实现的软件开发中的自动化持续构建

基于CruiseControl和Rational统一变更管理实现的软件开发中的自动化持续构建 简介:本文介绍了持续构建工具 CruiseControl 和 IBM Rational 统一变更管理集成的解决方案.通 过本文中的解决方案,可以尽早的发现和规避代码中存在的风险,遵守统一的流程及时获取可发布的软件 ,确保敏捷开发的速度和质量. 统一变更管理系统中持续集成的必要性 使用 IBM Rational ClearCase 和 IBM Rational ClearQuest 实现的统一变更管理软件