软件测试了解

好吧,之前投实习的时候把NPU看成NLU,然后投了个软件测试,现在竟然进面试了,还是得准备一下,抱个佛脚。不过,真的xs,我当初怎么会投这个的啊,现在看职位描述真没一个知道的。

文章目录

  • 软件测试了解
    • 公司简介
      • 面经(牛客)
    • 1. NPU嵌入式神经网络处理器
    • 2. 工具链
    • 3. 软件测试
      • 3.1 岗位界定
      • 3.2 基础知识
    • 4. ASIC与FPGA
      • 4.1 FPGA现场可编程门阵列
      • 4.2 ASIC专用集成电路
      • 4.3 ASIC与FPGA对比
      • 4.4 Testbench
    • 5. linux面试/shell脚本编程

软件测试了解

岗位:软件测试工程师(NPU工具链方向)

职位描述:1、负责NPU软件工具链的测试工作;2、负责ASIC FPGA验证testbench开发,编写测试用例;3、与IC设计工程师、软件工程师协作,完成FPGA验证、验证脚本调试工作;4、维护验证计划、测试用例等文档,撰写测试报告、验证报告。

岗位要求:1、熟悉C/C++/Python编程;2、熟悉linux环境, shell脚本编程;3、了解常用的CNN模型结构和算子的计算特征。

IC设计工程师:Integrated Circuit Designer,从事IC开发,集成电路开发设计的职业。IC专业就是集成电路设计专业。集成电路设计,是电子工程学和计算机工程学的一个学科,其主要内容是运用专业的逻辑和电路设计技术设计集成电路(IC)。

公司简介

奥比中光科技集团股份有限公司是一家以AI 3D传感技术为核心的科技创新型企业。公司总部设立在深圳,在上海、西安和美国均设有分部。AI 3D感知是为人工智能提供三维视觉能力的关键基础共性技术。奥比中光突破国际技术垄断,拥有从芯片、算法,到系统、框架、上层应用支持的全栈技术实力,在AI 3D感知领域专利申请量居世界前三,成为亚洲第一家、全球第四家掌握AI 3D感知全领域技术的平台型科技企业,占据行业制高点。

面经(牛客)

  • 自我介绍(大概聊了一下项目 为什么不投开发岗而投了测试岗)
  • 测试理论(在哪里学习到测试回归测试冒烟测试及两者有什么区别;自动化测试工具有哪些?简单介绍这些工具是做什么的?自动化测试的应用场景、能否替代手工测试、为什么?)
  • 操作系统(linux:查看文本内容有哪些命令、在文本中查找某个关键词出现的地方或出现次数其中涉及到的命令有哪些、查找文件的命令)
  • 数据库(自己项目中涉及到哪些数据库及其操作、存储过程用法和作用、sql语句:找出语数英综成绩加起来总分前十的学生id)
  • 反问环节(公司其他业务、这个岗位负责哪方面的业务、个人改进意见)
  • 你对我们公司做的东西有了解吗
  • 常见的损失函数(应用场景)
  • 激活函数的作用(我只说了个非线性,面试官不满意,然后我就具体说了每一种激活函数的作用,算过关吧)
  • Python基础,list每隔两个取一个元素(我说直接for循环,面试官问更快速的方式,面试结束后我才想起来可能是列表推导式,主要是我忘了列表推导比for循环更快)。
  • 你理解的梯度下降方法(我简单提到了SGD,动量,一阶距,二阶距,Radam,lookahead等,没有细究)
  • 感受野的大小,对目标检测时大目标和小目标的分类,有什么影响
  • 1*1卷积的作用,降维和升维,和全连接有什么区别,可以代替全连接?
  • dropout层原理,神经元结点冻结是随机取得吗?权重是怎么算的?正向传播是怎么传的?
  • vgg卷积核为什么取3*3

1. NPU嵌入式神经网络处理器

嵌入式算法移植优化学习笔记5——CPU,GPU,TPU,NPU都是什么。

