热门标签 | HotTags
当前位置:  开发笔记 > 数据库 > 正文

第3章需求获取

第3章需求获取标签:软件需求工程《软件需求工程》毋国庆第二版个人笔记第3章需求获取确定需求开发计划确定项目的目标和范围确定调查对象实地收集需求信息确定非功能需求在收集需

第3章 需求获取

标签: 软件需求工程

《软件需求工程》 毋国庆 第二版 个人笔记


  • 第3章 需求获取
      • 确定需求开发计划
      • 确定项目的目标和范围
      • 确定调查对象
      • 实地收集需求信息
      • 确定非功能需求
      • 在收集需求信息中应该注意的问题
      • 使用场景技术的需求获取


1. 确定需求开发计划

  • 基本任务:确定需求开发的实施步骤,给出手机需求活动的具体安排和进度。
  • 重点是:分析、理解和描述用户的需求,着重于软件系统“做什么”,而不是如何实现软件系统。

2. 确定项目的目标和范围

  • 基本任务:根据项目目标把项目相关人员定位到一个共同和明确的方向上,并决定软件系统的范围。
  • 项目的目标主要包括项目开发的目的和意义,以及软件系统应实现的目标(即目标需求)
  • 项目的范围:指软件系统具体应包括和不应包括的部分,以及软件系统所涉及的各个方面。


  • 不同的人会从不同的角度提出不同的目标需求,例如(自动售货机):
    • 从开发商角度:
      1. 为客户提供便利的自动售货功能
      2. 同故宫管理系统能想顾客提供品种较为齐全的消费品
      3. 吸引顾客对商品的兴趣
      4. 高可靠性
    • 从零售商角度:
      1. 能吸引和方便更多的顾客
      2. 代替人工操作
    • 从开发人员的角度
      1. 使用较为先进的开发技术和工具
      2. 建立高科技系统


  • 确定项目范围的好处是:
    1. 可以判断用户所提出的需求信息是否对项目合适
    2. 有些用户需求信息可能是建议,这些建议是项目之外的,但可能有价值。因此可适当改变项目范围来适应这样的需求

3. 确定调查对象

  • 基本任务:明确地确定来自不同层次的需求来源的用户,并将其分类。
  • (必须搞清楚的问题:谁是产品的用户)


  • 对用户分层次:
    1. 提出目标需求的用户:他们阐明软件系统的高层次概念,如开发项目的目的、总体规划、主要业务内容。
    2. 提出业务需求和功能需求的用户:他们相当清楚要使该系统完成什么任务,以及系统应具备的重要功能和特性等。
    3. 软件开发人员(系统分析员):他们必须从用户的角度,根据用户提供的需求信息和业务流程理解和分析出软件系统应实现的具体功能和非功能需求,从而使软件系统能按照用户要求完成任务。

  • 用户代表的义务:
    1. 给分析人员讲解业务及说明业务方面的术语等专业问题
    2. 抽出时间清楚地说明需求,并不断完善
    3. 当说明系统需求时,力求准确详细
    4. 需要时,要及时对需求做出决策
    5. 要尊重开发人员的成本估算和对需求的可行性分析
    6. 对单项需求、系统特性或用例划分优先级
    7. 评审需求文档和原型
    8. 一旦知道要对项目需求进行变更,要马上与开发人员联系
    9. 在要求需求变更时,应遵照开发组织确定的工作过程来处理
    10. 尊重需求工程中的开发人员采用的流程(过程)

  • 典型的软件需求来源
    1. 直接和简介使用软件系统的用户
    2. 系统需求规格说明书
    3. 市场调查和用户问卷调查
    4. 已开发出的和待开发的同类软件系统的描述和文档
    5. 对人工系统中存在的问题的报告和增强要求
    6. 观察正在工作的用户
    7. 用户工作内容的分析

