如何理解计算机专业学什么好系统软硬件的边界

拓扑超导体最激动人心的应用就是高能量子计算机

中国科学家基于铁基高温超导材料研究发现的新型一维拓扑边界态,有望为人类叩开高能量子计算机的大门。

近日,国际著名学术杂志《自然—材料》(Nature Materials)刊登了铁基高温超导材料研究领域的一项重要进展——新型一维拓扑边界态的发现。拓扑超导体最激动人心的应用就是高能量子计算机,它能在计算中发现错误,一旦出错就会在信息处理过程中产生抵抗。

上述研究成果由中国科学技术大学合肥微尺度物质科学国家实验室的王征飞教授和美国犹他大学刘锋教授、清华大学薛其坤院士及马旭村研究员、中科院物理所周兴江研究员合作获得。

超导和拓扑是固体材料领域最有趣的两个量子现象,二者纠缠形成的拓扑超导形态,在量子现象领域更是引人注目,因此,超导材料与拓扑材料也是近年来凝聚态物理研究的两大热点。拓扑超导态是物质的一种新状态,有别于传统的超导体,拓扑超导材料兼具超导材料和拓扑材料的特性,内部是超导态,而表面或边界则存在厚度约为1纳米的受拓扑保护的无能隙金属态。如果把一个拓扑超导体一分为二,其新表面又会自然出现一层厚度约1纳米的受拓扑保护的金属态。

量子计算最理想的粒子——马约拉纳费米子

与普通计算机通过二进制方式处理数据不同,量子计算机是一种基于量子物理机理处理数据的计算机。它采用次原子粒子“量子”来存储和处理信息。量子计算机的速度快到什么程度?学界有比喻称,如果现在的传统二进制计算机的速度是自行车,量子计算机的速度就好比飞机。

为何时至今日,人类还未能造成一台真正意义上的量子计算机?这是由于量子计算的粒子的“量子态”并不稳定,电磁干扰或物理干扰可以轻松打乱它们本应进行的计算。那么,就需要一种不受干扰的粒子。

最理想的粒子,是马约拉纳费米子。理论物理学家曾预言,拓扑超导材料在磁场下的涡旋中心会产生马约拉纳费米子。由于马约拉纳费米子的反粒子就是它本身,其状态非常稳定,不易被传统的电磁或物理干扰破坏,可以被用于定义量子计算中的量子比特。

量子比特的相干性是指电子向右自旋和正电子向左自旋的状态相关联,和传统计算机不同,量子计算机的运算时间由于量子比特间的相干性的存在而有限制,经过一定的时间后,量子比特间一旦遇到外界实体的观测,会失去相干性,量子相干性衰减即为“退相干”,如果退相干时间不够长,就无法完成计算。为了发挥量子计算的优势,硬件上需要保证量子比特的相干性,拓扑超导材料有助于解决传统量子比特的退相干问题,提高其存活时间,对于量子计算机领域的重要性不言而喻。

那么马约拉纳费米子跟拓扑边界态以及超导材料又有什么关系呢?具备拓扑以及超导这双重量子现象的新型超导材料,可以被认为是一种特殊的绝缘体,利用这一点,可以“哄骗”电子跑到这种材料的表面,将其转变为马拉约那费米子。

用物理学家L·安德鲁·雷的话来说,具备这两种特性的“超导体是产生和控制马拉约那费米子的理想育儿所。”

中国在高温超导领域是世界领跑者

如何设计寻找拓扑超导材料,一直是研究人员关注的焦点。自然界中很多材料都只是单一的超导或者拓扑绝缘体,超导和拓扑两种状态很难在同一种物质中共存。以往的研究思路是借助外延生长将拓扑材料放置在超导材料上或将超导材料放置在拓扑材料上,通过邻近效应实现拓扑超导体。但这种复合材料对于生长工艺的要求十分苛刻,阻碍了拓扑超导材料研究的发展。

在前述研究中,中国科学家以新型高温超导材料FeSe/SrTiO3为研究对象,结合理论计算、扫描隧道显微镜和角分辨光电子能谱,系统地研究了其反铁磁电子构型,在实空间观测到自旋—轨道耦合所打开的拓扑能隙中一种新型一维拓扑边界态的存在。

该工作有助于进一步理解FeSe/SrTiO3的高温超导机制,为探索单一材料高温拓扑超导体和马约拉纳费米子开辟了新途径。

中国在高温超导领域是世界领跑者。2013年,中科院物理研究所确定了铁基为新一类高温超导体,首次发现常压下临界温度高于40K(约零下233摄氏度)的超导电性,突破了麦克米兰极限温度。2015年8月,中科院强磁场中心曾研发出一种新型高质量单晶体,采用高温熔融法把碱土金属元素锶插入到典型的拓扑绝缘体材料硒化铋中,获得了高质量的拓扑超导单晶体。这种材料的超导性能高达91.5%,且在空气中十分稳定,在10特斯拉到35特斯拉磁场区间出现了周期性的量子振荡信号,证明其存在拓扑保护表面态。

由于其磁性因素,铁基化合物曾一度几乎被无数国际顶尖物理学家断言为探索高温超导体的禁区。2014年1月,以赵忠贤、陈仙辉、王楠林、闻海虎、方忠为代表的中国科学院物理研究所/北京凝聚态国家实验室和中国科学技术大学研究团队因为在“40K以上铁基高温超导体的发现及若干基本物理性质研究”方面的突出贡献获得了国家自然科学一等奖。在此之前,这一奖项已经连续3年空缺。

软件就是可以在计算机上运行的计算机程序,如操作系统Windows、办公软件Office、聊天QQ、手机游戏等。软件和我们的生活和工作之间的联系越来越密切。

软件测试的经典定义是:在规定的条件下对程序进行操作,以发现程序错误,衡量软件品质,并对其是否能满足设计要求进行评估的过程。

软件测试的现实定义是:软件测试是贯穿整个软件开发生命周期、对软件产品(包括阶段性产品)进行验证和确认的活动过程,其目的是尽快尽早地发现在软件产品中所存在的各种问题——与用户需求、预先定义的不一致性。