NPU指的是“嵌入式神经网络处理器”,采用“数据驱动并行计算”的架构,特别擅长处理视频、图像类的海量多媒体数据。NPU处理器专门为物联网人工智能而设计,用于加速神经网络的运算,解决传统芯片在神经网络运算时效率低下的问题。

软件测试了解_第1张图片

CPU,GPU,TPU,NPU都是什么?:NPU处理器包括了乘加、激活函数、二维数据运算、解压缩等模块。乘加模块用于计算矩阵乘加、卷积、点乘等功能,NPU内部有64个MAC,SNPU有32个。激活函数模块采用最高12阶参数拟合的方式实现神经网络中的激活函数,NPU内部有6个MAC,SNPU有3个。二维数据运算模块用于实现对一个平面的运算,如降采样、平面数据拷贝等,NPU内部有1个MAC,SNPU有1个。解压缩模块用于对权重数据的解压。为了解决物联网设备中内存带宽小的特点,在NPU编译器中会对神经网络中的权重进行压缩,在几乎不影响精度的情况下,可以实现6-10倍的压缩效果。

其他资料:什么是NPU、NPU的性能参数分解、RK1808 AI芯片-NPU开发简介、专栏:AI嵌入式设备、NPU矩阵乘法加速详解、CPU、MPU、MCU、SOC的概念与区别、MCU最强科普总结、手机芯片里的NPU、AI算法部署落地必备技能。

把CV算法部署到一个硬件平台(NPU),实现真正的AI落地。

2. 工具链

工具链(toolchain)是指一系列软件。这些工具一般一个接一个地运用,一件工具的输出输入至下一件工具,但广义上可以单单是指多个相关的工具。逐个使用这一系列软件可以实现某一个技术目标。

工具链是在每一个大型开放源码项目(包括Linux内核本身)背后默默支撑的力量。它们由一组必要的工具和软件构成,用于编译和调试从最小的工具软件到你可以想象的最复杂的具有Linux内核特征的各种软件。

以GNU举例:GNU工具链中包含的项目有:GNU make:用于编译和构建的自动工具;GNU编译器集合(GCC):一组多种编程语言的编译器;GNU Binutils:包含链接器、汇编器和其它工具的工具集;GNU Debugger(GDB):代码调试工具;GNU构建系统(autotools):Autoconf、Autoheader、Automake、Libtool。

任何工具链都是依托于行业标准相关的流程和存在的,越是完善的流程,越是需要完整的工具链保证它的落地。

3. 软件测试

3.1 岗位界定

高级软件测试工程师,熟练掌握软件测试与开发技术,且对所测试软件对口行业非常了解,能够对可能出现的问题进行分析评估 ;中级软件测试工程师,编写软件测试方案、测试文档,与项目组一起制定软件测试阶段的工作计划,能够在项目运行中合理利用测试工具完成测试任务;初级软件测试工程师,其工作通常都是按照软件测试方案和流程对产品进行功能测验,检察产品是否有缺陷。

测试工程师的定位:

  • 软件项目开发是个分工明确的系统工程,不同的人员扮演了不同的角色,包括部门经理、产品经理、项目经理、系统分析师、程序员、测试工程师、质量保证人员等。可见,软件测试工程师只是软件项目开发中的一个角色而已。
  • 测试工程师承担的任务角色决定工作内容和承担的任务。测试工程师的角色应该承担什么任务呢?这没有统一的答案。因为,这与软件公司的规模,软件项目管理制度,公司领导和项目经理的管理风格,以及具体软件项目自身的特点有很大关系。而且,测试工程师也有普通和高级之分。
  • 笼统的答案列举如下:设置软件测试环境,安装必要的软件工具。运行软件,发现和报告软件缺陷或错误。尤其需要快速定位软件中的严重的错误。对软件整体质量提出评估确认软件达到某种具体标准。以最低的成本,最短的时间,完成高质量的测试任务。

提高测试质量的要诀

  • 首先测试程序的核心功能,然后测试辅助功能。首先测试功能,然后测试性能。首先测试常见情况,然后测试异常情况。首先测试经过变更的部分,然后测试没有变更的部分。首先测试影响大的问题,然后测试影响小的问题。首先测试必须测试的部分,然后测试可选或没有要求测试的部分。