4.实地收集需求信息

  • 任务:到现场实地调查和与用户交流,收集和理解用户需求信息
  • 面临的困难:
    1. 用户方面(没有充分的时间、利益关系、用户自身素质问题)
    2. 开发人员方面(缺乏用户的业务知识,交流问题)


  • 三个步骤:

    1. 向掌握“全局”的负责人调查
    2. 向部门负责人调查
    3. 向业务人员调查
  • 实地收集需求信息的方式

    1. 座谈会方式
    2. 书面咨询的方式(问问题)
    3. 利用用例表示方法

  • 需求信息的分类:
    1. 目标需求:描述用户或开发机构通过产品可获得的利益或利润,以及与产品相关的发展规划等方面的信息。
    2. 用例说明:有关如何利用系统完成业务任务或如何实现用户目标的陈述可能就是用例,而特定的任务描述更需使用用例说明。
    3. 业务规则:当一个客户说一些活动智能在特定的条件下由一些特定的人来完成时,该用户可能在描述一个业务规则。
    4. 功能需求:功能需求定义了系统应该做什么,他们是软件需求规格说明书的一部分
    5. 性能需求:对系统如何能很好地执行某些行为或让用户采取某一措施的陈述就是性能需求,这是一种非功能需求。
    6. 外部接口需求:描述了系统与外部的联系。(从《某些设备》读取信号,给《某些系统》发送消息,以某种格式读取文件。。。)
    7. 限制:指一些合理限制设计者和程序员选择的条件,它们代表了另一种类型的非功能需求,必须把这些需求写入软件需求规格说明书。(必须使用《某种数据库或程序语言》,不能申请多于《一定数量的内存》,必须与《其他应用程序》一致。。。)
    8. 数据定义:当客户描述一个数据项或一个复杂的业务数据结构的格式、允许或默认值时,就是在进行数据定义
    9. 解决方案:(这是客户在说系统如何设计实现,而不是做什么,这不是需求,是建议)

5. 确定非功能需求

  • 非功能需求是衡量软件能否良好运行的定性指标。
  • 一些常见非功能需求:
    1. 可靠性
    2. 可扩充性
    3. 安全性
    4. 互操作性
    5. 健壮性
    6. 易使用性
    7. 可维护性
    8. 可移植性
    9. 可重用性

  • 在收集需求信息中应注意的问题
    1. 应能适当地调整收集范围
    2. 尽量把用户所做的假设解释清楚,特别是发生冲突的部分
    3. 尽量理解用户用于表达他们需求的思维过程,特别是尽量熟悉和掌握用户具有的一些专业知识和术语
    4. 在收集需求信息时,应尽量避免受不熟悉细节的影响
    5. 应尽量避免讨论一些具体的解决方案,因为需求阶段的工作是弄清楚软件系统做什么,而不是怎么做
    6. 需求信息收集工作的结束,不要没完没了的

6. 在收集需求信息中应该注意的问题

  • 要注意以下问题:
    1. 应能适当地调整收集范围
    2. 尽量把用户所做的假设解释清楚
    3. 尽量理解用户用于表达他们需求的思维过程,特别是尽量熟悉和掌握用户具有的一些专业知识和属于
    4. 在收集信息时,应尽量避免受不熟悉细节的影响
    5. 应尽量避免讨论一些具体的解决方案
    6. 需求信息收集工作的结束,不要没完没了的

7. 使用场景技术的需求获取

  • 场景:用户与软件系统为实现某个目标而进行交互活动过程的描述
  • 应包含的内容:

    1. 执行者(用户)
    2. 进入场景前系统状态的描述
    3. 执行者的目的
    4. 动作和事件系列(包括正常和非正常的事件流)
  • 例子(使用以上的描述形式)(Windows98切断PC电源的场景)

    • 执行者(用户):王某
    • 进入场景前系统状态的描述:使用PC的经验是1年,几乎每天使用。另外,发送电子邮件的工作已结束
    • 执行者的目的:退出Windows98,并且切断PC电源
    • 动作和事件系统:图3-2中的第2段文字,从按下“开始”按钮到切断PC事件结束为止。

  • 场景的典型表示形式
