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

软件工程之软件需求SWE.1

物有本末,事有终始。知所先后,则近道矣。对软件开发而言,软件需求乃重中之重。必先之事重千钧,不可或缺如日辰。

汽车行业由于有方法论和各种标准约束,对软件开发有严苛的要求。ASPICE指导如何审核软件开发,虽然没有明确定义如何去开发,但是ASPICE的Guideline和Essential文件中给出很多参考。本文则详细阐述如何编写软件需求,同时介绍软件需求的必要属性。本文用SRS(Software Requirement Specification)代替软件需求设计规格书。

软件需求描述软件的期望行为。由于软件在现代汽车电子控制单元的重要性持续增长,软件需求分析通常包含类似于系统需求的产物。然而,无论如何,规格书SRS都是强制并且不可或缺的。

1. 软件需求分类

  • Heading标题

软件需求工程师用来结构化软件需求规格书SRS,即将SRS按照功能进行分类,并针对功能设置标题,譬如:主动泄放、上下电管理、离合器控制等。

  • Information 信息

软件需求工程师用来指示额外信息,仅作参考,譬如:BMS的SOC算法公式,很难在软件测试验证,在编写需求时可以将此作为额外信息输入给软件工程师,设为Information的item无需被软件测试验证。

  • Functional Safety Requirement 功能安全需求

软件需求工程师设置用来表征该需求是功能安全相关,相应地,需求属性必须包含ASIL等级这些ISO26262要求的属性。

  • Functional Requirement功能需求

软件需求工程师用来表征软件期望行为(区别功能安全需求)。

  1. 陈述识别一个产品或者流程应产生什么结果(行为或者结果)。

  2. 一个系统或系统组件应执行的需求。

  • Nonfunctional Requirement 非功能需求

软件需求工程师应用来指示描述软件行为期望质量。与功能需求相比,该属性描述软件期望。这些期望无法达到预期不严重而且可以被接受。这不适用于功能/信息安全相关的重要的质量准则。性能属性:软件性能需求描述不是软件要做什么而是如何去做。(通常是软件和系统测试无法或很难测试,譬如:ECU应在接受制动信号后,20ms内给出制动响应、变化率等)。一般包含以下:

  • 设计约束

  • 性能要求

  • 质量要求       

  2. 软件需求属性

2.1 软件属性之验证准则 Verification Criteria

Verification criteria define the qualitative and quantitative measures for the verification of a requirement. Verification criteria demonstrate that a requirement can be verified within agreed constraints, and are the input to test cases. 

验证准则为一条需求的验证定义定性和定量的措施。验证准则描述了一条需求在达成一致的约束范围内被验证,并且是测试用例的输入。

Verification criteria are necessary especially for non-functional requirements or to understand the preconditions for the test of a single or a set of requirements. It is used to answer “Under which condition, the requirement will be fulfilled?”. It will limit the verification condition, range and criteria. So, take the below into account:

对非功能性需求,或者为了理解单个需求或一系列需求的测试的前提条件,验证准则是极其必须的。被用来回答“在什么条件下,需求被满足?”会限制验证条件、范围和准则。因此,考虑以下:

1. Add verification criteria into SRS as the input of the subsequent test cases. 在SRS中增加验证准则,作为后续测试用例的输入。

2. Do not define verification criteria for some specific requirement if the description of this requirement could support to write test case. 针对一些特殊的描述可以用来支持写测试用例需求,无需定义验证准则。

2.2 Create Verification Criteria 创建验证准则