具体工作有:

  1. 使用各种测试技术和方法来测试和发现软件中存在的软件缺陷。测试技术主要分为黑盒测试和白盒测试两大类。其中黑盒测试技术主要有等价类划分法、边界值法、因果图法、状态图法、测试大纲法以及各类典型的软件故障模型等;白盒测试的主要技术有语句覆盖、分支覆盖、判定覆盖、基本路径覆盖等;

    测试专业技能涉及的范围很广:既包括黑盒测试、白盒测试、测试用例设计等基础测试技术,也包括单元测试、功能测试、集成测试、系统测试、性能测试等测试方法,还包括基础的测试流程管理、缺陷管理、自动化测试技术等知识。

  2. 测试工作需要贯穿整个软件开发生命周期。完整的软件测试工作包括单软件测试职业发展的各个阶段元测试、集成测试、确认测试和系统测试工作。单元测试工作主要在编码阶段完成,由开发人员和软件测试工程师共同完成,其主要依据是详细测试。集成测试的主要工作测试软件模块之间的接口是否正确实现,基本依据是软件体系结构设计。确认测试和系统测试是在软件开发完成后,验证软件的功能与需求的一致性、验证软件在相应的硬件条件下的系统功能是否满足用户需求,其主要依据是用户需求。

  3. 测试人员将发现的缺陷编写成正式的缺陷报告,提交给开发人员进行缺陷的确认和修复。缺陷报告编写最主要的要求是保证缺陷的重现。要求测试人员具有很好的文字表达能力和语言组织能力。

  4. 测试人员需要分析软件质量。在测试完成后,测试人员需要根据测试结果来分析软件质量,包括缺陷率、缺陷分布、缺陷修复趋势等。给出软件各种质量特性包括有功能性、可靠性、易用性、安全性、时间与资源特性等的具体度量。最后给出一个软件是否可以发布或提交用户使用的结论。

  5. 测试过程中,为了更好地组织与实施测试工作,测试负责人需要制定测试计划,包括有测试资源、测试进度、测试策略、测试方法、测试工具、测试风险等。

  6. 测试人员为了更好更有效地进行测试,保证测试工作质量,需要在执行测试工作之前首先需要设计测试用例,形成测试用例报告。设计测试用例是保证测试质量的核心工作,很多测试技术都可以用来指导设计用例。为了提高测试用例的设计效率,BTEST培训课程专门开设了高效设计测试用例一门课来讲授各种设计用例的技术与方法。

  7. 为了提高工作效率或提高测试水平,测试工作需要引进自动化测试工具,测试人员需要学会使用自动化测试工具,编写测试脚本,进行性能测试等。

  8. 测试负责人在测试工作中,还需要根据实际情况不断改进测试过程,提高测试水平,进行测试队伍的建设等。

职业优势:

  1. 入门门槛低:大中专学历即可,是不是计算机专业都可以。如果是其他有业务背景的专业更有优势,例如:会计、金融、办公自动化、酒店管理、网站设计等。对于有行业背景的人来说入门更快,因为对于测试工作来说,有时懂业务比懂技术还重要,你会了技术,去各行各业做测试都是要学习业务知识的,这是很正常的事。
  2. 初级技术要求低:目前大部分测试技术还属于手工测试,手工测试要求入门门槛很低。你只要会写用例,会提缺陷就可以了。测试人员需要简单了解业务知识,学习所开发系统的使用,也就是会使用系统就可以了。照着用例执行测试,发现缺陷直接提交缺陷就可以了。
  3. 就业好:国外开发与测试的比例是1:2。目前国内开发与测试的比例是6:1。所以测试行业人才缺口很大,就业前景很好。基本属于供不应求。
  4. 工作比较轻松:比起软件开发工程师来说,软件测试工程师的工作就相对轻松多了。
  5. 发展大:测试分为三个阶段:手工测试、自动化测试、性能测试。这是一个逐步提升的过程。最初工作可能做手工测试,也是目前绝大部分测试人员所从事的工作。自动化测试是测试的发展趋势,而且现在自动化测试人员急缺,且薪资很高。现在最稀缺的是性能测试人员,目前性能测试人员的待遇比同等经历的开发可能还要高,因为现在性能测试人员属于稀缺状态。
  6. 越老越吃香:软件测试工作是对质量的把关,其中包含技术及管理等方面的工作,工作相对稳定,对年龄没有限制,而且随着经验的积累,工龄越长越吃香。

