01-软件需求工程-入门篇

目录

  1. 前言
  2. 需求是什么?
  3. 软件需求的分类
  4. 软件需求工程的过程

 

1、前言

  曾经有过一段时间面对需求,不知如何去处理,一筹莫展。当然现在也还是处于懵懂状态。整体来说功力不够就需要多看书、多学习和多联系,师父领进门修行靠个人,没有一学就能全通的奇才。经常听到身边一些朋友说他们的项目多么简单,但是开发人员依然不能把项目转起来,跑不通一大堆Bug。出现这一类的问题我个人猜测,很大可能由于前期对软件需求掌握不善的问题。很多项目经理跟我反馈,项目很简单,但最后经常出现大量Bug和返工,甚至在验收阶段还需要将前期的需求重新调研,团队内部重新沟通需求,项目周期拉长,项目成本增加。我想很大的问题在软件需求上面,首先软件需求的收集是否做到位,软件需求工程的过程是否经过且有着较好的文档去流转(事实上很多公司做项目没有那么多文档,然而却喊着敏捷项目管理,这些公司的项目大部分都是延期且需要投入大量的费用去处理商务关系,有的甚至完全不考虑尾款)。

  我写这系列的文章目的有三个:首先,将自己学到的内容做一个笔记用于日后的学习和复习;其次,将自己的学习记录分享出去,希望得到各路好汉的指点;最后,希望将学习的内容体系化,便于后续可以兼职为其他组织提供培训服务。看完软件需求工程这系的文档,将有助于您了解软件需求工程,同时可以参考着去撰写项目中的需求相关文档。后续我还会提供有关需求分析和软件设计的内容这将有助与初学者进行需求分析工作和软件设计。

  因本人水平有限,难免在内容出现错误。希望各路好汉及时提醒和引导。谢谢~

2、需求是什么?

  这不很简单嘛,你提出的要求就是需求。这有什么好写的?你可能会这样去想。

  在我介绍需求之前,我们先来了解一下什么是软件和软件工程吧。

  软件

  官方标准的回答是“软件是一系列按照特定顺序组织的计算机数据和指令的集合。又可以说是程序加文档的集,程序就是一连串的计算机指令,文档指的是相应的文字材料。”。常见的软件有很多,如:office、window等。既然软件那么多,我们适当的进行分类:系统软件、应用软件、中间件。

  系统软件是管理计算机软硬件的程序,是计算机系统的内核与基石。管理和配置内存、决定系统资源供需的优先次序、控制输入输出设备、操作网络与管理文件系统等基本事务,如Windows、Linux、Mac、Android等;

  应用软件是为了某种特定的用途而被开发的软件,为了满足用户不同领域、不同问题的应用需求而提供的,如:微信、office等;

  中间件是一类连接软件组件和应用的计算机软件,包括一组服务。它位于客户机/服务器的操作系统之上,管理计算机资源和网络通讯。通过中间件,应用程序可以工作多平台或操作环境中,如Tomcat、Weblogic、Websphere、Jboss等。

  软件工程

  随着软件规模的越来越大,软件的开发远比编程要复杂,软件设计和开发成为一个工程活动。软件工程要解决的问题范围广泛,没有行业和领域的限制,需要客户和用户的紧密合作。官方的定义是“软件工程是指应用系统的、规范的、可量化的方法来开发、运行和维护软件,即将工程应用的软件。”。在软件开发前应该先进行需求开发。主要目的是建立系统的软件解决方案,具体任务包括:

  1. 探索并明确描述现实世界的信息;
  2. 探索并定义问题;
  3. 建立软件系统的解决方案,使得按照该解决方案实现的软件系统到现实世界后可以解决问题。

需求开发产生的主要输出是系统解决方案,经常称为软件需求规格说明文档(Software Requirement Specification,SRS)和需求分析模型。一般软件工程包含如下几个阶段:项目计划》需求分析》系统设计》编码》测试》发布和维护。传统的软件需求处理是指软件工程的“需求分析”阶段为需求处理过程。系统化的需求工程认为“软件工程前期的需求工作和软件工程的需求分析阶段统称为软件需求工程”。