软件测试一般分为白盒测试和黑盒测试。

黑盒测试,软件测试的主要方法之一,也可以称为功能测试、数据驱动测试或基于规格说明的测试。测试应用程序的功能,而不是其内部结构或运作。测试者不需具备应用程序的代码、内部结构和编程语言的专门知识。测试者只需知道什么是系统应该做的事,即当键入一个特定的输入,可得到一定的输出,这是从用户的角度针对软件界面、功能及外部结构进行测试,而不考虑程序内部逻辑结构。测试用例是应用系统应该做的功能,照规范、规格或要求等设计。测试者选择有效输入和无效输入来验证是否正确的输出。此测试方法可适合大部分的软件测试,例如单元测试(unit

白盒测试(又称透明盒测试、结构测试等)是一个测试软件的方法,测试应用程序的内部结构或运作,而不是测试应用程序的功能(即黑盒测试)。在白箱测试时,以编程语言的角度来设计测试案例。测试者输入数据验证数据流在程序中的移动路径,并确定适当的输出,类似测试电路中的节点。

白箱测试可以应用于单元测试、集成测试和系统的软件测试流程,可测试在集成过程中每一单元之间的路径,或者主系统跟子系统中的测试。尽管这种测试的方法可以发现许多的错误或问题,它可能无法检测未使用部分的规范。

按照测试软件的各个功能划分进行有条理的测试,在功能测试部分要保证测试项覆盖所有功能和各种功能条件组合。

更详细的描述请参见“黑盒测试”。

对一个完整的软件以用户的角度来进行测试,系统测试和功能测试的区别是,系统测试利用的所有测试数据和测试的方法都要模拟成和用户的实际使用环境完全一样,测试的软件也是经过系统集成以后的完整软件系统,而不是在功能测试阶段利用的每个功能模块单独编译后生成的可执行程序。

对软件在各种特殊条件,特殊环境下能否正常运行和软件的性能进行测试。

特殊条件一般指的是软件规定的最大值,最小值,以及在超过最大,小值条件下的测试。

特殊环境一般指的是软件运行的机器处于高负荷,或是网络高负荷状态下的测试,根据软件的不同,特殊环境也有过不同。

性能测试是对软件性能的评价。简单的说,软件性能衡量的是软件具有的响应及时度能力。因此,性能测试是采用测试手段对软件的响应及时性进行评价的一种方式。根据软件的不同类型,性能测试的侧重点也不同。

压力测试,确立系统稳定性的一种测试方法,在软件工程、金融风险管理等领域应用比较普遍。通常在系统正常运作范围之外进行,以考察其功能极限和隐患。

压力测试与性能测试的区别

压力测试常常和性能测试相混淆。它们主要不同点是,压力测试要求进行超过规定性能指标的测试。例如一个网站设计容量是100个人同时点击,压力测试就要是采用120个同时点击的条件测试。

单元测试是对软件组成单元进行测试,其目的是检验软件基本组成单位的正确性,测试的对象是软件设计的最小单位---模块。单元测试一般由开发人员完成。

集成测试又称组装测试,是将程序模块采用适当的集成策略组装起来,对系统的接口及集成后的功能进行正确性检测的测试工作。其主要目的是检查软件单位之间的接口是否正确,集成测试的对象是已经经过单元测试的模块。

实践表明,有时模块虽然可以单独工作,但是并不能保证组装起来也可以同时工作。

系统测试主要包括功能测试、界面测试、可靠性测试、易用性测试、性能测试。 功能测试主要针对包括功能可用性、功能实现程度(功能流程&业务流程、数据处理&业务数据处理)方面测试。

回归测试是为了检测代码修改而引入的错误所进行的测试活动。回归测试是软件测试阶段的重要工作,有研究表明,回归测试带来的耗费占软件生命周期的1/3总费用以上。

与普通的测试不同,在回归测试过程开始的时候,测试者有一个完整的测试用例集可供使用,因此,如何根据代码的修改情况对已有测试用例集进行有效的复用是回归测试研究的重要方向,此外,回归测试的研究方向还涉及自动化工具,面向对象回归测试,测试用例优先级,回归测试用例补充生成等。

α测试通常是阶段性的开发完成后所开始进行,一直持续到进入Beta测试阶段前的阶段。α测试是一种验证测试,在模拟的环境中以模拟的数据来运行。

在这个阶段中,通常是在开发单位由开发人员与测试的测试人员,以模拟或实际操作性的方式进行验证测试。

在系统测试中通常先进行α测试以验证信息系统符合用户以及设计需求所期望的功能。当α阶段完成后,开发过程进入到β阶段;由公众参与的测试的阶段。β测试可称为确认测试,在一个真实的环境中以实际的数据来运行测试,以确认性能、系统运行有效率,系统撤消与备份作业正常,通过测试让信息系统日后可以

Beta测试和黑盒测试的区别

对Alpha和Beta测试常见的一个认识误区是“Beta测试=黑盒测试”。实际上,Alpha和Beta测试对应在软件产品发布之前的Alpha和Beta阶段,而白盒、黑盒和灰盒测试技术是从技术和方法层面对测试的描述,不应该将这两部分概念混淆。

验收测试是系统部署到用户环境后,用户运行系统,考察系统是否满足用户需求的过程。验收测试是用户主导的,用户可能聘请专家帮助验收测试。

根据测试计划和测试用例进行测试,在测试过程中记录测试结果和提交发现的Bug。下班前将当天的测试情况汇报给测试组长或测试经理。

2。2.1Bug基本概念

BUG:(小错误,缺陷,不足,过失 …) 一个计算机bug指在计算机程序中存在的一个错误(error)、缺陷(flaw)、疏忽(mistake)或者故障(fault),这些bug使程序无法正确的运行。Bug产生于程序的源代码或者程序设计阶段的疏忽或者错误。

Defect:(缺陷) 在软件工程(Software Engineering)中,软件与它的需求(requirements)不一致,常常指软件无法正确完成需求所要求的功能,也称之为bug。

2)BUG分级-严重性

