扫码关注我们
评测服务项目
软件登记测试 / 评估申报


服务介绍

软件产品登记测试从常规要求、用户文档、功能性、可靠性、易用性等方面对软件系统进行符合性测试,其测试结果证明软件的质量是否符合中华人民共和国信息产业部关于《软件产品管理办法》以及相应的国家标准中规定的要求。

 

目的及意义

软件产品登记测试是专门配合国家软件企业认定和软件产品登记制度设立的测试类型。2000年6月,国务院颁布了《鼓励软件产业和集成电路产业发展的若干政策》,政策中提出了在全国范围内推行软件企业认定和软件产品登记的制度,并对通过认定的软件企业和 登记的软件产品在税收等方面给予大幅度的政策优惠。而软件企业在申请软件企业认定和进行软件产品登记时,应提交由第三方测试机构出具的软件测试报告。

依据9号令第八条第(五)款和第十条第(五)款的规定,国产软件或进口软件在申请登记备案时必须提交第三方测试机构出具的软件测试报告。


软件验收测试 / 功能测试

服务介绍:

人工+工具测试相结合,根据您的测试需求及进度,由卓越测评公司测试专家,对您的产品进行完整、全面、无死角的专业测试。深度挖掘产品缺陷。  

服务内容:

根据产品特性、操作描述和用户方案,从软件产品的界面、架构出发,按照需求编写出来的测试用例,使用适当的平台、浏览器和测试脚本,以保证目标用户的用户体验,通过输入数据在预期结果和实际结果之间进行评测,进而提出更加使产品达到用户使用的要求。

1、专家测试用例设计

由卓越评测测试专家结合产品文档及测试需求,对产品功能进行系统全面的测试用例设计。

2、专家功能测试

全面围绕产品场景、功能点、测试用例,进行逻辑性、针对性功能测试,交付完整测试报告并提供追踪服务。

3、专家定制测试

按照您的要求,卓越评测测试专家向您提供定制化测试方案,交付完整测试报告并提供追踪服务。

4、专家BUG探索

发掘潜在产品缺陷,对产品进行多人次、多维度的随机性功能测试和验证服务。




软件性能测试 / 并发测试

服务介绍:

通过模拟用户的海量并发,来发现系统的承载能力、负载能力,在高并发等压力下的处理能力,以及分析在当前性能瓶颈下,需要什么样的软硬件配置来满足更高的性能需求。

服务内容:

软件测试团队通过建立模型、测试场景、脚本等工作,使用性能与压力测试工具与平台对客户软件进行压力与性能测试,来发现系统的承载能力、负载能力和处理能力,并对性能瓶颈等问题提出优化建议。

服务详情:

通过自动化测试工具能更快捷地解决问题。

自动化测试工具可以在一台或多台机器上模拟成百上千的用户同时执行业务操作的场景,并可以很好地同步用户的执行时间,进行有效的实时监测,可以全面发现软件承载能力、负载能力和处理能力。

软件测试团队根据计算性能、内存使用、IO占用、SQL负载、带宽容量进行综合分析。并由我公司具有阿里云认证的运维架构师,提供基于缓存、均衡负载、弹性负载、CDN分发、SQL语句、消息队列等多角度的性优化方案。

代码安全审计 / 漏洞检测

服务介绍:

   代码静态安全审计的目的是对产品的安全性、正确性进行审计;尽可能早的发现并确定产品中在安全方面的缺陷和隐患,找出源代码缺陷所引发的安全漏洞并提供代码修订措施和建议;可以更好的理解软件产品,防止漏洞导致安全事件的发生,避免遭受损失;协助开发出高质量的可交付产品。

服务内容:

    针对客户提供的待检测的源代码,由代码安全审计团队进行安全审计,通过工具+人工,两者结合的方式,对客户的源代码进行分析,尽可能的发现安全方面的缺陷和隐患,并及时协助进行修复。

    服务流程主要包含以下阶段:

信息收集:此阶段中,源代码审计小组进行必要的信息收集,包括本次源代码审计要求、稳定版本的源代码。

