软件工程期末复习(6)需求分析的任务

需求分析

需求分析的任务

“建造一个软件系统的最困难的部分是决定要建造什么……没有别的工作在做错时会如此影响最终系统,没有别的工作比以后矫正更困难。”                                                      

                                                                                                                     —— Fred Brooks

 

需求难以建立的原因:

  • 误解
  • 交流障碍
  • “完整性”问题
  • 需求永远不会稳定
  • 用户意见不统一
  • 错误的要求
  • 认识混淆

 

需求为何重要?------软件项目失败的原因:

  •  不完整的需求(13.1%)
  • 缺少用户的参与(12.4%)
  • 缺乏资源(10.6%)
  • 不切实际的期望(9.9%)
  • 缺乏行政支持(9.3%)
  • 改动需求和说明(8.7%)
  • 缺少计划(8.1%)
  • 不再需要该系统(7.5%)

需求为何重要?------有关软件错误的一些认识:

事实1: 在软件生命周期中,一个错误发现得越晚,修复错误的费用越高

事实2:   许多错误是潜伏的,并且在错误产生后很长一段时间才被检查出来 

Boehm从TRW公司所做的软件项目中得出结论:所有被检测出来的错误中的54%实际上是在编码和单元测试阶段以后才被发现的;更糟糕的是,此类错误中的绝大部分(占45%)是属于需求和设计阶段的,而编码阶段的错误只占9%。 

事实3:     在需求过程中会产生很多错误

DeMarco在一份研究报告中指出,被检查出来的错误的56%产生的根源可以追溯到需求阶段。AIRMICS所进行的一项调查发现,在一份美国军方大型管理信息系统的需求规格说明书中存在着500多个错误,当然这仅仅是一个软件项目中的一次调查。

事实4:   在需求阶段,代表性的错误为疏忽、不一致和二义性 

美国海军研究实验室对海军A-7E飞机上的飞行操作程序进行实地测试,得出的研究数据表明: A-7E项目中77%的需求错误特点是不明确-疏忽、不一致和二义性。

  • 49% 不正确的事实
  • 31% 疏忽
  • 13% 不一致
  • 5%  二义性
  • 2%  放错位置

 事实5 :  需求错误是可以被检查出来的

Basili和Weiss的数据表明:在A-7E的软件定义文档中,33%的需求错误是通过人工检查出来的。 Celko觉得利用自动分析工具能够从SRS中检查出来相当数量的错误。

由上面这些事实,能得出如下四点结论:

  • 在需求过程中会产生很多错误(事实3和4)
  • 许多错误并没有在早期被发现(事实2)
  • 这样的错误是能够在产生的初期被检查出来的(事实5)
  • 如果没有及时检查出来这些错误,软件费用会直线上升(事实1)

需求过程不仅是可能的而且也是值得的

什么是需求?

  • 需求:就是系统的特征,或对系统为达到某个目标所能做的事情的一个描述。
  • 需求:是对问题信息和系统行为、特性、设计及制造约束的描述的集合。
  • 需求过程本质:在问题空间与求解空间中间架设桥梁。

项目干系人(Stakeholder)

  • 直接或间接从正在开发的系统中获益的人
    • 业务运行管理人员
    • 产品管理人员
    • 市场销售人员
    • 内部和外部客户
    • 最终用户
    • 顾问
    • 产品工程师、软件工程师、支持和维护工程师以及其他人员

 项目干系人需求、系统需求:

  • 需求可能首先从项目干系人角度表达为一个非形式化的、不详细的、高层的描述,称为项目干系人需求(客户需求);
  • 然后从开发者角度出发,发展成更详细的形式,即系统需求。

功能需求、非功能需求

功能需求:系统与环境间的交互——描述系统必须支持的功能和过程的系统需求。

非功能需求:客户给出的具体约束、指标——描述操作环境和性能目标的系统需求。

二者的区别:功能需求描述系统应该做什么,非功能需求则为如何实现这些需求设定约束。

例如:

功能需求可能声明:系统必须提供一些验证系统用户身份的工具

非功能需求可能声明:验证过程必须在4秒内完成。

应该考虑到的非功能需求 

  • 性能:实时性、资源利用、硬件配置限制、精确度
  • 可靠性:有效性、完整性
  • 安全/保密性
  • 运行限制:使用频度、运行期限、控制方式(如本地或远程)、对操作员的要求
  • 物理限制:系统的规模等限制
  • 用户界面友好性:易用性