我们一般把发现的错误(Bug)/缺陷(Defect)按严重性分为4类:

2。3编写功能测试报告

测试报告是测试人员在测试过程中用于反映测试状况的文档。其实测试报告的内容基本都是模板的那些,只是在实际测试过程中,如何去整理内容结构,使得报告的通常阅读者:开发人员、测试经理、产品经理、项目负责人能够一目了然地查看想要了解的内容才是测试报告最值得注意的地方。

产品要想有广阔的市场,得需要切实了解用户的需求及感受,同理测试报告要想能够让阅读者能够满意,也需要能将质量情况条理性地列出。通常来说,开发人员往往希望能从报告中了解缺陷的情况,而测试经理还关心用例的执行情况及覆盖率、项目责任人则最关心还有多少问题,此次版本是否测试通过。因此测试报告根据内容的侧重点,分为『版本测试报告』和『总结测试报告』,目的也是希望不将所有内容列举在一个报告中,造成内容臃肿繁杂。

总体来说,功能测试报告的编写就是要做到简约而不简单。

ü 主要反映开发人员提交的测试版本的质量状况。

ü 测试用例设计与执行、缺陷概况及问题概要是版本测试报告中的主要内容。

ü 测试人员在每个轮次测试结束时编写提交。

其内容结构和每个章节的编写内容说明如下:

本次测试的背景及主要内容

测试人员、本次测试开始和截止日期、花费工作日

实际情况的详细列举,过低的配置、软件版本的不匹配、网络拓扑的错误都会让提交的缺陷缺乏说服力,也会让开发人员对于某些缺陷是否由于环境因素导致而产生疑惑。

本次测试的功能点、各功能点对应的测试用例设计、测试用到的测试工具

用例执行总数、通过用例数、未通过用例数、阻塞用例数

测试执行率=(已执行的用例数)/用例总数

测试用例效率=发现的缺陷总数/测试用例的数量

新建bug数、修复bug数、未修复bug数、bug总数

遗留问题、拒绝问题、挂起问题、长期验证问题、待评估问题

测试项目的启动、退出时间

测试项目的CPU占用率初始值、峰值(如果项目启动会有多个进程,则分多个进程进行统计)

测试项目的内存占用初始值、峰值

测试结论不论仅仅只是测试通过或不通过,应该使用详细的数据来支持测试结论,需要列举的数据有:

插入测试用例的详细执行结果文档

说明资源占用监控的场景,详细列举各场景的监控时长、监控内容,场景操作

ü 主要偏重于各已测试版本的缺陷变化分析,风险预估。

ü 各测试版本质量情况概况统计、缺陷分布统计、风险分析是总结测试报告中的主要内容。

ü 测试人员在项目发布上线前编写提交。

其内容结构和每个章节的编写内容进行说明如下:

本次测试的背景及主要内容

测试人员、第一轮测试的开始日期和最后一轮测试的截止日期、总共花费工作日统计

实际情况的详细列举,过低的配置、软件版本的不匹配、网络拓扑的错误都会让提交的缺陷缺乏说服力,也会让开发人员对于某些缺陷是否由于环境因素导致而产生疑惑。

各测试版本的计划提交日期、实际提交日期、测试类型(回归或全量)、测试耗时、备注(被打回或提交补丁次数)

各测试版本的新建bug数、修复bug数、遗留bug数,表格统计、线形图或饼状图辅助表示

缺陷的总体分布情况,以线形图或饼状图辅助表示

? 根据功能模块进行划分

? 根据严重、较严重、普通、轻微级别进行划分

打开状态bug、长期验证bug、用户体验问题

测试项目的启动、退出时间

测试项目的CPU占用率初始值、峰值(如果项目启动会有多个进程,则分多个进程进行统计)

测试项目的内存占用初始值、峰值

测试进度、人员安排导致的风险

测试内容考虑范围之外导致的风险

测试环境不全面导致的风险

软件测试阶段报告编写指南

因为已经带领和训练测试团队多年,所以按惯例我总有些东西确定需要传达给测试新手。不管你是一个测试新手还是一个经验丰富的测试专家,都有不少有益的东西需要牢记在心。

1、你是一个检查者,你不需要为质量负责

很多测试人员误入歧途,不明白他们是评测产品的而不是控制产品的。这两者之间有着天壤之别。例如,一个测试团队花费好几周时间测试并发现很多缺陷,只是为了看着管理层决定发布一个有已知严重缺陷的产品。测试团队经常会感到士气受挫,置疑他们测试的目的。

我询问团队中的成员他们是否被支付薪水了,通常得到的回答都是“是”。我又询问他们是否尽力去做工作了,再一次,通常得到的回答都是“是”。我于是告诉他们,“你们做了你们的工作。你们尽力测试,发现了缺陷并进行了上报。那么现在可以回家休息了。实际上,作为一名测试人员唯一失败的地方是不上报一个已知的缺陷。”

这不会提高士气,但却有助于事情向正确的方向发展,特别是能让人不用每天晚上都在家接着办公。

很多测试人员,包括我,当我们刚开始测试工作时,似乎会觉得自己对我们所测试的系统应用的质量负责。尽管这个工作的出发点是让人钦佩的,可实际上我们测试人员对于产品的质量基本没有控制能力。也是由于这个原因,测试人员不为质量负责。现在问题是管理层并不总是能看到这种区别。所以经常看见管理层提出类似于“我们付钱给这些人不是为了获得高质量的软件吗?”的问题。

每一个缺陷都是深入了解和提高的机会。我们可能只有一次机会观察到一个缺陷,所以我总是告诉测试人员始终保持高度注意力,不要为测试的乏味所折磨。

缺陷信息可能是可获取的项目数据中最有效的资源之一。但是这都取决于我们能多好的捕捉和传达我们所发现的缺陷的相关信息。