3.2 基础知识

软件测试工程师经典面试题

测试用例设计方法-黑盒测试

黑盒测试和白盒测试的区别

性能测试和功能测试

软件测试常问面试题–计算机网络相关

4. ASIC与FPGA

参考资料:GPU、FPGA和ASIC、FPGA的ASIC原型验证:

软件测试了解_第2张图片

衡量芯片计算性能的重要指标称为算力。通常而言,将每秒所执行的浮点运算次数(亦称每秒峰值速度)作为指标来衡量算力,简称为 FLOPS。现有的主流芯片运算能力达到了 TFLOPS 级别。一个 TFLOPS(teraFLOPS)等于每秒万亿(=10^12)次的浮点运算。增加深度学习算力需要多个维度的齐头并进的提升:

4.1 FPGA现场可编程门阵列

FPGA,Field Programmable Gate Array,即现场可编程门阵列,它是在 PAL、GAL、CPLD 等可编程器件的基础上进一步发展的产物,是作为专用集成电路(ASIC)领域中的一种半定制电路而出现的,既解决了定制电路的不足,又克服了原有可编程器件门电路数有限的缺点。

FPGA 芯片主要由 6 部分完成,分别为:可编程输入输出单元、基本可编程逻辑单元、完整的时钟管理、嵌入块式 RAM、丰富的布线资源、内嵌的底层功能单元和内嵌专用硬件模块。

FPGA 还具有静态可重复编程和动态在系统重构的特性,使得硬件的功能可以像软件一样通过编程来修改。FPGA能完成任何数字器件的功能,甚至是高性能 CPU 都可以用 FPGA 来实现。

FPGA 拥有大量的可编程逻辑单元,可以根据客户定制来做针对性的算法设计。除此以外,在处理海量数据的时候,FPGA 相比于 CPU 和 GPU,独到的优势在于:FPGA 更接近 IO。换句话说,FPGA是硬件底层的架构。比如,数据采用 GPU 计算,它先要进入内存,并在 CPU 指令下拷入 GPU 内存,在那边执行结束后再拷到内存被 CPU 继续处理,这过程并没有时间优势;而使用 FPGA 的话,数据 I/O 接口进入 FPGA,在里面解帧后进行数据处理或预处理,然后通过 PCIE 接口送入内存让 CPU 处理,一些很底层的工作已经被 FPGA 处理完毕了(FPGA 扮演协处理器的角色),且积累到一定数量后以 DMA 形式传输到内存,以中断通知 CPU 来处理,这样效率就高得多。

虽然 FPGA 的频率一般比 CPU 低,但 CPU 是通用处理器,做某个特定运算(如信号处理,图像处理)可能需要很多个时钟周期,而 FPGA 可以通过编程重组电路,直接生成专用电路,加上电路并行性,可能做这个特定运算只需要一个时钟周期。

比如一般 CPU 每次只能处理 4 到 8 个指令,在 FPGA 上使用数据并行的方法可以每次处理 256 个或者更多的指令,让FPGA可以处理比CPU多很多的数据量。

举个例子,CPU 主频 3GHz,FPGA主频 200MHz,若做某个特定运算 CPU 需要 30 个时钟周期,FPGA 只需一个,则耗时情况:CPU:30/3GHz =10ns;FPGA:1/200MHz =5ns。可以看到,FPGA 做这个特定运算速度比 CPU 块,能帮助加速。