软件工程阶段

需求工程的位置

  需求

  在了解了上面的知识之后,我们来了解什么是需求吧。需求就是用户为了解决问题或达到某些目标所需要的条件或能力,系统或系统部件为了满足合同、标准、规范或其他正式文档所规定的需求而需要具备的条件或能力,对以上内容进行文档化表述统称为需求。

  其实掌握需求就是掌握目标,我理解为目标管理。既然是目标那就必须明确。我们再需求阶段常常发现客户自己也搞不清楚需求,这个时候我们不能责怪客户。我们应该从专业的角度去问一些问题,采用5W原则。When:什么时间?;Where:在什么地方?;Who:是谁做?;Why:为什么?;What:是什么?; 

 

 

  软件危机

  另外,我们也经常听说“软件危机”这个词。软件危机指落后的软件生产方式无法满足迅速增长的计算机软件需求,从而导致软件开发与维护过程中出现一系列严重问题。产生软件危机的一个原因是用户需求不明确,在软件开发过程中,用户需求不明确主要体现在四个方面:1、用户不清楚软件开发的具体需求;2、用户对软件开发需求的描述不精确、有遗漏、有二义性、甚至有错误;3、在软件开发过程中,用户不断的提出修改软件开发功能、界面、支持环境等方面的要求;4、软件开发人员对用户需求的理解与用户原本的愿望有差异。这些问题导致的危机将导致项目失败或部分失败,成本提高。

  软件需求工程阶段要做的就是在项目开发之前,做好充分的准备,形成系统解决方案,将一切可能发生的情况均考虑进去,并得到用户的确认,然后进行软件开发的下一步骤。除了用户提出的需求,还有用户潜在需求,需要最重要的特点是完整性、正确性和一致性。不管采用什么方法,软件需求工程都是关键的内容。

 

 