每个缺陷都会花费整个组织的金钱。如果我们不能从中更进一步了解产品,我们会浪费大量时间和金钱。当我们把一个错误转换成一次深入了解的机会时杠杆作用就出现了。让我们面对它――有些教训只能通过经历来学习的。

由于一个缺陷而责备谁不会有任何好的作用。责备只会让士气低落、沟通中断。这就像不断鞭打一匹死马希望它能活过来一样。

3、你报告第一个问题之前一切都是美好的

这就是一个测试人员所面对的现实。你可以计划测试,获取所需要的资源,看起来所有人都站在你这边。可当你报告第一个问题之后,事情就开始变得紧张了。

出现这种态度上的突然变化的原因是现在你在批评某些人的工作了。自尊心使得自我收到伤害,关系变得紧张。有些情况下自尊心是值得期盼的,只要知道当你开始发现问题的时候态度有可能变化就可以了。

我经常建议测试人员做的一件事是读一读一些你过去写的缺陷报告,假设自己是接收缺陷报告的人。你会发现自己需要更老练一些。写一个没有任何挖苦语句的缺陷报告可能没什么乐趣,但它的确有助于和开发人员之间保持一个好的关系。

4、只能测试你能观察的

你可能总想测试一些真正有创造性的用例,但如果你没有办法观察到结果,那有什么意义?尽管有些应用让你能观察到很多,但仍然有你没办法接近的,例如结构、隐藏的对象、后台进程等。

5、别忘记你是怎样到一个地方的

我不是在谈论知道为什么你走进一个房间,而是在测试时执行的步骤。对于测试新手常见的是发现了一个重大的缺陷,但却无法复现它以便定位解决。这样你只会觉得不舒服,不知道自己到底是真发现了一个缺陷,还是说仅仅是错误的使用了应用。

你能用来跟踪你的测试步骤的方法有测试脚本、测试记录、敲键记录器如Spector和屏幕视频捕捉工具如Hypercam。

6、标准和流程是你的朋友

尽管标准和流程让一些人觉得受限,但它们为你的工作提供了有价值的指导。不要拒绝标准因为它们是详细的、具体的。因此用它们指导自己更快、更一致的完成自己的工作。

7、没有足够的时间用于测试

几乎每一个测试人员都抱怨没有足够的时间用于测试,但实际情况是测试任何东西到完整的程度都是不可能有充足时间的。当你充分考虑软件的特性如可用性、安全性、兼容性、互操作性等时这一点尤其正确。

不要再抱怨缺少时间,学会根据风险来进行优先级排序,把注意力都放在对管理层很重要的应用目标上。有时候我们测试的内容超出了我们需要测试的,因为我们的目标偏离了产品的价值。

8、你不可能发现所有的缺陷

如果你测试的东西后来有缺陷被发现,不要变得气馁。你可能已经做了非常全面的工作,获得了高水平的缺陷移除,但100%都是不可能的目标。

9、保持幽默感和对前景充满信心

经常微笑、保持健康可能是你最好的生存方式。如果你正处在困难条件下,请相信,这一切都将过去。

10、争取做到最好而不是完美

测试新手经常会陷入追求完美的过程中,认为100%的正确才是标准。我曾经也是受害者之一,但要为自己辩护的是,我以前深受80年代后期类似于“99.9%还不够好”的TQM帖子和文章的影响。

追求完美的问题在于它会让测试进程变慢,将担心引入你所做的一切,使得你对别人更挑剔,而且通常会让你的朋友和家人感到失望。

当然,没人愿意犯错误,但他们稍不注意就出现了。想不犯错误就是否认现实。争取做到最好是一种好的习惯,表明你对工作的态度和投入程度。如果你想努力做到最好,你就会往前再多走一点。

根据我的观察,大多数人看到错误或者经历失误时都是很宽容的。人们最关心的是你对待问题的反应。

11、开发人员不是敌人

需要整个项目团队的努力才能递交高质量的产品。有时候似乎开发人员不太关心质量,这个时候事情背后可能存在隐情。这时候你需要更好的和开发人员合作而不是反对他们。要始终牢记良好的交流是一个项目成功的关键因素。当你和开发人员站到对立面时,交流就停止了,你测试所需的很多信息也无法获取了。

12、建立和维护一个私人的交际网

你的私人工作关系是一个很重要的资产。无论时当你有工作时还是当你没工作时他们都是一个很好的支持系统。找一个好的指导者,而当你学到足够的东西时成为别人的指导者。

13、持续锻炼自己的技能

你的技能把你和别人区分开。始终通过参加专业会议、获取认证、阅读专业资料等来不断学习。我给自己制定的目标是每周至少读一本和个人发展以及职业发展相关的书(测试、领导艺术、商业、IT等)。

一个个人发展方面的专家说过如果你每天在任何特定的主题上花费30分钟进行阅读,五年之内你肯定能成为这个主题方面的专家。这一点对我是起作用的――你也可以试试。

另一种让自己始终内行并建立网络的好的方式是活跃在一些QA或者测试论坛上。

14、当前进变得困难,懒惰就需要创造力了

当我第一次成为一个测试团队负责人时,我用这句话做了一个字条挂在我的桌上。它不断提醒我把创造力作为我解决问题的一个杠杆。

学着从一个新的有创造性的方式来看待问题。你可能有一个好的测试计划,但你如何应付各种变化呢?弹性是一个优秀的问题解决负责人的关键特性。

15、简单并不总是很容易

我们测试中做的很多工作看起来都很简单。但是,挑战在于保持努力的连贯性。

有些解决问题的方式刚开始看起来很简单,但不要由于它简单和明显就丢弃任何一种想法。同样,不要低估实现一个简单想法所需要付出的努力。

一些看过我和William E.Perry合著的书“Surviving the Top Ten Challenges of Software Testing”评论说这些挑战都很简单且很容易解决。这就让我奇怪为什么人们还在年复一年的提出“人的问题”。我认为在大脑中产生想法比实际实现出来要简单的多。