北京大学与加州大学的一个关于 FPGA 加速深度学习算法的合作研究。展示了 FPGA 与 CPU 在执行深度学习算法时的耗时对比。在运行一次迭代时,使用 CPU 耗时 375 毫秒,而使用 FPGA 只耗时 21 毫秒,取得了18倍左右的加速比。

FPGA 相对于 CPU 与 GPU 有明显的能耗优势,主要有两个原因。首先,在 FPGA 中没有取指令与指令译码操作, 在 Intel 的 CPU 里面,由于使用的是 CISC 架构,仅仅译码就占整个芯片能耗的 50%;在 GPU 里面,取指令与译码也消耗了 10%~20%的能耗。其次,FPGA 的主频比 CPU 与 GPU 低很多,通常 CPU 与 GPU 都在 1GHz 到 3GHz 之间,而 FPGA 的主频一般在 500MHz 以下。如此大的频率差使得 FPGA 消耗的能耗远低于 CPU 与 GPU。

FPGA与CPU在执行深度学习算法时的耗能对比。在执行一次深度学习运算,使用 CPU 耗能 36 焦,而使用 FPGA 只耗能 10 焦,取得了 3.5 倍左右的节能比。通过用 FPGA 加速与节能,让深度学习实时计算更容易在移动端运行。

相比CPU和GPU,FPGA 凭借比特级细粒度定制的结构、流水线并行计算的能力和高效的能耗,在深度学习应用中展现出独特的优势,在大规模服务器部署或资源受限的嵌入式应用方面有巨大潜力。此外,FPGA 架构灵活,使得研究者能够在诸如 GPU 的固定架构之外进行模型优化探究。

究其本质它仍是芯片的一种。很多人不清楚FPGA到底算软件还是硬件?其实它介于软硬件之间。如果用它做接口、通信的话,它就偏向硬件;如果用它做算法、控制,那么它就偏向软件。

4.2 ASIC专用集成电路

ASIC,Application Specific Integrated Circuit,专用集成电路,是指应特定用户要求或特定电子系统的需要而设计、制造的集成电路。严格意义上来讲,ASIC 是一种专用芯片,与传统的通用芯片有一定的差异。是为了某种特定的需求而专门定制的芯片。

ASIC 作为集成电路技术与特定用户的整机或系统技术紧密结合的产物,与通用集成电路相比,具有以下几个方面的优越性:体积更小、功耗更低、可靠性提高、性能提高、保密性增强、成本降低。回到深度学习最重要的指标:算力和功耗。我们对比 NVIDIA 的 GK210 和某 ASIC 芯片规划的指标,如下所示:

从算力上来说,ASIC 产品的计算能力是 GK210 的 2.5 倍。第二个指标是功耗, 功耗做到了 GK210 的 1/15。第三个指标是内部存储容量的大小及带宽。这个内部 MEMORY 相当于 CPU 上的 CACHE。深度雪地的模型比较大,通常能够到几百 MB 到 1GB 左右,会被频繁的读出来,如果模型放在片外的 DDR 里边,对 DDR 造成的带宽压力通常会到 TB/S 级别。

全定制设计的ASIC,因为其自身的特性,相较于非定制芯片,拥有以下几个优势:1. 同样工艺,同样功能,第一次采用全定制设计性能提高 7.6 倍;2. 普通设计,全定制和非全定制的差别可能有 1~2 个数量级的差异;3. 采用全定制方法可以超越非全定制 4 个工艺节点(采用 28nm 做的全定制设计,可能比 5nm 做的非全定制设计还要好)我们认为,ASIC 的优势,在人工智能深度学习领域,具有很大的潜力。

ASIC 在人工智能深度学习方面的应用还不多,但是我们可以拿比特币矿机芯片的发展做类似的推理。比特币挖矿和人工智能深度学习有类似之处,都是依赖于底层的芯片进行大规模的并行计算。而 ASIC 在比特币挖矿领域,展现出了得天独厚的优势。

4.3 ASIC与FPGA对比

FPGA主要用于要求快速迭代或者小批量产品,或者作为ASIC的算法验证加速。ASIC用于设计规模大,复杂度比较高的芯片,或者是成熟度高,产量比较大的产品;