需求的特征

  • 正确性:要确保需求的表达中没有引入错误(faults)。
  • 一致性:确保没有互相冲突、矛盾的需求;确保没有不确定的需求。
  • 完整性:如果需求描述了所有可能的状态,以及状态的变化、输入、过程和约束,那么这组需求就是完整的。
  • 现实性:确保客户要求系统做的事真的能做到。
  • 实用性:确保需求和要解决的问题有直接关系。
  • 可检验性:必须能写出测试来说明需求已被满足。
  • 可回溯性:保证每个系统功能都能追溯到一组要求它的需求;确保很容易找到处理系统特定方面的某一组需求。 

需求文档

需求文档的可能使用者:
  • 系统客户:需要阅读需求文档来检验是否表达了他们的需要;
  • 软件项目管理者:需求文档是制定项目计划的基础之一;
  • 系统工程师:需要理解待开发系统;
  • 系统测试工程师:要依据需求文档制作测试用例,验证开发出的系统是否满足要求;
  • 系统维护人员:使用需求文档理解初始系统的特性和系统不同部分之间的关系。
两种需求文档:
  • 需求定义(需求描述)
    • 用应用域术语编写
    • 彻底列举客户/用户想要系统做些什么
    • 由客户/用户和开发人员共同编写
  • 需求规约(软件需求规格说明,Software Requirements Specification)
    • 用开发人员擅长的技术术语编写
    • 需求定义的技术性版本,方便设计人员理解
    • 由分析人员编写

需求分析的任务

  • 必须理解并描述问题的信息域,根据这条准则应该建立数据模型;
  • 必须定义软件应完成的功能,这条准则要求建立功能模型;
  • 必须描述作为外部事件结果的软件行为,这条准则要求建立行为模型;
  • 必须对描述信息、功能和行为的模型进行分解,用层次的方式展示细节
  • 确定对系统的综合要求
    • 功能需求
    • 性能需求
    • 可靠性和可用性需求
    • 出错处理需求
    • 接口需求:用户接口需求;硬件接口需求;软件接口需求;通信接口需求
    • 约束:精度;工具和语言约束;设计约束;应该使用的标准;应该使用的硬件平台 逆向需求
    • 将来可能提出的要求
  • 分析系统的数据要求
    • 建立数据模型
      • E-R图
    • 复杂数据结构的描述
      • 数据字典
      • 层次方框图
      • Warnier图
    • 数据库
      • 数据规范化
  • 导出系统的逻辑模型
    • 软件系统详细的逻辑模型通常用数据流图、实体-联系图、状态转换图、数据字典和主要的处理算法描述
  • 修正系统的开发计划
    • 可以比较准确地估计系统的成本和进度,修正以前制定的开发计划。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/12203.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

.net iText7 导出网页pdf 文件流

