[ 你悄悄来,请记得带走一丝云彩 ]
测试岗必知必会
01
请描述如何划分缺陷与错误严重性和优先级别?
给软件缺陷与错误划分严重性和优先级的通用原则:1. 表示软件缺陷所造成的危害和恶劣程度。2. 优先级表示修复缺陷的重要程度和次序。
严重性:1. 严重:系统崩溃、数据丢失、数据毁坏2. 较严重:操作性错误、结果错误、遗漏功能3. 一般:小问题、错别字、UI布局、罕见故障4. 建议:不影响使用的瑕疵或更好的实现。
优先级:1. 最高优先级:立即修复,停止进一步测试。2. 次高优先级:在产品发布之前必须修复。3. 中等优先级:如果时间允许应该修复。4. 最低优先级:可能会修复,但是也可能发布。
02
一套完整的测试应该由哪些阶段组成?分别阐述一下各个阶段。
一套完整的测试应该由五个阶段组成:
1.测试计划首先,根据用户需求报告中关于功能要求和性能指标的规格说明书,定义相应的测试需求报告,即制订黑盒测试的最高标准,以后所有的测试工作都将围绕着测试需求来进行,符合测试需求的应用程序即是合格的,反之即是不合格的;同时,还要适当选择测试内容,合理安排测试人员、测试时间及测试资源等。
2.测试设计将测试计划阶段制定的测试需求分解、细化为若干个可执行的测试过程,并为每个测试过程选择适当的测试用例(测试用例选择的好坏将直接影响到测试结果的有效性)。
3.测试开发建立可重复使用的自动测试过程。
4.测试执行执行测试开发阶段建立的自动测试过程,并对所发现的缺陷进行跟踪管理。测试执行一般由单元测试、组合测试、集成测试、系统联调及回归测试等步骤组成,测试人员应本着科学负责的态度,一步一个脚印地进行测试。
5.测试评估结合量化的测试覆盖域及缺陷跟踪报告,对于应用软件的质量和开发团队的工作进度及工作效率进行综合评价。
03
一条软件缺陷都记录了哪些内容?
1.通用UI要统一、准确缺陷报告的UI要与测试的软件UI保持一致,便于查找定位。
2.尽量使用业界惯用的表达术语和表达方法使用业界惯用的表达术语和表达方法,保证表达准确,体现专业化。
3.每条缺陷报告只包括一个缺陷每条缺陷报告只包括一个缺陷,可以使缺陷修正者迅速定位一个缺陷,集中精力每次只修正一个缺陷。校验者每次只校验一个缺陷是否已经正确修正。
4.不可重现的缺陷也要报告首先缺陷报告必须展示重现缺陷的能力。不可重现的缺陷要尽力重现,若尽力之后仍不能重现,仍然要报告此缺陷,但在报告中要注明无法再现,缺陷出现的频率。
5.明确指明缺陷类型根据缺陷的现象,总结判断缺陷的类型。例如,即功能缺陷、界面缺陷、数据缺陷,合理化建议这是最常见的缺陷或缺陷类型,其他形式的缺陷或缺陷也从属于其中某种形式。
6.明确指明缺陷严重等级和优先等级时刻明确严重等级和优先等级之间的差别。高严重问题可能不值得解决,小装饰性问题可能被当作高优先级。
7.描述 (Description) ,简洁、准确,完整,揭示缺陷实质,记录缺陷或缺陷出现的位置描述要准确反映缺陷的本质内容,简短明了。为了便于在软件缺陷管理数据库中寻找制定的测试缺陷,包含缺陷发生时的用户界面(UI)是个良好的习惯。例如记录对话框的标题、菜单、按钮等控件的名称。
8.短行之间使用自动数字序号,使用相同的字体、字号、行间距短行之间使用自动数字序号,使用相同的字体、字号、行间距,可以保证各条记录格式一致,做到规范专业。
9.每一个步骤尽量只记录一个操作保证简洁、条理井然,容易重复操作步骤。
10.确认步骤完整,准确,简短保证快速准确的重复缺陷,“完整”即没有缺漏,“准确”即步骤正确,“简短”即没有多余的步骤。
11.根据缺陷,可选择是否进行图象捕捉为了直观的观察缺陷或缺陷现象,通常需要附加缺陷或缺陷出现的界面,以图片的形式作为附件附着在记录的“附件”部分。为了节省空间,又能真实反映缺陷或缺陷本质,可以捕捉缺陷或缺陷产生时的全屏幕,活动窗口和局部区域。为了迅速定位、修正缺陷或缺陷位置,通常要求附加中文对照图。
附加必要的特殊文档和个人建议和注解如果打开某个特殊的文档而产生的缺陷或缺陷,则必须附加该文档,从而可以迅速再现缺陷或缺陷。有时,为了使缺陷或缺陷修正者进一步明确缺陷或缺陷的表现,可以附加个人的修改建议或注解。
12) 检查拼写和语法缺陷在提交每条缺陷或缺陷之前,检查拼写和语法,确保内容正确,正确的描述缺陷。
13) 尽量使用短语和短句,避免复杂句型句式软件缺陷管理数据库的目的是便于定位缺陷,因此,要求客观的描述操作步骤,不需要修饰性的词汇和复杂的句型,增强可读性。
04
简述一下缺陷的生命周期
打开 :表示问题被提交等待有人处理。重新指派 :问题被重新指派给某人处理。处理 :问题在处理中,尚未完成。固定 :确认此问题存在,但暂时不进行处理。回归 :对已经修复的问题进行回归确认。Reopened :关闭 :问题的最后一个状态。
05
测试用例设计方法都有哪些?
1.等价类划分法顾名思义,等价类划分,就是将测试的范围划分成几个互不相交的子集,他们的并集是全集,从每个子集选出若干个有代表性的值作为测试用例。
2.边界值分析法长期的测试工作经验告诉我们,大量的错误是发生在输入或输出范围的边界上,而不是发生在输入输出范围的内部。因此针对各种边界情况设计测试用例,可以查出更多的错误。选出的测试用例,应选取正好等于、刚刚大于、刚刚小于边界的值,例如,对于在区间min,max的值,测试用例可以记为min,min+,max,max-。
3.错误推测法错误推测法是指:在测试程序时,人们可以根据经验或直觉推测程序中可能存在的各种错误,从而有针对性地编写检查这些错误的测试用例的方法。
4.判定表法又称为策略表,基于策略表的测试,是功能测试中最严密的测试方法。该方法适合于逻辑判断复杂的场景,通过穷举条件获得结果,对结果再进行优化合并,会得到一个判断清晰的策略表。
5.正交实验法用语言描述正交实验法会很抽象难懂,简单说,就是在各因素互相独立的情况下,设计出一种特殊的表格,找出能以少数替代全面的测试用例。其中,上面所说的特殊表格就是正交表,是按照一定规则生成的表。虽然说是特殊的表格,实际表现形式跟一般的表格没有什么区别,正交表的主要特征是,“均匀分布,整齐划一”,正是因为“均匀”的,所以才能以少数代替全部。
06
一个文本框要求输入6位数字密码,且对每个账户每次只允许出现三次输入错误,对此文本框进行测试设计的等价区间有哪些?
1.密码为空 登录2.正确输入(输入正确的值) 登录3.错误输入(输入错误的值,输入数据例如:特殊符号、英文字母、汉字及非法字符等一些非正确值;输入方法例如:不足六位,超出六位,最大输入值) 登录/取消4.连续错误输入三次以上 (查看连续错误输入后的提示信息及结果)5.其他(是否支持剪贴板操作,例如:复制/剪切/粘贴)
07
什么时候开始进行性能测试?
性能测试一般分前期阶段和后期阶段。
前期阶段是功能实现后还没有到系统集成时期。可以针对功能实现进行性能测试,看看单独功能实现的响应时间
后期阶段是指系统功能通过功能性测试完毕后,到整体的性能测试阶段。
08
什么是性能测试、负载测试、压力测试?
性能测试(Performance Test):通常收集所有和测试有关的所有性能,被不同人在不同场合下进行使用。关注点:how much和how fast
负载测试(Load Test):负载测试是一种性能测试,指数据在超负荷环境中运行,程序是否能够承担。关注点:how much
压力测试(Stress Test):压力测试(又叫强度测试)也是一种性能测试,它在系统资源特别低的情况下软件系统运行情况,目的是找到系统在哪里失效以及如何失效的地方。
09
简述Loadrunner的步骤
使用LoaderRunner进行性能测试的几个步骤:a、开发脚本(在Vugen中执行):涉及到,脚本的录制、参数化、事务的添加、检查点的设置、同步点的设置。loaderRunner脚本是符合c语言语法的。b、场景建立(在Controller中执行):加入脚本(如果脚本中有集合点,应该然集合点在这里生效)、用户设置。c、测试结果的分析。
测试人员必知必会经典性能面试题
——性能测试——
1. 性能测试包含了哪些软件测试(至少举出3种)?
参考答案:负载测试;压力测试;容量测试
负载测试(Load Testing):负载测试是一种主要为了测试软件系统是否达到需求文档设计的目标,譬如软件在一定时期内,最大支持多少并发用户数,软件请求出错率等,测试的主要是软件系统的性能。
压力测试(Stress Testing):强度测试也就是压力测试,压力测试主要是为了测试硬件系统是否达到需求文档设计的性能目标,譬如在一定时期内,系统的cpu利用率,内存使用率,磁盘I/O吞吐率,网络吞吐量等,压力测试和负载测试最大的差别在于测试目的不同。
容量测试(Volume Testing):确定系统最大承受量,譬如系统最大用户数,最大存储量,最多处理的数据流量等。
或者在下面选择几项:a. 并发测试 - 测试多用户并发访问同一个应用、模块、数据时是否产生隐藏的并发问题b. 基准测试 - 比较新的或未知测试对象与已知参照标准(如现有软件或评测标准)的性能。c. 争用测试:- 核实测试对象对于多个主角对相同资源(数据记录、内存等)的请求的处理是否可以接受。
d. 性能配置 - 核实在操作条件保持不变的情况下,测试对象在使用不同配置时其性能行为的可接受性。e. 负载测试- 核实在保持配置不变的情况下,测试对象在不同操作条件(如不同用户数、事务数等)下性能行为的可接受性。
f. 强度测试- 核实测试对象性能行为在异常或极端条件(如资源减少或用户数过多)之下的可接受性。g. 容量测试- 核实测试用户同时使用软件程序的最大数量
2. 请问什么是性能测试、负载测试、压力测试?
答:性能测试是通过自动化的测试工具模拟多种正常、峰值以及异常负载条件来对系统的各项性能指标进行测试。负载测试、压力测试参考答案如上题。
3. 在给定的测试环境下进行,考虑被测系统的业务压力量和典型场景?
答:负载测试。负载测试是用来测定系统饱和状态、确定阀值。其特点有:
01.这种方法的目的是找到系统处理能力的极限;通过“检测、加压、阀值”手段找到如“响应时间不超过10秒”,“平均CPU利用率低于65%”等指标。
02.这种性能测试方法需要在给定的测试环境下进行,通常也需要考虑被测系统的业务压力量和典型场景、另外HP Mercury LoadRuner在使用该方法进行“加压”的时候必须选择典型场景。
03.这种性能测试方法一般用来了解系统的性能容量,或者是配合性能调优的时候来使用。特别是该的Weblogic 和库的性能调优。
4. 什么时候可以开始执行性能测试?
答:在产品相对比较稳定,功能测试结束后。灵活性比较强。
5. 简述性能测试的步骤。
答:熟悉应用了解应用的架构、功能逻辑
测试需求:1. 需要将开发给定的需求转为吞吐量和响应时间。2. 根据测试目的,细化需求
测试准备:测试准备包括测试客户端机器准备、测试数据准备、测试脚本准备。
测试执行:测试的执行中,需要监控测试客户端和服务器性能,监控服务器端应用情况:a.客户端的系统资源(cpu、io、memory)情况b. 服务端的系统资源(cpu、io、memory)情况c. 服务器的jvm运行情况
d. 服务端的应用情况,看是否有异常e. 响应时间、吞吐量等指标f. 系统资源监控,linux下可以采用的工具有:vmstat、top、meminfo等。
g. JVM的监控,可以用jprofiler工具,linux下面的jmap、jhat等。h. 响应时间、吞吐量等,由grinder提供。
上述这些信息,一般在测试结束后,均需要归档整理,已备后续详细分析。
我们自己开发一套脚本,用于以固定的频率获取测试客户端和服务器的vmstat和top输出、grinder的log,并从中截取有用信息保存,用于事后分析。
每次测试运行完以后,肯定会增加很多数据,需要考虑本次执行对数据量的影响,如果数据量的变化对后续测试会有影响,则需要清理数据。
6. 你如何识别性能瓶颈?
答:RBI方法:重点测试“吞吐量”指标,因为RBI认定80%的系统性能瓶颈由吞吐量造成。
按照网络、硬件、数据库、应用服务器、代码的顺序自上而下分析性能工具:IBM、HP、OpenSource工具都支持。需使用分析模块、根据Weblogic、Oracle区别有专门的工具实现RBI。
7. 性能测试时,是不是必须进行参数化?为什么要创建参数?LoadRunner中如何创建参数?
答:是。模拟用户真实的业务操作。创建参数列表,用参数替换固定的文本。
8. 你如何设计负载?标准是什么?
答:负载测试计划多少用户数量、使用什么类型的机器、以及在什么环境下进行。
主要基于两个重要的文档,任务分布图和事务信息,任务分布图告诉我们在负载时间段内,某一个事务使用的用户数,高峰使用率及低峰使用率均来自该文档;事务信息告诉我们事务名及优先级,在设计场景时可以参考。
9.解释5个常用的性能指标的名称与具体含义。
答:响应时间、并发用户数,吞吐量,性能计数器,TPS,HPS
响应时间:指的是“系统响应时间”定义为应用系统从发出请求开始到客户端接收到响应所消耗的时间。把它作为用户视角的软件性能的主要体现。
最大并发用户数:有两种理解方式,一种是从业务的角度来模拟真实的用户访问,体现的是业务并发用户数,指在同一时间段内访问系统的用户数量。
另一种是从服务器端承受的压力来考虑,这里的“并发用户数”指的是同时向服务器端发出请求的客户数,该概念一般结合并发测试(Concurrency Testing)使用,体现的是服务端承受的最大并发访问数。
吞吐量:是指“单位时间内系统处理的客户请求的数量”,直接体现软件系统的性能承载能力。
性能计数器(Counter)是描述服务器或操作系统性能的一些数据指标。例如,对Windows 系统来说,使用内存数(Memory In Usage),进程时间(Total Process Time)等都是常见的计数器。
思考时间(Think Time),也被称为“休眠时间”,从业务的角度来说,这个时间指的是用户在进行操作时,每个请求之间的间隔时间。
从自动化测试实现的角度来说,要真实地模拟用户操作,就必须在测试脚本中让各个操作之间等待一段时间,体现在脚本中,具体而言,就是在操作之间放置一个Think 的函数,使得脚本在执行两个操作之间等待一段时间。
TPS:Transaction per second,每秒钟系统能够处理的交易或者事务的数量。它是衡量系统处理能力的重要指标。
点击率:HPS,每秒钟用户向WEB服务器提交的HTTP请求数。
10. 描述不同的角色(用户、产品开发人员、系统管理员)各自关注的软件性能要点。
答:用户:重点关注打开速度及响应时间开发:重点关注响应时间和数据库交互管理员:重点关注用户感受到的软件性能;如何利用管理功能进行性能调优;如何利用其他软硬件手段进行性能调优
11. 请分别针对性能测试、负载测试和压力测试试举一个简单的例子?
答:性能测试例子:公司开发了一个小型项目管理系统,上线前需要做负载、压力、大数据量、强度测试等。
负载测试:逐步加压,从而得到“响应时间不超过10秒”,“服务器平均CPU利用率低于85%”等指标阀值。
压力测试:逐步加压,从而使“响应时间超过10秒”,“服务器平均CPU利用率高于90%”等指标来确定系统能承受的最大负载量。
12. 请问您是如何得到性能测试需求?怎样针对需求设计、分析是否达到需求?
答:在查看需求文档,从中提取性能测试需求,与用户交流,了解实际使用情况。结合业务信息设计操作场景总结出需测试的性能关键指标。执行用例后根据提取关键性能指标来分析是否满足性能需求。
高级测试
01. 请描述如何划分缺陷与错误严重性和优先级别?
给软件缺陷与错误划分严重性和优先级的通用原则:
1.表示软件缺陷所造成的危害和恶劣程度。
2.优先级表示修复缺陷的重要程度和次序。
严重性:
1.严重:系统崩溃、数据丢失、数据毁坏
2.较严重:操作性错误、结果错误、遗漏功能
3.一般:小问题、错别字、UI布局、罕见故障
4.建议:不影响使用的瑕疵或更好的实现。
优先级:
1.最高优先级:立即修复,停止进一步测试。
2.次高优先级:在产品发布之前必须修复。
3.中等优先级:如果时间允许应该修复。
4.最低优先级:可能会修复,但是也可能发布。
02. 一套完整的测试应该由哪些阶段组成?分别阐述一下各个阶段。
一套完整的测试应该由五个阶段组成:
1.测试计划首先,根据用户需求报告中关于功能要求和性能指标的规格说明书,定义相应的测试需求报告,即制订黑盒测试的最高标准,
以后所有的测试工作都将围绕着测试需求来进行,符合测试需求的应用程序即是合格的,反之即是不合格的;同时,还要适当选择测试内容,合理安排测试人员、测试时间及测试资源等。
2.测试设计将测试计划阶段制定的测试需求分解、细化为若干个可执行的测试过程,并为每个测试过程选择适当的测试用例(测试用例选择的好坏将直接影响到测试结果的有效性)。
3.测试开发建立可重复使用的自动测试过程。
4.测试执行执行测试开发阶段建立的自动测试过程,并对所发现的缺陷进行跟踪管理。测试执行一般由单元测试、组合测试、集成测试、系统联调及回归测试等步骤组成,测试人员应本着科学负责的态度,一步一个脚印地进行测试。
5.测试评估结合量化的测试覆盖域及缺陷跟踪报告,对于应用软件的质量和开发团队的工作进度及工作效率进行综合评价。
03. 一条软件缺陷都记录了哪些内容?
1.通用UI要统一、准确缺陷报告的UI要与测试的软件UI保持一致,便于查找定位。
2.尽量使用业界惯用的表达术语和表达方法使用业界惯用的表达术语和表达方法,保证表达准确,体现专业化。
3.每条缺陷报告只包括一个缺陷每条缺陷报告只包括一个缺陷,可以使缺陷修正者迅速定位一个缺陷,集中精力每次只修正一个缺陷。校验者每次只校验一个缺陷是否已经正确修正。
4.不可重现的缺陷也要报告首先缺陷报告必须展示重现缺陷的能力。不可重现的缺陷要尽力重现,若尽力之后仍不能重现,仍然要报告此缺陷,但在报告中要注明无法再现,缺陷出现的频率。
5.明确指明缺陷类型根据缺陷的现象,总结判断缺陷的类型。例如,即功能缺陷、界面缺陷、数据缺陷,合理化建议这是最常见的缺陷或缺陷类型,其他形式的缺陷或缺陷也从属于其中某种形式。
6.明确指明缺陷严重等级和优先等级时刻明确严重等级和优先等级之间的差别。高严重问题可能不值得解决,小装饰性问题可能被当作高优先级。
7.描述 (Description) ,简洁、准确,完整,揭示缺陷实质,记录缺陷或缺陷出现的位置描述要准确反映缺陷的本质内容,简短明了。为了便于在软件缺陷管理数据库中寻找制定的测试缺陷,包含缺陷发生时的用户界面(UI)是个良好的习惯。例如记录对话框的标题、菜单、按钮等控件的名称。
8.短行之间使用自动数字序号,使用相同的字体、字号、行间距短行之间使用自动数字序号,使用相同的字体、字号、行间距,可以保证各条记录格式一致,做到规范专业。
9.每一个步骤尽量只记录一个操作保证简洁、条理井然,容易重复操作步骤。
10.确认步骤完整,准确,简短保证快速准确的重复缺陷,“完整”即没有缺漏,“准确”即步骤正确,“简短”即没有多余的步骤。
11.根据缺陷,可选择是否进行图象捕捉为了直观的观察缺陷或缺陷现象,通常需要附加缺陷或缺陷出现的界面,以图片的形式作为附件附着在记录的“附件”部分。为了节省空间,又能真实反映缺陷或缺陷本质,可以捕捉缺陷或缺陷产生时的全屏幕,活动窗口和局部区域。为了迅速定位、修正缺陷或缺陷位置,通常要求附加中文对照图。
附加必要的特殊文档和个人建议和注解如果打开某个特殊的文档而产生的缺陷或缺陷,则必须附加该文档,从而可以迅速再现缺陷或缺陷。有时,为了使缺陷或缺陷修正者进一步明确缺陷或缺陷的表现,可以附加个人的修改建议或注解。
12) 检查拼写和语法缺陷在提交每条缺陷或缺陷之前,检查拼写和语法,确保内容正确,正确的描述缺陷。
13) 尽量使用短语和短句,避免复杂句型句式软件缺陷管理数据库的目的是便于定位缺陷,因此,要求客观的描述操作步骤,不需要修饰性的词汇和复杂的句型,增强可读性。
04. 简述一下缺陷的生命周期
打开 :表示问题被提交等待有人处理。重新指派 :问题被重新指派给某人处理。处理 :问题在处理中,尚未完成。固定 :确认此问题存在,但暂时不进行处理。回归 :对已经修复的问题进行回归确认。Reopened :关闭 :问题的最后一个状态。
05. 测试用例设计方法都有哪些?
1.等价类划分法顾名思义,等价类划分,就是将测试的范围划分成几个互不相交的子集,他们的并集是全集,从每个子集选出若干个有代表性的值作为测试用例。
2.边界值分析法长期的测试工作经验告诉我们,大量的错误是发生在输入或输出范围的边界上,而不是发生在输入输出范围的内部。因此针对各种边界情况设计测试用例,可以查出更多的错误。选出的测试用例,应选取正好等于、刚刚大于、刚刚小于边界的值,例如,对于在区间min,max的值,测试用例可以记为min,min+,max,max-。
3.错误推测法错误推测法是指:在测试程序时,人们可以根据经验或直觉推测程序中可能存在的各种错误,从而有针对性地编写检查这些错误的测试用例的方法。
4.判定表法又称为策略表,基于策略表的测试,是功能测试中最严密的测试方法。该方法适合于逻辑判断复杂的场景,通过穷举条件获得结果,对结果再进行优化合并,会得到一个判断清晰的策略表。
5.正交实验法用语言描述正交实验法会很抽象难懂,简单说,就是在各因素互相独立的情况下,设计出一种特殊的表格,找出能以少数替代全面的测试用例。其中,上面所说的特殊表格就是正交表,是按照一定规则生成的表。虽然说是特殊的表格,实际表现形式跟一般的表格没有什么区别,正交表的主要特征是,“均匀分布,整齐划一”,正是因为“均匀”的,所以才能以少数代替全部。
06. 一个文本框要求输入6位数字密码,且对每个账户每次只允许出现三次输入错误,对此文本框进行测试设计的等价区间有哪些?
1.密码为空 登录2.正确输入[输入正确的值] 登录3.错误输入[ 输入错误的值,输入数据例如:特殊符号、英文字母、汉字及非法字符等一些非正确值;输入方法例如:不足六位,超出六位,最大输入值) 登录/取消 ]4.连续错误输入三次以上 [查看连续错误输入后的提示信息及结果]5.其他[是否支持剪贴板操作,例如:复制/剪切/粘贴]
07. 什么时候开始进行性能测试?
性能测试一般分前期阶段和后期阶段。
前期阶段是功能实现后还没有到系统集成时期。可以针对功能实现进行性能测试,看看单独功能实现的响应时间
后期阶段是指系统功能通过功能性测试完毕后,到整体的性能测试阶段。
08. 什么是性能测试、负载测试、压力测试?
性能测试(Performance Test):通常收集所有和测试有关的所有性能,被不同人在不同场合下进行使用。关注点:how much和how fast
负载测试(Load Test):负载测试是一种性能测试,指数据在超负荷环境中运行,程序是否能够承担。关注点:how much
压力测试(Stress Test):压力测试(又叫强度测试)也是一种性能测试,它在系统资源特别低的情况下软件系统运行情况,目的是找到系统在哪里失效以及如何失效的地方。
09. 简述Loadrunner的步骤
使用LoaderRunner进行性能测试的几个步骤:1. 开发脚本(在Vugen中执行):涉及到,脚本的录制、参数化、事务的添加、检查点的设置、同步点的设置。loaderRunner脚本是符合c语言语法的。
2. 场景建立(在Controller中执行):加入脚本(如果脚本中有集合点,应该然集合点在这里生效)、用户设置。
3. 测试结果的分析。
来源:oschina
链接:https://my.oschina.net/u/4352934/blog/4320890