文章目录

  • 先决条件重要性
    • 造成准备不足的原因
    • 做准备工作的论据
      • 求助于逻辑推理
      • 求助于类比
      • 求助于数据
  • 问题定义先决条件
  • 需求分析先决条件
    • 为什么要有正式的需求
    • 稳定需求的神话
    • 在创建阶段如何对付需求变化
      • 用本部分后面的检查表来评估你的需求分析质量
      • 让每个人都知道由于变化需求所付出的代价
      • 建立一套更改控制过程
      • 用开发的方法来容纳变动
      • 放弃项目
    • 检查表
      • 需求内容
      • 关于需求的完善性
      • 关于需求的质量
    • 关于需求定义的进一步阅读

工欲善其事必先利其器

本章主要论述在软件创建之前所要做的准备工作,对于建筑业来说,项目的成败往往在开
工前就已经决定了。如果基础打得不好,或者项目计划进行得不充分,你所能做的最多也就是
防止计划失败,根本谈不上做好。如果你想做一件精美的首饰,那么就得用钻石作原料。如果
你用的是砖头,那你所能得到的最好结果不过是块漂亮的砖头而已。

先决条件重要性

优秀程序员的一个突出特点是他们采用高质量的过程来创建软件。这种过程在计划的开始、中间和末尾都强调高质量。
如果你只在一个计划即将结束时强调质量,那你注重的只是测试。当某些人一谈起软件质量时,他们首先想到的便是测试。然而,事实上测试只是全部质量控制策略的一部分。而且并不是最重要的部分。测试既不能消除在正确方向上的错误工作,也不能消除在错误方向上的正确工作的错误,这种错误必须在测试开始之前就清除掉,甚至在创建工作开始之前就要努力清除掉它们。

所有的计划都是带有明确的指向性的。

造成准备不足的原因

准备工作是非常重要的,所以在编程之前,请先克制自己编程的欲望,需要考虑的两点,这是非常重要的:

  • 第一,阅读一下下一部分工作的内容提示,或许你会从中发现一些你没想到的问题。
  • 第二,要注意自己的问题。只要创建过几个大的程序,你就会明白强调准备工作的必要性。不要忘记曾经的经验教训

做准备工作的论据

求助于逻辑推理

进行有效程序设计的关键之一就是认识到准备工作是非常重要的。在进行一项大的项目之前,事先做好计划是明智的。项目越大,需要的计划工作量也越大,从管理人员的角度来看,计划是指确定一个项目所需要的时间、人力、物力和财力。从技术人员的观点来看,计划是指弄清楚你想要干什么,以免做出错误的工作而徒耗精力与钱财。有时候你自己并不十分清楚自己想要的到底是什么?起码刚开始是这样。这时,就会比清楚知道用户需求的人要付出更多努力,但是,这总比做出一件错误的东西,然后把它扔掉,再从头开始的成本要低得多。
建造一个系统之前,弄清楚怎样开始和如何建造它也是非常重要的,你当然不希望在完全没有必要的情况下,浪费时间与钱财去钻死胡同而白白增加成本。

求助于类比

在你把圣诞树立起来后,你才会开始装饰它,在没有修好烟囱之前你也不会点燃炉火的,同样,也没有人会打算在油箱空空的情况下踏上旅程,在软件开发中,你也必须按照正确的顺序来进行。
程序员处于软件开发食物链的最后一环。结构设计吃掉需求分析;详细设计者以结构设计者为食,而他自己又成为编码者的食物。

如果需求定义遭受了污染,那么这又会影响结构设计,而这将最终影响创建活动。这将导致程序员们脾气暴躁而营养不良,同时生产出遭受严重污染而充满缺陷的软件。

求助于数据

将错误斩断至最开端,随着开发的不断进行,恢复错误的代价也会越高。

问题定义先决条件

在进行创建工作之前你要满足的第一个先决条件,便是必须弄清楚你想要解决的问题是什么。

问题定义应该从用户的观点出发,使用用户的语言进行定义,用通俗易懂的语言表述清楚。

需求分析先决条件

为什么要有正式的需求

IBM、GTE、TRW 的数据表明.修正在总体结构阶段发现的需求错误,将比当时就发现并修正的成本要高出 5 倍,如果是在编码阶段,要高出 10 倍,在单元或系统测试阶段,高 20 倍,在验收测试阶段,高 50 倍,而在维护阶段,竟要比原来高出多达 100 倍!在较小规模的计划中,在维护阶段修正错误的放大因子可能是 20 而不是 100,因为这时管理费用较低。但无论如何没有人愿意从自己的收益中拿出这笔钱来。

稳定需求的神话

