cmmi实践访谈测试ppt_汽车嵌入式软件测试——软件质量度量评价指标

2023-10-27

在上一期中,介绍了常见的软件质量度量模型(McCall、Boehm、ISO 9126模型),通过这些模型可以对软件质量进行科学的评价。在本期中,主要介绍 7个软件质量的评价指标( 编码规范、源代码行、千行代码bug率、圈复杂度、代码覆盖率、扇入/扇出数、设计开发约束)

3f663d50f2380c8f1a15ba86f5b6f578.png

1 编码规范

度量标准:MISRA C/MAAB

作用:编码/建模标准化

关于编码规范,在前几期已经介绍了MISRAC和MAAB相关内容,详细介绍可以参考公众号中相关文章。大家也可以通过MATLAB中的Polyspace和Simulink模块体验一下MISRA C和MAAB相关内容(可以参考MATLAB帮助文档中的相关例子)。

e4efb53525e7882000f6aa5ba1dfa13e.png

MATLAB中MISRA C使用案例

8a1cc9b1ec16701fd1673369c645856b.png

MATLAB中MAAB使用案例

2 源代码行 SLOC 度量标准:源代码行数 作用:工作量评估,编写效率评价

源代码行(SLOC, Source LinesOf Code),也称为代码行(LOC, Lines Of Code),是一种通过统计程序源代码的行数来度量程序大小的方法。这种方法可能是最简单的软件衡量指标,主要体现了软件的规模,一般用来预测开发程序需的工作量,同时也用来评价程序的编写效率。

2.1 两类SLOC测量方法

物理代码行(LOC, Physical SLOC),是程序源代码中(包括注释行)的代码行数。

逻辑代码行(LLOC, Logical SLOC),是测量可执行“语句”的数量(不同的计算机语言有不同的定义)。

2.2 使用SLOC的问题

在使用SLOC方法评价时,可能会遇到歧义,以C语言代码为例(示例1):

for (i = 0; i<100; i++) printf("hello");  /*一共有几行?*/
以上代码有1个物理代码行(只有1行),2个逻辑代码行(for语句和printf语句),1个注释行(1行注释行)。

由于不同程序员的不同编码习惯和编码标准,在确保功能不变的情况下,上述代码可以被改写为(示例2):

/* 现在有几行?*/for (i = 0; i < 100; i++){printf("hello");} 
有5个物理代码行,2个逻辑代码行,1个注释行。

e01e7a70c73c1c7e65877e21f45cf0c8.png

通过以上两个相同效果的例子,可以看出代码行参数有很大的差异。如果需要比较,可以选择逻辑代码行进行对比,可以获得相对准确的信息。 2.3 SLOC方法的优劣 优:有效估计工作量,计数方便直观。 劣:不能有效评估程序员效率,无法进行程序功能评估,易增加冗余代码,未考虑不同计算机语言差异

实践证明SLOC和工作量之间的关系高度相关,简单来说就是SLOC值越大的程序开发时间越长,可以非常有效地估计工作量。由于代码行是一个物理实体,可以通过程序来进行计数和统计,也易于进行可视化处理,获得一个直观的度量。

但是对于SLOC度量方法存在一些争议,特别是有时候可能会被滥用。SLOC度量方法不能很好地衡量程序员效率。首先,仅仅使用编码阶段的结果来衡量项目的生产力是没有用的,编码阶段通常只占整个工作量的30%到35%;其次,SLOC度量方法和程序功能的相关性较差,因为一个优秀的程序员只开发几行代码,但是在功能方面比最终创建更多行的程序员更有效率。并且,特别有经验的程序员员往往会被分配最困难的任务,因此有时可能会比其他程序员在某项任务上的“效率”更低;另外,追求更高的SLOC会引起程序员写不必要的冗长代码的动机,增加程序复杂性和维护成本;此外,在当今的软件场景中,软件通常是使用一种以上的语言开发的。不同语言实现相同功能使用代码的行数不同,使用SLOC无法对程序进行有效地度量。

3 千行代码bug率

度量标准:bug数/(代码行/1000),数值越小质量越好

作用:bug统计/跟踪/修复

要想实现更好的测试以及更高的可维护性,bug跟踪是必不可少的。每个代码段、模块或时间段(天、周、月等)内的bug可以很容易通过工具统计出来。这样,可以及早发现并及时修复。 3.1 CMMI要求

在CMMI*级别中的关于Bug率相关的信息如下:

4436c560c08aa1060654a26a1211fe39.png

*CMMI(Capability Maturity Model Integration For Software,软件能力成熟度模型集成)是由美国卡耐基梅隆大学软件工程研究所(Software Engineering Institute,SEI)组织全世界的软件过程改进和软件开发管理方面的专家历时四年而开发出来的,并在全世界推广实施的一种软件能力成熟度评估标准,主要用于指导软件开发过程的改进和进行软件开发能力的评估。

3.2 bug率的优劣

对于千行代码bug率,从考核标准上来说,bug率数值越小就说明越好,但是基于这个结果,可能会引导团队成员做出一些对长远和整体效率无益的行为,例如:增大基数,增加无意义代码;把定长循环分开写,写成顺序方法;把可配置信息写死到代码中;大量的复制、粘贴代码。千行代码Bug率,虽然没有明确鼓励增加代码行数,但是这个计算结果对于优秀的员工来说是相当的不公平。它隐含的推广了“尽量增大代码行数”这个意思。

4 圈复杂度

度量标准:圈复杂度的大小

作用:结构复杂度衡量

圈复杂度(CyclomaticComplexity)是一种 代码复杂度的衡量标准,在软件测试的概念里,圈复杂度用来衡量一个模块判定结构的复杂程度,数量上表现为线性无关的路径条数,即合理的预防错误所需测试的最少路径条数。圈复杂度大说明程序代码可能质量低且难于测试和维护。

4.1 原理(分支的个数)

圈复杂度为1,意味着代码只有一条路径;对于有一条分支的代码,它的圈复杂度为2。简单计算方法:从1开始,一直往下经过程序,一旦遇到以下关键字或者其它同类的词(if、while、repeat、for、and、or)就加1,在case语句中每一种情况都加1。

37bd64e74bb65fd57de17092695d0247.png

4.2 基于流程图的计算方法

公式1:V(G)=e-n+2p。其中,e表示流程图中边的数量,n表示流程图中节点的数量,p表示流程图中的连接组件数目(连接组件数是相连节点的最大集合)。因为流程图都是连通的,所以p为1.公式2:V(G)=区域数=判定节点数+1。其实,圈复杂度的计算还有更直观的方法,因为圈复杂度所反映的是“判定条件”的数量,所以圈复杂度实际上就是等于判定节点的数量再加上1,也即控制流图的区域数。公式3:V(G)=R。其中R代表平面被控制流图划分成的区域数。

e1dd905555f6d87e7f6d344e7ac019a7.png

针对程序的流程图计算圈复杂度时,最好还是采用公式1;而针对模块的流程图时,可以直接统计判定节点数(公式2),更为简单;针对复杂的流程图时,使用公式3计算区域数更简单。

5 代码覆盖率

度量标准:覆盖率越大越好

作用:测试效果衡量

代码覆盖率:一种对代码的覆盖程度的度量方式。代码覆盖程度的度量方式是有很多种的,这里介绍最常用的4种。

5.1 语句覆盖(Statement Coverage)

又称行覆盖(Line Coverage),段覆盖(Segment Coverage),基本块覆盖(Basic Block Coverage),这是最常用也是最常见的一种覆盖方式,就是 度量被测代码中每个可执行语句是否被执行到了。语句覆盖常常被指责为“最弱的覆盖”,只覆盖代码中的执行语句,不考虑各种分支的组合等。 测试效果的不明显,很 难更多地发 现代码中的问题。举个例子:
int Example1(int a, int b){   return  a / b;}
如果测试用例为:
TestCase1: a = 1, b = 5
测试结果是代码覆盖率达到了100%,但是没有发现其中最简单的bug:当b = 0时,出现一个除零异常。

5.2 分支覆盖(Branch Coverage)