智慧比知识更重要。你可能已经学习了大量测试技术,但如果你没有足够的智慧判断什么时候采用它们,没有从整体上理解它们,你应用它们的能力将受到很大限制。对任何都有涉猎的你存在的一个问题是“你不知道什么你不知道”。智慧帮助你明白你需要知道哪些东西才能成功。

4。1测试人员面试时常见问题及问题背后的考核内容分析

1)你最近3-5年的职业规划是什么?

重点考察测试人员的职业发展方向是否与当前职位招聘相符? 从其中可以侧面看出来其员工稳定性。

2)一个项目测试结束,有没什么经验总结?如果有,具体是如何开展的?

重点考察测试人员对自己能力提升方面,有没有提高总结的地方,从项目中吸取的经验与教训。从中可以看出来,测试人员是否属行自我驱动型人才!

3)为什么会选择做测试这份工作?

重点考察测试人员对待测试工作的态度及是否有发展潜力?面试过很多测试人员,经常见到的回答,自己是女孩子,做测试细心,各位你认为这样回答你会满意吗?其码不是我想要的答案!

4)请说出一个你以前参与项目,对你测试经验提升很高的,具体是哪方面?

重点考察测试人员在以往的测试工作中能力提升方面,有哪些?然后重点询问此部分内容,是否测试经验增长,具备一定的深度?

5)通常做测试时会碰到,提交的某个bug开发人员不认同你的观点?这时你如何办?

重点考察测试人员是否坚持自已的价值观?是否具备协调沟通处理问题能力?

6)有没有看过什么测试书,具体是哪本?带给你的收获是?

重点考察测试人员是否为测试这个职业肯付出多少?从中也可以看出这个测试人员是否上进心?是否有求知心?我的定义是如果哪个应聘者来面试时,都没系统的看过一本测试书籍,基本上不会录取!

7)如果安排一项测试技术研究工作,你如何应对?

重点考察测试人员是否具体测试技术专研精神?是否喜欢接受挑战?是否属于以后培养骨干对象?

8)某个项目上线后,出现问题,恰巧你是负责的,你如何应对这突如其来的事件?

重点考察测试人员应对问题的压力,责任感,及如何处理项目上线后的技术问题及应对解决能力。

9)周末放假有什么业余爱好?

重点考察面试测试人员性格特质,测试工作本身就是复杂且富有技术性的工作,而且不同的职位所需要的测试人员性格品质差异性很大。

10)公司产品,具体应用什么编程技术?具体的架构是?具体的应用场景有哪些?

重点考察测试人员对以往的工作所负责的产品测试,是否具备一定的深度!通常我都是让面试者自己讲述或是在纸上画出具体系统架构的图!

11)公司测试团队的规模如何,具体你所处的角色是什么?

重点考察测试人员在以往的公司测试团队中,具体的工作职责,评判其工作是否与当要求职位是否符合?是否有哪些优缺点?

12)特定测试技术考察:性能测试,安全性测试,自动化测试等以前有开展过没?如果有,具体是如何实施的?

重点考察测试人员技术能力,是否在各方面都有所涉及?或是在各方面技术上都有一定深度?当然从中也能看出一个测试人员是否属于是技术路线发展方向!

13)你自己所期待加入的测试团队是什么样的?

重点考察测试人员在以前测试团队中有哪些不协调?当然最重要的是也能提供给你一些信息,这个员工以后如何更好的管理与沟通!

在技术方向上面,通常是初级测试工程师,中级测试工程师,高级测试工程师,资深测试工程师,专家等方向发展;当然像国外技术分工比较细如:通常有白盒测试,黑盒测试,自动化测试,性能测试,安全测试,易用性测试等。

在管理方向上面,通常是测试组长,测试主管,测试经理,测试总监等方向发展。

在业务领域则取决于各测试人员所处行业,通常像金融,银行,证券,ERP类的,通常有初级业务测试,中级业务测试,高级业务测试等。

配置管理、质量保证(QA)等

今年夏天,雷锋网将在深圳举办“全球人工智能与机器人创新大会”(GAIR),在本次大会上,我们将发布“人工智能与机器人Top25创新企业榜“,慧眼科技是我们重点关注的公司之一。今天,我们邀请到慧眼科技研发总监李汉曦,为我们带来深度学习与计算机视觉方面的内容分享。雷锋网雷锋网(公众号:雷锋网)

嘉宾介绍:李汉曦,慧眼科技研发总监,澳大利亚国立大学博士;曾任澳大利亚国家信息通信公司(NICTA)任高级研究员;人脸识别,物体检测,物体跟踪、深度学习方面的专家,在TPAMI,TIP, TNNLS和Pattern Recognition等权威期刊,以及CVPR,ECCV,BMVC, ACCV等领域内重要会议发表过有影响力的论文;现为澳大利亚格里菲斯大学客座研究员,江西师范大学特聘教授。

人工智能是人类一个非常美好的梦想,跟星际漫游和长生不老一样。我们想制造出一种机器,使得它跟人一样具有一定的对外界事物感知能力,比如看见世界。

在上世纪50年代,数学家图灵提出判断机器是否具有人工智能的标准:图灵测试。即把机器放在一个房间,人类测试员在另一个房间,人跟机器聊天,测试员事先不知道另一房间里是人还是机器 。经过聊天,如果测试员不能确定跟他聊天的是人还是机器的话,那么图灵测试就通过了,也就是说这个机器具有与人一样的感知能力。

但是从图灵测试提出来开始到本世纪初,50多年时间有无数科学家提出很多机器学习的算法,试图让计算机具有与人一样的智力水平,但直到2006年深度学习算法的成功,才带来了一丝解决的希望。

深度学习在很多学术领域,比非深度学习算法往往有20-30%成绩的提高。很多大公司也逐渐开始出手投资这种算法,并成立自己的深度学习团队,其中投入最大的就是谷歌,2008年6月披露了谷歌脑项目。2014年1月谷歌收购DeepMind,然后2016年3月其开发的Alphago算法在围棋挑战赛中,战胜了韩国九段棋手李世石,证明深度学习设计出的算法可以战胜这个世界上最强的选手。

