本公开涉及代码检查领域,特别涉及一种静态代码检查方法、装置、计算机设备及可读存储介质。
背景技术:
随着计算机技术的不断发展,各种类型的软件层出不穷,在进行动态代码测试之前进行代码检查,有助于帮助开发人员快速、有效地定位代码缺陷,以便开发人员及时纠正这些问题。静态代码检查无需运行代码,通过词法分析、语义分析、控制流分析、数据流分析等技术即可以实现对程序代码的扫码,从而极大地提高软件可靠性,节省软件开发和测试成本。
目前进行静态代码检查主要是通过根据编程语言选择不同的静态检查工具,如样式检查(checkstyle)、代码扫描分析工具(lint)等,对利用不同编程语言编写的项目的所有源代码进行检测,找出其中存在问题的代码。
现在的项目源码数量庞大,一次静态检查耗时很容易就达到数十分钟甚至几个小时,检查效率低,而且早期项目为了快速迭代,存在大量不符合现有标准的“问题代码”,每次静态检查都会检查出早期代码中存在的大量问题,但是这些代码基本不会有新的改动,也不能改动,而新增代码检查出来的问题相比早起代码中存在的问题又非常少,很容易被淹没在早期代码的大量问题中,难以被发现。
技术实现要素:
本公开实施例提供了一种静态代码检查方法、装置、计算机设备及可读存储介质,可以解决相关技术中静态代码检查效率低、差异代码的问题不易被发现的问题。所述技术方案如下:
一方面,提供了一种静态代码检查方法,该方法包括:
获取第一版本代码和第二版本代码,该第二版本代码基于对该第一版本代码的代码编辑操作得到;
根据该第一版本代码和该第二版本代码,确定差异代码;
调用目标代码检查工具,对该差异代码进行静态代码检查,输出静态代码检查的检查结果。
一方面,提供了一种静态代码检查装置,该装置包括:
获取模块,用于获取第一版本代码和第二版本代码,该第二版本代码基于对该第一版本代码的代码编辑操作得到;
确定模块,用于根据该第一版本代码和该第二版本代码,确定差异代码;
检查模块,用于调用目标代码检查工具,对该差异代码进行静态代码检查;
输出模块,用于输出静态代码检查的检查结果。
在一种可能的实现方式中,该装置还包括:
比较模块,用于将该第一版本代码与该第二版本代码进行比较;
该确定模块,还用于确定该第二版本代码中相对于该第一版本代码发生变动的代码,将所确定的代码作为该差异代码。
在一种可能的实现方式中,该装置还包括:
语法解析模块,用于对该第一版本代码和该第二版本代码进行语法解析,得到该第一版本代码和该第二版本代码的特征字符;
对比模块,用于以该第一版本代码的首个特征字符为起始点,对比该第一版本代码与该第二版本代码中各个特征字符,得到该各个特征字符的相似度;
该确定模块,还用于根据任一个特征字符的相似度,确定该任一个特征字符对应的代码是否为该差异代码。
在一种可能的实现方式中,该确定模块,还用于当该任一个特征字符的相似度低于目标相似度值且不为0时,确定该任一个特征字符对应的代码为修改代码;
该确定模块,还用于当该任一个特征字符的相似度为0时,确定该任一个特征字符对应的代码为新增代码。
在一种可能的实现方式中,该确定模块,还用于根据该检查结果,确定存在问题的差异代码的位置;
该确定模块,还用于根据该差异代码的问题,生成解决信息;
该装置还包括:
展示模块,用于将该差异代码的问题和对应的解决信息展示在可视化窗口中。
在一种可能的实现方式中,该装置还包括:
跳转模块,用于根据对该存在问题的差异代码的跳转指令,跳转到该存在问题的差异代码在该第二版本代码中的位置。
在一种可能的实现方式中,该检查模块,还用于实现下述任一项操作:
对该差异代码的语法进行检查;
对该差异代码的结构进行检查;
对该差异代码的过程进行检查;
对该差异代码的接口进行检查。
一方面,提供了一种计算机设备,该计算机设备包括一个或多个处理器和一个或多个存储器,该一个或多个存储器中存储有至少一条程序代码,该程序代码由该一个或多个处理器加载并执行以实现该静态代码检查方法所执行的操作。
一方面,提供了一种计算机可读存储介质,该计算机可读存储介质中存储有至少一条程序代码,该程序代码由处理器加载并执行以实现该静态代码检查方法所执行的操作。
根据获取到的第一版本代码和基于对第一版本代码的代码编辑操作得到的第二版本代码,确定差异代码,调用目标代码检查工具,对差异代码进行静态代码检查,输出检查结果。通过仅对差异代码进行静态代码检查,可以有效确定差异代码存在的问题,避免早期代码带来的影响,由于无需对早期代码进行静态代码检查,而仅仅对于数据量大大降低的差异代码来进行检测,可以提高检查效率,及时发现问题。
附图说明
为了更清楚地说明本公开实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本公开的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是本公开实施例提供的一种静态代码检查方法的实施环境示意图;
图2是本公开实施例提供的一种静态代码检查方法的流程图;
图3是本公开实施例提供的一种静态代码检查方法的流程图;
图4是本公开实施例提供的一种差异代码的确定结果示意图;
图5是本公开实施例提供的一种差异代码检查结果示意图;
图6是本公开实施例提供的一种静态代码检查装置的结构示意图;
图7是本公开实施例提供的一种计算机设备结构示意图。
具体实施方式
为使本公开的目的、技术方案和优点更加清楚,下面将结合附图对本公开实施方式作进一步地详细描述。
静态代码检查:又称静态程序分析(staticprogramanalysis),是指在不运行代码的方式下,通过词法分析、语义分析、控制流、数据流分析等技术对程序代码进行扫描,验证代码是否满足规范性、安全性、可靠性、可维护性等指标的一种代码分析技术。
图1是本公开实施例提供的一种静态代码检查方法的实施环境示意图,参见图1,该实施环境包括:计算机设备101。
计算机设备101可以是智能手机、台式计算机、平板电脑、电子书阅读器和膝上型便携计算机中的至少一种等设备中的至少一种。计算机设备101可以安装并运行有版本控制工具来对不同版本的代码进行比较以实现差异代码的确定,计算机设备101还可以安装并运行有静态检查工具,用于对代码进行静态检查,通过分析或检查程序代码的语法、结构、过程、接口等来检查程序的正确性,保证程序的正常运行。
计算机设备101可以泛指多个计算机设备中的一个,本实施例仅以计算机设备101来举例说明。本领域技术人员可以知晓,上述计算机设备的数量可以更多或更少。比如上述计算机设备可以仅为几个,或者上述计算机设备为几十个或几百个,或者更多数量,本公开实施例对计算机设备的数量和设备类型不加以限定。
图2是本公开实施例提供的一种静态代码检查方法的流程图,参见图2,计算机设备基于提交的代码,通过分布式版本控制系统(git)或集中式版本控制系统(subversion,svn)计算出现在代码与原来代码之间新增或修改的代码,得到差异代码,也即是,“增量代码”数据,进而使用常用的静态检查工具checkstyle或lint对“增量代码”进行检查,若未检查出问题,则提示检查成功,若检查出问题,则提示错误,在提高检查效率的同时,又能及时把新增的“问题代码”暴露出来。
上述图2所示为本公开实施例的基本流程,下面基于一种具体实施流程对本公开的技术方案进行介绍,图3是本公开实施例提供的一种静态代码检查方法的流程图,参见图3,该方法包括:
301、计算机设备获取第一版本代码和第二版本代码,该第二版本代码基于对该第一版本代码的代码编辑操作得到。
其中,第二版本代码可以为最新版本代码,第一版本代码可以为最新版本代码前一版本的代码,该第一版本代码和该第二版本代码可以为爪哇(java)编程语言、c语言(cprogramminglanguage)、c++编程语言(thec++programminglanguage)等中的任意一种,对该第一版本代码的编辑操作可以为修改代码的操作,也可以为增加代码的操作,本公开实施例对第一版本代码和第二版本代码所采用的编程语言、对第一版本代码的编辑操作具体为哪种均不加以限定。
需要说明的是,计算机设备可以从本地存储器中获取第一版本代码以及第二版本代码,也可以通过通信链路从服务器中获取第一版本代码以及第二版本代码,本公开实施例对此不加以限定。
在一种可能的实现方式中,计算机设备根据用户触发的选择指令,确定被选中的代码文件,从本地存储器中获取该代码文件更新后的最新版本和更新前的版本,将更新前的版本代码作为第一版本代码,将更新后的最新版本代码作为第二版本代码。
在另一种可能的实现方式中,计算机设备根据用户触发的选择指令,向服务器发送代码获取请求,服务器根据接收到的代码请求确定需要发送的代码文件,通过通信链路将代码文件发送给计算机设备,计算机设备接收代码文件。
其中,该代码获取请求中可以包括需要获取的代码的文件名称、文件版本等信息,可选地,该代码获取请求中还可以包括其他信息,本公开实施例对代码获取请求中具体包括哪些信息不加以限定。
302、计算机设备将该第一版本代码与该第二版本代码进行比较。
需要说明的是,计算机设备可以通过git/svn等版本控制工具,来对第一版本代码和第二版本代码进行比较,可选地,计算机设备还可以采用其他工具来对代码进行比较,本公开实施例对此不加以限定。
在一种可能的实现方式中,计算机设备可以根据用户的选择指令,分别将获取到的第一版本代码和第二版本代码导入到版本控制工具中,以便对该第一版本代码和第二版本代码进行比较。
303、计算机设备确定该第二版本代码中相对于该第一版本代码发生变动的代码,将所确定的代码作为该差异代码。
需要说明的是,该差异代码可以为新增的代码,也可以为修改的代码,本公开实施例对此不加以限定。
在一种可能的实现方式中,计算机设备对该第一版本代码和该第二版本代码进行语法解析,得到该第一版本代码和该第二版本代码的特征字符,以该第一版本代码的首个特征字符为起始点,对比该第一版本代码与该第二版本代码中各个特征字符,得到该各个特征字符的相似度,并对该相似度进行计算,当该任一个特征字符的相似度低于目标相似度值时,确定该任一个特征字符对应的代码为修改代码,当该任一个特征字符的相似度为0时,确定该任一个特征字符对应的代码为新增代码,当该任一个特征字符的相似度为100%时,确定该任一个特征字符对应的代码与第一版本代码相同,参见图4,图4是本公开实施例提供的一种差异代码的确定结果示意图,该图可以直观展示出存在差异代码的文件和差异代码所在的行数,方便用户查看。
需要说明的是,通过上述步骤302至步骤303,可以计算出新版本代码与原有版本代码之间的“增量代码”,计算出的粒度可以细化到具体代码的修改行数。但是,有些静态检查工具无法实现增量代码检查,如商用静态代码检查工具(coverity)等,对于这些工具,可以采用先对所有代码进行全量扫描,得到所有问题代码的报告,再根据增量代码的信息对所有问题代码的报告进行过滤,得到其中新增代码的问题报告。通过这种方法,虽然无法实现检查时间的减少,但是可以过滤掉成年老代码对检查结果造成的干扰,有助于技术人员快速发现新增代码存在的问题。
可选地,计算机设备还可以记录编辑用户在第一版本代码的基础上所提交的代码编辑操作,例如新增代码操作或修改代码操作,代码编辑操作的操作信息可以包括编辑对象、编辑内容等信息,基于这类操作信息,可以获知第二版本代码与第一版本代码的差异,为了提高差异代码确定的准确性,还可以结合该差异,对通过步骤301至303所确定出的差异代码进行校验,以检验两者是否相同,当校验通过时,则差异代码确定成功,否则,计算机设备需要重新进行差异代码的确定。
304、计算机设备调用目标代码检查工具,对该差异代码进行静态代码检查,根据检查结果,确定存在问题的差异代码的位置。
需要说明的是,静态代码检查包括代码检查、静态结构分析、代码质量度量等,可以由人工进行,充分发挥人的逻辑思维优势,也可以借助软件工具自动进行。代码检查包括代码走查、桌面检查、代码审查等,主要检查代码和设计的一致性,代码对标准的遵循、可读性,代码的逻辑表达的正确性,代码结构的合理性等方面;可以发现违背程序编写标准的问题,程序中不安全、不明确和模糊的部分,找出程序中不可移植部分、违背程序编程风格的问题,包括变量检查、命名和类型审查、程序逻辑审查、程序语法检查和程序结构检查等内容。
其中,该目标检查工具可以为checkstyle或lint等静态检查工具,可选地,该目标检查工具还可以为其他静态检查工具,本公开实施例对此不加以限定。利用该目标检查工具对差异代码进行静态代码检查时,可以对该差异代码的语法进行检查,可以对该差异代码的结构进行检查,可以对该差异代码的过程进行检查,还可以对该差异代码的接口进行检查,本公开实施例对此不加以限定。其中,checkstyle可以用于对java代码进行检查,lint可以用于对c语言代码或c++语言代码进行检查。
在一种可能的实现方式中,计算机设备调用目标代码检查工具,对差异代码进行静态代码检查,当发现差异代码中某行代码存在问题时,确定存在问题的差异代码的行数信息,并对该行数信息进行记录。
在另一种可能的实现方式中,若计算机设备调用目标代码检查工具,对该差异代码进行静态代码检查后,发现该差异代码中不存在问题,则计算机设备可以显示检查成功提示。
305、计算机设备根据检查到的差异代码的问题,生成解决信息。
其中,该问题可以为语法错误、名称错误、参数类型错误、参数个数错误、返回值错误等,本公开实施例对该问题具体为哪种类型不加以限定。
在一种可能的实现方式中,计算机设备可以根据检查到的差异代码的问题,确定该问题对应的问题类型,基于该问题类型,在解决信息数据库中进行查询,寻找该问题的解决信息。
306、计算机设备将该差异代码的问题和对应的解决信息展示在可视化窗口中。
参见图5,图5是本公开实施例提供的一种差异代码检查结果示意图,该图可以直观展示出差异代码中存在的问题以及对应的解决信息,方便用户查看。
在一种可能的实现方式中,计算机设备将问题与对应的解决信息逐条展示在可视化窗口中,并根据记录好的问题代码的行数,对问题与对应的解决信息设置超链接,将检查结果与第二版本代码中对应的代码链接起来,以便实现后续的跳转过程。
307、计算机设备根据对该存在问题的差异代码的跳转指令,跳转到该存在问题的差异代码在该第二版本代码中的位置,在该第二版本代码中,对该存在问题的差异代码进行突出显示。
在一种可能的实现方式中,计算机设备可以根据接收到的触发操作生成跳转指令,基于设置好的该存在问题的差异代码与检查结果的超链接,跳转到该代码在第二版本代码中的位置,也即是,存在问题的差异代码所在的行数,并在第二版本代码中,通过改变该存在问题的代码的字体颜色,或对该存在问题的代码部分进行高亮显示等,对该存在问题的代码进行突出显示,可选地,计算机设备还可以通过其他方式实现该存在问题的代码的突出显示,本公开实施例对具体采用哪种方式来进行突出显示不加以限定。
需要说明的是,上述步骤306至步骤307为可选步骤,在一些可能的实现方式中,计算机设备还可以在生成解决信息后,在该第二版本代码中,根据记录好的行数,对所有存在问题的代码均进行突出显示,在各个存在问题的代码处,显示该代码存在的问题,并设置对应的显示按钮,计算机设备可以根据用户对该显示按钮的触发操作,实现解决信息的显示。
上述方案根据获取到的第一版本代码和基于对第一版本代码的代码编辑操作得到的第二版本代码,确定差异代码,调用目标代码检查工具,对差异代码进行静态代码检查,确定存在问题的差异代码的位置,并对该存在问题的代码进行突出显示,将该差异代码的问题和对应的解决信息展示在可视化窗口中,以便用户进行查看。通过仅对差异代码进行静态代码检查,可以有效确定差异代码存在的问题,由于无需对早期代码进行静态代码检查,而仅仅对于数据量大大降低的差异代码来进行检测,可以大大减少检查时间,提高检查效率和研发效率,优化编程体验,而且还可以避免早期代码带来的影响,及早暴露新增问题代码,屏蔽基本不需要检查的成年老代码,及时发现问题并及时改正,保证程序的正常运行。
上述所有可选技术方案,可以采用任意结合形成本公开的可选实施例,在此不再一一赘述。
图6是本公开实施例提供的一种静态代码检查装置的结构示意图,参见图6,该装置包括:
获取模块601,用于获取第一版本代码和第二版本代码,该第二版本代码基于对该第一版本代码的代码编辑操作得到;
确定模块602,用于根据该第一版本代码和该第二版本代码,确定差异代码;
检查模块603,用于调用目标代码检查工具,对该差异代码进行静态代码检查;
输出模块604,用于输出静态代码检查的检查结果。
在一种可能的实现方式中,该装置还包括:
比较模块,用于将该第一版本代码与该第二版本代码进行比较;
该确定模块602,还用于确定该第二版本代码中相对于该第一版本代码发生变动的代码,将所确定的代码作为该差异代码。
在一种可能的实现方式中,该装置还包括:
语法解析模块,用于对该第一版本代码和该第二版本代码进行语法解析,得到该第一版本代码和该第二版本代码的特征字符;
对比模块,用于以该第一版本代码的首个特征字符为起始点,对比该第一版本代码与该第二版本代码中各个特征字符,得到该各个特征字符的相似度;
该确定模块602,还用于根据任一个特征字符的相似度,确定该任一个特征字符对应的代码是否为该差异代码。
在一种可能的实现方式中,该确定模块602,还用于当该任一个特征字符的相似度低于目标相似度值且不为0时,确定该任一个特征字符对应的代码为修改代码;
该确定模块602,还用于当该任一个特征字符的相似度为0时,确定该任一个特征字符对应的代码为新增代码。
在一种可能的实现方式中,该确定模块602,还用于根据该检查结果,确定存在问题的差异代码的位置;
该确定模块602,还用于根据该差异代码的问题,生成解决信息;
该装置还包括:
展示模块,用于将该差异代码的问题和对应的解决信息展示在可视化窗口中。
在一种可能的实现方式中,该装置还包括:
跳转模块,用于根据对该存在问题的差异代码的跳转指令,跳转到该存在问题的差异代码在该第二版本代码中的位置。
在一种可能的实现方式中,该检查模块603,还用于实现下述任一项操作:
对该差异代码的语法进行检查;
对该差异代码的结构进行检查;
对该差异代码的过程进行检查;
对该差异代码的接口进行检查。
上述装置根据获取到的第一版本代码和基于对第一版本代码的代码编辑操作得到的第二版本代码,确定差异代码,调用目标代码检查工具,对差异代码进行静态代码检查,输出检查结果。通过仅对差异代码进行静态代码检查,可以有效确定差异代码存在的问题,避免早期代码带来的影响,由于无需对早期代码进行静态代码检查,而仅仅对于数据量大大降低的差异代码来进行检测,可以提高检查效率,及时发现问题。
需要说明的是:上述实施例提供的静态代码检查装置在进行静态代码检查时,仅以上述各功能模块的划分进行举例说明,实际应用中,可以根据需要而将上述功能分配由不同的功能模块完成,即将计算机设备的内部结构划分成不同的功能模块,以完成以上描述的全部或者部分功能。另外,上述实施例提供的静态代码检查装置与静态代码检查方法实施例属于同一构思,其具体实现过程详见方法实施例,这里不再赘述。
图7是本公开实施例提供的一种计算机设备的结构示意图。该计算机设备700可以是:智能手机、平板电脑、mp3播放器(movingpictureexpertsgroupaudiolayeriii,动态影像专家压缩标准音频层面3)、mp4(movingpictureexpertsgroupaudiolayeriv,动态影像专家压缩标准音频层面4)播放器、笔记本电脑或台式电脑。计算机设备700还可能被称为用户设备、便携式计算机设备、膝上型计算机设备、台式计算机设备等其他名称。
通常,计算机设备700包括有:一个或多个处理器701和一个或多个存储器702。
处理器701可以包括一个或多个处理核心,比如4核心处理器、8核心处理器等。处理器701可以采用dsp(digitalsignalprocessing,数字信号处理)、fpga(field-programmablegatearray,现场可编程门阵列)、pla(programmablelogicarray,可编程逻辑阵列)中的至少一种硬件形式来实现。处理器701也可以包括主处理器和协处理器,主处理器是用于对在唤醒状态下的数据进行处理的处理器,也称cpu(centralprocessingunit,中央处理器);协处理器是用于对在待机状态下的数据进行处理的低功耗处理器。在一些实施例中,处理器701可以在集成有gpu(graphicsprocessingunit,图像处理器),gpu用于负责显示屏所需要显示的内容的渲染和绘制。一些实施例中,处理器701还可以包括ai(artificialintelligence,人工智能)处理器,该ai处理器用于处理有关机器学习的计算操作。
存储器702可以包括一个或多个计算机可读存储介质,该计算机可读存储介质可以是非暂态的。存储器702还可包括高速随机存取存储器,以及非易失性存储器,比如一个或多个磁盘存储设备、闪存存储设备。在一些实施例中,存储器702中的非暂态的计算机可读存储介质用于存储至少一个程序代码,该至少一个程序代码用于被处理器701所执行以实现本公开中方法实施例提供的静态代码检查方法。
在一些实施例中,计算机设备700还可选包括有:外围设备接口703和至少一个外围设备。处理器701、存储器702和外围设备接口703之间可以通过总线或信号线相连。各个外围设备可以通过总线、信号线或电路板与外围设备接口703相连。具体地,外围设备包括:射频电路704、显示屏705、摄像头706、音频电路707、定位组件708和电源709中的至少一种。
外围设备接口703可被用于将i/o(input/output,输入/输出)相关的至少一个外围设备连接到处理器701和存储器702。在一些实施例中,处理器701、存储器702和外围设备接口703被集成在同一芯片或电路板上;在一些其他实施例中,处理器701、存储器702和外围设备接口703中的任意一个或两个可以在单独的芯片或电路板上实现,本实施例对此不加以限定。
射频电路704用于接收和发射rf(radiofrequency,射频)信号,也称电磁信号。射频电路704通过电磁信号与通信网络以及其他通信设备进行通信。射频电路704将电信号转换为电磁信号进行发送,或者,将接收到的电磁信号转换为电信号。可选地,射频电路704包括:天线系统、rf收发器、一个或多个放大器、调谐器、振荡器、数字信号处理器、编解码芯片组、用户身份模块卡等等。射频电路704可以通过至少一种无线通信协议来与其它计算机设备进行通信。该无线通信协议包括但不限于:城域网、各代移动通信网络(2g、3g、4g及5g)、无线局域网和/或wifi(wirelessfidelity,无线保真)网络。在一些实施例中,射频电路704还可以包括nfc(nearfieldcommunication,近距离无线通信)有关的电路,本公开对此不加以限定。
显示屏705用于显示ui(userinterface,用户界面)。该ui可以包括图形、文本、图标、视频及其它们的任意组合。当显示屏705是触摸显示屏时,显示屏705还具有采集在显示屏705的表面或表面上方的触摸信号的能力。该触摸信号可以作为控制信号输入至处理器701进行处理。此时,显示屏705还可以用于提供虚拟按钮和/或虚拟键盘,也称软按钮和/或软键盘。在一些实施例中,显示屏705可以为一个,设置计算机设备700的前面板;在另一些实施例中,显示屏705可以为至少两个,分别设置在计算机设备700的不同表面或呈折叠设计;在再一些实施例中,显示屏705可以是柔性显示屏,设置在计算机设备700的弯曲表面上或折叠面上。甚至,显示屏705还可以设置成非矩形的不规则图形,也即异形屏。显示屏705可以采用lcd(liquidcrystaldisplay,液晶显示屏)、oled(organiclight-emittingdiode,有机发光二极管)等材质制备。
摄像头组件706用于采集图像或视频。可选地,摄像头组件706包括前置摄像头和后置摄像头。通常,前置摄像头设置在计算机设备的前面板,后置摄像头设置在计算机设备的背面。在一些实施例中,后置摄像头为至少两个,分别为主摄像头、景深摄像头、广角摄像头、长焦摄像头中的任意一种,以实现主摄像头和景深摄像头融合实现背景虚化功能、主摄像头和广角摄像头融合实现全景拍摄以及vr(virtualreality,虚拟现实)拍摄功能或者其它融合拍摄功能。在一些实施例中,摄像头组件706还可以包括闪光灯。闪光灯可以是单色温闪光灯,也可以是双色温闪光灯。双色温闪光灯是指暖光闪光灯和冷光闪光灯的组合,可以用于不同色温下的光线补偿。
音频电路707可以包括麦克风和扬声器。麦克风用于采集用户及环境的声波,并将声波转换为电信号输入至处理器701进行处理,或者输入至射频电路704以实现语音通信。出于立体声采集或降噪的目的,麦克风可以为多个,分别设置在计算机设备700的不同部位。麦克风还可以是阵列麦克风或全向采集型麦克风。扬声器则用于将来自处理器701或射频电路704的电信号转换为声波。扬声器可以是传统的薄膜扬声器,也可以是压电陶瓷扬声器。当扬声器是压电陶瓷扬声器时,不仅可以将电信号转换为人类可听见的声波,也可以将电信号转换为人类听不见的声波以进行测距等用途。在一些实施例中,音频电路707还可以包括耳机插孔。
定位组件708用于定位计算机设备700的当前地理位置,以实现导航或lbs(locationbasedservice,基于位置的服务)。定位组件708可以是基于美国的gps(globalpositioningsystem,全球定位系统)、中国的北斗系统、俄罗斯的格雷纳斯系统或欧盟的伽利略系统的定位组件。
电源709用于为计算机设备700中的各个组件进行供电。电源709可以是交流电、直流电、一次性电池或可充电电池。当电源709包括可充电电池时,该可充电电池可以支持有线充电或无线充电。该可充电电池还可以用于支持快充技术。
在一些实施例中,计算机设备700还包括有一个或多个传感器710。该一个或多个传感器710包括但不限于:加速度传感器711、陀螺仪传感器712、压力传感器713、指纹传感器714、光学传感器715以及接近传感器716。
加速度传感器711可以检测以计算机设备700建立的坐标系的三个坐标轴上的加速度大小。比如,加速度传感器711可以用于检测重力加速度在三个坐标轴上的分量。处理器701可以根据加速度传感器711采集的重力加速度信号,控制显示屏705以横向视图或纵向视图进行用户界面的显示。加速度传感器711还可以用于游戏或者用户的运动数据的采集。
陀螺仪传感器712可以检测计算机设备700的机体方向及转动角度,陀螺仪传感器712可以与加速度传感器711协同采集用户对计算机设备700的3d动作。处理器701根据陀螺仪传感器712采集的数据,可以实现如下功能:动作感应(比如根据用户的倾斜操作来改变ui)、拍摄时的图像稳定、游戏控制以及惯性导航。
压力传感器713可以设置在计算机设备700的侧边框和/或显示屏705的下层。当压力传感器713设置在计算机设备700的侧边框时,可以检测用户对计算机设备700的握持信号,由处理器701根据压力传感器713采集的握持信号进行左右手识别或快捷操作。当压力传感器713设置在显示屏705的下层时,由处理器701根据用户对显示屏705的压力操作,实现对ui界面上的可操作性控件进行控制。可操作性控件包括按钮控件、滚动条控件、图标控件、菜单控件中的至少一种。
指纹传感器714用于采集用户的指纹,由处理器701根据指纹传感器714采集到的指纹识别用户的身份,或者,由指纹传感器714根据采集到的指纹识别用户的身份。在识别出用户的身份为可信身份时,由处理器701授权该用户执行相关的敏感操作,该敏感操作包括解锁屏幕、查看加密信息、下载软件、支付及更改设置等。指纹传感器714可以被设置计算机设备700的正面、背面或侧面。当计算机设备700上设置有物理按键或厂商logo时,指纹传感器714可以与物理按键或厂商logo集成在一起。
光学传感器715用于采集环境光强度。在一个实施例中,处理器701可以根据光学传感器715采集的环境光强度,控制显示屏705的显示亮度。具体地,当环境光强度较高时,调高显示屏705的显示亮度;当环境光强度较低时,调低显示屏705的显示亮度。在另一个实施例中,处理器701还可以根据光学传感器715采集的环境光强度,动态调整摄像头组件706的拍摄参数。
接近传感器716,也称距离传感器,通常设置在计算机设备700的前面板。接近传感器716用于采集用户与计算机设备700的正面之间的距离。在一个实施例中,当接近传感器716检测到用户与计算机设备700的正面之间的距离逐渐变小时,由处理器701控制显示屏705从亮屏状态切换为息屏状态;当接近传感器716检测到用户与计算机设备700的正面之间的距离逐渐变大时,由处理器701控制显示屏705从息屏状态切换为亮屏状态。
本领域技术人员可以理解,图7中示出的结构并不构成对计算机设备700的限定,可以包括比图示更多或更少的组件,或者组合某些组件,或者采用不同的组件布置。
在示例性实施例中,还提供了一种计算机可读存储介质,例如包括程序代码的存储器,上述程序代码可由处理器执行以完成上述实施例中的静态代码检查方法。例如,该计算机可读存储介质可以是只读存储器(read-onlymemory,rom)、随机存取存储器(randomaccessmemory,ram)、只读光盘(compactdiscread-onlymemory,cd-rom)、磁带、软盘和光数据存储设备等。
本领域普通技术人员可以理解实现上述实施例的全部或部分步骤可以通过硬件来完成,也可以通过程序来程序代码相关的硬件完成,该程序可以存储于一种计算机可读存储介质中,上述提到的存储介质可以是只读存储器,磁盘或光盘等。
上述仅为本公开的可选实施例,并不用以限制本公开,凡在本公开的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本公开的保护范围之内。