非形式化的表示 形式化的表示
自然语言
结构化语言
图形
动漫画等
状态图
流程图
时序图
代数描述图等

  • 使用用例的需求获取(ATM取出现金用例)(用例描述)

推荐阅读
  • 本文探讨了Web开发与游戏开发之间的主要区别,旨在帮助开发者更好地理解两种开发领域的特性和需求。文章基于作者的实际经验和网络资料整理而成。 ... [详细]
  • 本文探讨了如何利用SqlDependency执行复杂的SQL查询,并确保在多线程环境下的安全性与效率。 ... [详细]
  • 本文将详细介绍如何在ThinkPHP6框架中实现多数据库的部署,包括读写分离的策略,以及如何通过负载均衡和MySQL同步技术优化数据库性能。 ... [详细]
  • 应对.avast后缀勒索病毒:全面指南
    本文详细介绍了.avast后缀勒索病毒的特性、感染途径、恢复方法及预防措施,旨在帮助用户有效应对这一威胁。 ... [详细]
  • 前言无论是对于刚入行工作还是已经工作几年的java开发者来说,面试求职始终是你需要直面的一件事情。首先梳理自己的知识体系,针对性准备,会有事半功倍的效果。我们往往会把重点放在技术上 ... [详细]
  • MySQL锁机制详解
    本文深入探讨了MySQL中的锁机制,包括表级锁、行级锁以及元数据锁,通过实例详细解释了各种锁的工作原理及其应用场景。同时,文章还介绍了如何通过锁来优化数据库性能,避免常见的并发问题。 ... [详细]
  • EasyMock实战指南
    本文介绍了如何使用EasyMock进行单元测试,特别是当测试对象的合作者依赖于外部资源或尚未实现时。通过具体的示例,展示了EasyMock在模拟对象行为方面的强大功能。 ... [详细]
  • 本文详细介绍了在使用Socket进行网络编程时,遇到链接器错误`undefined reference to WSAStartup@8`的解决方案,适用于多种开发环境。 ... [详细]
  • WinSCP: 跨Windows与Linux系统的高效文件传输解决方案
    本文详细介绍了一款名为WinSCP的开源图形化SFTP客户端,该工具支持SSH协议,适用于Windows操作系统,能够实现与Linux系统之间的文件传输。对于从事嵌入式开发的技术人员来说,掌握WinSCP的使用方法将极大提高工作效率。 ... [详细]
  • 如何恢复CAD中意外丢失的图纸数据
    当使用CAD进行绘图时,因突然断电或其他原因导致计算机关闭可能会造成工作数据的丢失。然而,通过利用CAD软件的自动保存功能,用户通常能够恢复至最近一次自动保存的数据状态。 ... [详细]
  • 本文详细介绍了 Python 中的 with 语句及其背后的上下文管理器机制,从基本概念入手,通过具体示例和原理分析,帮助读者深入理解这一重要的资源管理工具。 ... [详细]
  • Barbican 是 OpenStack 社区的核心项目之一,旨在为各种环境下的云服务提供全面的密钥管理解决方案。 ... [详细]
  • Java 架构:深入理解 JDK 动态代理机制
    代理模式是 Java 中常用的设计模式之一,其核心在于代理类与委托类共享相同的接口。代理类主要用于为委托类提供预处理、过滤、转发及后处理等功能,以增强或改变原有功能的行为。 ... [详细]
  • 深入解析MySQL查询优化:特定类型查询的高级策略
    本文详细探讨了MySQL中特定类型查询的优化方法,包括COUNT()查询、关联查询、LIMIT分页及UNION查询的优化技巧,旨在提高数据库查询效率。 ... [详细]
  • 本文深入探讨 PHPCMS 平台中的字符串截取函数 str_cut 的使用方法,该函数常用于控制输出的标题或内容摘要长度,有效避免因过长的文本导致的页面布局问题。通过本文,读者将掌握如何灵活运用此函数,包括处理 HTML 标签等高级技巧。 ... [详细]
author-avatar
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有