工具审计:确定工具审计的标准和各项配置参数,使用代码安全检测工具对目标源代码进行检测,对工具检测的结果进行人工核查,筛选,分析,汇总。

人工审计:对客户要求人工审计的重点代码采用人工分析的方法,对源代码中的业务流程及安全漏洞进行审计。

审计核验:对工具以及人工审计的漏洞,根据源代码流程复盘核验,并根据流程核验结果与利用范围确定危险等级。

输出报告:此阶段中,源代码审计小组根据测试的结果编写直观的源代码审计服务报告。

系统安全扫描 / 渗透测试

服务介绍

    了解被测信息系统现状,发现可被利用的漏洞,扫描结果是对被测信息系统安全现状的一个反映,可快速发现整体系统中存在的安全漏洞点。

服务内容

    系统安全扫描主要是使用远程安全评估系统对客户授权的各类应用、操作系统、数据库、网络设备等进行脆弱性扫描和测试。

服务流程主要包含以下阶段:

 信息收集

 安全扫描

 漏洞验证

 威胁分析

 输出报告

服务详情

    安全服务团队通过对被测系统进行安全漏洞扫描,可以发现系统存在的安全漏洞和隐患,对于发现的安全隐患提出针对性的解决方案和建议,对发现的安全弱点采取安全措施,这样可以提高信息系统的安全性,增强系统对入侵和病毒的防御能力。

服务介绍

渗透测试通过模拟恶意黑客的攻击方法,来评估计算机网络系统安全得一种评估方法,这个过程包括对系统得任何弱点,技术缺陷或漏洞分主动分析,这个分析是从一个攻击者可能存在得位置来进行的,并且从这个位置有条件主动利用安全漏洞,从而深入的发现系统的安全漏洞。

服务内容:

渗透测试小组利用部分前沿的攻击技术,使用成熟的黑客攻击手段,结合软件测试技术(标准)对指定网络、系统做入侵攻击测试,希望由此发现网站、应用系统中存在的安全漏洞和风险点。

服务流程主要包含以下阶段:


明确目标

情报收集

制定计划

渗透测试

缺陷利用

成果收集

输出报告

黑盒测试与白盒测试,在准备环节有一定的区别:

黑盒测试即对内部系统一无所知的情况下进行渗透测试或者其他测试。

白盒测试了解内部系统、结构、源码等信息的情况下进行渗透测试或其他测试。

服务详情:

    渗透测试是一个由浅入深的过程,渗透测试人员在不影响业务系统正常运行的攻击方法进行的测试,可以有效的深入挖掘安全漏洞。

    与安全漏洞扫描不同点在于,安全漏洞扫描是全面发现安全漏洞与缺陷,侧重于横向全面的发现问题。渗透测试则是倾向于深入挖掘系统漏洞,侧重于纵向深入的发现问题。







APP合规测试 / 隐私防护

服务介绍

移动APP隐私合规检测服务是针对企业或个人开发的移动应用中收集个人信息行为是否存在违法违规进行认定并提供参考,为APP运营者提供指引,移动应用个人信息安全提供多方位全面检测,APP是否合规等问题的深度检测,及时发现应用存在的潜在风险与不合规之处,帮助企业或个人对APP隐私、过度收集、滥用等行为进行检测,高效、低成本地做APP合规检测,形成专业并易理解的检测报告,为移动应用运营者提供专业的合规、安全提供整改依据。

服务内容

检测覆盖但不限于以下内容:

l违规收集个人信息

l超范围收集个人信息

l违规使用个人信息

l强制用户使用定向推送功能

lAPP强制、频繁、过度索取权限

lAPP频繁自启动和关联启动

l欺骗诱导强迫行为

l欺骗误导用户提供个人信息

l欺骗误导用户下载APP

自助服务
提供专业的网络安全方案
报告查询
公司介绍

深圳市卓越软件评测有限公司(以下简称“卓越”)是一家专业的第三方软件评测机构。依托丰富的客户资源和完善的服务体系,凭借自身高效专业的服务能力、深入的行业知识,为客户提供优质且高效的测评服务。

