精华内容
下载资源
问答
  • 2021-05-21 16:40:04

    多个if语句和else if有什么区别

    if为如果,就是如果这种情况,如果那种情况。

    else if 不是上一个条件的前提下,如果是这个条件。if无论是否满足条件都会向下执行,知道程序结束,else if 满足一个条件就会停止执行。

    由于if都会执行一遍,则可能会同一个需要判断的事件,会进入2个if语句中,出现错误,而else if就不会发生这样的事情。 扩展资料: 在同一个 if 结构中可以有多个 elseif 语句。

    第一个表达式值为 TRUE 的 elseif 语句(如果有的话)将会执行。在 php 中,也可以写成“else if”(两个单词),它和“elseif”(一个单词)的行为完全一样。

    句法分析的含义有少许区别(如果你熟悉 C 语言的话,这是同样的行为),但是底线是两者会产生完全一样的行为。 elseif 的语句仅在之前的 if 或 elseif 的表达式值为 FALSE,而当前的 elseif 表达式值为 TRUE 时执行。

    参考资料:else if 百度百科。

    如果if和else个数不同,用花括号来配对语句是什么意思?新手看课本

    其实这个是根据不同的情况而定的,一般常用的格式:if(条件语句){//代码}else{//代码}这种格式是如果执行了if就不执行else,如果没有执行就执行elseif(){}else if(){}这种格式是,如果满足前一个if,后面就不执行,不满足就依次执行后面的if语句if(){if(){}else{}}这种就是属于嵌套了,也是根据你自己的实际情况来定的还有一些其他的用法,我就不一一列举了if语句的运用十分的灵活和广泛,也是后面编程之中最最基础的,只要理清思路,还是很容易掌握的。

    c语言中的if ,else 语句

    区别是很明显的!

    先讲一下 if 分支结构吧!

    if(express)语句1

    else 语句2

    当express为真时,执行语句1,假时执行语句2,很显明,只能是一个语句,那么如果要使用多个语句,必需使用{}表示语句块!

    回过头来看看

    if(express1)语句1

    else if(express2) 语句2

    else 语句3

    因为一个 if结构可以称为一个复合语句!所以,在这个嵌套if中,第二个if为一个语句,所以,和

    if(express1)语句1

    if(express2) 语句2

    else 语句3

    很明显不一样!

    前者是第二个if为第一个if的else分支的语句,而后者为平行的两个if分支复合语句!

    if语句条件表达式

    当把一个指针作为条件表达式时,所要判断的条件实际上就是“该指针是否为一空指针”.在if,while,for或do/while等语句中,或者在条件表达式中,都可以使用指针.请看下例: if(p) { /*dO something*/ } else { /* dOsomethingelse */ }当条件表达式的值不等于零时,if语句就执行“then”子句(即第一个子句),即“if(/*something*/)”和“if(/*something*/!=0)”是完全相同的.因此,上例和下例也完全相同: if(p !=0) { /* dO something(not anull pointer)*/ } else { /* dOsomethingelse(a null pointer)*/ }以上两例中的代码不易读,但经常出现在许多C程序中,你不必编写这样的代码,但要理解这些代码的作用.希望能解决您的问题.。

    c++的if else语句

    这是最经典的if else了吧

    #include

    #include

    #include

    void main()

    {

    int a=3;

    int b=4;

    int c=5;

    if(a>b&&a>c)//判断a 是不是最大

    {

    if(b>c)

    {

    printf("a>b>c");

    }else

    {

    printf("a>c>b");

    }

    }

    else if(b>a&&b>c)//判断b 是不是最大

    {

    if(a>c)

    {

    printf("b>a>c");

    }else

    {

    printf("b>c>a");

    }

    }

    else if(c>b&&c>a)//判断 c 是不是最大

    {

    if(a>b)

    {

    printf("c>a>b");

    }else

    {

    printf("c>b>a");

    }

    }

    }

    如果对您有帮助,请记得采纳为满意答案,谢谢!祝您生活愉快!

    转载请注明出处华阅文章网 » ifelse语句例子

    更多相关内容
  • 过去两个月,例子君每天总结梳理小例子,关于Python基础、常用内置库、正则表达式、装饰器、生成器、迭代器、绘图工具,Python多线程等。它们很简单,也就几行代码,各位读者反映也很...

    过去两个月,例子君每天总结和梳理小例子,关于Python基础、常用内置库、正则表达式、装饰器、生成器、迭代器、绘图工具,Python多线程等。它们很简单,也就几行代码,各位读者反映也很不错哒,养成了每天看小例子的习惯。

    例子君很高心能得到大家的喜爱,也会再接再厉,继续坚持,争取创作出更加优质的小例子。已有的200个小例子,没有看到的童鞋,直接点击下面链接:

    200个小例子,点击最下方---》阅读原文

    例子君,带你过去。

    接下来,bee君出场了,勤劳的小bee君,将会每天起早或晚归继续奋战在电脑前,为大家输出更加高质量的原创文章。

    人都是有惰性的,尽管勤奋程度还算可以,但是有时也偷懒。今天晚上本来想着躺在床上玩耍来着,想到实力不允许,还得继续复习基础知识,扎实输出点干货。

    关注我时间久的老读者,可能点进来后被吓住了,这还是之前的那个小编吗?他的文章署名不是flody, zhenguo 或 zglg吗?今天怎么是bee君了呢。。。

    哈哈哈,这几天,我翻看之前的文章,看完一篇,觉得通篇好枯燥啊,难道就不能添加点表情吗,好得也为这么干的文章添加点乐趣吧,自己都看不下去,还要祈求更多的人点开看你。所以,我先尝试做出几点改变啊:

    1) 自己的原创文章署名:bee君,以后bee君就是小编了,小编就是bee君;

    2) 文中会适当添加符合文章风格和主题的表情图,添点乐子,同时更好表达我想说的;

    3) 了解我的读者知道,平时上班9>9*,如果当天空余时间很少,我会写一篇直击要害的技术小短文,实在没时间,我会分享一篇技术大佬的好文;如果时间较多,我会写一篇长点的包括多个知识点的文章;

    4) 2020后半年,我的生活将会有一些重大改变,到时相信会有更多的课余时间,为大家推送更多高质量的技术文章;

    5) 以上所有,都是出于热爱,写作已经成为生活的一部分。

    那么,接下来,我会更多推送偏向Python数据分析,Python机器学习,深度学习的系列文章,主要围绕这几条线展开。所有的文章,尽量保证承前启后,是一个系列,一个系列的,杜绝东一榔头西一棒子。

    注意我不是什么所谓的大神,就是喜欢总结点东西而已,所写的这些笔记也都得有个参考,主要的输入形式包括,项目中用到的重要技能包和工具包,不一定是自己很熟的,我更喜欢写一些自己不熟的,经过查查资料,产生独特理解的,这种写起来,会非常嗨;再有,我也关注了很多公众号,他们推送的文章对我有启发,让我产生独特的一些想法或理解,这种我也会写;看书,看视频,github,博客等等,只要是对自己和大家有用的技能。

    我会尽量写的通俗易懂,当然这是有相当挑战的,有些知识压根就不是那么易懂,再加上个人能力有限,理解不到位,不深刻,所以就更难写的通俗易懂,但是这不妨碍,我继续前行,这是我的目标,我会不断向前,螺旋式的靠近目标。我也很感激你们的陪伴,这个舞台,我自己一个人瞎逼逼,更有可能会半途而废,但是有了你们的观看,我将会义无反顾,往前走。

    好了,言归正传

    1 引出概念

    今天,讲一个数据分析或机器学习里非常重要的概念,置信度和置信区间。为什么说置信度和置信区间非常重要?举个例子。

    拿到一个电影数据集,为了挑选出喜剧类型的电影,在豆瓣上评分前10名。这看似并不困难,使用pandas几行代码差不多就能完成分析,给出一个结果。

    但是,当回过头来仔细检查时,却发现,选出的10部电影,竟然有5部电影只有一个人评分,并且都是给了10分。

    基于这种情况,评选出的前10名,自然不能服众,不具有很强的说服力。

    我们更期望的是,一部电影被众多观影者打分,然后从这些电影中,挑选得分更高的电影。

    这里就能引出:置信度和置信区间的概念。

    一部电影被众多人打分,最后平均得分为8.5,那么这部电影的得分在8.2~8.8分,置信度将会很高,假设为90%;

    相反,一部电影只有两个人打分,尽管最后平均分为9.5分,但是在区间:9.2~9.8分的置信度,可能就没那么高,预估为50%吧。言外之意,这个置信区间9.2~9.8被否的可能性会更大,毕竟只有50%吗。

    2 理论解释

    如果我们叫无数个观影者给某部电影打分,下面的图就是总体分布图,其平均得分为 μ ,标准差为 σ :

    如果我们已经得出μ 和 σ ,我们可以说约 68% 的样本会落在红色区域:平均得分在上下两个 σ内的置信度就是95%.

    假设样本无穷大,这样得到某部电影的平均得分就是总体分布得分,平均分为0.65分(满分为1分), 标准差为0.03. 

    那么这部电影的平均得分在置信区间0.62~0.68 分的置信度约为95%.

    所以,为了增强结果的说服力,可以过滤掉那些被评分较少的电影,那么到底少于多少就应该被过滤掉,这里也有说法。

    3 求95%置信度对应样本个数

    已知样本标准差,Z值,置信区间的长度,根据公式,便能计算出样本个数,具体计算公式大家自行查询,在此不列出。

    表格参考如上,如果我们按照95%的置信度,允许误差为5%的话,需要的样本个数至少为385.

    所以,我们的问题已经解决了,要找出至少有385次被评分的所有电影,按照喜剧的平均分依次从大到小排序,选出前10.

    因为用到Z值,在此说明下Z值的求法,作为知识扩充。

    4 求95%置信度对应的Z值

    允许电影评分有左右各有误差,即0.05/2=0.025。此时要查尾部面积是0.025时的Z值。

    查Z值表时要在表中间找到0.975。从这一行水平往左得到1.9,往上对得到0.06,把两个数加起来就是1.96。

    5 求95%置信度对应的置信区间

    计算置信区间:

    第一步,已知样本,求样本平均值、标准差和标准误差。样本标准误差:

    第二步,确定置信度(置信水平),常用的置信度是95%。 

    第三步,求置信区间[a,b]上下限,Z值求法参考上面,所以容易得出:

    a = 总体平均值 - Z*标准误差

    b = 总体平均值 + Z*标准误差

    以上这些知识点,相信大家在网上也能搜出来,但是学习最重要的是知识逻辑梳理。一个一个的知识点这就好比放到那里的一个一个的珠子,而知识的逻辑体系就好比那一根线,它把一个一个的珠子串联起来,这根线就是逻辑线。我更希望通过辛苦总结,形成这样一根串珠子的线,这才是最大的价值所在,而像珠子的知识获取手段目前从来都不匮乏。

    Python与算法社区

    若有用,点在看,帮助更多人

    展开全文
  • Linux下VCSVerdi联合仿真简易教程及例子示范

    万次阅读 多人点赞 2020-07-22 11:42:47
    最近在公司实习,最近也恰好在学习Linux下的IC设计环境,涉及到了VCSVerdi联合仿真等内容,也切身感觉到,学校学习的内容是如此的不同,此篇便来下: VCS,Verdi是什么,为何要用VCSVerdi? 用一个简短的...

    VCS与Verdi联合仿真简易教程及例子示范

    最近在公司实习,最近也恰好在学习Linux下的IC设计环境,涉及到了VCS与Verdi联合仿真等内容,也切身感觉到,和学校学习的内容是如此的不同,此篇便来讲下:

    1. VCS,Verdi是什么,为何要用VCS和Verdi?
    2. 用一个简短的例子展示如何在Linux下使用VCS,Verdi对Verilog文件进行功能仿真;
    3. 一些用VCS,Verdi的提高效率的方式;

    1. VCS,Verdi介绍

    相信大家都用过Vivado,Quartus等,这里以Vivado为例,他包含了RTL,编译,仿真,综合,看波形,烧板子等,集大成为一体。相比之下,VCS和Verdi就很专一了,VCS专注于编译及仿真Verdi专注于看波形,仅此而已,安分守己。那Vivado这种功能这么全,工业界直接全用一个Vivado走天下不就行了,为何要大费周折用VCS和Verdi呢?

    按我公司老板的话来讲,Vivado其实只能算个写Verilog的(而且还很慢),只不过集成了综合,仿真,看波形等功能,如果要真正做Asic设计,还是得在各个步骤用上用更加专业的软件,用那些在领域中做到顶峰的EDA,对,那就是Synopsys的VCS,Verdi这种(毕竟Vivado的优化大多也只针对于自家FPGA)。首先VCS编译仿真速度极快,效率极高,为大家节约时间,Verdi看波形也十分方便debug,它支持信号追溯,无缝增加信号波形等功能。虽然上手比Vivado难,但学习之后能感受到其美丽之处的。

    (注意:仿真包含前仿和后仿,如果单纯的前仿,VCS就绰绰有余了,然后想后仿,那就得需要再用DC (Design Complier) 来“综合”,此篇专注于前仿)

    2. VCS,Verdi使用教程

    环境:Linux

    编写Verilog:Vim or Gedit

    编译仿真:VCS

    波形查看:Verdi

    这里默认VCS和Verdi环境都已配好,需要配环境的朋友可以自行百度~

    1. 可以Terminal输入vcsverdi来验证下环境有没有配置成功(若安装成功一般会如下图所示,但出现下图也不能确保环境一定是正确的);
    • Terminal输入vcs会显示如下:
      T
    • Terminal输入verdi会直接调用出verdi的GUI
      在这里插入图片描述
    1. 这样我们先新建一个计数器的verilog文件以及testbench文件(流程是:在桌面新建Counter文件夹,并在文件夹内新建counter.v,tb_counter.v和timescale.v文件。如果不熟悉可以鼠标操作);
    cd Desktop
    mkdir Counter
    cd Counter
    
    1. 至此已完成Counter文件夹建立以及Terminal路径现在在\Desktop\Counter里,我们继续:在文件夹里新建counter.v,tb_counter.v和timescale.v文件,其内容如下:
    vim counter.v
    
    
    module counter(
            input                   clk,
            input                   rst,
            output  reg     [5:0]   count
    );
    always @(posedge clk or negedge rst)
    begin
            if(!rst)
                    count <= 0;
            else
                    count <= count + 1;
    end
    endmodule
    
    
    vim tb_counter.v
    
    module tb_counter();
    
    reg 		clk,rst;
    wire	[5:0]	counter;
    
    counter u1(clk,rst,counter);
    
    always #(5) clk = ~clk;
    
    initial begin
    	clk <= 0;
    	rst <= 0;
    	#20;
    	rst <= 1;
    	#50;
    	if(counter != 5)
    		$display("Failure 1: the counter should be 5 but it is %d",counter);
      else
      	$display("You gotta the right result!");
    	$finish;
    end
    
    `ifdef FSDB
    initial begin
    	$fsdbDumpfile("tb_counter.fsdb");
    	$fsdbDumpvars;
    end
    `endif
    endmodule
    
    vim timescale.v
    
    `timescale 1ns/10ps
    

    (注意,要VCS与Verdi联合仿真,需要在testbench里面必须加入``ifdef FSDBendif`的代码,这样才能生成fsdb文件提供Verdi读取,不然不会输出波形)

    1. 我们已经有了RTL代码了,现在开始用vcs调用这两文件,对counter进行功能仿真;
    2. 在Terminal输入如下代码并运行
    vcs -R -full64 +v2k -fsdb +define+FSDB -sverilog counter.v tb_counter.v timescale.v -l run.log
    

    其中-R表示自动运行仿真,+v2k表示使用Verilog-2001标准,-fsdb表示支持对fsdb相应操作,+define+FSDB相当于在verilog头文件里加上`define FSDB,-sverilog表示支持system verilog,输入.v文件的顺序可以不同(顺序是随意的)-l run.log表示将终端显示的信息在run.log中储存;

    1. 当Terminal显示下图,并在文件夹中出现fsdb文件时,代表vcs已经对counter编译仿真成功了:
      在这里插入图片描述

    2. 现在我们可以打开verdi来看波形了,在Terminal输入:

      verdi
      

      再按下图点击相应选项,它们的意思也很直白,就不解释了;
      在这里插入图片描述
      在这里插入图片描述

    3. 然后按图依次点击,导入代码,然后会变下图所示,恭喜,至此您已经完成了verdi看代码了,开心吧!

    在这里插入图片描述

    1. 但还没出波形呢,别急,我们现在导入之前生成的fsdb文件。

      按图依次点击,导入fsdb文件,以显示波形:

    在这里插入图片描述

    在这里插入图片描述
    在这里插入图片描述
    没错,还是没有波形输出,哈哈哈哈 别气馁
    这不是bug,因为我们还没有告诉波形窗口应该看哪个信号的波形,那我们先直接调用这个counter.v里面所有信号的波形吧~ 再按如下操作verdi:

    在这里插入图片描述

    1. 这样我们就看到波形啦,对于别的工程也可以依据此例子来做VCS与Verdi联合仿真啦~

    至此,我们简单的VCS与Verdi联合仿真例子就大功告成咯,是不是很开心~

    可能有些朋友在想,我没看到他们俩一起用有啥方便啊,又得手打命令,又得调来调去,麻烦的很,还没Vivado一半智能。那在下节,我来涉及些VCS和Verdi的一些基本提高效率操作吧~

    3. VCS,Verdi提高效率

    试想下,我们仅需在Terminal内敲入15个字母的命令,就能迅速自动完成vcs编译仿真甚至调用出verdi,是不是感觉很快,很速度!verdi可以实现代码窗口,波形窗口的联合debug,提高debug效率,是不是很高级,很舒适!

    那具体怎么实现呢,请往下看~

    1. 调用vcs时不用每次都手打 .v文件,使用 .f文件就行,以及用脚本实现调用vcs,具体如下:

      在工程文件夹(这里继续用上面Counter的例子)里面新建一个.f文件;

      (这里用的vim,不熟悉的可以鼠标新建.f文件并输入内容)

      cd Desktop/Counter
      vim file.f
      

      file.f内容如下

      tb_counter.v counter.v timescale.v
      

      依旧,这里.v的顺序不重要,只需要将包含的文件写进去便行;

      这样,这个file.f文件便代表了工程中的三个.v文件,在调用vcs来前仿时便能这么写了:

      vcs -R -full64 +v2k -fsdb +define+FSDB -sverilog -f file.f -l run.log
      

      此时,-f代表着你在使用.f文件了,之后如果想再添加.v文件,就在file.f中添加便可~

      是不是感觉方便了一些,但感觉方便的还不够啊,以后每次开机岂不都都得重打这个长长的vcs命令,然后在输入verdi?

      为了避免如此,我们可以用脚本来做下操作~

      首先在Counter文件夹里,新建一个文件,我们叫他runrand(这个可以无后缀的,我这里使用的vim,也能鼠标新建文件)

      vim runrand
      

      然后在runrand文件输入如下内容(实验室Linux系统的shell是bash,此以bash为例)

      #!/bin/bash
      vcs -R -full64 +v2k -fsdb +define+FSDB -sverilog -f file.f -l run.log
      verdi
      

      然后在Terminal输入如下命令,将runrand转为执行文件:

      chmod -x runrand
      

      这样,在每次重新启动Terminal时,我们仅需在Terminal输入以下命令便能进行vcs仿真,并调用出verdi了~

      (实验室Linux系统的shell是bash,此以bash为例)

      source runrand
      

      是不是方便了很多~

      (如果不想直接调出verdi可以在runrand里将verdi这一行去掉)

    2. Verdi的优点体现

      ​ 不知道大家之前是不是也遇到过这种困扰,使用Vivado或者Modelsim看波形时,为了增加某几个信号的波形,又得重新仿真一遍(贼耗时间);为了追踪一个信号它在某几个时刻的变化原因,需要对着波形图琢磨几遍(贼耗时间)…

      ​ 那么Verdi在这块都已经全部解决,在Verdi看增加信号波形无需再次仿真,追踪信号只需要在代码窗口里点击相应信号便能看到它是由哪些信号决定的。

      那具体操作如下:

      • 在导入.v文件以及.fsdb文件后,如果我们要增加某信号波形,可以鼠标单击代码窗口的对应信号,然后再键盘输入ctrl+w,这样该信号的波形便直接导入波形窗口并显示了,不需要再次仿真,是不是超级方便!!!

    在这里插入图片描述

    • 为了让debug更加快捷,我们可以在代码窗口单击键盘的x键,以显示出每个wire和reg在特定clk时的值的变化,再也不需要盯着波形来回看了!

    在这里插入图片描述

    • verdi也能生成.v文件对应的电路结构图,具体如下图所示:

    在这里插入图片描述

    • verdi还有很多快捷键,比如ctrl+4将.v文件中所有信号波形全部导入波形窗口,在波形窗口按f自动适配波形大小,按z缩小波形,按Z放大波形,等等,许多便捷操作,以及用命令行或者脚本直接verdi读取fsdb文件并显示等,这些大家可以自行上网查询~
    • 这里再举个命令行直接调用verdi并直接导入.v文件,.fsdb文件的操作。同时我们也能像先前生成runrand脚本文件那样,创建一个新脚本文件调用下面的命令,从而提高效率~
    verdi -ssf tb_counter.fsdb -2001 -sverilog tb_counter.v counter.v
    
    • 欢迎大家找到更棒的快捷键或命令后与我分享,一起来完善此教程~

    总结

    十分感谢看到这里,教程就到此为止了,相信大家也已经能自主应用VCS和Verdi去对自己工程进行前仿以及看波形了。教程里面涉及的较少,如果想更加深入了解VCS和Verdi,建议去品读synopsys的官方指导文档,同时这也有一个良心UP主的VCS Lab教程视频,有兴趣的朋友也能看看,会让您对VCS有更深地理解。

    https://www.bilibili.com/video/BV1Ab411r75o,这是VCS Lab1,还有Lab2,3,直接在UP主主页便能看见~

    展开全文
  • 测试用例模板和例子

    万次阅读 多人点赞 2017-02-14 15:58:31
    这个例子可能有些极端,但测试用例需求设计同步的情况在实际开发过程中确是屡见不鲜的,测试用例文档是“活的”文档,这一点应该被测试工程师牢记。   4 、测试用例应该包含实际的数据; ...

    该范例已经包含一个测试用例的模板。

    项目/软件

    技术出口合同网络申领系统 (企业端)

    程序版本

    1.0.25

     

     

     

    功能模块名

    Login 

    编制人  

    xxx

     

     

     

    用例编号-

    TC-TEP_Login_1 

    编制时间  

    2002.10.12

     

     

     

    相关的用例

     

     

     

     

     

    功能特性

    用户身份验证

     

     

     

     

     

    测试目的

    验证是否输入合法的信息,允许合法登陆,阻止非法登陆

     

     

     

     

     

    预置条件

    无 

    特殊规程说明 

    如数据库访问权限

     

     

     

    参考信息

    需求说明中关于登陆的说明

     

     

     

     

     

    测试数据

    用户名=yiyh 密码=1

    操作步骤

    操作描述 

    数 据

    期望结果

    实际结果

    实际结果 

    测试状态(P/F

    输入用户名称,按登陆按钮。 

    用户名=yiyh,密码为空 

    显示警告信息请输入用户名和密码!

     

     

     

    输入密码,按登陆按钮。 

    用户名为空,密码=1

    显示警告信息请输入用户名和密码!

     

     

     

    3

    输入用户名和密码,按登陆按钮。

    用户名=yiyh,密码=2

    显示警告信息请输入用户名和密码!

     

     

     

    4

    输入用户名和密码,按登陆按钮。

    用户名=xxx,密码=1

    显示警告信息请输入用户名和密码!

     

     

     

    5

    输入用户名和密码,按登陆按钮。

    用户名=xxx,密码=2

    显示警告信息请输入用户名和密码!

     

     

     

    6

    输入用户名和密码,按登陆按钮。

    用户名=空,密码=

    显示警告信息请输入用户名和密码!

     

     

     

    7

    输入用户名和密码,按登陆按钮。

    用户名=yiyh,密码=1

    进入系统页面。

     

     

     

    8

    输入用户名和密码,按登陆按钮。

    用户名=Admin,密码=admin

    进入系统维护页面。

     

     

     

    9

    输入用户名和密码,按登陆按钮。

    用户名=yiyh'',密码=1

    显示警告信息请输入用户名和密码!

     

     

     

    10

    输入用户名和密码,按登陆按钮。

    用户名=yiyh,密码=1''

    显示警告信息请输入用户名和密码!

     

     

     

    11

    输入用户名和密码,按重置按钮。

    用户名=yiyh,密码=1

    清空输入信息

     

     

     

    测试人员 

     

    开发人员

     

     

    项目负责人

     

    3、测试用例设计的误区

    1、能发现到目前为止没有发现的缺陷的用例是好的用例:

    首先要申明,其实这句话是十分有道理的,但我发现很多人都曲解了这句话的原意,一心要设计出发现“难于发现的缺陷”而陷入盲目的片面中去,忘记了测试的目的所在,这是十分可怕的。我倾向于将测试用例当作一个集合来认识,对它的评价也只能对测试用例的集合来进行,测试本身是一种“V&V”的活动,测试需要保证以下两点:

    l 程序做了它应该做的事情 

    l 程序没有做它不该做的事情

    因此,作为测试实施依据的测试用例,必须要能完整覆盖测试需求,而不应该针对单个的测试用例去评判好坏。

     

    2、测试用例应该详细记录所有的操作信息,使一个没有接触过系统的人员也能进行测试;

    不知道国内有没有公司真正做到这点,或者说,不知道有国内没有公司能够将每个测试用例都写得如此详细。在我的测试经历中,对测试用例描述的详细和复杂程度也曾有过很多的彷徨。写得太简单吧,除了自己没人能够执行,写得太详细吧,消耗在测试用例维护(别忘了,测试用例是动态的,一旦测试环境、需求、设计、实现发生了变化,测试用例都需要相应发生变化)上的时间实在是太惊人,在目前国内大部分软件公司的测试资源都不足的情况下,恐怕很难实现。但我偏偏就能遇到一些这样的老总或者是项目负责人,甚至是测试工程师本身,全然不顾实际的资源情况,一定要写出“没有接触过系统的人员也能进行测试”的用例。

    在讨论这个问题之前,我们可以先考虑一下测试的目的。测试的目的是尽可能发现程序中存在的缺陷,测试活动本身也可以被看作是一个Project,也需要在给定的资源条件下尽可能达成目标,根据我个人的经验,大部分的国内软件公司在测试方面配备的资源都是不足够的,因此我们必须在测试计划阶段明确测试的目标,一切围绕测试的目标进行。

    除了资源上的约束外,测试用例的详细程度也需要根据需要确定。如果测试用例的执行者、测试用例设计者、测试活动相关人对系统了解都很深刻,那测试用例就没有必要太详细了,文档的作用本来就在于沟通,只要能达到沟通的目的就OK

    在我担任测试经理的项目中,在测试计划阶段,一般给予测试设计30% - 40%左右的时间,测试设计工程师能够根据项目的需要自行确定用例的详细程度,在测试用例的评审阶段由参与评审的相关人对其把关。

     

    3、测试用例设计是一劳永逸的事情;

    这句话摆在这里,我想没有一个人会认可,但在实际情况中,却经常能发现这种想法的影子。我曾经参与过一个项目,软件需求和设计已经变更了多次,但测试用例却没有任何修改。导致的直接结果是新加入的测试工程师在执行测试用例时不知所措,间接的后果是测试用例成了废纸一堆,开发人员在多次被无效的缺陷报告打扰后,对测试人员不屑一顾。

    这个例子可能有些极端,但测试用例与需求和设计不同步的情况在实际开发过程中确是屡见不鲜的,测试用例文档是“活的”文档,这一点应该被测试工程师牢记。

     

    4、测试用例不应该包含实际的数据;

    测试用例是“一组输入、执行条件、预期结果”、毫无疑问地应该包括清晰的输入数据和预期输出,没有测试数据的用例最多只具有指导性的意义,不具有可执行性。当然,测试用例中包含输入数据会带来维护、与测试环境同步之类的问题,关于这一点,《Effective Software Test》一书中提供了详细的测试用例、测试数据的维护方法,可以参考。

     

    5、测试用例中不需要明显的验证手段;

    我见过很多测试工程师编写的测试用例中,“预期输出”仅描述为程序的可见行为,其实,“预期结果”的含义并不只是程序的可见行为。例如,对一个订货系统,输入订货数据,点击“确定”按钮后,系统提示“订货成功”,这样是不是一个完整的用例呢?是不是系统输出的“订货成功”就应该作为我们唯一的验证手段呢?显然不是。订货是否成功还需要查看相应的数据记录是否更新,因此,在这样的一个用例中,还应该包含对测试结果的显式的验证手段:在数据库中执行查询语句进行查询,看查询结果是否与预期的一致。

    4、测试用例在软件测试中的作用 

        1、指导测试的实施 

        测试用例主要适用于集成测试、系统测试和回归测试。在实施测试时测试用例作为测试的标准,测试人员一定要按照测试用例严格按用例项目和测试步骤逐一实施测试。并对测试情况记录在测试用例管理软件中,以便自动生成测试结果文档。 

        根据测试用例的测试等级,集成测试应测试那些用例,系统测试和回归测试又该测试那些用例,在设计测试用例时都已作明确规定,实施测试时测试人员不能随意作变动。 

        2、规划测试数据的准备 

    在我们的实践中测试数据是与测试用例分离的。按照测试用例配套准备一组或若干组测试原始数据,以及标准测试结果。尤其象测试报表之类数据集的正确性,按照测试用例规划准备测试数据是十分必须的。

    除正常数据之外,还必须根据测试用例设计大量边缘数据和错误数据。 

        3、编写测试脚本的"设计规格说明书

        为提高测试效率,软件测试已大力发展自动测试。自动测试的中心任务是编写测试脚本。如果说软件工程中软件编程必须有设计规格说明书,那么测试脚本的设计规格说明书就是测试用例。 

        4、评估测试结果的度量基准 

        完成测试实施后需要对测试结果进行评估,并且编制测试报告。判断软件测试是否完成、衡量测试质量需要一些量化的结果。例:测试覆盖率是多少、测试合格率是多少、重要测试合格率是多少,等等。以前统计基准是软件模块或功能点,显得过于粗糙。采用测试用例作度量基准更加准确、有效。 

        5、分析缺陷的标准 

        通过收集缺陷,对比测试用例和缺陷数据库,分析确证是漏测还是缺陷复现。漏测反映了测试用例的不完善,应立即补充相应测试用例,最终达到逐步完善软件质量。而已有相应测试用例,则反映实施测试或变更处理存在问题。

    5、试用例编号规则

    目的:好的测试用例编号,可以更好的去了解此项用例所针对的模块,也有助于记忆和新用例的增加。

    规则:测试用例编号采用“版本+细类+编号”的形式。

    备注:其中“版本”为设计此测试用例的软件版本。

    “细类”为小模块中的汉字头一个字母,以最多5个字母为标准。

    “编号”为BUG用例的编号,以4位为标准,依次递增。

    例如:引导系统V2.01版本中,候车点设置,用例编号可以书写为:

              2.01_HCDSZ_0001

    九、集成测试

          集成测试(也叫组装测试,联合测试)是单元测试的逻辑扩展。它的最简单的形式是:两个已经测试过的单元组合成一个组件,并且测试它们之间的接口。从这一层意义上讲,组件是指多个单元的集成聚合。在现实方案中,许多单元组合成组件,而这些组件又聚合成程序的更大部分。方法是测试片段的组合,并最终扩展进程,将您的模块与其他组的模块一起测试。最后,将构成进程的所有模块一起测试。此外,如果程序由多个进程组成,应该成对测试它们,而不是同时测试所有进程。

          集成测试识别组合单元时出现的问题。通过使用要求在组合单元前测试每个单元并确保每个单元的生存能力的测试计划,可以知道在组合单元时所发现的任何错误很可能与单元之间的接口有关。这种方法将可能发生的情况数量减少到更简单的分析级别。

          集成测试是在单元测试的基础上,测试在将所有的软件单元按照概要设计规格说明的要求组装成模块、子系统或系统的过程中各部分工作是否达到或实现相应技术指标及要求的活动。也就是说,在集成测试之前,单元测试应该已经完成,集成测试中所使用的对象应该是已经经过单元测试的软件单元。这一点很重要,因为如果不经过单元测试,那么集成测试的效果将会受到很大影响,并且会大幅增加软件单元代码纠错的代价。 

          集成测试是单元测试的逻辑扩展。在现实方案中,集成是指多个单元的聚合,许多单元组合成模块,而这些模块又聚合成程序的更大部分,如分系统或系统。集成测试采用的方法是测试软件单元的组合能否正常工作,以及与其他组的模块能否集成起来工作。最后,还要测试构成系统的所有模块组合能否正常工作。集成测试所持的主要标准是《软件概要设计规格说明》,任何不符合该说明的程序模块行为都应该加以记载并上报。 

          所有的软件项目都不能摆脱系统集成这个阶段。不管采用什么开发模式,具体的开发工作总得从一个一个的软件单元做起,软件单元只有经过集成才能形成一个有机的整体。具体的集成过程可能是显性的也可能是隐性的。只要有集成,总是会出现一些常见问题,工程实践中,几乎不存在软件单元组装过程中不出任何问题的情况。从图1可以看出,集成测试需要花费的时间远远超过单元测试,直接从单元测试过渡到系统测试是极不妥当的做法。 

          集成测试的必要性还在于一些模块虽然能够单独地工作,但并不能保证连接起来也能正常工作。程序在某些局部反映不出来的问题,有可能在全局上会暴露出来,影响功能的实现。此外,在某些开发模式中,如迭代式开发,设计和实现是迭代进行的。在这种情况下,集成测试的意义还在于它能间接地验证概要设计是否具有可行性。 

          集成测试的目的是确保各单元组合在一起后能够按既定意图协作运行,并确保增量的行为正确。它所测试的内容包括单元间的接口以及集成后的功能。使用黑盒测试方法测试集成的功能。并且对以前的集成进行回归测试。 





    展开全文
  • 现在网上虽然讲解Unity3D动画的文章不少,但是却少很少带实际例子的。刚好我之前给美术做了个简单的例子,所以整理一下就共享给大家了。主要是做了两种动画,分别有例子,按空格可以改变动画。具体的制作过程不会...
  • 一个例子搞懂宽表窄表的区别

    万次阅读 多人点赞 2018-11-13 11:28:45
    由于把不同的内容都放在同一张表存储,宽表已经符合三范式的模型设计规范,随之带来的主要坏处就是数据的大量冗余,之相对应的好处就是查询性能的提高便捷。这种宽表的设计广泛应用于数据挖掘模型训练前的数据...
  • osg论坛上72集视频的所有例子

    热门讨论 2015-08-16 22:26:25
    花了500 大洋买的视频 现在 把例子传上去 赶紧下载啊 过会就删除
  • 例子: UGC: User-generated Content 用户生产内容。是指用户将自己原创的内容通过互联网进行展示或者给其他用户。它是一种以Web2.0概念而新兴的方式,现在由原来的以下载为主变成下载上传并重。 UGC有两层组织...
  • 这是一个简单的一维回归的例子,以两种不同的方式计算: 一个是无噪音的情况 另一个是噪音已知的情况 在这两种情况下的核参数都由最大似然法估计得到。 实例代码 import numpy as np from matplotlib import ...
  • 确定性事实性知识的产生式表示3.2 产生式系统3.3 产生式系统的例子——动物识别系统3.4 产生式表示法的特点3.5 框架表示法3.5.1 框架的一般结构3.5.2 用框架表示知识的例子例1 教师框架例2 教师框架例3 教室框架...
  • 如果 region 里面包含大量的大型对象,则该region中最后一个具有巨型对象的区域区域末端之间的空间将不会使用。如果有多个这样的大型对象,这个未使用的空间可能导致堆碎片化。针对这个原因,调整的方法一般是修改...
  • 用买票例子讲讲多线程安全问题

    千次阅读 2014-08-31 23:35:25
    在javase中多线程安全问题,买票的例子几乎是都会到,今天
  • nginx入门简单的反向代理例子

    千次阅读 2018-05-17 20:56:12
    nginx可以作为反向代理负载均衡服务器,这里只nginx的反向代理首先我的环境是debian做的deepin1.首先安装nginx,因为debian是由ubantu改来,安装命令是apt-get,redhat是yum命令在命令行输入 apt-get install ...
  • 01 一个小例子来认识区块链

    千次阅读 2018-02-25 21:15:26
    下面用记账的例子来介绍区块链。 方案一: 老王负责记账,负责村里的每一笔账目,很稳,没人怀疑。 惨了,老王被老绿发现修改了里面的账目,老绿告诉了全村人,因此要修改方案。使用下面方案二。 方案二: 村里...
  • 容积卡尔曼(CKF)算法介绍_附例子和代码

    万次阅读 多人点赞 2019-02-27 17:43:16
    版权声明:本文为博主原创...最后给出一个非线性系统的例子和源代码,供大家参考使用。 1.参考资料  首先,还是给出一篇参考论文:湖南大学-段洋2018年的硕士毕业论文 链接:https://pan.baidu.com/s/18_...
  • 软件工程~数据字典例子解释

    万次阅读 多人点赞 2021-01-08 01:39:54
    浏览选购 别名: 客户点餐 描述: 客户选购菜品并将其加入餐车 定义: 浏览选购=菜名+价格+数量 位置: 点餐订单表 这个别名一定要写,这个位置其实是根据你的其他方面,数据流图得来的,现在因为这是单独一个...
  • 用生动的例子来解释卷积

    千次阅读 2018-10-06 22:04:29
    先在这里说清楚,本文大部分例子都是参考其他的博客,其他的都是我自己的理解。 1. 从卷毛巾开始理解卷积 首先看看卷积的定义: 这两个定义都有一个共同的特征: 让n不断变化,得到下面动图里面的直线: ...
  • 效度信度的通俗解释

    千次阅读 2021-01-12 03:24:51
    展开全部1、信度即测量结果的稳定性或可靠性,e68a8462616964757a686964616f31333366306530指用同一种方法对同一个对象进行重复测量,所得结果之前测量结果相一致的程度,即测试方法受随机误差干扰的程度。...
  • 这篇文章我尽可能用直白的话语总结一下我们学习会上到的朴素贝叶斯分类算法,希望有利于他人理解。 1 分类问题综述  对于分类问题,其实谁都不会陌生,日常生活中我们每天都进行着分类...
  • 本博客一直以来的宗旨就是:用最简单的方式清楚复杂的问题。 因为本人也很菜所以也没法太复杂HHHHHH...... 所以如果哪天某个大神看到了觉得的有问题欢迎指出。...直接拿例子算了- -   using Sy...
  • 转载请注明出处:王亟亟的大牛之路按照国际惯例先安利:https://github.com/ddwhan0123/Useful-Open-Source-Android上礼拜有简单提到v-if v-for 没有深入研究,这一篇就更详细讲讲这俩指令(万物到底就是...
  • 关于闭包究竟是什么,闭包干嘛用的,网上各种回答也是五花八门,动动就扯到隐匿变量/内存泄漏这些概念,让没有C基础的初学者越看越晕,我能说那些是错的,不过显然对新手太友好。曾几何时我也是被那些个...
  • 聚合关系组合关系示例

    千次阅读 2021-02-12 11:29:26
    合成关系分为 聚合(aggregation) 关系组合(composition) 关系, 在大部书中都得很抽像模糊。按我理解,这两种合成方式在代码中的表现应如下:typeTOperate = class(TObject);TAnyObjects = class(TObject)public...
  • 正则表达式基础语法例子

    万次阅读 多人点赞 2017-09-20 09:35:30
    功能:匹配任何十进制数字,[0-9]一致(\D \d 相反,匹配任何非数值型的数字) 例子:data\d+.txt \w 功能:匹配任何字母数字字符,[A-Za-z0-9_]相同(\W 之相反) 例子:[A-Za-z_]\w+ \s 功能:...
  • NP问题总结(概念+例子+证明)

    万次阅读 多人点赞 2020-03-29 20:22:11
    本文是自己对NP问题的一次总结,因为看别的博客要不只概念,要不只有例子,算是一次汇总吧,加上自己的一点小理解,由于看了一段时间才进行总结的,有些图是直接用的别人画好的,但是记得网址了,特此鸣谢~
  • 网课研究生学术职业素养讲座mooc答案

    千次阅读 多人点赞 2021-10-25 13:51:38
    第一:创新思维专业研究 1本中,讲述者主要以哪条河流...3本从水利科技创新的例子、水利的发展、大学的创新精神三个方面阐述了创新思维专业研究。 × 4关于本谈到的创新精神,下列说法中正确的有...
  • 全网最通俗易懂的正则表达式讲解,以例子来讲解

    万次阅读 多人点赞 2021-09-02 16:35:25
    我们可以将正则表达式理解为一种规则,自己设定的一种规则,让计算机根据这个规则来找到你需要的字符串。但是这个规则你怎么制定,当然能瞎制定,对电脑说:”你给我找到这篇文章的所有包含刘德华的句子(字符串)...
  • nodejs事件事件循环详解

    千次阅读 2021-01-14 16:40:41
    上篇文章我们简单的介绍了nodejs中的事件event事件循环event loop。本文本文将会更进一步,继续讲解nodejs中的event,并探讨一下setTimeout,setImmediateprocess.nextTick的区别。
  • xgboost算法详细介绍(通过简单例子讲述)

    万次阅读 多人点赞 2019-01-11 11:30:55
    XGBOOST算法简介boost算法简介集成学习的任务XGBoost的思想通过算法流程图举一个例子详解xgboost树的生成xgboost的简单应用:根据诊断措施预测糖尿病的发病(Kaggle竞赛 ) 作者才疏学浅,如有错误还请指正,谢谢! ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 896,225
精华内容 358,490
关键字:

不与自己讲和的例子