在硬件方面,Nvidia最开始做显示芯片,但从2006及2007年开始主推用GPU芯片进行通用计算,它特别适合深度学习中大量简单重复的计算量。目前很多人选择Nvidia的CUDA工具包进行深度学习软件的开发。

微软从2012年开始,利用深度学习进行机器翻译和中文语音合成工作,其人工智能小娜背后就是一套自然语言处理和语音识别的数据算法。 

百度在2013年宣布成立百度研究院,其中最重要的就是百度深度学习研究所,当时招募了著名科学家余凯博士。不过后来余凯离开百度,创立了另一家从事深度学习算法开发的公司地平线。

Facebook和Twitter也都各自进行了深度学习研究,其中前者携手纽约大学教授Yann Lecun,建立了自己的深度学习算法实验室;2015年10月,Facebook宣布开源其深度学习算法框架,即Torch框架。Twitter在2014年7月收购了Madbits,为用户提供高精度的图像检索服务。

前深度学习时代的计算机视觉

互联网巨头看重深度学习当然不是为了学术,主要是它能带来巨大的市场。那为什么在深度学习出来之前,传统算法为什么没有达到深度学习的精度?

在深度学习算法出来之前,对于视觉算法来说,大致可以分为以下5个步骤:特征感知,图像预处理,特征提取,特征筛选,推理预测与识别。早期的机器学习中,占优势的统计机器学习群体中,对特征是不大关心的。

我认为,计算机视觉可以说是机器学习在视觉领域的应用,所以计算机视觉在采用这些机器学习方法的时候,不得不自己设计前面4个部分。 

但对任何人来说这都是一个比较难的任务。传统的计算机识别方法把特征提取和分类器设计分开来做,然后在应用时再合在一起,比如如果输入是一个摩托车图像的话,首先要有一个特征表达或者特征提取的过程,然后把表达出来的特征放到学习算法中进行分类的学习。

过去20年中出现了不少优秀的特征算子,比如最著名的SIFT算子,即所谓的对尺度旋转保持不变的算子。它被广泛地应用在图像比对,特别是所谓的structure from motion这些应用中,有一些成功的应用例子。另一个是HoG算子,它可以提取物体,比较鲁棒的物体边缘,在物体检测中扮演着重要的角色。

这些算子还包括Textons,Spin image,RIFT和GLOH,都是在深度学习诞生之前或者深度学习真正的流行起来之前,占领视觉算法的主流。

这些特征和一些特定的分类器组合取得了一些成功或半成功的例子,基本达到了商业化的要求但还没有完全商业化。

  • 一是八九十年代的指纹识别算法,它已经非常成熟,一般是在指纹的图案上面去寻找一些关键点,寻找具有特殊几何特征的点,然后把两个指纹的关键点进行比对,判断是否匹配。

  • 然后是2001年基于Haar的人脸检测算法,在当时的硬件条件下已经能够达到实时人脸检测,我们现在所有手机相机里的人脸检测,都是基于它或者它的变种。

  • 第三个是基于HoG特征的物体检测,它和所对应的SVM分类器组合起来的就是著名的DPM算法。DPM算法在物体检测上超过了所有的算法,取得了比较不错的成绩。

但这种成功例子太少了,因为手工设计特征需要大量的经验,需要你对这个领域和数据特别了解,然后设计出来特征还需要大量的调试工作。说白了就是需要一点运气。

另一个难点在于,你不只需要手工设计特征,还要在此基础上有一个比较合适的分类器算法。同时设计特征然后选择一个分类器,这两者合并达到最优的效果,几乎是不可能完成的任务。

如果不手动设计特征,不挑选分类器,有没有别的方案呢?能不能同时学习特征和分类器?即输入某一个模型的时候,输入只是图片,输出就是它自己的标签。比如输入一个明星的头像,出来的标签就是一个50维的向量(如果要在50个人里识别的话),其中对应明星的向量是1,其他的位置是0。

这种设定符合人类脑科学的研究成果。

1981年诺贝尔医学生理学奖颁发给了David Hubel,一位神经生物学家。他的主要研究成果是发现了视觉系统信息处理机制,证明大脑的可视皮层是分级的。他的贡献主要有两个,一是他认为人的视觉功能一个是抽象,一个是迭代。抽象就是把非常具体的形象的元素,即原始的光线像素等信息,抽象出来形成有意义的概念。这些有意义的概念又会往上迭代,变成更加抽象,人可以感知到的抽象概念。

像素是没有抽象意义的,但人脑可以把这些像素连接成边缘,边缘相对像素来说就变成了比较抽象的概念;边缘进而形成球形,球形然后到气球,又是一个抽象的过程,大脑最终就知道看到的是一个气球。

模拟人脑识别人脸,也是抽象迭代的过程,从最开始的像素到第二层的边缘,再到人脸的部分,然后到整张人脸,是一个抽象迭代的过程。

再比如看到图片中的摩托车,我们可能在脑子里就几微秒的时间,但是经过了大量的神经元抽象迭代。对计算机来说最开始看到的根本也不是摩托车,而是RGB图像三个通道上不同的数字。

所谓的特征或者视觉特征,就是把这些数值给综合起来用统计或非统计的形式,把摩托车的部件或者整辆摩托车表现出来。深度学习的流行之前,大部分的设计图像特征就是基于此,即把一个区域内的像素级别的信息综合表现出来,利于后面的分类学习。

如果要完全模拟人脑,我们也要模拟抽象和递归迭代的过程,把信息从最细琐的像素级别,抽象到“种类”的概念,让人能够接受。

计算机视觉里经常使卷积神经网络,即CNN,是一种对人脑比较精准的模拟。

什么是卷积?卷积就是两个函数之间的相互关系,然后得出一个新的值,他是在连续空间做积分计算,然后在离散空间内求和的过程。实际上在计算机视觉里面,可以把卷积当做一个抽象的过程,就是把小区域内的信息统计抽象出来。