The verification criteria shall cover the following aspects: 

    验证准则应覆盖以下方面:

    1.Identification of the requirement to be verified 被验证的需求的识别(提炼)

    2.Verification method 验证方法

    3.Verification environment 验证环境

    4.Preconditions and special conditions (e.g. winter diesel) 前提和特殊条件

    5.Success criteria 成功准则

    Identifying a verification method or verification step (e.g. software test, system test) is necessary, but insufficient for the verification criteria. If special test methods, environments, additional information or constrains are needed to be conducted or to be considered by the verification then this special information has to be documented.

    识别验证方法或者验证步骤(例如:软件测试,系统测试)是必要的,但对验证准则而言,不够充分。如果特殊的测试方法、环境、额外的信息或者约束需要被实施,或者被验证考虑,那么这个特殊信息必须被文档化。

    Verification criteria need to cover all requirements and can be defined for a single requirement or for groups of requirements.

    验证准则需要覆盖所有的需求,而且能够为单个需求或者多组需求被定义。

    Verification criteria have the following characteristics: 验证准则有以下特性:

    • Be unambiguously assigned to a requirement. 被准确地分配给一条需求

    • The requirement is thus verifiable or can be evaluated. 需求是可验证的或者能够内评估

    • Verification criteria define the qualitative and quantitative criteria for determining a requirement has been implemented successfully. 为了决策一条需求被成功执行,验证准则定义了定性和定量的准则。

    • They cover conditions under which a requirement can be tested. 覆盖需求能够被测试的条件。

    • Show that a requirement can be verified under agreed boundary conditions.

    表明在同意的边界条件下,需求能够被验证。

    举例如下:

    Requirement #1: ECU shall be able to identify whether EEPROM is corrupted. ECU应能够识别EEPROM是否损坏。

    Verification criteria for Requirement #1: The status of EEPROM whether corrupted can be found by a checksum calculation by the diagnostic service “readCheckSumStatus”, related DTC could be reported. EEPROM是否损坏的状态可以通过诊断服务“readCheckSumStatus”的checksum计算被检测,然后上报相关DTC。

    2.3 Verification Method 验证方法

    Verification method includes: 验证方法包括:

    1. test class (test) 测试类(单元测试、静态测试、资源占用率测试,功能测试,渗透性测试等等)
    2. non-test class (e.g. inspections, peer reviews, audits, analysis (FMEA, FTA), simulation, walk-through,) 非测试类(例如:审查、同行评审、审核、分析(FMEA,FTA),仿真)

    Generally, for functional requirementsà Test class method. For non-functional requirementsà non-test class method. For example:

    1. Non-functional requirement: cyclomatic complexity of software function < 10.
    2. Verification method: use static analysis tool (QAC/ParaSoft).
    3. All the requirements have to be verified.

    总体而言:对功能性需求à 测试类方法。对非功能性需求à 非测试类方法。例如:

    1. 非功能性需求: 软件功能的圈复杂度 < 10.
    2. 验证方法: 使用静态分析工具(QAC/ParaSoft).

    All the requirements have to be verified. 所有需求都必须被验证。


    引用文章:

    1. 软件工程之软件需求SWE.1

    相关文章:

    软件工程之软件需求SWE.1

    物有本末&#xff0c;事有终始。知所先后&#xff0c;则近道矣。对软件开发而言&#xff0c;软件需求乃重中之重。必先之事重千钧&#xff0c;不可或缺如日辰。 汽车行业由于有方法论和各种标准约束&#xff0c;对软件开发有严苛的要求。ASPICE指导如何审核软件开发&#xff0…...

    【面试题】redis大key问题怎么解决?(key访问的次数比较多,key存的数据比较大)

    针对 Redis 中大 Key&#xff08;数据量大且访问频繁&#xff09;的问题&#xff0c;需从 数据拆分、访问优化、架构设计 等多维度综合解决。以下是具体方案及实施步骤&#xff1a; 一、大 Key 的定义与危害 定义&#xff1a; Value 过大&#xff1a;如 String 类型 Value >…...

    web入侵实战分析-常见web攻击类应急处置实验1

    场景说明&#xff1a; 某天运维人员发现在/opt/tomcat8/webapps/test/目录下&#xff0c;多出了一个index_bak.jsp这个文件&#xff0c; 并告诉你如下信息 操作系统&#xff1a;ubuntu-16.04业务&#xff1a;测试站点中间件&#xff1a;tomcat开放端口&#xff1a;22&#x…...

    【Kubernetes】k8s 部署指南

    1. k8s 入门 1.1 k8s 简介 需要最需要明确的就是&#xff1a;kubernetes&#xff08;简称 k8s &#xff09; 是一个 容器编排平台 &#xff0c;换句话说就是用来管理容器的&#xff0c;相信学过 Docker 的小伙伴对于容器这个概念并不陌生&#xff0c;打个比方&#xff1a;容器…...

    深度解析:使用 Headless 模式 ChromeDriver 进行无界面浏览器操作

    一、问题背景&#xff08;传统爬虫的痛点&#xff09; 数据采集是现代网络爬虫技术的核心任务之一。然而&#xff0c;传统爬虫面临多重挑战&#xff0c;主要包括&#xff1a; 反爬机制&#xff1a;许多网站通过检测请求头、IP地址、Cookie等信息识别爬虫&#xff0c;进而限制…...

    iOS事件传递和响应

    背景 对于身处中小公司且业务不怎么复杂的程序员来说&#xff0c;很多技术不常用&#xff0c;你可能看过很多遍也都大致了解&#xff0c;但是实际让你讲&#xff0c;不一定讲的清楚。你可能说&#xff0c;我以独当一面&#xff0c;应对自如了&#xff0c;但是技术的知识甚多&a…...

    JDK最详细安装教程,零基础入门到精通,收藏这篇就够了

    目录 一、下载与安装二、配置环境三、验证是否配置成功 一、下载与安装 1、下载地址 http://www.oracle.com/technetwork/java/javase/downloads/index.html 2、选择自己想要的版本下载&#xff0c;并且选择自己电脑对应的版本下载 3、下载完成之后&#xff0c;双击打开然后…...

    深研究:与Dify建立研究自动化应用

    许多个人和团队面临筛选各种网页或内部文档的挑战,以全面概述一个主题。那么在这里我推荐大家使用Dify,它是一个用于LLM应用程序开发的低代码,开源平台,它通过自动化工作流程的多步搜索和有效汇总来解决此问题,仅需要最小的编码。 在本文中,我们将创建“ Deepresearch”…...

    新手向:SpringBoot后端查询到数据,前端404?(附联调时各传参方式注解总结-带你一文搞定联调参数)

    前言&#xff1a; 在 Spring Boot 项目开发中&#xff0c;后端小伙伴可能经常遇到这样诡异的场景&#xff1a; 后台日志显示查询到了数据&#xff0c;但前端却一脸懵逼地告诉你 404 Not Found&#xff1f;接口明明写好了&#xff0c;Postman 直接访问却提示找不到&#xff1f…...

    Mysql各操作系统安装全详情

    " 至高无上的命运啊~ " MySQL是一个关系型数据库管理系统&#xff0c;由瑞典 MySQL AB 公司开发&#xff0c;属于 Oracle 旗下产品。MySQL是最流行的关系型数据库管理系统之一&#xff0c;在 WEB 应用方面&#xff0c;MySQL是最好的RDBMS (Relational Database Mana…...

    RadASM环境,win32汇编入门教程之七

    ;运行效果 ;RadASM环境&#xff0c;win32汇编入门教程之七 ;在上一个教程里面&#xff0c;我们学习如何把数据显示出来。但是感觉太丑了&#xff0c;在这一教程里&#xff0c;我们来学习一下怎样让它们变漂亮点。 ;主要的内容是如何创建字体&#xff0c;设置字体的大小&#xf…...

    STL之string类的模拟实现

    目录 1. string的成员变量 2. string的成员函数 2.1 string类的c_str()和swap()函数 2.2 string类的构造 2.3 string类的拷贝构造 2.3.1传统写法&#xff1a; 2.3.2现代写法&#xff1a; 2.4string类的运算符重载 2.4.1传统写法&#xff1a; 2.4.2现代写法 2. 5 …...

    定期自动统计大表执行情况

    一、创建用户并赋权 create user dbtj identified by oracle default tablespace OGGTBS;grant connect,resource to dbtj;grant select any dictionary to dbtj;grant create job to dbtj;grant manage scheduler to dbtj; 二、创建存储表 1、连接到新建用户 conn dbtj/or…...

    学习next.js的同时的一些英语单词记录

    skip &#xff1a;跳过 optional&#xff1a;可选的 previous&#xff1a;以前的 lesson&#xff1a;课程 directory&#xff1a;目录 identical&#xff1a;相同的 instruction&#xff1a;说明 development server&#xff1a;开发服务器 client-side&#xff1a;客户…...

    ok113i平台——qt+tslib支持usb触摸屏热插拔功能实现

    问题&#xff1a;重新插拔设备&#xff0c;需要软件重启才能接收到触摸事件 愿因&#xff1a;是因为qt程序的tslib库的操作逻辑是在构造函数里面连接一次usb触摸设备&#xff0c;具体看如下文件内容&#xff1a; /home/forlinx/OK113i-linux-sdk/buildroot/buildroot-201902/dl…...

    游戏引擎学习第112天

    黑板&#xff1a;优化 今天的内容是关于优化的&#xff0c;主要讨论了如何在开发中提高代码的效率&#xff0c;尤其是当游戏的帧率出现问题时。优化并不总是要将代码做到最快&#xff0c;而是要确保代码足够高效&#xff0c;以避免性能问题。优化的过程是一个反复迭代的过程&a…...

    深度学习笔记——LSTM

    大家好&#xff0c;这里是好评笔记&#xff0c;公主号&#xff1a;Goodnote&#xff0c;专栏文章私信限时Free。本文详细介绍面试过程中可能遇到的LSTM知识点。 文章目录 LSTM&#xff08;Long Short-Term Memory&#xff09;LSTM 的核心部件LSTM 的公式和工作原理(1) 遗忘门&a…...

    基于SpringBoot的“食物营养分析与推荐网站”的设计与实现(源码+数据库+文档+PPT)

    基于SpringBoot的“食物营养分析与推荐网站”的设计与实现&#xff08;源码数据库文档PPT) 开发语言&#xff1a;Java 数据库&#xff1a;MySQL 技术&#xff1a;SpringBoot 工具&#xff1a;IDEA/Ecilpse、Navicat、Maven 系统展示 系统功能结构图 系统首页界面 系统注册…...

    23种设计模式 - 工厂方法模式

    模式定义 工厂方法模式&#xff08;Factory Method Pattern&#xff09;是一种创建型设计模式&#xff0c;定义用于创建对象的接口&#xff0c;让子类决定实例化哪个类&#xff0c;从而将对象创建过程延迟到子类。其核心目的是解耦对象的创建与使用&#xff0c;增强系统的扩展…...

    【ISO 14229-1:2023 UDS诊断(ECU复位0x11服务)测试用例CAPL代码全解析①】

    ISO 14229-1:2023 UDS诊断【ECU复位0x11服务】_TestCase01 作者&#xff1a;车端域控测试工程师 更新日期&#xff1a;2025年02月16日 关键词&#xff1a;UDS诊断协议、ECU复位服务、0x11服务、ISO 14229-1:2023 TC11-001测试用例 用例ID测试场景验证要点参考条款预期结果TC…...

    Discuz! X3.5 根目录权限设置

    在 Discuz! X3.5 中,根目录的权限设置是确保网站安全性和功能正常运行的关键。如果权限设置不当,可能会导致文件无法访问、安全问题(如文件被篡改)或功能异常。以下是关于 Discuz! X3.5 根目录权限设置的详细说明和建议: 1. 根目录位置 Discuz! X3.5 的根目录通常是网站的…...

    建筑兔零基础自学python记录22|实战人脸识别项目——视频人脸识别(下)11

    这次我们继续解读代码&#xff0c;我们主要来看下面两个部分&#xff1b; 至于人脸识别成功的要点我们在最后总结~ 具体代码学习&#xff1a; #定义人脸名称 def name():#预学习照片存放位置path M:/python/workspace/PythonProject/face/imagePaths[os.path.join(path,f) f…...

    React之旅-02 创建项目

    创建React项目&#xff0c;常用的方式有两种&#xff1a; 官方提供的脚手架&#xff0c;官网&#xff1a;https://create-react-app.dev/。如需创建名为 my-app 的项目&#xff0c;请运行如下命令&#xff1a; npx create-react-app my-app 使用Vite包&#xff0c;官网&…...

    uniapp 滚动尺

    scale组件代码&#xff08;部分class样式使用到了uview1.0的样式&#xff09; <template><view><view class"scale"><view class"pointer u-flex-col u-col-center"><u-icon name"arrow-down-fill" size"26&qu…...

    Redux中间件redux-thunk和redux-saga的具体区别是什么?

    Redux 中间件是增强 Redux 功能的重要工具&#xff0c;redux-thunk 和 redux-saga 是两个常用的中间件&#xff0c;它们在处理异步操作和副作用时提供了不同的方式和理念。以下是两者的具体区别&#xff1a; 1. 概念与设计理念 redux-thunk 简洁&#xff1a;redux-thunk 是一…...

    Windows 启动 SSH 服务

    Windows 启动 SSH 服务 一、OpenSSH Server 安装 以 Win10 系统为例 打开设置 -> 系统 -> 可选功能 在 添加的功能 查看是否安装了 OpenSSH 服务 或者 OpenSSH Server 如果没有安装&#xff0c;找到 系统->添加可选功能 -> 查看功能->搜索 OpenSSH 服务 ->…...

    rust笔记1-学习资料推荐

    学习Rust的Trait、生命周期和模式确实需要一些时间&#xff0c;尤其是当这些概念在其他语言中不常见时。以下是一些学习资料和建议&#xff0c;帮助你更好地理解这些概念&#xff1a; 1. 官方文档与书籍 《The Rust Programming Language》&#xff08;俗称“The Book”&…...

    MySQL 的存储引擎有哪些?它们之间有什么区别? MySQL InnoDB 引擎中的聚簇索引和非聚簇索引有什么区别? MySQL 的索引类型有哪些?

    MySQL 的存储引擎有哪些&#xff1f;它们之间有什么区别&#xff1f; 先来回顾以下我们业务场景下一般的数据库访问的过程应用——>server层 ——>存储引擎层——>磁盘 官网描述&#xff1a; InnoDB: MySQL 8.4 中的默认存储引擎。 InnoDB 是事务安全&#xff08;符…...

    【Linux探索学习】第二十六弹——进程通信:深入理解Linux中的进程通信

    Linux探索学习&#xff1a; https://blog.csdn.net/2301_80220607/category_12805278.html?spm1001.2014.3001.5482 前言&#xff1a; 在Linux操作系统中&#xff0c;进程通信&#xff08;IPC&#xff09;是操作系统的一项核心功能&#xff0c;用于在不同进程之间交换数据或…...

    netcore https配置

    一、生成证书 1. 安装 OpenSSL 如果尚未安装 OpenSSL&#xff0c;可以通过以下命令安装&#xff1a;Ubuntu/Debian:sudo apt update sudo apt install openssl CentOS/RHEL:sudo yum install openssl 2. 生成私钥 使用以下命令生成私钥文件&#xff08;private.key&#xff09…...