3、软件需求的分类

  IEEE将软件需求分为五类:功能需求、性能需求、质量属性、对外接口以及约束。通常情况下,我们把性能属性、质量属性、对外接口、约束归纳为非功能性需求。所以通常我们把需求分为两类:功能性需求和非功能性需求。

 

  功能性需求

   

  功能性需求具有三个层次分别是业务需求、用户需求和系统需求。

  1)业务需求

  描述为什么要开发系统(Why)。业务需要描述组织或客户的高层次目标,定义系统特性。从整体上描述为什么要开发软件或系统(还是Why),组织希望达到什么样的目标。业务需求获取后形成的文档为项目前景和范围文档。这些文档描述了组织对将使用的软件系统所要达到目标的预期期望。

  2)用户需求

  描述系统能够帮助用户做什么(What)。用户需求主要指用户使用软件或系统必须完成那些任务,怎么完成需求,通常是在问题定义的基础上进行用户访谈、调查,对用户使用的场景进行整理,从而建立从用户角度的需求。用户需求必须能够体现软件系统将给用户带来的业务价值,或用户要求系统必须能完成那些人物。用户需求主要描述用户使用系统能够做什么事情(还是What)。通过用户需求信息形成的文档为用例说明文档。

  3)系统需求

  描述用户要求的具体流程(How)。系统需求是用户对系统行为的期望,一系列的系统需求联系在一起,帮助用户完成任务,达成用户需求,进而满足业务需求。系统需求可以直接映射为系统行为,定义系统中需要实现的功能,描述开发人员需要实现什么。他描述的是开发人员如何设计具体的解决方案来实现这些需求(How),是业务需求和用户需求最终实现的目标,其级别比用户需求高以数量级。系统需求信息都记录在需求规格说明书(Software Requirement Specification及SRS)文档中。

  有几个概念需要特别注意,系统需求并不是指需求怎么实现,需求怎么实现是设计阶段完成,系统需求是How的需求,即指需求本身的流程。可以理解成系统需求What是怎么实现。这三个需求其中业务需求最为关键,如果业务需求错了,那么整体需求就全错了。业务需求是需求的驱动力,是需求的价值所在。需求的最终目的就是解决客户的问题。这个真不能错!!!

  举个例子:一家体育健身房,由于环境好,健身器材品种全等原因名气比较大,而店面的规模有限,出现健身高峰时段顾客人满为患的情况。顾客因健身环境嘈杂经常投诉。简单分析一下这家健身房遇到的问题,1)店面规模有限,造成大量顾客在高峰期出现在健身房。2)大量顾客因人数较多产生不满情绪,投诉老板。这时该店老板就提出需要开发一个微信小程序解决问题。此事需求产生了。【突然发现这个例子不太好,如需要调整请联系我】

  老板为了在不扩充店面的情况下,尽可能的增加顾客的好感度,防止新老客户的流失。老板想采用微信小程序进行预约健身,这样便于顾客错峰健身。从而提升顾客的满意度,减少客户投诉。我们根据例子进行分析一下:

  功能性需求分析

  a.业务需求:描述为什么要开发系统(Why)开发系统的目标是什么,为什么要有这个系统。每条需求应该有唯一标示,便于后续追踪。

  YW01:实现预约健身管理

  高层次的解决方案SS01:在线预约、后台管理。

  系统特性SF01:①顾客可以在线看出过去时间段内的高峰信息;

         ②顾客需要在线预约健身时间;

         ③后台可以查看预约信息管理;

         ④主动提示非高峰期给顾客选择。

  b.用户需求:描述系统能够帮助用户做什么(What)

  UR01:在用户需要预约时,可以选择具体的日期。填写顾客信息,提交预约申请,等健身房反馈。

  补充说明:①预约信息包括:会员ID、预约时间;

       ②预约信息反馈包括:结果状态,预约信息等。

  c.系统需求:描述达到用户要求的具体流程(How)。

      ①顾客可以在小程序上查看一年内的预约信息;

      ②顾客可以预约半年以内的日期;

      ③顾客可以预约,取消预约;

      ④健身房业务人员可以试试查看并处理预约申请;

      ⑤健身房业务人员可以对特殊日期进行处理为不可以预约日期等;

      ⑥健身房业务人员可以对系统用户数据进行管理等。

  非功能性需求

  1)性能需求:IEEE定义一个系统或者其他组成部分在限定的约束下,完成其指定功能的程度。主要包括软件响应速度、精度、容量、负载、系统吞吐量,运行时资源消耗等属性要求。

    小程序:

      PR01:获取数据时间不超过3秒,数据提交响应时间不超过1秒。

    后台服务器

      PR02:业务员操作时保持流程,不超过1秒的延迟,用户提交的预约信息,不超过5秒钟就可以看到。

    PS:性能需求的定义要适合运行环境,过于宽松的性能要求会带来用户的不满,过于苛刻的性能要求会给系统的设计造成不必要的负担,所以给出一个合适的量化标准非常关键且非常困难。常见的方法是在限定性能目标的同时给出一定的灵活性或者给出不同层次的目标要求。如:最低标准(在200个用户并发是,系统不能崩溃),一般标准(在200个用户并发时,系统应该在80%的时间内正常工作),最高标准(在200个用户并发时,系统保持正常工作)。

  2)质量属性:系统完成工作的质量,即系统需求在一个“好的程度”上实现功能需求,如

    ①软件的灵活性:产品在增加新功能时所需工作量的大小;

    ②可靠性:软件无故障执行一段时间的概率;

    ③健壮性:指遇到非法输入或操作等异常情况系统能继续正确运行功能的程度;

    ④易用性和可用性:用户理解软件所花费最小化程度,软件出现系统故障后保持运行的能力;

    ⑤等等。

  3)对接接口:系统和环境中其他系统之间需要建立的接口,包括硬件接口、软件接口和数据库接口等。

    对系统之间的软硬件接口需要说明以下内容:

    ①接口数据格式

    ②接口命令格式

    ③接口标准

    ④接口输入标准

    ⑤接口用途

  4)约束:构建系统时需要遵守的约束,如使用什么语言开发,用什么牌子的硬件。约束不受系统功能需求影响,却会给系统开发带来很多限制,会在总体程度上限制开发人员设计、开发、测试是的选择范围。

    ①硬件要求:如指定用惠普打印机等

    ②系统的软件要求:客户端操作系统、服务器操作系统、数据库系统等等

    ③条件、假设和约束:如三个月开发时间,服务器预算,系统费用不超过20万等。

  以上都是需求,如何正确的获取需求和分析需求。我们不仅要了解需求的分类,还要掌握需求的特征。这样可以形成共识,便于交流和沟通。