目前主要为政府部门、软件企业、通信运营商、国家电网等提供全方位的信息技术咨询服务,做好质量保障的“守卫者”。业务已涉及公安、电力、交通、医疗、教育、传媒、金融、通信等多个行业,成功实施涵盖软件测试、系统安全扫描、编码规范分析、代码静态安全审计、系统压力测试与瓶颈分析服务、渗透测试(黑盒/白盒)等多个项目,拥有丰富的软件质量评估与保障经验。


服务行业
运营商
政府是信息流的”汇聚节点“,在 国家信息化建设中扮演重要角色。
政府
政府是信息流的”汇聚节点“,在 国家信息化建设中扮演重要角色。
金融
政府是信息流的”汇聚节点“,在 国家信息化建设中扮演重要角色。
教育
政府是信息流的”汇聚节点“,在 国家信息化建设中扮演重要角色。
其他
政府是信息流的”汇聚节点“,在 国家信息化建设中扮演重要角色。
测试解决方案
产品新闻 更多>>
15
2023/09
你是否在Microsoft Edge上测试你的网站?
你是否在Microsoft Edge上测试你的网站?
什么是高性价比的测试,性价比高的软件测试类型有哪些?
什么是高性价比的测试,性价比高的软件测试类型有哪些?
2023/09/12
金融行业的业务特点
金融行业的业务特点
2023/06/20
技术文库 更多>>
Emulator与Simulator有什么区别,如何使用Emulator和Simulator进行移动应用测试?

长期以来,软件测试一直是开发过程中不可或缺的一部分。然而,移动应用程序测试是当今最需要关注的软件测试领域。移动应用测试不再被视为应用的缩小版。 根据Statcounter的研究,大约52%的用户更喜欢使用移动应用程序而不是桌面应用程序。

随着移动行业的快速发展,任何应用都需要兼容不同版本的iOS和Android设备。移动应用程序测试需要在虚拟移动应用程序测试平台上运行来验证产品的功能、性能、可用性和一致性。

移动应用程序测试需要考虑三个参数:功能、真实环境和非功能方面。功能测试涵盖业务流程、UI测试、跨平台覆盖,而真实环境测试针对的是后台测试、中断、手势、不同网络条件下的测试。

在这篇关于移动应用测试的文章中,我们将看到如何开始使用Android模拟器和iOS模拟器进行移动应用测试。

一、为什么需要一个虚拟的移动应用程序测试平台?

在移动应用程序上线之前,QA团队需要多次执行移动应用程序测试。由于设备和操作系统的分散化,采购真实设备来始终测试功能是一件代价高昂的事情,对于很难活过三年的初创公司而言更是如此,大量设备极有可能被闲置。

当你发布一个移动应用程序时,它需要兼容不同的移动设备和不同的设备版本。2021年移动设备的数量为150亿台,而预计到2025年移动设备的发行数量将达到182.2亿台。在150 亿台真实设备上进行移动应用测试几乎是不可能的,这将耗费无数时间和金钱成本,得不偿失,而真正的移动应用测试挑战是维护150 亿台设备进行测试。

如果你想在移动浏览器上测试你的应用程序或网站,则此问题会更加严重。以下是移动浏览器的市场份额:

大多数浏览器每15-20天更新一次版本。因此,在进行移动应用程序测试时,你需要在其支持的不同浏览器和不同浏览器版本上测试你的Web应用程序。

鉴于这些问题,使用进行移动应用程序测试使QA团队的测试变得轻而易举,应用模拟器进行测试让你无需实际安装即可在设备上执行程序。

二、什么是移动应用程序测试中的Emulator?

Emulator是在电脑上模拟Android操作系统的虚拟装置,可以无缝执行移动应用测试。因此,你无需真实物理设备即可执行Android应用测试。

三、Emulator与Simulator的区别

基于Emulator和Simulator的移动应用程序测试是有价值的,被认为是评估移动应用程序性能的流畅方法之一。然而,与所有技术一样,使用Emulator和Simulator进行的移动应用程序测试也有其优点与缺点。