比如,对于一张爱因斯坦的照片,我可以学习n个不同的卷积和函数,然后对这个区域进行统计。可以用不同的方法统计,比如着重统计中央,也可以着重统计周围,这就导致统计的和函数的种类多种多样,为了达到可以同时学习多个统计的累积和。

上图中是,如何从输入图像怎么到最后的卷积,生成的响应map。首先用学习好的卷积和对图像进行扫描,然后每一个卷积和会生成一个扫描的响应图,我们叫response map,或者叫feature map。如果有多个卷积和,就有多个feature map。也就说从一个最开始的输入图像(RGB三个通道)可以得到256个通道的feature map,因为有256个卷积和,每个卷积和代表一种统计抽象的方式。

在卷积神经网络中,除了卷积层,还有一种叫池化的操作。池化操作在统计上的概念更明确,就是一个对一个小区域内求平均值或者求最大值的统计操作。

带来的结果是,如果之前我输入有两个通道的,或者256通道的卷积的响应feature map,每一个feature map都经过一个求最大的一个池化层,会得到一个比原来feature map更小的256的feature map。

在上面这个例子里,池化层对每一个2X2的区域求最大值,然后把最大值赋给生成的feature map的对应位置。如果输入图像是100×100的话,那输出图像就会变成50×50,feature map变成了一半。同时保留的信息是原来2X2区域里面最大的信息。

操作的实例:LeNet网络

Le顾名思义就是指人工智能领域的大牛Lecun。这个网络是深度学习网络的最初原型,因为之前的网络都比较浅,它较深的。LeNet在98年就发明出来了,当时Lecun在AT&T的实验室,他用这一网络进行字母识别,达到了非常好的效果。

怎么构成呢?输入图像是32×32的灰度图,第一层经过了一组卷积和,生成了6个28X28的feature map,然后经过一个池化层,得到得到6个14X14的feature map,然后再经过一个卷积层,生成了16个10X10的卷积层,再经过池化层生成16个5×5的feature map。

从最后16个5X5的feature map开始,经过了3个全连接层,达到最后的输出,输出就是标签空间的输出。由于设计的是只要对0到9进行识别,所以输出空间是10,如果要对10个数字再加上26个大小字母进行识别的话,输出空间就是62。62维向量里,如果某一个维度上的值最大,它对应的那个字母和数字就是就是预测结果。

压在骆驼身上的最后一根稻草

从98年到本世纪初,深度学习兴盛起来用了15年,但当时成果泛善可陈,一度被边缘化。到2012年,深度学习算法在部分领域取得不错的成绩,而压在骆驼身上最后一根稻草就是AlexNet。

AlexNet由多伦多大学几个科学家开发,在ImageNet比赛上做到了非常好的效果。当时AlexNet识别效果超过了所有浅层的方法。此后,大家认识到深度学习的时代终于来了,并有人用它做其它的应用,同时也有些人开始开发新的网络结构。

其实AlexNet的结构也很简单,只是LeNet的放大版。输入是一个224X224的图片,是经过了若干个卷积层,若干个池化层,最后连接了两个全连接层,达到了最后的标签空间。

去年,有些人研究出来怎么样可视化深度学习出来的特征。那么,AlexNet学习出的特征是什么样子?在第一层,都是一些填充的块状物和边界等特征;中间的层开始学习一些纹理特征;更高接近分类器的层级,则可以明显看到的物体形状的特征。

最后的一层,即分类层,完全是物体的不同的姿态,根据不同的物体展现出不同姿态的特征了。

可以说,不论是对人脸,车辆,大象或椅子进行识别,最开始学到的东西都是边缘,继而就是物体的部分,然后在更高层层级才能抽象到物体的整体。整个卷积神经网络在模拟人的抽象和迭代的过程。

为什么时隔20年卷土重来?

我们不禁要问:似乎卷积神经网络设计也不是很复杂,98年就已经有一个比较像样的雏形了。自由换算法和理论证明也没有太多进展。那为什么时隔20年,卷积神经网络才能卷土重来,占领主流?

这一问题与卷积神经网络本身的技术关系不太大,我个人认为与其他一些客观因素有关。

  • 首先,卷积神经网络的深度太浅的话,识别能力往往不如一般的浅层模型,比如SVM或者boosting。但如果做得很深,就需要大量数据进行训练,否则机器学习中的过拟合将不可避免。而2006及2007年开始,正好是互联网开始大量产生各种各样的图片数据的时候。

  • 另外一个条件是运算能力。卷积神经网络对计算机的运算要求比较高,需要大量重复可并行化的计算,在当时CPU只有单核且运算能力比较低的情况下,不可能进行个很深的卷积神经网络的训练。随着GPU计算能力的增长,卷积神经网络结合大数据的训练才成为可能。 

  • 最后一点就是人和。卷积神经网络有一批一直在坚持的科学家(如Lecun)才没有被沉默,才没有被海量的浅层方法淹没。然后最后终于看到卷积神经网络占领主流的曙光。

深度学习在视觉上的应用

计算机视觉中比较成功的深度学习的应用,包括人脸识别,图像问答,物体检测,物体跟踪

这里说人脸识别中的人脸比对,即得到一张人脸,与数据库里的人脸进行比对;或同时给两张人脸,判断是不是同一个人。

这方面比较超前的是汤晓鸥教授,他们提出的DeepID算法在LWF上做得比较好。他们也是用卷积神经网络,但在做比对时,两张人脸分别提取了不同位置特征,然后再进行互相比对,得到最后的比对结果。最新的DeepID-3算法,在LWF达到了99.53%准确度,与肉眼识别结果相差无几。

这是2014年左右兴起的课题,即给张图片同时问个问题,然后让计算机回答。比如有一个办公室靠海的图片,然后问“桌子后面有什么”,神经网络输出应该是“椅子和窗户”。

