当前位置: 首页 > news >正文

大话软工笔记—需求工程概述

需求工程,是构建系统的第一步工作,是对客户的现状和需求进行调研,并按照工程化的方法和标准完整、准确地记录和分析客户的需求,它的成果是进行后续设计工程的基础。

需求工程在软件工程中的位置图

1. 定义

需求工程,是指采用工程化的方法和标准,收集、记录和分析客户对信息化的需求,并最终确定系统需要实现的功能以及功能的相关特征和约束。

需求工程主要包含需求调研、需求分析和需求管理。

2. 作用

需求工程即:收集客户想要做什么,最终确定实际做什么。

需求工程成果的质量极大地影响着这个软件的设计结果,是决定成败的主要环节,从客户那里完整地获取、记录、分析与确认需求,并正确地传递给后续设计与开发的依据,同时也是客户对完成系统评估、验收的依据。

需求工程的内容也极大的影响着软件开发的成本、技术、周期、资源、质量以及最终客户的满意度等诸多方面。

3. 角色

(1)售前咨询

主要工作是通过售前咨询活动,提出解决方案,协助销售部门签下合同,需要具备以下能力:

  • 沟通能力

沟通的对象有客户的决策层,生产、财务的中间管理层。既要能理解,能够理解高层的谈话要旨、隐含的需求;又要能展示,能够充分地展示出软件企业的服务能力、产品能力;还具有说服,能够说服客户,例如导入系统后在组织和管理制度上的相应改变。

  • 专业能力

需掌握行业咨询的基本知识,熟悉客户的主营业务和辅营业务知识,清楚软件行业的最新技术、匹配的案例、解决方案等。

(2)需求分析师

主要工作是进入客户现场,对已经确定的合同内容进行详细的调研。

优秀的需求分析师,需要掌握需求分析的方法和工具,还需构建相应的需求体系、知识库(案例、场景、原型、模板)。

4. 需求来源

需求来源有多个,可以从客户、咨询、需求、设计、开发、实施等提案。

  • 基本需求

基本需求来自于对客户进行的“调研”,这类需求以功能为主,基本上按客户意愿进行设计和开发,内容大部分在需求调研、需求分析阶段内确定。

  • 中级需求

中级需求不是客户直接提出的功能需求,而是在需求分析阶段、业务设计阶段通过对客户提出来的业务需求进行转换、优化、补缺、提升的过程中产生的需求,也就是为完善业务而产生的需求。

  • 高级需求

高级需求主要来自于软件工程师根据本次客户的目标需求、新的设计理念、新技术等而提出(即软件工程师设计出来的需求)。

综上,软件工程师要认识到,需求工程(调研与分析)完成了,并非是需求获取的工作全部完成了,只是由客户直接提出来的需求完成了,而通过设计工程的需求发掘尚未开始。

5. 交付成果

(1)需求调研成果(需求调研资料汇总)

从客户收集的需求资料,包括用图形、文字和表格等方式记录的原始资料,形成需求调研资料汇总。

(2)需求分析成果(需求规格说明书)

基于调研资料进行分析,识别出最终需要进行开发的全部内容,并且通过客户确认,最终形成需求规格说明书,这是后续设计、开发过程的依据。

6. 需求分类

需求通常包含功能性需求和非功能性需求。

6.1 功能性需求

功能性需求是系统必须要提供的业务处理功能,也是软件需求的主体,通常没有形容词修饰的都是功能性需求。

  • 目标需求

客户提出的信息化的目标、理念、希望、价值。

  • 业务需求

客户提出的系统要对应业务的内容、过程、规则等。

  • 功能需求

确定系统必须提供的处理业务需求的功能及功能的具体描述。

6.2 非功能性需求

非功能性需求是指建立一些指标性的条件来判断系统运行情况,而不是针对某个业务处理的具体功能需求,被用来判断运行的系统是否可以满足以下的条件:安全性、可靠性、互操作性、健壮性、易使用性、可维护性、可移植性、可重用性、可扩充性等。

http://www.xdnf.cn/news/905185.html

相关文章:

  • day45_Tensorborad使用介绍
  • 4G网络中频段的分配
  • 进行用户VMware官网注重中一直无法登录,该怎么处理
  • Java下载文件(特殊字符编码处理)
  • 基于React + FastAPI + LangChain + 通义千问的智能医疗问答系统
  • QT: `long long` 类型转换为 `QString` 2025.6.5
  • ruoyi-plus-could 负载均衡 通过 Gateway模块配置负载均衡
  • Curtain MonGuard:智能水印颜色适配,提升屏幕信息安全
  • LabVIEW实时系统数据监控与本地存储
  • C++ 基础特性深度解析
  • 化学小工具之OpenBabel
  • idea中 maven 本地仓库有jar包,但还是找不到,解决打包失败和无法引用的问题———————————————— 版权声明:本文为博
  • 第16节 Node.js 文件系统
  • MySQL性能调优:Mysql8高频面试题汇总
  • Elasticsearch集群手动分片分配指南:原理与实践
  • Python实现快速排序的三种经典写法及算法解析
  • 【知识扫盲】如何由inq,ouq和totaltime计算tokens/s
  • 栈的概念以及实现
  • SOC-ESP32S3部分:32-LVGL显示框架
  • ComfyUI 工作流
  • Numpy 之 reshape 教程
  • 【OpenGL学习】(五)自定义着色器类
  • Redis知识
  • 强化学习基础概念图文版笔记
  • 【QT常用技术讲解】多线程执行后台命令行的两种方式(后台运行和返回打印信息)
  • 【Linux】grep 命令详解及使用示例:搜索匹配指定模式的文本行
  • 【JJ斗地主-注册安全分析报告】
  • 20250606-C#知识:匿名函数、Lambda表达式与闭包
  • 动态IP与静态IP:数字世界的“变脸术”与“身份证”
  • CSS 轮廓(Outline)与边框(Border)的深度解析