除了上述对比,某些挑战可能会超出分配的团队规模和相应的预算。此外,即使我们可以解决这个问题,也可能会出现新的挑战,即Emulator/Simulator可能不支持所需的移动应用程序。

在这种情况下,我们必须设置软件补丁,这对企业来说可能是昂贵的。下面列出了使用真实设备进行测试与使用Emulator/Simulator进行测试之间的区别

五、总结

使用Emulator与Simulator进行的移动应用程序测试使繁琐的移动应用程序测试过程变得更加容易。它只需要你清楚设备品牌、设备类型和操作系统,因为这些虚拟平台完全模仿所选设备,无论何时在真实设备上运行,都能提供精确的输出。

使用Emulator与Simulator进行移动应用程序测试有优点也有缺点,但瑕不掩瑜,使用模拟设备的优势大于其劣势,更容易获得更为理想的测试体验,也能使得移动app的质量更上一层楼,增强用户体验,为企业在激烈的市场竞争环境中赢得一席之地,从而持续提高企业的盈利能力。

卓越软件测评,一家专业的第三方软件测评机构,提供各类软件测试服务,并出具合格有效的测试报告。更多测试相关内容可以关注卓越软件评测官网(zyscan.cn),持续更新中!

 


2023/09/21
selenium等待时间

Selenium 中,时间等待指在测试用例中等待某个操作完成或某个事件发生的时间Selenium 中提供了多种方式来进行时间等待,包括使用 ExpectedConditions 中的 presence_of_element_located 和 visibility_of_element_located 方法等待元素可见或不可见,以及使用 until 和 when 等待某个特定操作完成或某个特定事件发生。

 

下面是一些示例代码: 

1. 使用 presence_of_element_located 方法等待某个元素加载

from selenium import webdriver

from selenium.webdriver.common.by import By

from selenium.webdriver.support.ui import WebDriverWait

from selenium.webdriver.support import expected_conditions as EC

 

# 设置浏览器驱动

browser = webdriver.Chrome()

 

# 打开网站