用户一旦接受了写好的需求文件,便再也不会提出更改需求,这简直是太好了。然而事实上,在实际项目中,用户在代码写出来之前,往往并不能确切可靠地描述出他想要的到底是什么,这倒并不是说用户是一种低级生物。正如随着工作的进行,你对其理解越来越深刻一样,用户对自己想要的东西,也是随着项目的进行而越来越清楚的,这也是要求变动的主要原因。一个从不变更要求的计划,事实上是一个对用户的要求不予理睬的计划。

在创建阶段如何对付需求变化

用本部分后面的检查表来评估你的需求分析质量

如果觉得方向不对请立刻回到上一步,并重新执行,切莫南辕北辙。

让每个人都知道由于变化需求所付出的代价

用时间进度和成本估计来评估变化的必要性。

建立一套更改控制过程

共赢的处理方式,按照制定规则下的方式去处理,统一标准。

用开发的方法来容纳变动

增量效应,每次做一点点改动,使大家都能接受。

放弃项目

需求古怪,不符合上面的标准,可放弃

检查表

需求内容

  • 系统的所有输入都定义了吗?包括它们的来源、精度、取值范围和频率?

  • 系统所有的输出都定义了吗?包括它们的目标、精度、取值范围、频率和格式?

  • 所有的报告格式都定义了吗?

  • 所有的硬件与软件接口都定义了吗?

  • 所有的通信交界面都定义了吗?包括握手、错误检查以及通信约定?

  • 是否从用户的观点出发,定义了所有必要操作的反应时间?

  • 是否定义了时间问题,如处理时间、数据传输率以及系统吞吐能力?

  • 是否对用户所要求完成的任务部作出了规定?

  • 每项任务所需用到和产生的数据都规定了吗?

  • 规定保密级别了吗?

  • 规定可靠性了吗?包括软件出错的后果、在出错时要保护的至关重要的信息、以及错误测试和恢复策略。

  • 规定所需最大内存了吗?

  • 所需最大存储容量规定了吗?

  • 对系统的维护性是否作出了规定?包括系统对运行环境、精度、性能以其与其它软件的接口等方面变化的适应能力规定了吗?

  • 是否规定了相互冲突的设计之间的折衷原则,例如,在坚固性与准确性之间如何进行折衷?

  • 是否制定了系统成败的标准?

关于需求的完善性

  • 在开发开始前暂时得不到的信息是什么?是否规定了不够完善的区域?
  • 需求定义是否已经完善到了可以成为软件标准的地步?
  • 需求中是否有哪一部分令你感到不安?有没有根本不可能实现,而仅仅为了取悦老板和用户才加进来的内容?

关于需求的质量

  • 需求是否是用用户的语言制定的?用户也这样认为吗?
  • 需求中是否每一条之间都尽量避免冲突?
  • 需求中是否注意了避免规定设计工作?
  • 需求在详细程度方面是否保持了一致性;有没有应该更详细些的要求?有没有应该更
    简略些的?
  • 需求是否明确得可以分为一些独立的可执行部分,而每一部分又都很明了?
  • 是否每一条都与问题和答案相关?是否每一条都可以追溯到产生它的环境中?
  • 是否每一条需求都可以作为测试依据?是否可以针对每一条进行独立测试以确定是否满
    足需求?
  • 是否对可能的改动作出了规定?包括每一改动的可能性?

关于需求定义的进一步阅读

以下是一些给出了如何进行需求定义的书:
DeMarco, Tom 《 Structured Analysis and Systems Specification:Tools and Techniques 》Englewood Cliffs,N.J:Prentice Hall,1979,这是关于需求定义的经典著作。
Yourdon,Edward 《Modern Structured Analysis》 New York:Yourdon Press,1989,这本新书论述了许多进行需求定义的文字和图表工具。
Hatley,Derek J 和Imtiz A. Pirbhai 《Strategies for Real-Time system Specification》Newyork :Dorset house,1988。这是一本替代 DeMarco 或 Yourdon 书的最佳选择。它重点论述了实时系统,并把 DeDarco 和 Yourdon 提出的图表法扩展到了实时系统中。
Shlaer,sally 和 Stephen Mellor《Object Oritented System Analysis-Modeling the World in Data》Englen wood Cliffs,N.J: Prentice Hall,1988。本书讨论了面向对象设计中的需求分析。
IEEE Std 830-1984(Guide for Software Requirements Specifications) in IEEE 1991。这份文献是 IEEE 为编制软件开发需求定义制订的指导性论述。它描述了需求定义中应该包括的内容并给出了几个例子。
Gibson,Elizabeth《objects-Born and Bred》Byte,1990 10:245-54。这篇文章是关于面向对象需求分析的入门书。