又称判定覆盖(Decision Coverage),所有边界覆盖(All-Edges Coverage),基本路径覆盖(Basic Path Coverage),判定路径覆盖(Decision-Decision-Path)。 分支覆盖度量程序中每一个判定的分支是否都被测试到了。例如以下代码:
int Example2(int a, int b){    int Result = 0;    if (a < 10 || b > 10) // 判定    {        return Result += 1; // 分支一    }    else    {        return Result -= 1; // 分支二    }    return Result;}
设计分支覆盖测试用例时, 只需考虑判定结果为true和false两种情况,因此,设计如下的测试用例就能达到判定覆盖率100%:
TestCaes1: a = 5, b = 5  //判定结果为true,Result = 1, 覆盖分支一TestCaes2: a = 15, b = 5  //判定结果为false,Result = -1, 覆盖分支二
5.3 条件覆盖(ConditionCoverage)

它度量判定中的每个子表达式结果true和false是否被测试到了。以Example2代码为例:

int Example2(int a, int b){    int Result = 0;    if (a < 10 || b > 10) // 判定    {        return Result += 1; // 分支一    }    else    {        return Result -= 1; // 分支二    }    return Result;}

按条件覆盖设计的测试用例,需要覆盖条件表达式的所有可能,如条件数为n,所用的测试用例数为2的n次方,在示例代码中,条件数为2(a<10和b>10),因此需要4个测试用例,具体测试用例如下:

TestCaes1: a = 5, b = 15   //a: true,b: true, 判定为true, Result = 1TestCaes2: a = 5, b = 5   //a: true,b: false, 判定为true, Result = 1TestCaes3: a = 15, b = 15  //a: false, b: true, 判定为true, Result = 1TestCaes4: a = 15, b = 5   //a: false, b: false, 判定为false, Result = -1
在条件数较多的代码中,条件覆盖的测试用例数量惊人,如果有10个条件,则需要2的10次方1024个测试用例以满足覆盖率100%。

5.4 修正条件判定覆盖(Modified Condition/Decision Coverage)

修正条件判定覆盖(MC/DC)要求每个条件都要独立影响判定结果。是一种条件覆盖的优化,可以减少所需的测试用例数量。MC/DC要求:①在一个程序中每一种输入输出至少得出现一次;②在程序中的每一个条件必须产生所有可能的输出结果至少一次;③并且每一个判定中的每一个条件必须能够独立影响一个判定的输出,即在其他条件不变的前提下仅改变这个条件的值,而使判定结果改变。MC/DC的概念有点绕,我们通过具体代码进行说明,依然 以 Example 2 代码为例:
int Example2(int a, int b){    int Result = 0;    if (a < 10 || b > 10) // 判定    {        return Result += 1; // 分支一    }    else    {        return Result -= 1; // 分支二    }    return Result;}

在5.3中条件覆盖达到100%的测试用例为:

TestCaes1: a = 5, b = 15   //a: true,b: true, 判定为true, Result = 1TestCaes2: a = 5, b = 5   //a: true,b: false, 判定为true, Result = 1TestCaes3: a = 15, b = 15  //a: false, b: true, 判定为true, Result = 1TestCaes4: a = 15, b = 5   //a: false, b: false, 判定为false, Result = -1
条件覆盖的表达式结果为:

TestCaes1: (True  ||  True)        True

TestCaes2: (True  ||  False)       True TestCaes3: (False ||  True)        True TestCaes4: (False ||  False)        False参考条件覆盖的测试用例,依据MCDC设计的测试用例如下:
TestCaes2: a = 5, b = 5   //a: true,b: false, 判定为true, Result = 1TestCaes3: a = 15, b = 15  //a: false, b: true, 判定为true, Result = 1TestCaes4: a = 15, b = 5   //a: false, b: false, 判定为false, Result = -1
MCDC覆盖设计的测试用例数为3个,分别覆盖的条件为TestCaes2: (True  ||  False)       TrueTestCaes3: (False ||  True)        True TestCaes4: (False ||  False)        False 设计的MCDC测试用例中包含了程序输出结果1和-1,符合了①和②的要求。对比TestCase2和TestCase4,b不变,改变a,结果相反;对比TestCase3和TestCase4,a不变,改变b,结果相反,符合③的要求。因此,MC/DC覆盖率100%。 对于条件覆盖中的 Test C ase 1和TestCase2 ,当表达式a < 10为True时,if( )的判定结果不会受第二个表达式的结果而改变, 依然会是True。 所 以 可以 忽略掉条件覆盖的 Test C ase 1或TestCase2中的任意一个 ,实现测试用例减少的效果。 因为MC/DC在逻辑判断上包含分支覆盖,并且在条件覆盖的基础上减少了测试用例数量,所以实际应用中推荐使用MC/DC。

6 函数/模块的扇入/扇出数

度量标准:扇入/扇出数,高扇入,合理扇出(3~4,7≤)

作用:函数/模块复杂度/复用性衡量

一个模块调用其他模块的个数,称为该模块的扇出。扇出越大,设计该模块时需要考虑的问题就越多,因而复杂性越高。 一个模块被其他模块调用的个数,称为该模块的扇入。扇入大些,一般不会影响问题的复杂性,而且扇入越大,说明该模块的复用性越好。 为了控制模块的复杂性,一个模块的扇出不宜过大,一般认为不要超过7。 如果发现某个模块的扇出较大(如图(1)),可以考虑重新分解(例如改为图(2)的方案)

6cbe61184da4dcc586d2a2dde4cd70e0.png

7 设计/开发约束

软件开发中有很多设计约束和原则,其中包括:

  • 类/方法的长度

  • 一个类中方法/属性的个数

  • 方法/构造函数参数的个数

  • 代码文件中魔术数字、字符串的使用(魔术数字指直接写在代码中的具体数值,其他人难以理解数字的意义)

  • 注释行比例等

代码的可维护性和可读性是很重要的,开发团队可以选择以上这些原则中的一个或全部,并通过一些自动化工具来遵循这些原则,这将大大提高软件产品的质量。

cc7e7dde248c5e55a2176976102dc66e.png

以上就是本期的内容,欢迎大家在评论区留言讨论~
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

cmmi实践访谈测试ppt_汽车嵌入式软件测试——软件质量度量评价指标 的相关文章

  • 部署Promethuse监控Hadoop节点

    部署Promethuse监控Hadoop节点 目标 安装 将hadoop的jmx信息采集到指定端口 配置prometheus 其他说明 目标 Hadoop本身是对相当数量的指标 metrics 进行实时监控的 但是Hadoop本身并不提供方
  • Java多线程详解及示例

    Java多线程详解 摘要 本文将深入探讨Java多线程编程的重要性和使用方法 介绍多线程概念 讨论多线程的优势 并提供实际示例 此外 还将探讨多线程编程中的常见问题以及如何避免这些问题 通过本文 您将获得对Java多线程编程的全面理解和实践
  • html5 游戏 动画设计,HTML5 Canvas 动画实例

    原标题 HTML5 Canvas 动画实例 在开发在线游戏时 绘制动画是非常重要的 本节介绍一个使用 Canvas API 实现的动画实例 游戏人物的跑步动画 动画的概念及原理 1 动画 动画是通过一幅幅静止的 内容不同的画面 即帧 快速播
  • 【六祎-JS特效】页面JS特效背景

    JS代码
  • Python3中strip()、lstrip()、rstrip()用法详解

    Python中有三个去除头尾字符 空白符的函数 它们依次为 strip 用来去除头尾字符 空白符 包括 n r t 即 换行 回车 制表符 空格 lstrip 用来去除开头字符 空白符 包括 n r t 即 换行 回车 制表符 空格 rst
  • 流式计算简介

    1 数据的时效性 日常工作中 我们一般会先把数据存储在一张表中 然后对这张表的数据进行加工 分析 那这里是先存储在表中 那就会涉及到时效性这个概念 如果我们处理以年 月为单位的级别的数据处理 进行统计分析 个性化推荐 那么数据的的最新日期离
  • Docker容器学习笔记

    目录 一 初始Docker 1 1Docker的概念 1 2Docker的安装 1 3Docker的架构 1 4Docker配置镜像加速器 二 Docker命令 2 1服务相关的命令 2 2镜像相关命令 2 3容器相关命令 三 Docker
  • 小程序实现搜索历史记录,去重搜索字段以及限制展示字段数量

    使用微信小程序实现搜索历史记录 去重搜索字段 限制字段数量以及点击重新搜索功能 对应界面
  • 指纹功能适配文档

    指纹功能适配文档 本文档主要介绍第三方设备厂商如何将指纹功能集成到系统中 另外也简单描述了系统上的用户认证流程 指纹功能的集成需要实现系统定义的指纹接口规范 然后将实现的接口程序安装到系统中 并提供规范中定义的配置文件 就可在重启后使用系统
  • 口罩检测——环境准备(1)

    文章目录 前言 一 工具及环境要求 工具 本地环境要求 二 工具介绍 1 labelimg 2 AI Studio 3 YOLO2COCO 4 PaddleUtils 5 paddleyolo 三 库的安装 总结 前言 小编之前做过一期 O
  • Matlab 2016a 安装教程

    Matlab 2016a 安装包及破解教程百度云分享链接 链接 https pan baidu com s 1i6BgD8p 密码 17gg Matlab安装教程 1 下载文件 得到R2016a win64 part1 rar R2016a
  • DataGrip 连接 Kerberos 认证的 hive 报 Hive JDBC Kerberose Authentication Error: GSS initiate failed 错误

    版本 hive 3 1 2 问题描述 使用工具连接 hive 时 报如下错误 The specified database user password combination is rejected 08S01 Could not open
  • producer参数---Kafka从入门到精通(七)

    上篇文章说了 kafka需要先构造properties指定server和kafka集群 key 和 value用stringSerialize序列化 通过producer发送send 需要records参数指定topic和value 之后发
  • 利用边缘监督信息加速Mask R-CNN实例分割训练

    欢迎关注 我爱计算机视觉 公众号 一个有价值有深度的公众号 今天跟大家分享一篇有意思的arXiv上新出的论文 作者来自德国宝马汽车公司 BMW Car IT GmbH Germany 的两位实习生 Mask R CNN是实例分割的经典模型
  • 【转】embedding概念理解

    原文来自google developer的机器学习入门课程 主要觉得有几个点 很能说明embedding的本质 以及为什么要用embedding来做矢量化 以下我对原文做了我需要的信息的摘录 需要阅读原文的请自行去google develo
  • vue方法中的方法怎么同步顺序执行_vue在一个方法执行完后执行另一个方法

    vue在一个方法执行完后执行另一个方法 用Promise来实现 Promise是ES6的新特性 用于处理异步操作逻辑 用过给Promise添加then和catch函数 处理成功和失败的情况 ES7中新提出async搭配await 建议使用a
  • java多线程测试性能,总线程使用总时间。主要用于返回主线程

    java多线程测试性能 总线程使用总时间 返回主线程的方法 转载 https www cnblogs com jack xsh p 8615644 html 返回主线程的方法 前段时间在做java多线程 然后涉及到了一个效率的问题 java
  • Matlab将double类型转换为正整数类型

    这个求和运算 countsum round中数据类型为double 不能直接累加 也可能是可以的 但是不知道哪个地方设置的问题 解决方法 如下
  • 几何平均详解,及其与算术平均、调和平均、均方根的关系

    2 几何平均与算术平均的转换关系 附 3 2 几何平均数适用于求连乘样本的均值 它是变化的中心 代表平均变化率 算术平均数适用于求连加样本的均值 它是数值的中心 代表平均数量 中位数适合求带有离群值样本的均值 它是位置的中心 代表平均位置

随机推荐

  • UE4:使用样条生成随机路径,并使物体沿着路径行走

    一 关于样条的相关知识 参考自 样条函数 馒头and花卷 博客园 三次样条 cubic spline 插值 知乎 B Spline 三 样条曲线的性质 Fun With GeometryFun With Geometry 个人理解的也不是非
  • 猪猪侠的黑客学习路线

    猪猪侠是谁 我想说 他应该是我们这一代黑客都想成为的人 在 知乎 上 如何黑掉知乎 的问题被提出后 他就跟帖贴出了密码库的连接密码和用户数据的信息结构 360公司一份内部PPT显示 2008年前 安全公司普遍净利润低 而在BAT 百度 阿里
  • Java中的List集合 ,Set集合,Map 的使用

    一 List集合 List集合是有序的 且元素可以重复 ArrayList 就是一个动态的数组 LinkedList 基于链表的存储结构 特点 ArrayList 查询快 增删慢 LinkList 查询慢 增删快 代码演示 list 有序
  • win10和win11系统,手机或者其他设备连接不上电脑热点,一直在转圈圈的解决方法

    win10 win11系统 1 点击win选择设置 一个齿轮 不好截图就不放图了 2 选择网络和internet 3 选择高级网络设置 4 选择更多网络适配选项 5 选择WLAN 右键属性 6 共享 gt 允许其他网络用户通过此计算机的 家
  • openwrt之snmpd

    OpenWRT uses UCI etc config snmpd to generate the etc snmp snmpd conf so you cannot simply edit this file and restart sn
  • 最新通信工程专业毕业设计题目选题推荐 - 100例

    文章目录 1前言 2 如何选题 3 通信工程选题方向 3 1 移动通信方向 3 2 嵌入式开发方向 3 3 人工智能方向 3 4 物联网方向 3 5 算法研究方向 3 6 移动应用开发方向 3 7 网络通信方向 3 8 学长作品展示 4 最
  • python查看变量内存地址的内置函数是_查看变量内存地址的Python内置函数是____...

    查看变量内存地址的Python内置函数是 答 id 产妇乳汁分泌主要依赖于 答 哺乳时吸吮刺激 下列选项中 属于 路径面板 中的工具按钮的是 答 用前景色填充路径 用画笔描边路径 将路径作为选区载入 从选区生成工作路径 添加图层蒙版 属于一
  • CentOS 8 Cannot prepare internal mirrorlist No URLs in mirrorlist

    CentOS 8 Cannot prepare internal mirrorlist No URLs in mirrorlist 解决方法 输入以下命令 sudo dnf install y curl policycoreutils op
  • 【Linux网络编程笔记】TCP短连接产生大量TIME_WAIT导致无法对外建立新TCP连接的原因及解决方法—基础知识篇

    最近遇到一个线上报警 服务器出现大量TIME WAIT导致其无法与下游模块建立新HTTP连接 在解决过程中 通过查阅经典教材和技术文章 加深了对TCP网络问题的理解 作为笔记 记录于此 备注 本文主要介绍TCP编程中涉及到的众多基础知识 关
  • spring源码学习:spring初始化流程

    首先借个图 说明一下spring的bean的整个生命流程 销毁什么的这个看图就知道怎么回事 使用的话一般都是纯业务 而且我们更关心spring是怎么初始化的 初始化成我们定义的那个样子 我们就是以这个出发点来看一下spring的大概流程 s
  • GIS_开源GIS

    GIS 开源GIS 图 文 QGIS QGIS是一个开放源码的地理信息系统 该项目诞生于2002年5月 并于同年6月作为SourceForge上的一个项目建立 我们一直在努力使GIS软件 传统上是昂贵的专有软件 成为任何人都可以使用个人电脑
  • python ADF检验

    前言 本文对ADF检验进行研究 python示例代码 不对概念进行分析介绍 Code import numpy as np import matplotlib pyplot as plt from statsmodels tsa statt
  • EPOLLRDHUP EPOLLHUP 事件

    EPOLLRDHUP是从Linux内核2 6 17开始由GNU引入的事件 对端正常关闭 程序里close shell下kill或ctr c 触发EPOLLIN和EPOLLRDHUP 但是不触发EPOLLERR 和EPOLLHUP 再man
  • 最新物联网毕设100例(一)

    单片机毕业设计项目分享系列 这里是DD学长 单片机毕业设计及享100例系列的第一篇 目的是分享高质量的毕设作品给大家 包含全面内容 源码 原理图 PCB 实物演示 论文 这两年开始毕业设计和毕业答辩的要求和难度不断提升 传统的单片机项目缺少
  • 图像分割套件PaddleSeg全面解析(八)预测代码解读

    训练完成模型之后 可以对图片进行预测 还可以实现模型结果可视化 查看分割效果 运行命令如下 python predict py config configs quick start bisenet optic disc 512x512 1k
  • C# ListView用法详解

    拖控件 listView 控件到新建form中 并添加相应的button lable和textbox 如下图 1 点击表格右上角的三角形 添加表头信息 2 Name 程序里调用的名称 Text 表格里显示的信息 其它可以设置大小等信息 3
  • 视频托管--七牛云

    目录 vue video player 视频托管 vue video player 安装 npm install vue video player S 在main js导入 vue video播放器 require video js dis
  • npm登录:忘记了用户名和密码,通过邮箱找回流程

    登录npm时发现用户名和密码我都忘了 幸好绑定了邮箱 通过邮箱重设密码与登录 1 在npm官网sign in界面点击Forgot password 2 输入邮箱发送email 3 邮件中会给出你的用户名和一个地址跳转链接 点击跳转链接 4
  • 查看docker运行中的命令行输出

    访问本站观看效果更佳 当我在用docker跑pytorch时 因为训练时间长 网络不好的时候 终端会停止输出命令行结果 为了查看命令行的输出结果 我们可以运行如下命令 docker logs ID或者名字 可以查看容器内部的标准输出 下面再
  • cmmi实践访谈测试ppt_汽车嵌入式软件测试——软件质量度量评价指标

    在上一期中 介绍了常见的软件质量度量模型 McCall Boehm ISO 9126模型 通过这些模型可以对软件质量进行科学的评价 在本期中 主要介绍 7个软件质量的评价指标 编码规范 源代码行 千行代码bug率 圈复杂度 代码覆盖率 扇入