软件工程期末复习(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.rhkb.cn/news/327683.html

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

相关文章

【计算机毕业设计】基于SSM++jsp的高校专业信息管理系统【源码+lw+部署文档+讲解】

目录 第1章 绪论 1.1 课题背景 1.2 课题意义 1.3 研究内容 第2章 开发环境与技术 2.1 MYSQL数据库 2.2 JSP技术 2.3 SSM框架 第3章 系统分析 3.1 可行性分析 3.1.1 技术可行性 3.1.2 经济可行性 3.1.3 操作可行性 3.2 系统流程 3.2.1 操作流程 3.2.2 登录流程 3.2.3 删除信息流…

复利效应(应用于成长)

应用 每个人在智力、知识、经验上,复利效应都一样,只要能积累的东西,基本上最终都会产生复利效应。 再来看一下复利公式:FP*(1i)^n P本金;i利率;n持有期限。在使用时,一定要注意4个限定条件&a…

在线音乐系统

文章目录 在线音乐系统一、项目演示二、项目介绍三、部分功能截图四、部分代码展示五、底部获取项目(9.9¥带走) 在线音乐系统 一、项目演示 音乐网站 二、项目介绍 基于springbootvue的前后端分离在线音乐系统 登录角色 : 用户、管理员 用…

Git 基础使用(2) 分支管理

文章目录 分支概念分支使用查看分支分支创建分支切换分支合并合并冲突分支删除 分支管理快进模式分支策略内容保存错误处理 分支概念 (1)分支概念 Git分支是指在版本控制系统Git中,用来表示项目的不同工作流程或开发路径的一个重要概念。通过…

知识图谱 | 语义网络写入图形数据库(含jdk和neo4j的安装过程)

Hi,大家好,我是半亩花海。本文主要介绍如何使用 Neo4j 图数据库呈现语义网络,并通过 Python 将语义网络的数据写入数据库。具体步骤包括识别知识中的节点和关系,将其转化为图数据库的节点和边,最后通过代码实现数据的写…

css 步骤条虚线渐变色效果实现

效果如图所示&#xff1a; 思路&#xff1a; 使用元素覆盖的方式实现视觉上虚线的效果 实现代码&#xff1a; html布局 <ul class"details-cont"><li class"details-li" v-for"item in 3" :key"item"><div class&qu…

vue + element-plus 开发中遇到的问题

1.问题之路由守卫 初写路由守卫&#xff0c;对于next()的理解不是很透彻&#xff0c;就想着都放行&#xff0c;不然看不到效果&#xff0c;结果控制台出现了警告&#xff0c;想着报黄的问题就不是问题&#xff0c;但仔细一看发现他说&#xff0c;如果再生产阶段就会失败&#x…

程控水冷阻性负载主要工作方式

程控水冷阻性负载是一种先进的电力设备&#xff0c;主要用于电力系统的测试和研究。它的主要工作方式是通过控制水冷系统的温度&#xff0c;来模拟不同的阻性负载条件&#xff0c;从而对电力设备进行各种性能测试。 首先&#xff0c;我们需要了解什么是阻性负载。阻性负载是指那…

DigitalOcean 的PostgreSQL、MySQL、Redis、Kafka托管数据库,现已支持自定义指标收集功能

近期&#xff0c;我们的几个托管数据库&#xff08;PostgreSQL、MySQL、Redis和Kafka&#xff09;引入了自定义数据指标功能&#xff08;scrapable metrics&#xff09;。这些指标使您更具体、更细致地了解数据库的性能&#xff0c;包括延迟、资源利用率和错误率。然后&#xf…

【LLM第五篇】名词解释:prompt

1.是什么 提示工程&#xff08;Prompt Engineering&#xff09;是一门较新的学科&#xff0c;关注提示词开发和优化&#xff0c;帮助用户将大语言模型&#xff08;Large Language Model, LLM&#xff09;用于各场景和研究领域。 掌握了提示工程相关技能将有助于用户更好地了解…

Go微服务: Gin框架搭建网关, 接入熔断器,链路追踪以及服务端接入限流和链路追踪

概述 本文使用最简单和快速的方式基于Gin框架搭建一个微服务的网关调用微服务的场景网关作为客户端基于RPC调用某一服务端的服务并接入熔断和限流以及链路追踪具体场景&#xff1a;通过网关API查询购物车里的数据在最后&#xff0c;会贴上网关和购物车服务的代码仓库 服务端搭…

HTML常用标签-布局相关标签

布局标签 div标签 俗称"块",主要用于划分页面结构,做页面布局 自己独占一行的元素&#xff0c;设置宽高生效 span标签 俗称"层",主要用于划分元素范围,配合CSS做页面元素样式的修饰 不会自己独占一行的元素&#xff0c;设置宽高不生效 代码 <div style&…

【HR】阿里三板斧--20240514

参考https://blog.csdn.net/haydenwang8287/article/details/113541512 头部三板斧 战略能不能落地、文化能不能得到传承、人才能不能得到保障。 头部三板斧适用的核心场景有三个&#xff1a;一是战略不靠谱&#xff1b;二是组织效率低、不聚心&#xff1b;三是人才跟不上。对…

二、服务器配置修改

二、服务器配置修改 1 防火墙相关配置 systemctl status firewalld systemctl enable firewalld systemctl start firewalld firewall-cmd --reload firewall-cmd --list-all# 开启端口 firewall-cmd --zonepublic --add-port6030-6060/tcp --permanent firewall-cmd --zonep…

如何将公众号添加到CSDN个人主页

1. 创作中心- 推广管理 输入个人公众号名字并开启微信公众号推广 2. 将公众号的二维码图片加入拓展信息 个人主页的左下角就能看到推广 如果希望能看到是二维码 操作如下&#xff1a; 写篇文章贴上二维码 然后点击鼠标右键获得此页面链接 &#xff0c;例如我的个人公众号 htt…

定时器的理论和使用

文章目录 一、定时器理论1.1定时器创建和使用 二、定时器实践2.1周期触发定时器2.2按键消抖 一、定时器理论 定时器是一种允许在特定时间间隔后或在将来的某个时间点调用回调函数的机制。对于需要周期性任务或延迟执行任务的嵌入式应用程序特别有用。 软件定时器&#xff1a; …

【C++语言】动态内存管理

文章目录 前言内存管理数据存储位置C语言动态内存管理方式C动态内存管理方式&#xff1a;new/deleteoperator new与operator delete函数new和delete的实现原理定位new表达式&#xff08;了解&#xff09;常见面试题 总结C语言系列学习目录 前言 本章要介绍的是动态内存管理&am…

ORACLE ODA一体机存储节点电源故障的分析处理

近期&#xff0c;某用户的ORACLE ODA一体机在例行机房巡检时出现亮黄灯告警&#xff1b;用户反馈次问题后我们立刻通过远程方式&#xff0c;登陆ODA的控制台进行查看&#xff1b; 对于ODA一体机&#xff08;2个计算节点1个存储节点&#xff09;&#xff0c;计算节点可以通过il…

nginx 发布静态资源

一. nginx 发布静态资源 在nginx中nginx.conf配置文件中添加内容如下&#xff1a; server {listen 90;server_name localhost;# 配置静态资源文件&#xff0c;就可以访问了location / {root /home/fooie-shop;index index.html;}# 配置音频和图片资源location /imoo…

深入了解 npm:Node.js 包管理工具详解

文章目录 一、npm 基本概念1.1 什么是 npm&#xff1f;1.2 package.json 文件 二、npm 常用命令2.1 初始化项目2.2 安装依赖2.2.1 安装单个包2.2.2 全局安装包2.2.3 安装开发依赖 2.3 移除依赖2.4 更新依赖2.5 查看已安装的包2.6 发布包 三、npm 高级用法3.1 使用 npm scripts3…