browser.get('

https://example.com

browser.get('

 

# 等待某个元素加载

element = WebDriverWait(browser, 10).until(EC.presence_of_element_located((By.ID, 'myelement')))

2. 使用 until 等待某个特定操作完成

from selenium import webdriver

from selenium.webdriver.common.by import By

from selenium.webdriver.support.ui import WebDriverWait

from selenium.webdriver.support import expected_conditions as EC

 

# 设置浏览器驱动

browser = webdriver.Chrome()

 

# 打开网站

browser.get('

https://example.com

browser.get('

 

# 等待页面中的表单加载完成

element = WebDriverWait(browser, 10).until(EC.presence_of_element_located((By.ID, 'myform')))

 

# 查找元素并提交表单

element.find_element_by_id('my-input').send_keys('my-value')

element.find_element_by_id('my-submit').click()

3. 使用 when 等待某个特定事件发生

from selenium import webdriver

from selenium.webdriver.common.by import By

from selenium.webdriver.support.ui import WebDriverWait

from selenium.webdriver.support import expected_conditions as EC

 

# 设置浏览器驱动

browser = webdriver.Chrome()

 

# 打开网站

browser.get('

https://example.com

browser.get('

 

# 等待页面中的表单提交完成

element = WebDriverWait(browser, 10).until(EC.presence_of_element_located((By.ID, 'myform')))

 

# 等待表单提交完成事件触发

element.find_element_by_id('my-submit').click()

需要注意的是:

时间等待的时间长度应该根据具体的测试用例来确定,并且应该尽可能地模拟真实用 户的行为,以保证测试用例更加准确和可靠。

 

4. 使用 ExpectedConditions.visibility_of_element_located 方法等待某个元素可见

from selenium import webdriver

from selenium.webdriver.common.by import By

from selenium.webdriver.support.ui import WebDriverWait

from selenium.webdriver.support import expected_conditions as EC

 

# 设置浏览器驱动

browser = webdriver.Chrome()

 

# 打开网站

browser.get('

https://example.com

browser.get('

 

# 等待某个元素可见

element = WebDriverWait(browser, 10).until(EC.visibility_of_element_located((By.ID, 'my-element')))

需要注意的是:

visibility_of_element_located 方法只能用于等待某个元素可见,而不能用于等待某个元素不可见

 

另外,visibility_of_element_located 方法可能会比其他方法消耗更多的时间,因为它会等待元素变为可见,而不是仅仅判断元素是否可见。因此,在使用该方法时需要根据具体情况进行调整

 

5. 使用 ExpectedConditions.title_contains 方法等待页面标题包含指定内容

from selenium import ebdriver

from selenium.webdriver.common.by import By

from selenium.webdriver.support.ui import WebDriverWait

from selenium.webdriver.support import expected_conditions as EC

 

# 设置浏览器驱动

browser = webdriver.Chrome()

 

# 打开网站

browser.get('

https://example.com

browser.get('

 

# 等待页面标题包含指定内容

element = WebDriverWait(browser, 10).until(EC.title_contains('My Web Page'))

需要注意的是:

title_contains 方法只能用于等待页面标题包含指定内容,而不能用于等待页面标题不包含指定内容

 

另外,title_contains 方法可能会比其他方法消耗更多的时间,因为它会等待页面标题完全包含指定内容,而不是仅仅判断页面标题是否包含指定内容。因此在使用该方法时需要根据具体情况进行调整。

2023/09/11
数据库 3种删除

MySQL 是一种关系型数据库管理系统,它的数据存储是基于磁盘上的文件系统实现的。MySQL 将数据存储在表中,每个表由一系列的行和列组成。每一行表示一个记录,每一列表示一个字段。表的结构由其列名、数据类型、索引等信息组成。

 

MySQL 的数据存储采用了多种技术来优化性能和存储效率。以下是 MySQL 数据存储的一些关键特性。

存储引擎

MySQL 支持多种不同的存储引擎,每种引擎都有不同的性能和存储特性。常见的存储引擎有 InnoDBMyISAMMemory 等。不同的存储引擎支持不同的数据存储方式,如 B树索引、哈希索引、全文索引等。

数据页

MySQL 使用数据页来管理存储在磁盘上的数据。数据页是 MySQL 存储引擎中最基本的存储单元,通常情况下每个数据页的大小为 16KB。数据页包含多个记录,每个记录对应一行数据。

索引

MySQL 使用索引来优化数据的检索效率。索引是一种特殊的数据结构,它能够快速地查找表中的数据。MySQL 支持多种类型的索引,如 B 树索引、哈希索引、全文索引等。B 树索引是 MySQL 中最常用的索引类型,它能够快速地查找表中的数据

事务

MySQL 支持事务,事务可以保证数据的一致性、可靠性和安全性。MySQL 的事务是基于 ACID 模型实现的,它能够确保数据在事务中的操作要么全部成功,要么全部回滚。事务的支持使得 MySQL 在多用户并发访问时能够保证数据的完整性和一致性。

总之,MySQL 的数据存储基于磁盘上的文件系统实现,采用多种技术来优化性能和存储效率,如存储引擎、数据页、索引、事务等。这些特性使得 MySQL 成为一种高性能、可靠和安全的关系型数据库管理系统。

 

MySQL删除数据的方式都有哪些?

通过 deletetruncatedrop 关键字进行删除;这三种都可以用来删除数据,但场景不同。

执行速度:drop > truncate >> DELETE

从原理上理解

DELETE(仅删除表中数据,可以找回)

DELETE from TABLE_NAME where xxx

DELETE 属于数据库DML操作语言,只删除数据不删除表的结构,会走事务,执行时会触发trigger

InnoDB 中,DELETE其实并不会真的把数据删除,mysql 实际上只是给删除的数据打了个标记为已删除,因此 delete 删除表中的数据时,表文件在磁盘上所占空间不会变小,存储空间不会被释放,只是把删除的数据行设置为不可见。**虽然未释放磁盘空间,但是下次插入数据的时候,仍然可以重用这部分空间(重用 覆盖)。

DELETE执行时,会先将所删除数据缓存到rollback segement中,事务commit之后生效;

delete from table_name删除表的全部数据,对于MyISAM 会立刻释放磁盘空间,InnoDB 不会释放磁盘空间;

对于delete from table_name where xxx 带条件的删除, 不管是InnoDB还是MyISAM都不会释放磁盘空间;

delete操作以后使用 optimize table table_name 会立刻释放磁盘空间。不管是InnoDB还是MyISAM 。所以要想达到释放磁盘空间的目的,delete以后执行optimize table 操作。

示例:查看表占用硬盘空间大小的SQL语句如下:(用M做展示单位,数据库名:csjdemo,表名:demo2

select concat(round(sum(DATA_LENGTH/1024/1024),2),'M') as table_size    

    from information_schema.tables       

        where table_schema='csjdemo' AND table_name='demo2';

 

 

然后执行空间优化语句,以及执行后的表Size变化:

optimize table demo2

 

 

再看看这张表的大小,就只剩下表结构size了。

 

delete 操作是一行一行执行删除的,并且同时将该行的的删除操作日志记录在redoundo表空间中以便进行回滚(rollback)和重做操作,生成的大量日志也会占用磁盘空间

 

drop

Drop table Tablename

属于数据库DDL定义语言,同Truncate执行后立即生效,无法找回

drop table table_name 立刻释放磁盘空间 ,不管是 InnoDB MyISAM; drop 语句将删除表的结构被依赖的约束(constrain)、触发器(trigger)、索引(index);  依赖于该表的存储过程/函数将保留,但是变为 invalid 状态。

小心使用 drop ,要删表跑路的兄弟,请在订票成功后在执行操作!

可以这么理解,一本书,delete是把目录撕了,truncate是把书的内容撕下来烧了,drop是把书烧了

 

truncate

属于数据库DDL定义语言不走事务,原数据不放到 rollback segment 中,操作不触发 trigger执行后立即生效,无法找回

truncate table table_name 立刻释放磁盘空间 ,不管是 InnoDBMyISAM truncate table其实有点类似于drop table 然后creat,只不过这个create table 的过程做了优化,比如表结构文件之前已经有了等等。所以速度上应该是接近drop table的速度;

truncate 能够快速清空一个表。并且重置auto_increment的值。

但对于不同的类型存储引擎需要注意的地方是:

对于

MyISAMtruncate会重置auto_increment(自增序列)的值为1。而delete后表仍然保持auto_increment

对于

InnoDBtruncate会重置auto_increment的值为1delete后表仍然保持auto_increment。但是在做delete整个表之后重启MySQL的话,则重启后的auto_increment会被置为1

也就是说,InnoDB 的表本身是无法持久保存auto_incrementdelete表之后 auto_increment仍然保存在内存,但是重启后就丢失了,只能从1开始。实质上重启后的auto_increment会从 SELECT 1+MAX(ai_col) FROM t 开始。

小心使用 truncate,尤其没有备份的时候,如果误删除线上的表,记得及时跑路。

为什么不建议使用DELETE 删除数据

了解上面的一些原理之后,可以知道!

无法恢复数据

在使用DELETE操作删除数据时,如果没有事先备份数据,一旦误操作就会导致数据无法恢复。因此,在进行任何数据操作之前,最好先备份数据,以便在出现错误时可以轻松地恢复数据。

删除数据会导致索引失效,影响查询性能。

删除数据会导致表空间的浪费,因为删除的数据并不会立即释放,而是留在表中,只是被标记为已删除

数据不一致

 

如果在删除数据时表中存在外键关联,使用DELETE操作可能会导致其他表中的数据不一致。例如,如果一个表有一个外键,指向另一个表中的一行,如果从主表中删除行而不更新外键引用,则外键引用将成为无效引用。这可能会导致查询时出现错误,或者在更新时导致数据不一致。


2023/09/10
合作伙伴