小批量需求时,单片FPGA成本低于ASIC,随着产品量的增加,单片ASIC成本逐步降低;

在相同工艺条件下,FPGA功耗要大于ASIC。FPGA,尤其是基于占用大量硅面积的、每个单元六个晶体管的静态存储器(SRAM)的查寻表(LUT)和配置元件技术的FPGA,其功耗要比对等的ASIC大得多;

速度方面:FPGA内部是基于通用的结构,根据RTL设计选择内部布局布线,当然通用必然导致冗余。ASIC是根据设计需求,最优化cell逻辑资源,并且做到最优布局走线,降低走线延迟和CELL延时。

定制化的电路设计和工艺使用ASIC面积小于FPGA。

FPGA设计流程是先根据需求选择符合设计要求的FPGA芯片,然后按照下图流程设计(整的FPGA设计流程包括功能描述、电路设计与输入、功能仿真、综合优化、综合后仿真、实现与布局布线、时序仿真、板级仿真与验证、调试与加载配置)。

ASIC设计分为前端设计,后端设计,封装测试(ASIC的设计流程(数字芯片)包括:功能描述、模块划分、模块编码输入、模块级仿真验证、系统集成和系统仿真验证、综合、STA(静态时序分析)、形式验证。在ASIC设计过程中,往往要用到FPGA进行原型验证。FPGA验证是进行ASIC设计的重要环节,其后,还需要引入ASIC版本源码,插入IOPAD,DFT,功耗估计和进行其它后端流程。完成FPGA验证可以说就完成了ASIC整套流程的50~80%。)。

软件测试了解_第3张图片

两者的定位

FPGA和ASIC产品的使用要根据产品的定位和设计需要来选用,ASIC产品适用于设计规模特别大,如CPU、DSP或多层交换芯片等,或者是应用于技术非常成熟且利润率非常低的产品,如家用电器和其它消费类电器,亦或是大量应用的通用器件如RAM、PHY等。而FPGA产品适用于设计规模适中,产品要求快速占领市场,或产品需要灵活变动的特性设计等方面的产品,如PDH、2.5G以下SDH设备和大部分的接口转换芯片等。当然具体使用那种产品来设计还要设计者充分考虑自己的产品定位来决定。

两者在互相融合

最明显的莫过于处理器中开始集成FPGA,而可编程的ASIC也开始兴起。随着SoC成为主流,两者的边界也就不辣么明显了。

4.4 Testbench

Testbench是一种用任意语言编写的程序或模块,用于在模拟过程中执行和验证硬件模型的功能正确性。 Verilog 主要用于硬件建模(模拟),该语言包含各种资源,用于格式化,读取,存储,动态分配,比较和写入模拟数据,包括输入激励和输出结果。

Testbench 的主要组件如下:

  1. 时间表声明:指定所有延迟的时间单位
  2. Module:它定义了测试文件的top模块,测试文件的top模块通常没有输入输出端口,测试是直接监控寄存器和线网这些内部信号的活动
  3. 内部信号:它将驱动激励信号进入 UUT 并监控 UUT 的响应,信号驱动和监控
  4. UUT 实例化
  5. 激励生成:编写语句以创建激励和程序块
  6. 响应监控和比较:自我测试语句,能报告数值,错误和警告

(参考:Testbench编写技巧、FPGA中testbench的编写技巧、Testbench编写要点、如何编写testbench)

FPGA验证工程师职责:

1、负责搭建.维护FPGA验证平台;2、FPGARTL代码编写调试仿真;3、FPGA时序约束文件编写,综合实现;4、负责在FPGA验证平台上进行相关的调试和测试;5、FPGA验证相关文档的编写。

5. linux面试/shell脚本编程

Linux面试详解

Linux经典面试题及答案整理

常用的Linux命令(面试/工作必备)

Linux面试必备20个常用命令

70个经典的Shell脚本面试题与答案

你可能感兴趣的:(可用性测试,单片机,经验分享)