4、软件需求工程的过程

  软件需求工程

  需求就是发现用户提出的要求,挖掘用户要求的潜在问题。要发现问题,首先要理解问题,那么为了理解用户的问题,需要对问题做一定的分析。软件需求工程就是发现问题,理解问题,分析问题,并形成规范化文档,对文档进行验证和对整个需求管理的过程。官方标准化的描述是“软件需求工程师指应用已证实有效的技术、方法进行软件需求分析,确定客户需求,帮助分析人员理解问题并定义目标系统的所有外部特征的一门学科。它通过合适的工具和记号,系统的描述待开发系统及其行为特征和相关约束,形成需求文档,并对用户不断变化的需求演进给予支持。软件需求工程师一门分析并记录软件需求的学科,并通过一系列重复的分析、设计、比较研究、原型开发过程把这些系统需求转换成软件的需求描述和一些性能参数”。

 

  软件需求工程的过程

  首先我们谈的是过程,那么它就符合过程的特性。过程是一系列活动的集合,通过这些活动的执行,可以完成一项任务或达到某个目标。软件需求工程过程就是系列与需求开发、管理相关的活动。包括:需求获取、需求分析、需求规格说明书的形成、需求验证和需求管理。如图:

  a.需求获取

  需求的获取从涉众、文档资料或环境中获取需求的过程,包括了收集背脊资料、定义前景和范围,选择信息来源,选择获取方式和技巧并记录获取结果。

  b.需求分析

  需求分析是指建立一个新的或改变一个现存的系统时,描述新系统的目的、范围、定义和功能时所需要做的所有工作。需求分析时软件工程中一个重要过程,它决定了系统的正确与否。在这个过程中要分析背景资料、确定系统范围、细化需求、确定优先级,通过协商需求和确定需求来确定需求。确定需求后分析和寻找新系统的解决方法,需求分析阶段的任务时确定软件系统功能和非功能内容并得到相应模型。

  c.需求规格说明书

  需求规格说明书是指将获取的需求编写成文档,方便用户、客户、开发人员之间交流需求信息,是整个开发工作的基础。需求内容包括硬件、功能、性能、输入输出、接口界面、警示信息、保密安全、数据与数据库、文档和法规的要求。

  d.需求验证

  需求验证是用来确保需求说明准确、完整地表达需求,主要包括审查需求文档,修改不合理的需求。应该让更多的人参与需求验证,避免错误。

  e.需求管理

  需求管理是一种用于查找、记录、组织和跟踪系统需求的系统化方法,可用于获取、组织和记录系统需求并使客户和项目团队在系统需求变更上保持一致。有效的需求管理在于维护清晰明确的需求阐述、每种需求类型所使用的属性,以及与其他需求和其他项目工作之间的可追踪性。其活动一般包括:定义需求基线,简历跟踪信息,进行变更控制。

 

  PS:组织在项目开始阶段应该投入精力去做需求工程的工作,只有做好需求工程的工作之后,才能把握需求,完成项目目标。组织也应该形成系统化需求工程业务流程和规范,形成组织内外部交流的规范文档。

  

  

 

 

 

 

 

 

======================赞赏名单======================

 

  

  

  

 

  

posted @ 2019-03-01 14:49  Bosen  阅读(452)  评论(0)    收藏  举报