一. Install-Package itext7 二.构建字节流 using System.IO; using iText.Html2pdf; using iText.Kernel.Pdf; using iText.Layout; using iText.Layout.Element;public byte[] ConvertUrlToPdf(string url) {// 创建一个内存流用于存储PDF文件MemoryStream pdfStream new…

矩阵相关运算1

矩阵运算是线性代数中的一个核心部分,它包含了许多不同类型的操作,可以应用于各种科学和工程问题中。 矩阵加法和减法 矩阵加法和减法需要两个矩阵具有相同的维度。操作是逐元素进行的: CAB or CA−B其中 A,B 和 C 是矩阵,且 C…

unity删除文件到回收站

unity editor下删除文件及文件夹到回收站: unity删除文件到回收站 if (AssetDatabase.MoveAssetToTrash(removeFolder)) {AssetDatabase.MoveAssetToTrash(removeFolder ".meta"); }removeFolder“Asset/Test.txt”; 使用下面的删除了无法恢复 if (FileUtil.Delet…

7nm项目之模块实现——02 Placeopt分析

一、Log需要看什么 1.log最后的error 注意:warnning暂时可以不用过于关注,如果特别的warning出现问题,在其他方面也会体现 2.run time 在大型项目实际开发中,周期一般较长,可能几天过这几周,所以这就需要…

leetcode 2321.拼接数组的最大分数

思路:dp 这道题其实确实是有点难想,而且是很难联想到做法的那种。(需要有一定的经验才行)但是如果说有了思路,其实就很简单了。 我们可以在草纸上画上一下。比如,我们以第一个数组为基准,我们…

探讨 cs2019 c++ 的STL 库中的模板 conjunction 与 disjunction

(1)在 STL 库源码中这俩模板经常出现,用来给源码编译中的条件选择,模板的版本选择等提供依据。先给出其定义: 以及: 可以得出结论: conj 是为了查找逻辑布尔型模板参数中的第一个 false &#x…

vs2019中__cplusplus一直显示199711

vs2019中__cplusplus一直显示199711,如何修改? 打开属性->C/C->命令行,其他选项,输入:/Zc:__cplusplus

linux SSH连接banner设置

目的 SSH连接banner设置的目的: 在SSH连接成功后了解服务器地址,期限,拥有者,服务器硬件配置,环境变量等重要信息 未设置前雨云服务器SS连接成功后展示的内容 WARNING! The remote SSH server rejected X11 forward…

aws s3

列出关键点 创建s3 设置s3策略,所有人访问 { "Version": "2012-10-17", "Statement": [ { "Sid": "VisualEditor1", "Effect": "Allow", …

C#窗体程序设计笔记:如何调出控件工具箱,并设置控件的属性

文章目录 调出控件工具箱设置控件属性 调出控件工具箱 使用Visual Studio打开C#解决方案后,初始界面如下图所示: 接着,在上方的菜单栏依次选择“视图”“工具箱”,即可打开工具箱,如下图所示: 设置控件属…

Android开发,日志级别

5个日志级别 Verbose (VERBOSE): 这是最低的日志级别,用于输出最为详尽的信息,包括开发和调试过程中的各种细节。在Log类中对应的方法是Log.v()。Debug (DEBUG): 此级别用于输出调试信息,帮助开发者理解程序运行流程或状态。通过Log.d()方法…

产品品牌CRUD

文章目录 1.renren-generator生成CRUD1.数据库表设计1.数据表设计2.分析 2.代码生成器生成crud1.查看generator.properties(不需要修改)2.修改application.yml 连接的数据库修改为云数据库3.启动renren-generator模块4.浏览器访问 http://localhost:81/5…

解决使用Vue.js前端与Flask后端API交互时跨源资源共享问题

我在使用flask以及Vue做一个项目时遇到了Vue前端与Flask后端API交互的问题就是前端获取不到后端返回的数据,报错: 上网查说是跨域问题,于是找了一些解决办法,就是可以通过设置响应头的 Access-Control-Allow-Origin 字段来允许所有…

易货模式:引领交易新潮流,实现资源高效利用

随着全球经济的繁荣和科技的日新月异,传统的交易模式正面临革新。在追求高效、便捷与环保的当下,易货模式作为一种新兴的交易方式,逐渐崭露头角,受到越来越多人的青睐。 易货模式,简而言之,就是通过平台或在…

知乎广告推广投放流程以及价格?

知乎作为一个拥有庞大高质量用户群体的知识分享平台,成为了众多品牌不可忽视的广告投放渠道。知乎不仅汇聚了各行各业的专业人士,其独特的社区氛围也为品牌提供了精准触达目标受众的机会。知乎广告推广的投放流程、费用标准,云衔科技提供的专…

刷代码随想录有感(65):回溯算法——组合问题

题干&#xff1a; 代码&#xff1a; class Solution { public:vector<vector<int>> res;vector<int> tmp;void backtracking(int n, int k, int start){if(tmp.size() k){res.push_back(tmp);return;}for(int i start; i < n; i){tmp.push_back(i);bac…

[原创](Modern C++)现代C++的std::bind花式绑定,使用方式大全.

[简介] 常用网名: 猪头三 出生日期: 1981.XX.XX QQ联系: 643439947 个人网站: 80x86汇编小站 https://www.x86asm.org 编程生涯: 2001年~至今[共22年] 职业生涯: 20年 开发语言: C/C、80x86ASM、PHP、Perl、Objective-C、Object Pascal、C#、Python 开发工具: Visual Studio、D…

linux进阶高级配置,你需要知道的有哪些(13)-Squid代理服务器

1、squid代理的作用&#xff1a;缓存网页对象&#xff0c;减少重复请求 2、代理的基本类型 传统代理&#xff1a;适用于Internet互联网&#xff0c;需明确指定服务端&#xff08;浏览器需要配置&#xff09; 透明代理&#xff1a;适用于共享上网网关&#xff0c;不需要指定服务…

全栈开发之路——前端篇(9)插槽、常用api和全局api

全栈开发一条龙——前端篇 第一篇&#xff1a;框架确定、ide设置与项目创建 第二篇&#xff1a;介绍项目文件意义、组件结构与导入以及setup的引入。 第三篇&#xff1a;setup语法&#xff0c;设置响应式数据。 第四篇&#xff1a;数据绑定、计算属性和watch监视 第五篇 : 组件…

设计模式-12 - Adapter Pattern 适配器设计模式

设计模式-12 - Adapter Pattern 适配器设计模式 1.定义 适配器模式是一种结构型设计模式&#xff0c;它允许具有不同接口的两个类一起工作。它通过创建一个适配器类来实现这一点&#xff0c;该适配器类将一个类的接口转换为另一个类所需的接口。 2.内涵 适配器设计模式的内涵…