先决条件(一)问题定义和需求分析相关推荐

  1. (软件工程复习核心重点)第三章需求分析习题

    文章目录 一:选择题 二:填空题 三:名词解释 (1)必考 四:简答题 (1)必考 (2)了解 五:应用题/画图题 一:选择题 二:填空题 需求分析的任务 确定对系统的综合要求 分析系统的数据要求 导 ...

  2. 软件需求工程--需求分析

    需求特性 无二义性,完整性,一致性,可测试性, 确定性,可跟踪性,正确性,必要性. 需求分析的7个方面 绘制系统上下文范围关系图--系统与系统外部实体之间的界限和接口的简单模型 创建用户界面原型--关 ...

  3. 【软件工程】第5章 软件需求分析

    [软件工程]第5章 软件需求分析 思考题 需求分析的目的是什么,有什么作用? 软件需求有哪些分类?请举例说明. 需求分析过程有哪些步骤? 需求获取方法有哪些? 你所在的项目团队会选择采用哪些需求获取方 ...

  4. 《代码大全2》第3章 三思而后行,前期准备

    目录 前言 本章主题 3.1 前期准备的重要性 3.1.1 处于不同阶段强调质量 3.1.2 前期准备对"构建活动"的影响 3.1.3 准备不周全的诱因 3.1.4 我理解的准备周 ...

  5. CoreCLR系列随笔 之ClrJit项目之alloc.cpp文件分析(1)

    首先声明,自己对CLR了解得不多,只是个人爱好,可能有错误,请指出,文件源码如下(可能不是最新的) // // Copyright (c) Microsoft. All rights reserved ...

  6. 开发步骤 采用restful接口开发的开发步骤

    2019独角兽企业重金招聘Python工程师标准>>> 项目是基于前后端分离的架构进行开发,前后端分离架构总体上包括前端和服务端,通常是多人协作并行开发,开发步骤如下: 1.需求分析 ...

  7. 对软件体系结构的认识

    一 . 软件体系结构(架构) 软件体系结构的定义 通常,软件体系结构通常被称为架构,指能够预制和可重构的软件框架结构.架构尚处在发展期,对于其定义,学术界尚未形成一个统一的意见,而不同角度 的视点也会 ...

  8. 范围管理6个过程及相关重点

    目录 小技巧: 总述: 1.规划范围管理计划(编制范围管理计划,书面描述将如何定义.确认和控制项目范围的过程) 2.收集需求Collect Requirement 3.定义范围(确定范围边界) 4.创 ...

  9. 《软件工程概论》第二章核心内容

    1.软件工程方法学:软件生命周期全过程中使用的一整套技术的集合成为方法学,也称为范型.三要素:方法.工具.过程  2.传统方法的特点:传统方法学把软件生命周期的全过程依次划分为若干个阶段,然后顺序地逐 ...

  10. 矩阵形状| 使用Python的线性代数

    Prerequisite: Linear Algebra | Defining a Matrix 先决条件: 线性代数| 定义矩阵 In the python code, we will add tw ...

最新文章

  1. 解决报错: MobaXterm X11 proxy: Unsupported authorisation protocol
  2. 行将消失的烧瓦匠人:“仿古”热潮下迎新生曙光
  3. MassTransit_契约的创建
  4. Python学会使用虚拟环境——pipenv
  5. 分析启动耗时 android,Android app启动耗时分析
  6. 创建一个二维数组,以4行4列左对齐的方式将数组输出
  7. macOS 12兼容机型列表 想知道你的Mac是否支持macOS Monterey吗?
  8. 发现一个HTML Form提交的小问题,不知道大家是不是都注意到了
  9. IDM下载器Windows系统是最快的下载工具
  10. 软件工程--团队作业2
  11. 软件开发工具的使用与开发
  12. asp.net 使用UrlRewritingNet.UrlRewriter组件URL重写,伪静态详解
  13. 如何在iPhone和iPad上使用Group FaceTime
  14. 如何评价 2021 考研政治题,难度如何?
  15. Kafka的数据是如何存储的
  16. MTK modem log中判断SIM卡类型__2020.07.16
  17. Screegle - Mac 上一款干净简洁的屏幕共享软件
  18. Python之多线程应用
  19. Quartus II 11.0 破解成功后,编译时却提示不支持 xxx器件的ERROR
  20. 二、E906移植----项目解读与FPGA基本工程搭建

热门文章

  1. 单线多拨,傻瓜式openwrt单线多拨叠加速率教程
  2. JS框架_(JQuery.js)夜晚天空满天星星闪烁动画
  3. 《一只特立独行的猪》摘抄笔记
  4. JLA服务器性能测试,Shell脚本 | 性能测试之CPU占有率
  5. bash, sh, dash 傻傻分不清楚
  6. 重庆涪陵创新计算机职业学校文艺表演,涪陵信息技术学校2017年元旦文艺汇演...
  7. 库存遮羞布被揭开,高通提前发布骁龙8G2,国产手机已无路可走
  8. Java 如何给现有PDF文档添加页码
  9. Java实现 LeetCode 108 将有序数组转换为二叉搜索树
  10. 使用EndNote对Word论文的参考文献进行管理