这一应用引入了LSTM网络,这是一个专门设计出来具有一定记忆能力的神经单元。特点是,会把某一个时刻的输出当作下一个时刻的输入。可以认为它比较适合语言等,有时间序列关系的场景。因为我们在读一篇文章和句子的时候,对句子后面的理解是基于前面对词语的记忆。

图像问答问题是基于卷积神经网络和LSTM单元的结合,来实现图像问答。LSTM输出就应该是想要的答案,而输入的就是上一个时刻的输入,以及图像的特征,及问句的每个词语。

深度学习在物体检测方面也取得了非常好的成果。2014年的Region CNN算法,基本思想是首先用一个非深度的方法,在图像中提取可能是物体的图形块,然后深度学习算法根据这些图像块,判断属性和一个具体物体的位置。

为什么要用非深度的方法先提取可能的图像块?因为在做物体检测的时候,如果你用扫描窗的方法进行物体监测,要考虑到扫描窗大小的不一样,长宽比和位置不一样,如果每一个图像块都要过一遍深度网络的话,这种时间是你无法接受的。

所以用了一个折中的方法,叫Selective Search。先把完全不可能是物体的图像块去除,只剩2000左右的图像块放到深度网络里面判断。那么取得的成绩是AP是58.5,比以往几乎翻了一倍。有一点不尽如人意的是,region CNN的速度非常慢,需要10到45秒处理一张图片。

而且我在去年NIPS上,我们看到的有Faster R-CNN方法,一个超级加速版R-CNN方法。它的速度达到了每秒七帧,即一秒钟可以处理七张图片。技巧在于,不是用图像块来判断是物体还是背景,而把整张图像一起扔进深度网络里,让深度网络自行判断哪里有物体,物体的方块在哪里,种类是什么?

经过深度网络运算的次数从原来的2000次降到一次,速度大大提高了。

Faster R-CNN提出了让深度学习自己生成可能的物体块,再用同样深度网络来判断物体块是否是背景?同时进行分类,还要把边界和给估计出来。

Faster R-CNN可以做到又快又好,在VOC2007上检测AP达到73.2,速度也提高了两三百倍。

去年FACEBOOK提出来的YOLO网络,也是进行物体检测,最快达到每秒钟155帧,达到了完全实时。它让一整张图像进入到神经网络,让神经网络自己判断这物体可能在哪里,可能是什么。但它缩减了可能图像块的个数,从原来Faster R-CNN的2000多个缩减缩减到了98个。

同时取消了Faster R-CNN里面的RPN结构,代替Selective Search结构。YOLO里面没有RPN这一步,而是直接预测物体的种类和位置。

YOLO的代价就是精度下降,在155帧的速度下精度只有52.7,45帧每秒时的精度是63.4。

它是YOLO的超级改进版,吸取了YOLO的精度下降的教训,同时保留速度快的特点。它能达到58帧每秒,精度有72.1。速度超过Faster R-CNN 有8倍,但达到类似的精度。

所谓跟踪,就是在视频里面第一帧时锁定感兴趣的物体,让计算机跟着走,不管怎么旋转晃动,甚至躲在树丛后面也要跟踪。

深度学习对跟踪问题有很显著的效果。DeepTrack算法是我在澳大利亚信息科技研究院时和同事提出的,是第一在线用深度学习进行跟踪的文章,当时超过了其它所有的浅层算法。

今年有越来越多深度学习跟踪算法提出。去年十二月ICCV 2015上面,马超提出的Hierarchical Convolutional Feature算法,在数据上达到最新的记录。它不是在线更新一个深度学习网络,而是用一个大网络进行预训练,然后让大网络知道什么是物体什么不是物体。

将大网络放在跟踪视频上面,然后再分析网络在视频上产生的不同特征,用比较成熟的浅层跟踪算法来进行跟踪,这样利用了深度学习特征学习比较好的好处,同时又利用了浅层方法速度较快的优点。效果是每秒钟10帧,同时精度破了记录。

最新的跟踪成果是基于Hierarchical Convolutional Feature,由一个韩国的科研组提出的MDnet。它集合了前面两种深度算法的集大成,首先离线的时候有学习,学习的不是一般的物体检测,也不是ImageNet,学习的是跟踪视频,然后在学习视频结束后,在真正在使用网络的时候更新网络的一部分。这样既在离线的时候得到了大量的训练,在线的时候又能够很灵活改变自己的网络。

基于嵌入式系统的深度学习

回到ADAS问题(慧眼科技的主业),它完全可以用深度学习算法,但对硬件平台有比较高的要求。在汽车上不太可能把一台电脑放上去,因为功率是个问题,很难被市场所接受。

现在的深度学习计算主要是在云端进行,前端拍摄照片,传给后端的云平台处理。但对于ADAS而言,无法接受长时间的数据传输的,或许发生事故后,云端的数据还没传回来。

那是否可以考虑NVIDIA推出的嵌入式平台?NVIDIA推出的嵌入式平台,其运算能力远远强过了所有主流的嵌入式平台,运算能力接近主流的顶级CPU,如台式机的i7。那么慧眼科技在做工作就是要使得深度学习算法,在嵌入式平台有限的资源情况下能够达到实时效果,而且精度几乎没有减少。

具体做法是,首先对网络进行缩减,可能是对网络的结构缩减,由于识别场景不同,也要进行相应的功能性缩减;另外要用最快的深度检测算法,结合最快的深度跟踪算法,同时自己研发出一些场景分析算法。三者结合在一起,目的是减少运算量,减少检测空间的大小。在这种情况下,在有限资源上实现了使用深度学习算法,但精度减少的非常少。

今年7月,雷锋网将在深圳举办“全球人工智能与机器人创新大会”(简称:GAIR)。想了解下,您对人工智能的未来趋势怎么看?

汉曦:我觉得未来人工智能的方向应该是机器服务人,机器辅助人。人始终是最后决策者。这在技术上和伦理上更合理。 

雷锋网原创文章,未经授权禁止转载。详情见。

我要回帖

更多关于 计算机专业学什么好 的文章

 

随机推荐