产品测试规范

文章转载来自光荣之路公众号:https://mp.weixin.qq.com/s/4gSsZv2tHvTQ3XJ7x3QwUA?

 产品测试规范

1.1产品测试流程

1.1.1 测试流程图

产品测试规范_第1张图片

1.1.2 测试流程说明

1.  需求阶段

测试人员了解项目需求及需求变更,包括需求规格说明书、功能结构及模块划分,根据需求梳理测试点。

2.  测试计划阶段

测试计划环节需要考虑测试工具选取,考虑需要测试的业务点,涉及到多业务量测试团队测试,需考虑人员分配问题,如:哪些人准备测试执行,哪些人准备测试过程中数据的收集与整理为后面统一分析做准备。

测试环境梳理为测试需要部署哪些应用,应用是单节点部署还是分布式部署,每个应用分配几台机器进行部署,以及测试工具及监控工具的部署等。

测试数据梳理为测试过程中需要考虑可能用到哪些数据如同时登陆的场景需要不同的用户,测试翻页功能需要的数据量,通过测试数据梳理能够理清可能需要编写哪些辅助脚本来进行测试。

测试场景梳理为根据选取的测试业务点来设计需要测试的场景。

3.  测试准备阶段

代码管理为分为开发代码、测试基线、正式基线等,测试代码应在测试基线中进行即与开发的代码管理库分离,测试合格的代码才可以分支到正式基线中。

测试环境的搭建工作也需要进行管理,哪些服务器用来搭建哪些应用应当有对应的部署文档以及部署架构图,即测试环境需心中有数且有文档记录,让人一目了然。

测试用例编写可以根据功能测试框架来进行,覆盖到所需测试的模块以及需求中指出的测试点。

测试数据准备为在系统正式测试前就准备好测试时需要的数据,如移动查单需提前准备好手机号码用来测试查询。

测试脚本准备为测试过程中通过手工无法进行或者效率很低可以通过代码来实现的环节,如:登录用户的准备,千万条用户性能测试同时登录系统,需要编写sql脚本来批量生成用户账号数据,又如:接口测试根据接口测试文档预先编写好所有的接口测试脚本。

4.  测试执行阶段

功能测试可以通过传统测试用例测试+探索式测试一起执行,提高测试产品的质量,性能测试将测试准备阶段准备好的脚本和数据以及部署好的工具,按照写好的测试方案来进行测试,接口测试按照接口测试方案来运行已编写好的脚本。即让所有的测试有条不紊的运行,不是想到哪是哪,而且所有的测试不是一蹴而就的,测试过程中需要进行bug的跟踪,指派给对应的负责人,把握项目的测试进度。

5.  测试结果分析阶段

根据测试的结果、日志收集结果、资源收集结果、异常跟踪结果等汇总分析生成测试分析报告并给出可行性的建议,如果涉及到调优工作,还需对调优结果进行验证,需要对上线的风险进行评估。

6.  上线准备阶段

测试人员需要准备线上测试需要用到的数据,需结合生产环境进行,如系统生成订单测试环境是不需要uim卡号的,但是真实的线上环境需要用到uim卡号,这就需要提前准备好线上测试的数据。

上线准备需要提供测试合格的发布资料(包括:发布包、数据库脚本、用户手册、部署文档、维护手册等)、还需要考虑好回滚方案。

7.  上线后测试跟踪阶段

可以持续构建接口自动化,快速进行一轮接口测试,保证常规接口正常运行,功能测试可以根据测试用例+探索式测试来进行,如果是更新补丁等,需要重点对上线更新的功能进行验证测试,当然测试过程中必不可少要进行bug的跟踪。

8.  项目总结阶段

对于项目整体的质量做总结分析,给出总结报告,测试人员需要根据每次的测试、上线等积累符合项目的bug预防体系,总结项目经常出现bug的种类、位置、以及可以提出针对性的规避措施,提高产品质量。

1.2需求梳理

根据需求文档、需求规格说明书来对需要测试的功能点进行梳理,而且通过需求文档能够更加了解项目的业务场景,一般情况下,在项目中需求文档有3种现状:

1.2.1 有详细的需求文档

比较严谨负责的团队项目的实施是有详细的需求文档的,我们就可以详阅需求文档来进行测试点的梳理工作,对于需求中你认为不明确的地方可以找项目领导人进行沟通,做到对需求整体把握和理解,利于测试更好的进行。

1.2.2  需求文档不明确即有文档但是文档很粗糙

一般有两种办法,如果开发团队很配合,可以要求开发或者需求分析人员完善需求文档,如果因为各种原因比如时间紧张或者开发就是不愿意,那么就需要自己去沟通对于文档中不明确的点问清楚,切记不要含糊不清的测试,于人于己都没有好处。

1.2.3  没有需求文档

如果你运气很不好遇到了,虽然我很同情你,但是貌似同情没啥用,我们知道做测试很重要的一点是:我有一个预期,我要把软件运行的实际值跟我的预期去比对,如果达到了预期,那么就没问题,如果跟预期不一致那就是有问题。那么如果没有需求,我们该怎么办:

第一种靠嘴去问,大家去协调,协商沟通,然后大家都回答没问题了,我会自己写一个概要的需求描述,然后让他去确认,他说可以,那咱们就这样测,有问题就不断的口头沟通;

第二种要基于用户使用的场景和行业的经验来去做判断它是不是合理的。

1.3 测试计划

1.3.1 测试工具选取

产品测试规范_第2张图片

测试工具说明:

产品测试规范_第3张图片

以上列出了自己在测试过程中所用过的一些工具,每种都有自己的利弊和自适应的测试场景,可以进行参考和根据实际需求来进行分析选取。

1.3.2 测试人员分配

测试场景敲定以后,对于大业务量的测试工作或者团队合作测试的任务需要分配好各自的任务,让大家各司其职,如:测试环境梳理和搭建人员、测试数据准备人员、测试脚本编写人员、测试执行人员、测试日志收集人员、测试结果汇总分析人员,每个人可以负责一个模块或者多个模块,更甚者有的项目任务量不多,一个人搞定这么多部分也是大有人在,即一个人搭建环境、一个人准备数据写测试用例准备测试、收集日志进行分析,这对测试人员的要求比较高才能更好保证产品的输出质量。

1.3.3 测试业务场景选取

根据需求说明文档,梳理需要测试的业务点和场景,比如应用系统的性能测试,需测试nginx负载节点的性能情况,是否可支撑1000/s的业务能力,极限环境下支撑2万/s并发,节点接收报文常规为几byte,大报文可达到8k,节点支持分布式部署。则我们根据这些信息可以梳理我们需要测试的场景有:直接压测一台节点观察性能峰值、nginx负载一台节点的性能、nginx负载两台节点的性能、nginx负载三台节点的性能、报文场景为500字节、1KB、8KB、并发数为依次递增至1500并发(保证1000/s并发是否可以),看是否满足常规业务处理能力,极限测试下并发数为2万,测试7*24小时,观察极限处理能力。

1.3.4 测试环境梳理

根据测试场景以及梳理的被测系统、压力系统、压力机情况、给定的服务器数量,绘制测试环境搭建图谱即每个应用系统搭建数量、各节点所在机器,如下图梳理了整个系统部署的流程及每个应用、监控工具、测试工具应该部署的机器情况,让人一目了然。

产品测试规范_第4张图片

1.3.5 测试数据梳理

这里的测试数据内容很广,可包括测试准备和测试执行阶段所需要的一切数据来源,如:测试脚本、测试参数化文件、测试账号、辅助性测试程序等,即让测试工作更加有条不紊的进行,而不是等到测试时才发现这个东西要去找,那个东西又没有弄得自己手忙脚乱,降低测试效率。比如,下面是一段造数据的存储过程脚本:

产品测试规范_第5张图片

1.4 测试准备

1.4.1 代码管理

所有的产品代码应该统一管理起来,开发人员提交代码应与测试代码地址进行分离,做到高效管理代码,当开发人员提交代码到开发的代码库中,需要进行测试时,测试人员可去开发的代码中进行提取代码到测试基线库中,每提取一次就建立一个测试基线,直到此次版本测试合格,在把合格的测试基线提取到正式基线中用于版本发布,这样每个版本都有清晰的界限和记录,使得产品代码清晰一目了然,可以借助代码管理工具,如svn创建基线来帮助管理产品代码:

产品测试规范_第6张图片

1.4.2 测试环境搭建

这个需要配合1.3测试计划的1.3.4测试环境梳理文档和部署文档来进行,根据事先规划好的服务器部署应用策略来搭建测试环境,能让你搭建思路更加清晰,以后维护环境也更加方便。

接触很多公司的测试关于环境这块的梳理工作,有的是有专门的服务器管理人员来管理这些环境,有的是由测试人员自己管理,但需要保证的是测试环境应当与开发环境分离开,让测试更加规范减少不必要的麻烦,遇到一些事情如:开发人员很懒,功能开发完成后让他在服务器上验证一下是不是对的,因为开发环境没人去管理部署上去弄得不好应用就报错无法进行调试,所以有的开发就会为方便起见把自己的验证测试直接弄到测试环境上进行,这样带来一个后果就是,你也来部署一个应用,他也来部署一个应用,久而久之测试环境就会特别乱,对测试人员梳理该环境增加不必要的负担,所以建议测试环境的账号应当只有dba或者测试人员自己知道,与开发环境进行分离。

1.4.3 测试数据脚本编写

功能性测试数据脚本一般为辅助性测试脚本,如:为了验证分页功能,写一个造数据的脚本让界面出现分页效果,帮助自己测试,减少手动一条一条增加数据的时间。

接口测试需要编写接口测试脚本,目前接口测试比较受欢迎的几款工具有:postman、loadrunner、jmeter、soupui、自定义框架,postman工具可以模拟发送http请求,用来做一些简单的接口验证测试比较方便,测试结果需要人眼去核查是否正确;loadrunner和jmeter工具更加智能化,接口测试支持断言/检查点设置,工具自己校验测试结果,支持参数化以及请求间参数关联,可以做一些复杂的场景流程测试;自定义框架可以结合项目适合进行扩展,比工具要灵活,但是需要测试人员有一定的代码基础才能开发出适合项目的接口自动化框架,如:unittest、testng技术等。

性能测试需要编写性能测试脚本,如loadrunner脚本、jmeter脚本等,脚本涉及参数化的地方也需提前构建好,如果系统并发登录需要大量的登录账户,则需要提前造好数据,可以让用户按规则进行,这样脚本中用户就可以用正则编写一定吻合的规则即可,省去大数据参数化的性能损耗。

测试工具层出不穷,在学习各种测试工具、测试技术的同时,不要忘记基本功,编程能力的提升才是重中之重。

1.5 测试用例编写(功能测试框架)

测试用例的编写需要按照一定的思路进行,而不是想到哪写到哪,一般测试机制成熟的公司都会有公司自己自定义的测试用例模板,以及一整套的测试流程关注点,当然我们自己在测试生涯中也应当积累一套自己的测试框架,所有功能性的测试都可以依据框架的思路来进行,达到事半功倍的效果。

功能测试框架可以包括:界面友好性测试、功能测试、链接测试、容错测试、稳定性测试、常规性能测试、配置测试、算法测试等等。

1.5.1 界面友好性测试

1. 风格、样式、颜色是否协调

2. 界面布局是否整齐、协调(保证全部显示出来的,尽量不要使用滚动条

3. 界面操作、标题描述是否恰当(描述有歧义、注意是否有错别字)

4. 操作是否符合人们的常规习惯(有没有把相似的功能的控件放在一起,方便操作)

5. 提示界面是否符合规范(不应该显示英文的cancel、ok,应该显示中文的确定等)

6. 界面中各个控件是否对齐

7. 日期控件是否可编辑

8. 日期控件的长度是否合理,以修改时可以把时间全部显示出来为准

9. 查询结果列表列宽是否合理、标签描述是否合理

10. 查询结果列表太宽没有横向滚动提示

11. 对于信息比较长的文本,文本框有没有提供自动竖直滚动条

12. 数据录入控件是否方便

13. 有没有支持Tab键,键的顺序要有条理,不乱跳

14. 有没有提供相关的热键

15. 控件的提示语描述是否正确

16. 模块调用是否统一,相同的模块是否调用同一个界面

17. 用滚动条移动页面时,页面的控件是否显示正常

18. 日期的正确格式应该是XXXX-XX-XX或XXXX-XX-XX XX:XX:XX

19. 页面是否有多余按钮或标签

20. 窗口标题或图标是否与菜单栏的统一

21. 窗口的最大化、最小化是否能正确切换

22. 对于正常的功能,用户可以不必阅读用户手册就能使用

23. 执行风险操作时,有确认、删除等提示吗

24. 操作顺序是否合理

25. 正确性检查:检查页面上的form, button, table, header, footer,提示信息,还有其他文字拼写,句子的语法等是否正确。

26. 系统应该在用户执行错误的操作之前提出警告,提示信息.

27. 页面分辨率检查,在各种分辨率浏览系统检查系统界面友好性。

28. 合理性检查:做delete, update, add, cancel, back等操作后,查看信息回到的页面是否合理。

29. 检查本地化是否通过:英文版不应该有中文信息,英文翻译准确,专业。

30. 背景灰度冻结

1.5.2 功能测试

1. 使用所有默认值进行测试

2. 根据所有产品文档、帮助文档中描述的内容要进行遍历测试

3. 输入判断

4. 所有界面出现是和否的逻辑,要测试

5. 异常处理

6. 敏感词

7. 根据需求文档的流程图遍历所有流程图路径

8. 根据程序内容,遍历if elif else switch的逻辑点要遍历

9. 界面各种控件测试

如对于输入框测试:

字符型输入框:

1. 字符型输入框:英文全角、英文半角、数字、空或者空格、特殊字符“~!@#¥%……&*?[]{}”特别要注意单引号和&符号。禁止直接输入特殊字符时,使用“粘贴、拷贝”功能尝试输入。

2. 长度检查:最小长度、最大长度、最小长度-1、最大长度+1、输入超工字符比如把整个文章拷贝过去。

3. 空格检查:输入的字符间有空格、字符前有空格、字符后有空格、字符前后有空格

4. 多行文本框输入:允许回车换行、保存后再显示能够保存输入的格式、仅输入回车换行,检查能否正确保存(若能,检查保存结果,若不能,查看是否有正常提示)、

5. 安全性检查:输入特殊字符串

(null,NULL, ,javascript,,,<html>,<td>)、输入脚本函数(<script>alert("abc")</script>)、doucment.write("abc")、<b>hello</b>)</p> <p>数值型输入框:</p> <p>1. 边界值:最大值、最小值、最大值+1、最小值-1</p> <p>2. 位数:最小位数、最大位数、最小位数-1最大位数+1、输入超长值、输入整数</p> <p>3.异常值、特殊字符:输入空白(NULL)、空格或"~!@#$%^&*()_+{}|[]\:"<>?;',./?;:'-=等可能导致系统错误的字符、禁止直接输入特殊字符时,尝试使用粘贴拷贝查看是否能正常提交、word中的特殊功能,通过剪贴板拷贝到输入框,分页符,分节符类似公式的上下标等、数值的特殊符号如∑,㏒,㏑,∏,+,-等、</p> <p>输入负整数、负小数、分数、输入字母或汉字、小数(小数前0点舍去的情况,多个小数点的情况)、首位为0的数字如01、02、科学计数法是否支持1.0E2、全角数字与半角数字、数字与字母混合、16进制,8进制数值、货币型输入(允许小数点后面几位)、</p> <p>4. 安全性检查:不能直接输入就copy</p> <p>日期型输入框:</p> <ol> <li>合法性检查:(输入0日、1日、32日)、月输入[1、3、5、7、8、10、12]、日输入[31]、月输入[4、6、9、11]、日输入[30][31]、输入非闰年,月输入[2],日期输入[28、29]、输入闰年,月输入[2]、日期输入[29、30]、月输入[0、1、12、13]</li> </ol> <p>考虑开始日期与结束日历的比较,特别是在查询的时候.</p> <p>2. 异常值、特殊字符:输入空白或NULL、输入~!@#¥%……&*(){}[]等可能导致系统错误的字符</p> <p>3. 安全性检查:不能直接输入,就copy,是否数据检验出错?</p> <p>1.5.3 业务流程测试(主要功能测试)</p> <p>业务流程,一般会涉及到多个模块的数据,所以在对业务流程测试时,首先要保证单个模块功能的正确性,其次就要对各个模块间传递的数据进行测试,这往往是容易出现问题的地方,测试时一定要设计不同的数据进行测试。</p> <p>如某一功能模块具有最基本的增删改查功能,则需要进行以下测试:</p> <p>1. 单项功能测试(增加、修改、查询、删除)</p> <p>2. 增加——>增加——>增加 (连续增加测试)</p> <p>3. 增加——>删除</p> <p>4. 增加——>删除——>增加 (新增加的内容与删除内容一致)</p> <p>5. 增加——>修改——>删除</p> <p>6. 修改——>修改——>修改 (连续修改测试)</p> <p>7. 修改——>增加(新增加的内容与修改前内容一致)</p> <p>8. 修改——>删除</p> <p>9. 修改——>删除——>增加 (新增加的内容与删除内容一致)</p> <p>10. 删除——>删除——>删除 (连续删除测试)</p> <p>1.5.4 链接测试</p> <p>主要是保证链接的可用性和正确性,它也是网站测试中比较重要的一个方面。</p> <p>可以使用特定的工具如XENU来进行链接测试。</p> <p>1.5.5 容错测试</p> <p>1. 输入系统不允许的数据作为输入</p> <p>2. 把某个相关模块或者子系统停掉,验证对当前系统的影响</p> <p>3. 配置文件删除或者配置错误</p> <p>4. 数据库注入错误数据</p> <p>1.5.6 稳定性测试</p> <p>1. 系统不间断运行(7*24),验证是否内存泄露、系统其他资源是否存在泄露</p> <p>2. 如果很紧急上线,可以跑一晚上或者周末跑两天。</p> <p>一般压力很大的情况下,数据库连接数问题、内存泄露问题会曝露的比较快但是死锁可能不能体现,所以要看系统重要性,如12306稳定性则最好7*24小时</p> <p>1.5.7 常规性能测试</p> <p><strong>1. </strong><strong>连接速度测试</strong></p> <p>用户连接到Web应用系统的速度根据上网方式的变化而变化,他们或许是电话拨号,或是宽带上网。当下载一个程序时,用户可以等较长的时间,但如果仅仅访问一个页面就不会这样。如果Web系统响应时间太长(例如超过5秒钟),用户就会因没有耐心等待而离开。</p> <p>另外,有些页面有超时的限制,如果响应速度太慢,用户可能还没来得及浏览内容,就需要重新登陆了。而且,连接速度太慢,还可能引起数据丢失,使用户得不到真实的页面。</p> <p><strong>2. </strong><strong>负载测试</strong></p> <p>负载测试是为了测量Web系统在某一负载级别上的性能,以保证Web系统在需求范围内能正常工作。负载级别可以是某个时刻同时访问Web系统的用户数量,也可以是在线数据处理的数量。例如:Web应用系统能允许多少个用户同时在线?如果超过了这个数量,会出现什么现象?Web应用系统能否处理大量用户对同一个页面的请求?</p> <p><strong>3. </strong><strong>压力测试</strong></p> <p>负载测试应该安排在Web系统发布以后,在实际的网络环境中进行测试。因为一个企业内部员工,特别是项目组人员总是有限的,而一个Web系统能同时处理的请求数量将远远超出这个限度,所以,只有放在Internet上,接受负载测试,其结果才是正确可信的。</p> <p>进行压力测试是指实际破坏一个Web应用系统,测试系统的反映。压力测试是测试系统的限制和故障恢复能力,也就是测试Web应用系统会不会崩溃,在什么情况下会崩溃。黑客常常提供错误的数据负载,直到Web应用系统崩溃,接着当系统重新启动时获得存取权。</p> <p>压力测试的区域包括表单、登陆和其他信息传输页面等。</p> <p>1.5.8 易用性测试</p> <p>1. 系统界面的控件是否可以通过tab键遍历,并且顺序合理</p> <p>2. 主要功能的入口和操作是否易于理解</p> <p>3. 界面是否布局合理,功能是否易于查找和使用</p> <p>4. 操作步骤</p> <p>5. 操作习惯</p> <p>6. 有足够的提示信息,且信息文字描述准确</p> <p>1.5.9 兼容性测试</p> <p>兼容性测试不只是指界面在不同操作系统或浏览器下的兼容,有些功能方面的测试,也要考虑到兼容性,包括操作系统兼容和应用软件兼容,可能还包括硬件兼容。</p> <p>比如涉及到ajax、jquery、javascript等技术的,都要考虑到不同浏览器下的兼容性问题。</p> <p>除了上面所说的这些测试以外,还有算法测试、配置测试、安全性测试等等,在工作中不断总结和分析,形成自己的功能测试框架,当你把这份工作做起来以后,对于你自己对于测试团队而言都是一份很有价值的事情,你的测试思路也会变得更全面。</p> <p><strong>1.6 </strong><strong>测试执行</strong></p> <p>1.6.1 接口自动化测试</p> <p>搭建好的接口自动化流程,可以方便快速构建一次接口测试,这样能很快定位版本接口是不是基本没有问题,提高版本质量。</p> <p>目前接口自动化测试在测试工具选取中也谈到了,主要有:jmeter、robotframework、自定义框架等,自动化测试的执行可以版本上线后手动触发执行,也可以用定时任务自动触发,或者用工具来进行自动化构建,不变的初衷是用程序或者工具来替代掉一部分的人力操作,让节省出来的人力更好的投入到测试当中。</p> <p>如:一套自定义的测试框架,java+testng+maven+jenkins,版本测试时,Jenkins自动构建运行java+testng+maven框架脚本,去运行事先编写好的接口脚本,生成测试报告,对于测试接口异常的点进行邮件或者短信告警等,这样运维人员能在第一时间知道版本的质量,异常的接口是哪些,减少人工去一个一个核查接口正确性的时间消耗,有更快或更多的时间去处理异常和维护接口。而且一般项目对于接口的变动不会太大,不会全盘重构一般都是新增某些接口,或者修改一些接口,这样接口脚本只需跟着稍微调整即可,复用性很强,在很多项目上的实验都证明接口自动化测试带来的收益很大。</p> <p>1.6.2 探索式测试</p> <p>探索性测试强调测试人员的主观能动性,抛弃繁杂的测试计划和测试用例设计过程,没有很多实际的测试方法、技术和工具,强调在碰到问题时及时改变测试策略。 探索性测试强调测试设计和测试执行同时性,完全抛开测试用例,使用定义的比较笼统的测试用例,则称之为探索式测试。</p> <p>测试人员可以根据收集到的信息,天马行空,自由发挥;测试结果、测试实例和测试文档在测试执行时创建;探索式测试适用于“敏捷开发过程”。</p> <p>在用传统的测试用例执行测试的同时,可以使用探索性测试来让测试用例更加的丰富和富有变化,提高测试代码的覆盖率,发现产品更多的问题。  </p> <p>1.6.3 传统测试用例测试</p> <p>传统用例的设计方式有:等价类划分法、边界值、正交实验、因果图、功能图、场景法、错误推测、随机测试、对象属性分析测试等方法,根据这些方法可以选取一种或者多种适合系统的设计方法来编写和设计我们的测试用例,让自己的测试有条理,尽可能多的覆盖测试点,提高产品的质量。</p> <p>这里给出一个等价类划分法结合边界值方法的测试用例设计例子:</p> <p>某报表处理系统要求用户输入处理报表的日期,日期限制在2001年1月至2008年12月,即系统只能对该段期间内的报表进行处理,如日期不在此范围内,则显示输入错误信息。系统日期规定由年、月的6位数字字符组成,前四位代表年,后两位代表月:</p> <p>分析输入条件有:200101到200812;6位;数字</p> <p>等价类表:</p> <p><a href="http://img.e-com-net.com/image/info8/47f18612694949b4ad27451b9ba5b510.jpg" target="_blank"><img alt="产品测试规范_第7张图片" class="has" height="133" src="http://img.e-com-net.com/image/info8/47f18612694949b4ad27451b9ba5b510.jpg" width="353" style="border:1px solid black;"></a></p> <p>测试用例:</p> <p><a href="http://img.e-com-net.com/image/info8/541969db88d042f59e94c6c5d5fee653.jpg" target="_blank"><img alt="产品测试规范_第8张图片" class="has" height="165" src="http://img.e-com-net.com/image/info8/541969db88d042f59e94c6c5d5fee653.jpg" width="350" style="border:1px solid black;"></a></p> <p>那么根据这些测试用例我们就能很好的测试这个“用户输入处理报表的日期”的功能,其他的功能点类推,我们根据1.4中准备好的功能测试框架进行套用,每个模块都按预期设计的方案来进行测试,这样就能保证一些常规部分的功能点更多的被覆盖到。</p> <p>1.6.4 Bug跟踪</p> <p>测试人员在测试过程中对于遇到的bug需要进行记录和跟踪,不要觉得不严重的bug口头上说一声或者其他形式表达一下就可以不用记录了,因为bug的记录有利于产品领导了解产品的质量情况,有很多bug管理工具,如:readmine、禅道等,从测试用例到bug生成,指派给开发,返工次数,每次解决的理由到最后关闭即整个的bug生命周期都能做到很好的管控,帮助产品经理或项目经理进行下一步的产品优化、以及对产品质量做一个把控。</p> <p><strong>1.7 </strong><strong>测试结果分析</strong></p> <p>1.7.1 结果收集</p> <p>包括测试脚本测试结果,测试用例执行结果、服务器操作系统资源监控结果、数据库资源监控、web服务器监控、中间件服务器监控等结果的收集,如:功能测试测试用例数目,成功失败数,性能测试结果,各服务器资源监控结果,磁盘,io,内存消耗进程图等。</p> <p>这些收集的结果能帮助测试、产品进行测试结果的分析,哪些问题放到下一个版本中进行解决也可以通过这个来进行规划。</p> <p>1.7.2 结果分析</p> <p>根据收集的测试结果,分析系统的稳定性,健壮性,功能测试可以通过结果分析得到版本的bug率,严重bug数、bug返工率等,对于系统后续优化有很大帮助;性能测试通过结果分析知道系统的性能指标,来判断本次系统迭代性能是否有提高,或者对于一个从无到有的系统来说,能预估系统在未来的某段时间能否承受住那么大的业务量。</p> <p>1.7.3 测试分析报告</p> <p>根据分析的结果,生成测试分析报告,给定系统的稳定性指标,让系统相关人员知道该版本的质量情况,提供项目上线的风险评估,如果技术可以,还可以提供针对项目问题的改进计划,帮助提高产品质量。如果系统的性能不达标还需考虑后续系统的调优工作,可以找项目相关负责人,dba等相关专家,一起来做性能调优工作,因为性能调优是一项复杂的工作,仅靠测试人员自己之力一般很难做好调优工作,所以可以借助集体的力量共同完成,调优工作完成后,还需回环在进行一次测试工作,验证调优的效果。</p> <p><strong>1.8 </strong><strong>上线准备</strong></p> <p>1.8.1 版本发布</p> <p>测试合格的代码可以进行版本发布工作,版本发布需要给出:发布包、发布文档、数据库脚本等材料,发布文档包括:用户手册、管理员手册、版本发布说明、对于首次发布还需提供产品发布说明、部署手册、测试分析报告等相关文档,这样每次的版本迭代都有相应的文档等材料一一对应,为项目更长远的发展打下基础。</p> <p>1.8.2 数据准备</p> <p>上线测试跟踪需要做好测试的准备工作,如线上数据准备,版本回退方案准备等,所有测试可能用到的脚本都应提前准备好,避免测试时手忙脚乱,影响效率。</p> <p><strong>1.9 </strong><strong>上线测试跟踪</strong></p> <p> </p> <p>1.9.1 跟踪测试</p> <p>系统上线后,可以做接口自动化的快速轮询测试,保证系统常用接口功能正常;对于版本迭代的功能要进行局部功能重点验证,看功能是否正常;常规的测试可以按照探索式测试+传统测试用例测试来进行,更全面的检查系统功能点;在跟踪测试过程中应该做好bug的记录工作,对于严重性bug需要开发修改后进行在一轮的验证测试,对于业务影响不大,如界面某个友好性提示问题,需做好问题记录,务必在下一次版本中优化掉,提高用户体验度的同时兼顾项目的实际情况。</p> <p>可能用到的脚本都应提前准备好,避免测试时手忙脚乱,影响效率。</p> <p><strong>1.10 </strong><strong>Bug</strong><strong>预防体系</strong></p> <p>1.10.1 web常见产品问题及预防</p> <p>测试人员在每次版本迭代中,会对项目的整体质量有一个把控,对于项目常见的问题,开发经常犯的错误都会有所了解,为了避免或者减少这样的错误或不规范的事情在发生,测试人员可以整理构建属于产品的bug预防体系,总结项目经常出现bug的种类、位置、以及可以提出针对性的规避措施,提高产品质量。</p> <p>1F分辨率兼容性</p> <ul> <li>产品的网页通常保证在1024*768的分辨率下显示正常,但是常常忽略800*600分辨率下的显示情况,还有其他特殊要求的分辨率</li> <li>如果页面设计明确只考虑1024*768的需求,则只在1024*768下验证各个产品页面的显示正确无误</li> </ul> <p>预防方法:</p> <ul> <li>产品:需要明确产品需要兼容的常见屏幕分辨率</li> <li>开发:网页页面的设计需要针对多种屏幕分辨率制定设计规范,并依据设计规范进行开发</li> <li>测试:在不同分辨率下验证页面显示的兼容正确性</li> </ul> <p>2F浏览器兼容性</p> <p>目前市场上的主流浏览器如下:</p> <p>a. IE 6.0-11<br> b. 360 浏览器<br> c. 猎豹浏览器<br> d. QQ 浏览器<br> e. Chrome 浏览器<br> f. FireFox 浏览器</p> <p>通常情况下要保证IE 6-11和360 浏览器下的兼容性,需要保证页面不变型,Js执行均正确</p> <p>预防方法:</p> <ul> <li>产品:依据主流的浏览器市场占比,评估你需要兼容的浏览器</li> <li>开发:针对需要兼容的浏览器类型和版本,指定浏览器兼容设计开发规( CSS和Js 为主),并不断总结兼容性的经验教训</li> <li>测试:在产品要求兼容的浏览器类型和版本下,进行兼容性测试</li> </ul> <p>3FLink问题</p> <p>所有链接是否按指示那样确实链接到了该链接的页面</p> <p>所链接的页面是否存在</p> <p>保证Web应用系统上没有孤立的页面,所谓孤立页面是指没有链接指向该页面</p> <p>链接的打开方式是否合理(在当前窗口中打开、打开新窗口)</p> <p>有死链</p> <p>预防方法:</p> <p>产品:提供的需求中明确是否需要链接以及链接的位置以及链接的打开方式</p> <p>测试:死链测试可以采用工具自动进行</p> <p>4F快捷键和焦点</p> <p>Tab键和焦点的切换:在测试的页面中使用Tab键可以在全页面的所有元素进行焦点切换、并且要将相邻元素的 tab键切换顺序做到关联。</p> <p>如:a. 用户打开登录首页,则焦点应该默认显示在用户名输入框中</p> <p>b. 在用户名输入框输入用户名之后,按下tab 键后,焦点应该切换到密码输入框中,而不是切换到其他元素上。</p> <p>c. 输入密码后,按下tab键可将焦点切换到“保存密码”的复选框或者登录按钮以上操作,均对偏好使用快捷键的用户给于更友好的支持。</p> <p>预防方法:</p> <p>产品:考虑页面的默认焦点设定位置,设定tab键在界面上切换焦点的顺序</p> <p>开发:依据产品人员的要求实现默认焦点位置,和tab 键的切换顺序</p> <p>测试:验证默认焦点位置和tab切换的顺序</p> <p>5F前进、后退和刷新</p> <p>IE 有一个特性:就是允许前进、后退到某一个页面或在当前页面刷新,在某些特殊业务场景的要求下,用户进行前进、后退和刷新当前页面的操作,会造成数据不完整、校验失败或者重复提交的情况。</p> <p>预防方法:</p> <p>产品:明确哪些敏感页面不允许前进、后退和刷新,一般情况下充值和支付等相关的页面或者其他数据提交页面禁止后退和刷新后提交。</p> <p>开发:从技术层面考虑后退和前进操作是否会造成系统漏洞,让用户重复充值或者支付。如果用户尝试后退,则让页面强制失效或者禁止后退。</p> <p>测试:和产品确认禁止后退的操作限制页面,进行针对性测试</p> <p>6F页面/JS/程序提示语言</p> <p>通常情况下,产品人员并不会将产品需求细化到某句话应该如何提示用户,所以不同的程序员会根据自己的语言特点来提示用户,这就造成了不同程序员提示的语言风格完全不一样,造成产品友好度下降。</p> <p>预防方法:</p> <p>产品:产品人员和开发人员一起制定尽可能大而全的产品提示语言规范,并且作为规范说明提供给开发人员进行使用。</p> <p>开发:遵守语言说明规范,并且针对各种系统的要求不断补充和规范提示</p> <p>测试:测试过程中,验证语言是否符合指定的语言规范</p> <p>语言文字提示:</p> <p>a. 全角字符和半角字符都要使用一个空格分开</p> <p>b. 英文和数字之间要有空格分开</p> <p>c. 汉字和英文、数字要有空格分开</p> <p>d. 带有汉字的话要使用全角字符</p> <p>e. 语言中不要混用全角和半角标点</p> <p>f. 在语言中,永远不要用“你”这个字,要做一些操作步骤描述的时候,要多用“请”字</p> <p>7F文字缩略和折行</p> <p>输入框提交很长的纯英文字母或者数字(不带任何全角字符和中文),并且不换行,则提交数据后,页面可能被此相关字符拉伸的特别长。</p> <p>预防方法:</p> <p>开发:提交公共处理字符的程序,解决上述问题,在所有输入框中增加相关处理</p> <p>测试:所有输入框需要进行此输入测试,保证页面不会被用户的恶意输入拉长</p> <p>8F图片的显示和链接</p> <p>图片是否增加链接通常会被开发人员忽略掉图片的显示位置通常会显示不同像素大小和比例的图,所以需要明确定义大图片如何缩减成为小图片的策略,以及小图片如何拉伸显示为大的图片。</p> <p>预防方法:</p> <p>产品:提供的需求中明确图片是否需要链接以及链接的url地址以及点击后实在当前页打开,还是弹出新页面打开。明确用户上传图片的显示方法,采用等比缩放,还是原大小显示,还是自适应显示 </p> <p>开发: 按照产品要求进行开发,针对图像的显示开发统一显示模块</p> <p>测试:点击图片链接,验证图片链接的正确性和打开方式是否符合产品设计要求。传不同格式的图片(长方形图、正方形的图、原型图、超大图和超小图),验证图片显示策略符合产品</p> <p>9F重复提交</p> <p>用户提交数据页面,用户有可能连续多次点击提交按钮,造成数据的重复提交。</p> <p>黑客或者不良用户通过抓包可以获取提交的url ,进行尝试重复提交。</p> <p>预防方法:</p> <p>开发:点击“提交”后,将按钮变为Disable状态,禁止用户再次点击。针对每条提交的数据需要增加校验参数,方式不良用户通过其他工具恶意提交。</p> <p>测试:通过页面验证按钮点击后的状态,通过工具发送重复提交的请求,验证系统是否可以处理重复提交的问题(金融系统需重点测试)</p> <p>10F输入判断问题</p> <p>所有键盘输入的特殊字符,均可以正常保存</p> <p>需要特别处理英文单引号、英文双引号等引起程序错误的问题</p> <p>需要处理“ <”、“ /”和“ \”等容易保存出错的字符</p> <p>数字框只能输入数字的内容</p> <p>日期框需要判断日期是否合法</p> <p>文本框需要判断字段长是否限制了</p> <p>对于空格的处理,如果系统想trim掉字符串最开头和最后的空格,则需要整个儿系统都使用此策略,否则会造成数据传递不一致的问题</p> <p>需要前台页面使用js来判断输入的合法性,同时后台逻辑也要添加判断输入合</p> <p>预防方法:</p> <p>开发:开发公共处理特殊字符的模块,在系统中进行规范应用</p> <p>测试:对所有输入字段,进行输入判断测试,超长、空、特殊字符、 utf8字符等,并验证其他页面输入有效性,验证前台和后台均加有输入判断逻辑</p> <p>11F多个ie同时访问</p> <p>用户可能打开不同的IE使用相同的用户登录后进行操作,程序处理的时候要考虑到数据的一致性和同步问题</p> <p>多个IE使用不同用户,则cookie操作不会出现用户信息混乱的问题</p> <p>预防方法:</p> <p>开发:提前考虑到多个IE操作和多用户操作的使用场景,在使用cookie本地信息时需要做好针对性的程序处理,依据以往出现的问题设计开发规范</p> <p>测试:按照多浏览器和多用户的使用情况,进行更多场景的测试</p> <p> </p> <p>12F安全考虑</p> <p>在URL中不要带有明文的用户信息写代码的时候,不要把密码等敏感的用户信息明文的显示在url中</p> <p>即使要传递密码参数也不要使用pwd、 passpord这样的参数名称来进行传递,防止被截获</p> <p>要在传递参数的操作中使用NoCache参数,防止将url参数进行缓存</p> <p>预防方法:</p> <p>开发: 建立数据传输技术规范和参数命名规范标准,严格参照执行,防止信息被拦截,造成应用系统的信息泄露</p> <p>测试:在缓存目录验证缓存信息是否有敏感信息,通过抓包方式验证是否暴露了敏感信息</p> <p>13F直接URL链接检查</p> <p>在Web系统中,匿名在地址栏直接输入各个功能页面的URL地址,检查系统是否处理了权限控制</p> <p>预防方法:</p> <p>开发:代码走查的方式确认所有页面的具有权限验证逻辑</p> <p>测试:获取所有系统url,在非登录情况下进行遍历截图,或关键字判断,验证非登录状态下无法访问具有访问权限限定的</p> <p>14F防止sql注入和跨站攻击</p> <p>不要把数据库或者程序的任何报错信息显示在页面上。</p> <p>数据库中设计到操作权限的表名和字段名不要使用过于通俗易懂的命名,尤其是用户和密码之类的信息,禁止使用明文存储密码</p> <p>页面回显的input text, input hidden中的文本内容需过滤 “ <、 >、 ”、 ’等字符(半角转换为全角或者删除掉),防止 Javascript 的跨站攻击</p> <p>预防方法:</p> <p>开发:出错的时候使用错误处理页面,建立标准的过滤关键字程序,统一数据库设计命名规范将敏感的表名做特殊命名处理,密码使用Md5或其他加密方式保存</p> <p>测试:验证所有页面不会暴露系统的任何出错信息使用安全工具appscan 或其他工具扫描系统的sql注入漏洞和跨站攻击漏洞</p> <p>15F关于cookie</p> <p>Cookie没有设定过期时间IE不支持Cookie的时候没有任何提示信息Cookie中的敏感信息没有进行加密</p> <p>预防方法:</p> <p>开发:明确cookie生存期,并对生成的cookie进行检查,建立标准的检查浏览器对cookie支持的程序函数</p> <p>测试:检查cookie的生存周期,以及是否存在敏感内容</p> <p>16F各种资源链接的释放</p> <p>有的时候,系统莫名访问不了,有可能是数据库连接没有释放压力测试的时候,连接释放如果效率不高,则有可能出现大量连接超时失败内存泄露,长时间工作内存被占满了。</p> <p>预防方法:</p> <p>开发:系统资源的释放过程,最好通过代码review的方式来互相监督</p> <p>测试:进行稳定性测试,验证长时间工作情况下的资源是否可以释放</p> <p>关于keepalive的设置:</p> <p>如果需要在一个连接同时获取多个资源,则需要打开apache或者resin的Keepalive参数为On,来提高系统的处理能力,减少多次建立连接所消耗的资源。如果大量的处理只是一次性连接,则不要打开Keepalive设置。在实际工作中,需要将keepalive分别设置On或者Off来验证哪个设置的性能更好。</p> <p>17F系统上线的log配置</p> <p>上线以后,要关闭无用大量调试log信息不要打开过多的log</p> <p>预防方法:</p> <p>运维和开发:系统管理员对所有打开log级别进行确认,并群发相关人确认</p> <p>18F用户易用性</p> <p>用户删除某个数据前,要明确提示用户是否要删除,默认把焦点选择为“否”。</p> <p>预防方法:</p> <p>开发:按照上述要求进行焦点设定</p> <p> 测试:进行测试确认</p> <p>19F文档</p> <p>程序实现和接口文档描述不一致</p> <p>预防方法:</p> <p>开发:团队中专人定期对接口文档进行审核和更新,保证文档、需求变更和程序实现保持一致</p> <p>测试:仅参照文档进行测试</p> <p>20F多表操作</p> <p>详细设计文档缺失,接口对多表进行操作时候,经常会发生有些表的数据没有被更新的情况</p> <p>预防方法:</p> <p>开发:审核设计文档是否覆盖必要的逻辑,加强代码审查</p> <p>测试:通过查询接口判断所有插入接口的数据库操作是否正确</p> <p>等等,这些我们完全可以在不断测试过程中进行总结和积累,可以给开发进行培训,让他们了解这些常见的问题,在自测时注意这些问题,提高送测产品的质量。</p> <p>1.10.2 app常见产品问题及预防</p> <p><strong>01  </strong><strong>界面适配</strong></p> <p>a:手机分辨率为1920x7080的高分辨率手机,在调整手机字体大小时,会导致页面显示出现变形;</p> <p>b:因用户设置的特殊字体导致列表的字母条不显示;</p> <p>c:某些 banner 图片在部分机型只能显示一半。</p> <p>预防方法:</p> <p>a:文字或者图片需要适配不同分辨率的机型时,建议使用dp方式进行开发,即使是使用dp,也需要考虑特殊分辨率的机型显示;</p> <p>b:适应宽度/适应高度/高宽均适应的;</p> <p>c:针对程序需求,设定合适的适配机制。</p> <p><strong>02  </strong><strong>系统适配</strong></p> <p>a:调用高版本API,导致某些机型进入主页显示空白页面。</p> <p>预防方法:</p> <p>a:调用高版本API,需要考虑兼容性,开发团队需要制定程序API调用规范。</p> <p><strong>03  </strong><strong>交互适配(</strong><strong>1</strong><strong>)</strong></p> <p>a:在输入框操作时,调出系统输入法软键盘后,没有有效启用键盘上的 “下一项”、“确定”、“搜索”等按键;</p> <p>b:系统软键盘,在关闭当前页面时没有及时收起软键盘。</p> <p>预防方法:</p> <p>a:需求设计过程中需要考虑输入法操作键的使用细节,确保所有软键盘的输入键可使用;</p> <p>b:设计规范:程序/页面设计针对输入法操作键的使用制定规范</p> <p><strong>04  </strong><strong>交互适配(</strong><strong>2</strong><strong>)</strong></p> <p>a:APP界面的“返回”操作与手机系统的“返回”按键操作效果不一致;或界面未提供“返回”,在无系统“返回”按键的手机上,无法返回。</p> <p>预防方法:</p> <p>a:设计规范:程序设计针对手机返回键制定使用规范;</p> <p>b:在设计中要综合界面需求设定是否提供 “返回”操作。</p> <p><strong>05  </strong><strong>界面风格</strong></p> <p>a:对话框标点、英文字符出现全角、半角的不统一;</p> <p>b:对话框、提示浮动框提示语风格不同,显示位置均不同,产品友好度下降;</p> <p>c:字体和字号要在app中是不同的风格。</p> <p>预防方法:-语言文字提示规范</p> <p>a:全角字符和半角字符都要使用一个空格分开;</p> <p>b:英文和数字之间要有空格分开;</p> <p>c:汉字和英文、数字要有空格分开;</p> <p>d:带有汉字的话要使用全角字符;</p> <p>e:语言中不要混用全角和半角标点;</p> <p>f:字体和字号要保持统一的风格。</p> <p><strong>06  </strong><strong>性能优化</strong><strong>(1)</strong></p> <p>a:进入一些列表,若数量较多则会出现卡死:;</p> <p>b:界面显示对象数量较多,某些会导致页面操作卡顿,用户体验很差;</p> <p>c:处理大量数据时,用户等待时间过长,无进度条提示进度。</p> <p>预防方法: </p> <p>a:程序对耗时较多的操作逻辑、判断逻辑,不放入UI主线程;</p> <p>b:对数据库记录较多的操作,可以改成数据库批量操作,或者 调用批量接口;c:程序在后台处理用户的输入,则提供进度条或对话框。</p> <p><strong>07  </strong><strong>性能优化</strong><strong>(2)</strong></p> <p>a:后台播放内存泄露;</p> <p>b:程序后台运行的时候,手机一直处于占用CPU的运行状态;</p> <p>c:页面中的动态效果(如:马灯滚动)次数无限制,导致界面不断刷新消耗资源。</p> <p>预防方法: </p> <p>a:使用静态分析工具或代码检查方式检查内容的分配和释放;</p> <p>b:WakeLock机制是防回收技术,当没有播放、下载等操作时,应该主动关闭后台的唤醒锁,减少耗电。当再次需要使用播放、下载功能时才去开启唤醒;</p> <p>c:对刷新消耗资源类操作,要有次数限制。</p> <p><strong>08  </strong><strong>多服务、多进程</strong></p> <p>a:某些功能操作后, app 无法连接网络;</p> <p>b:进程被杀死后重启,通知栏中显示的信息不正确,没有显示正确的信息;</p> <p>c:app未启动,通过其他第三方app的调用入口调用app ,无法正常使用某些功能;</p> <p>d:服务停止后,无法被启动;</p> <p>f:程序被手动退出后,进程仍然在后台存在。</p> <p>预防方法: </p> <p>a:重新初始化时获取值时读取到空值,因此赋予一个默认值;</p> <p>b:服务重启被回收重启时,初始化对象时要判断当前是否已存在,若存在则复用并更新内容</p> <p>c:任务独立,需要创建不同的服务,生命周期不会互相影响,服务独立可以避免某个服务结束会影响到其他功能的正常使用。</p> <p>总体,对有启用多服务、多进程的程序,有需要做好服务、进程的一致性管理。</p> <p><strong>09  </strong><strong>外部调用</strong></p> <p>a:某些机型启动app之后一直在调用某些外部服务(通过后台服务可以看到其他服务进程,退出app后,有些服务进程消失)</p> <p>b:某些功能模块被扫描成存在木马病毒;</p> <p>c:安全管家告警程序获取绝密权限(通讯录权限)。</p> <p>预防方法: </p> <p>a:调用第三方功能作为统计或者监控作用时,需要考虑该sdk是否会一直唤醒app导致耗电或者程序无法真正关闭问题;</p> <p>b:调用外部第三方SDK,要考虑被安全工具(上次有广告被扫描到病毒)扫描的设计需求;</p> <p>c:及时关闭不需要的服务进程,在能满足需求的情况下,尽量减少使用敏感的系统权限。</p> <p><strong>10  </strong><strong>网络机制</strong><strong>(1)</strong></p> <p>a:网络重试操作机制不统一,导致页面超时体验风格不统一;</p> <p>b:某些应用页面,访问响应慢。 </p> <p>预防方法: </p> <p>a:对底层网络重试机制做统一封装后,供上层调用;</p> <p>b:固定好每次重试间隔(建议10s重试)和重试总次数(建议3次);</p> <p>c:为使页面提示可以区分网络层与业务解析层不同错误,需对不同错误类型做分类的异常处理,并提示用户原因或让用户重试;</p> <p>d:对多个网络请求的界面,网络接口并行请求有利于提高响应速度。</p> <p><strong>11  </strong><strong>网络机制</strong><strong>(2)</strong></p> <p>a:未加载完图片时切换到相似tab,切回不再加载图片;</p> <p>b:进入一个tab,该页面已经加载完成,选择点击某个详细信息页面返回时,页面会闪一下。 </p> <p>预防方法: </p> <p>a:一个页面有多个tab页时,用户切换tab可不轻易取消线程,取而代之使用暂停线程,退出页面时才回收清除;</p> <p>b:启动负载分摊机制的请求,可先保存请求地址,供返回时判断避免重复加载。</p> <p><strong>12  </strong><strong>网络机制</strong><strong>(3)</strong></p> <p>a:iOS弱网络下获取不到配置,导致启动卡死;</p> <p>b:sim卡未激活,无移动网络,某些功能卡死;</p> <p>c:断网下启动,登录状态丢失,某些功能信息未正确显示。</p> <p>预防方法: </p> <p>a:启动逻辑中的网络类请求不能阻塞UI主线程,即网络请求数据可不即时响应(可在下次启动时生效);</p> <p>b:按钮的点击事件不跟接口关联,做成异步处理不管是否有返回,都可以正常进行点击操作;</p> <p>c:离线操作类,不因与当前网络状态有影响。</p> <p><strong>13  </strong><strong>下载空间有效性判断</strong></p> <p>a:空间不足时,无法保存信息时,没有提示和提前判断;</p> <p>b:本地存储空间不足时,保存文件时没有相应提示;</p> <p>c:空间不足时,文件下载不成功,导致重复不停下载,浪费用户流量。</p> <p>预防方法: </p> <p>a:对磁盘剩余空间的判断和自动清理逻辑可以做统一封装,提供各不同下载业务使用</p> <p>b:可结合系统硬件配置的10%作为有效剩余空间阀值;</p> <p>c:针对手机内外置SDCard,可以在空间不足情况下做分区切换机制。</p> <p><strong>14  </strong><strong>下载文件完整性判断</strong><strong>(1)</strong></p> <p>a:换肤图片未下载完,就触发换肤操作,导致换肤效果错误;</p> <p>b:图片无法下载完全,导致图片展示不完整;</p> <p>c:文件下载完成后,由于网络错误与源文件不符,导致下载后无法播放;</p> <p>d:上传文件功能,目标物理文件不存在(界面缺显示存在),导致传送文件页面一直处于等待中。 </p> <p>预防方法: </p> <p>a:通过判断下载前后文件的size或者文件内容签名,确保下载文件完整后再触发文件使用相关的逻辑;</p> <p>b:文件传输时检查文件是否存在,若不存在则视为传输失败,不阻塞后续传输。</p> <p><strong>15  </strong><strong>阻断连续操作</strong></p> <p>a:连续快速切换界面,或者频繁触发某些功能操作,导致程序卡死;</p> <p>b:连续多次点击同一张图片,导致该图片下载错误。</p> <p>预防方法: </p> <p>a:使用间隔响应、延迟响应的方式,达到多次相同操作只的触发一次有效逻辑。</p> <p>b:操作一次后,可将按钮等元素设定为禁用状态,防止用户多次点击和请求。</p> <p><strong>16  </strong><strong>有效统计逻辑</strong></p> <p>a:操作页面某些元素,也会导致发送页面使用的统计信息。</p> <p>预防方法: </p> <p>a:为确保统计数据上传的有效性,只针对真正展示的界面做上报统计,对于展示不完整、非针对性展示不做统计上报。</p> <p><strong>17  </strong><strong>程序健壮性判断</strong><strong>(1)</strong></p> <p>a:分享到新浪微博(手机未装新浪微博客户端) ,app崩溃;</p> <p>b:后台接口变更(返回值和类型发生变化),客户端不兼容新格式判断,抛出崩溃异常;</p> <p>c:搜索默认操作崩溃;</p> <p>d:使用外部第三方数据,出现空数据或者非标准格式,则app崩溃</p> <p>e:输入框没有限制字符长度,保存时导致溢出崩溃。</p> <p>预防方法: </p> <p>a:客户端针对接口返回需做容错处理,如返回为空、返回数据类型不一致;</p> <p>b:任何文本框类型的需要限制输入长度。</p> <p><strong>18  </strong><strong>程序健壮性判断</strong><strong>(2)</strong></p> <p>a:某些功能的初始化逻辑没有加入启动逻辑,导致功能使用失败;</p> <p>b:退出重启app,无法自动登录。</p> <p>预防方法: </p> <p>a:制定启动加载逻辑规范;</p> <p>b:对于重要的业务建议加入启动逻辑,并在业务实际使用时再根据状态多一层判断和加载;</p> <p>c:产品人员需要考虑是否需要保存自动登录功能,并明确告之开发和测试人员。</p> <p><strong>19  </strong><strong>安全机制</strong></p> <p>a:在URL中不要带有明文的用户信息写代码的时候,不要把密码等敏感的用户信息明文的显示在url中;</p> <p>b:即使要传递密码参数也不要使用pwd、 passpord这样的参数名称来进行传递,防止被截获;</p> <p>c:要在传递参数的操作中使用NoCache参数,防止将url参数进行缓存。</p> <p>预防方法: </p> <p>a:建立标准的数据传输和命名规范,并制作一些网页开发模板或者规范供参考。</p> <p><strong>20  </strong><strong>日志调试管理</strong></p> <p>a:上线以后,调试日志没有关闭,影响程序性能。</p> <p>预防方法: </p> <p>a:日志统一开关,编译正式包需要关闭;</p> <p>b:再程序界面有入口可以检查是否关闭,方便及时校验;</p> <p>c:方便定位问题,可以做日志动态开启的隐藏开关;</p> <p>d:方便收集问题,可以对问题类型做上报处理(典型如崩溃日志上报)。</p> <p><strong>1.11 </strong><strong>Bug</strong><strong>管理规范</strong></p> <p>1.11.1 bug提交规范</p> <p>Bug的报告要求描述内容清晰、简介、易懂,让用根据简要描述就可以大致了解问题所在:</p> <table> <tbody> <tr> <td style="vertical-align:middle;"> <p>缺陷ID</p> </td> <td style="vertical-align:top;"> <p>BUG的唯一标识,由BUG管理工具自动生成。</p> </td> </tr> <tr> <td style="vertical-align:middle;"> <p>项目名称</p> </td> <td style="vertical-align:top;"> <p>每个要测试的软件项目都有唯一的名称。</p> </td> </tr> <tr> <td style="vertical-align:middle;"> <p>问题类型(严重程度)</p> </td> <td style="vertical-align:top;"> <p>BUG所属的类型(即严重程度),包括致命问题、严重问题、一般  问题、优化建议等。缺陷标题简明的对BUG进行概要描述。</p> </td> </tr> <tr> <td style="vertical-align:middle;"> <p>缺陷标题</p> </td> <td style="vertical-align:top;"> <p>简明的对BUG进行概要描述。</p> </td> </tr> <tr> <td style="vertical-align:middle;"> <p>优先级</p> </td> <td style="vertical-align:top;"> <p>BUG解决的优先级。</p> </td> </tr> <tr> <td style="vertical-align:middle;"> <p>所属模块</p> </td> <td style="vertical-align:top;"> <p>项目的各个组成模块。</p> </td> </tr> <tr> <td style="vertical-align:middle;"> <p>测试版本</p> </td> <td style="vertical-align:top;"> <p>提交BUG时,一定要正确填写产生BUG的软件版本号。</p> </td> </tr> <tr> <td style="vertical-align:middle;"> <p>分派人</p> </td> <td style="vertical-align:top;"> <p>BUG需要指派处理的人员,如果不清楚统一给项目负责人。</p> </td> </tr> <tr> <td style="vertical-align:middle;"> <p>报告人</p> </td> <td style="vertical-align:top;"> <p>报告BUG的人员。</p> </td> </tr> <tr> <td style="vertical-align:middle;"> <p>测试环境</p> </td> <td style="vertical-align:top;"> <p>可根据实际描述当前测试的软硬件环境,以作为参考。</p> </td> </tr> <tr> <td style="vertical-align:middle;"> <p>详细描述</p> </td> <td style="vertical-align:top;"> <p>在详细描述中,可对BUG产生的前提条件、操作的步骤、实际结 果、预期结果等进行描述。</p> </td> </tr> <tr> <td style="vertical-align:middle;"> <p>文字注释与附图</p> </td> <td style="vertical-align:top;"> <p>在提交BUG时,可上传必要的附图,便于确认错误的表现形式和 错误位置等。</p> </td> </tr> </tbody> </table> <p>在提交BUG时,提交人可根据提交BUG的紧急程度,选择对应的“优先级”,同时建议开发人员在处理BUG的时候能够根据优先级进行处理,优先级别较高的可以最先进行处理。</p> <p>在BUG详细描述中,可在从BUG产生的前提条件、操作的步骤、实际结果、预期结果等方面进行描述:</p> <p>1. 前提条件:有些BUG的产生是需要在一定条件下才会出现,例如浏览器、分辨率、Office版本等,所以就要求在描述时描述清楚前提条件;</p> <p>2. BUG的操作步骤:详细的、有次序的、每一步的操作步骤,包括输入的数据,尽可能的重新操作的步骤;</p> <p>3. 实际结果:指的我按照以上的操作步骤,最后得出的结果是什么, 例如我点击“增加”按钮后出现白页,这就是实际结果;</p> <p>4. 预期结果:指的我按照以上的操作步骤,我想要得到的结果是什么,例如我点击“增加”按钮想要得到的预期结果是提示我“增加成功”提示;</p> <p>5. 图文描述:在必要的情况下可上传截图并注释文字,这样更便于确认错误的表现形式和错误位置等。</p> <p>一般情况下,开发人员在提交BUG时,“分派人”可指定对应的处理人员,如果无法确定“分派人”,可分派给项目的负责人,然后由项目负责人进行二次分派给对应的开发人员进行处理。在分派时可以添加一些对应的批注信息。</p> <p>1.11.2 bug级别定义</p> <p>具体的优先级别有以下几种</p> <p><strong>1  </strong><strong>致命问题</strong><strong>(</strong><strong>一级</strong><strong>bug)</strong></p> <p>致命问题:不能完全满足系统正常的功能操作要求,系统停止运行,系统的重要部件无法运行,系统崩溃或挂起等导致系统不能继续运行。</p> <p>1. 常规操作下因程序问题导致系统崩溃,迫使整个系统无法使用(其中非程序问题有:系统配置、数据结构变动、session超时、网络中断、人为变更数据库中的数据、系统缺少相应文件或目录等)。</p> <p>2. 常规操作下因程序问题导致程序重启、死机或非法退出。</p> <p>3. 常规操作下系统出现死循环。</p> <p>4. 数据丢失或异常。</p> <p>5. 模块间数据传递及取值错误(如:输入A,预期结果应该是B,但实际结果不是B等)。</p> <p>6. 流程输出错误(包括业务流程和事件流程。如:输入流程A,但实际流程处理中未能按A流程处理数据;点击某按钮,应跳转增加页面,结果跳转成修改页面等)。</p> <p>7. 按照需求文档,功能未在程序中体现出来,即系统无此功能(据项目经理及相关负责人确认此功能必须具备的);功能不符合用户需求,功能实现不正确(由项目经理及相关负责人确认此功能必须具备的)。</p> <p><strong>2  </strong><strong>严重问题</strong><strong>(</strong><strong>二级</strong><strong>bug)</strong></p> <p> 严重问题:严重地影响系统要求或基本功能的实现,且没有更正办法(重新安装或重新启动该软件不属于更正办法)。使系统不稳定、或破坏数据、或产生错误结果,或部分功能无法执行,而且是常规操作中经常发生或非常规操作中不可避免(不能用其他操作修复问题)的主要问题,系统无法满足主要的业务要求,性能、功能或可用性严重降低。</p> <p>1. 数据计算错误。</p> <p>2. 因程序问题迫使正在操作的流程无法继续且无其他操作可以修复问题的(其中非程序问题有:系统配置、数据结构变动、Session超时、网络中断、人为变更数据库中的数据、系统缺少相应文件或目录等)。</p> <p>3. 常规操作下功能异常,如:结果与实际查询条件不一致、页面按钮点击没反应等。</p> <p>4. 功能项的某些项目(可为所有控件)使用无效(对系统非致命的)。</p> <p>5. 因程序问题迫使正在操作的流程无法继续且有其他操作可以修复问题的(其中非程序问题有:系统配置、数据结构变动、Session超时、网络中断、人为变更数据库中的数据、系统缺少相应文件或目录等)。</p> <p>6. 多余功能,且该功能影响了程序的正常使用(需项目经理及相关负责人确认),如客户名称录入项需要录入汉字和英文,但程序限制了只能输入汉字等。</p> <p>7. 常规操作下,程序打印、导出的内容错误。</p> <p>8. 在程序安装配置无误的情况下相关功能js报错,且该功能影响业务流的正常进行。</p> <p>9. 在1024*768分辨率下,页面严重变形,使数据无法浏览。</p> <p>10. 在Session超时,无友情页面提示</p> <p><strong>3  </strong><strong>中级问题(三级</strong><strong>bug</strong><strong>)</strong></p> <p>系统可以满足业务要求,系统性能或响应时间变慢、产生错误的中间结果但不影响最终结果等影响有限的问题,另外,还包括系统健壮性方面的测试。</p> <p>1. 对于一些重要数据的操作、重要环节的变动且相关的操作和变动不可挽回时,系统应给出相应的操作确认提示,防止误操作,如数据删除、审批等。</p> <p>2. 常规操作下页面跳转至错误友情提示页面,且操作其他模块,程序可正常运行(其中非程序问题有:系统配置、数据结构变动、Session超时、网络中断、人为变更数据库中的数据、系统缺少相应文件或目录)。</p> <p>3. 功能实现不完整,如删除时没有考虑数据关联。</p> <p>4. 因错误操作且因程序问题导致系统崩溃,迫使整个系统无法使用(其中非程序问题有:系统配置、数据结构变动、Session超时、网络中断、人为变更数据库中的数据、系统缺少相应文件或目录等)。</p> <p>5. 数据添加、修改、查看界面中控件没有一一对应或对应控件长度、格式、验证性提示信息内容等不一致,但又不影响程序功能的进一步的操作(最终以需求规格说明书中内容规定为准)。</p> <p>6. 响应时间较慢。(不可超过1分钟)</p> <p>7. 功能性建议。</p> <p>8. 操作界面错误(包括数据窗口内列名定义、含义是否一致)。</p> <p>9. 简单的输入限制未放在前台进行控制。</p> <p>10. 虽然正确性不受影响,但系统性能和响应时间受到影响。</p> <p>11. 常规操作下,程序显示、打印、导出的内容格式错误,如页面变形、金额类数据未加货币符号等。</p> <p>12. 在程序安装配置无误的情况下相关功能js报错,且该功能不影响业务流的正常进行。</p> <p>13. 页面验证提示信息位置或内容错误,如空值验证对应位置或内容错误、提示对话框内容错误等(最终以需求规格说明书中内容规定为准)。</p> <p>14. 在1024*768分辨率下,页面变形,但不影响数据的浏览。</p> <p>15.  输入超长数据或特殊字符导致程序报黄页或跳转到友情提示页面等影响程序进一步的操作(需跳转友情页面)。</p> <p>16. 在Session超时(需友情页面)、网络中断时,出现浏览器卡死、报黄页等异常情况,且没有对应的错误捕获机制并给出友情提示。</p> <p>17.  滚动条无效,但不影响数据的显示与浏览。</p> <p>18. 界面不规范,页面表现形式、样式与其他类似功能模块不一致,且差异明显的。</p> <p>19. 必填项与非必填项应加以区别。</p> <p><strong>4  </strong><strong>轻微问题</strong></p> <p> 轻微问题:使操作者不方便或遇到麻烦,但它不影响执行工作功能或重要功能。界面拼写错误或用户使用不方便等小问题或需要完善的问题。</p> <p>1. 页面表现建议。</p> <p>2. 功能操作建议。</p> <p>3. 非程序代码导致黄页(如:手动删除、修改、增加数据库中的数据;缺少相应的系统配置;项目缺少目录或文件、因不明操作导致数据库中数据不符合正常逻辑关系)。</p> <p>4. 辅助说明字体大小、颜色明显与页面整体表现形式不协调或者文字描述不清楚。</p> <p>5. 长时间操作未给用户提示(不可超过1分钟),但程序一直在正常运行的,没有出现卡死等情况,如给出旋转的loading图标或程序后台操作进度条或显示进度百分比等。</p> <p>6. 提示窗口文字未采用行业术语。</p> <p>7. 可输入区域和只读区域没有明显的区分标志,如只读区域置灰显示等。</p> <p>8. 键盘支持不好,如在可输入多行的字段中不支持回车换行,输入查询条件后不支持回车触发查询。</p> <p>9. 界面不能及时刷新,如需要重新执行查询或加载页面等(最终以需求规格说明书中内容为准)。</p> <p> </p> <p>以上就是产品的测试规范,囊括了从需求到测试计划、测试准备、测试执行、结果分析、上线准备、跟踪测试到项目总结的整个流程,规范了产品测试流程。</p> <p> </p> </div> </div> </div> </div> </div> <!--PC和WAP自适应版--> <div id="SOHUCS" sid="1288095822596059136"></div> <script type="text/javascript" src="/views/front/js/chanyan.js"></script> <!-- 文章页-底部 动态广告位 --> <div class="youdao-fixed-ad" id="detail_ad_bottom"></div> </div> <div class="col-md-3"> <div class="row" id="ad"> <!-- 文章页-右侧1 动态广告位 --> <div id="right-1" class="col-lg-12 col-md-12 col-sm-4 col-xs-4 ad"> <div class="youdao-fixed-ad" id="detail_ad_1"> </div> </div> <!-- 文章页-右侧2 动态广告位 --> <div id="right-2" class="col-lg-12 col-md-12 col-sm-4 col-xs-4 ad"> <div class="youdao-fixed-ad" id="detail_ad_2"></div> </div> <!-- 文章页-右侧3 动态广告位 --> <div id="right-3" class="col-lg-12 col-md-12 col-sm-4 col-xs-4 ad"> <div class="youdao-fixed-ad" id="detail_ad_3"></div> </div> </div> </div> </div> </div> </div> <div class="container"> <h4 class="pt20 mb15 mt0 border-top">你可能感兴趣的:(产品测试规范)</h4> <div id="paradigm-article-related"> <div class="recommend-post mb30"> <ul class="widget-links"> <li><a href="/article/1835509390879322112.htm" title="扫地机类清洁产品之直流无刷电机控制" target="_blank">扫地机类清洁产品之直流无刷电机控制</a> <span class="text-muted">悟空胆好小</span> <a class="tag" taget="_blank" href="/search/%E6%B8%85%E6%B4%81%E6%9C%8D%E5%8A%A1%E6%9C%BA%E5%99%A8%E4%BA%BA/1.htm">清洁服务机器人</a><a class="tag" taget="_blank" href="/search/%E5%8D%95%E7%89%87%E6%9C%BA/1.htm">单片机</a><a class="tag" taget="_blank" href="/search/%E4%BA%BA%E5%B7%A5%E6%99%BA%E8%83%BD/1.htm">人工智能</a> <div>扫地机类清洁产品之直流无刷电机控制1.1前言扫地机产品有很多的电机控制,滚刷电机1个,边刷电机1-2个,清水泵电机,风机一个,部分中高端产品支持抹布功能,也就是存在抹布盘电机,还有追觅科沃斯石头等边刷抬升电机,滚刷抬升电机等的,这些电机有直流有刷电机,直接无刷电机,步进电机,电磁阀,挪动泵等不同类型。电机的原理,驱动控制方式也不行。接下来一段时间的几个文章会作个专题分析分享。直流有刷电机会自动持续</div> </li> <li><a href="/article/1835505326573580288.htm" title="水泥质量纠纷案代理词" target="_blank">水泥质量纠纷案代理词</a> <span class="text-muted">徐宝峰律师</span> <div>贵州领航建设有限公司诉贵州纳雍隆庆乌江水泥有限公司产品质量纠纷案代理词尊敬的审判长、审判员:贵州千里律师事务所接受被告贵州纳雍隆庆乌江水泥有限公司的委托,指派我担任其诉讼代理人,参加本案的诉讼活动。下面,我结合本案事实和相关法律规定发表如下代理意见,供合议庭评议案件时参考:原告应当举证证明其遭受的损失与被告生产的水泥质量的因果关系。首先水泥是一种粉状水硬性无机胶凝材料。加水搅拌后成浆体,能在空气中</div> </li> <li><a href="/article/1835505228137459712.htm" title="腾讯云技术深度探索:构建高效云原生微服务架构" target="_blank">腾讯云技术深度探索:构建高效云原生微服务架构</a> <span class="text-muted">我的运维人生</span> <a class="tag" taget="_blank" href="/search/%E4%BA%91%E5%8E%9F%E7%94%9F/1.htm">云原生</a><a class="tag" taget="_blank" href="/search/%E6%9E%B6%E6%9E%84/1.htm">架构</a><a class="tag" taget="_blank" href="/search/%E8%85%BE%E8%AE%AF%E4%BA%91/1.htm">腾讯云</a><a class="tag" taget="_blank" href="/search/%E8%BF%90%E7%BB%B4%E5%BC%80%E5%8F%91/1.htm">运维开发</a><a class="tag" taget="_blank" href="/search/%E6%8A%80%E6%9C%AF%E5%85%B1%E4%BA%AB/1.htm">技术共享</a> <div>腾讯云技术深度探索:构建高效云原生微服务架构在当今快速发展的技术环境中,云原生技术已成为企业数字化转型的关键驱动力。腾讯云作为行业领先的云服务提供商,不断推出创新的产品和技术,助力企业构建高效、可扩展的云原生微服务架构。本文将深入探讨腾讯云在微服务领域的最新进展,并通过一个实际案例展示如何在腾讯云平台上构建云原生应用。腾讯云微服务架构概览腾讯云微服务架构基于云原生理念,旨在帮助企业快速实现应用的容</div> </li> <li><a href="/article/1835502704827396096.htm" title="将cmd中命令输出保存为txt文本文件" target="_blank">将cmd中命令输出保存为txt文本文件</a> <span class="text-muted">落难Coder</span> <a class="tag" taget="_blank" href="/search/Windows/1.htm">Windows</a><a class="tag" taget="_blank" href="/search/cmd/1.htm">cmd</a><a class="tag" taget="_blank" href="/search/window/1.htm">window</a> <div>最近深度学习本地的训练中我们常常要在命令行中运行自己的代码,无可厚非,我们有必要保存我们的炼丹结果,但是复制命令行输出到txt是非常麻烦的,其实Windows下的命令行为我们提供了相应的操作。其基本的调用格式就是:运行指令>输出到的文件名称或者具体保存路径测试下,我打开cmd并且ping一下百度:pingwww.baidu.com>./data.txt看下相同目录下data.txt的输出:如果你再</div> </li> <li><a href="/article/1835500751997202432.htm" title="直返最高等级与直返APP:无需邀请码的返利新体验" target="_blank">直返最高等级与直返APP:无需邀请码的返利新体验</a> <span class="text-muted">古楼</span> <div>随着互联网的普及和电商的兴起,直返模式逐渐成为一种流行的商业模式。在这种模式下,消费者通过购买产品或服务,获得一定的返利,并可以分享给更多的人。其中,直返最高等级和直返APP是直返模式中的重要概念和工具。本文将详细介绍直返最高等级的概念、直返APP的使用以及与邀请码的关系。【高省】APP(高佣金领导者)是一个自用省钱佣金高,分享推广赚钱多的平台,百度有几百万篇报道,运行三年,稳定可靠。高省APP,</div> </li> <li><a href="/article/1835497965330984960.htm" title="398顺境,逆境" target="_blank">398顺境,逆境</a> <span class="text-muted">戴骁勇</span> <div>2018.11.27周二雾霾最近儿子进入了一段顺境期,今天表现尤其不错。今天的数学测试成绩喜人,没有出现以往的计算错误,整个卷面书写工整,附加题也在规定时间内完成且做对。为迎接体育测试的锻炼有了质的飞跃。坐位体前屈成绩突飞猛进,估测成绩能达到12cm,这和上次测试的零分来比,简直是逆袭。儿子还在不断锻炼和提升,唯恐到时候掉链子。跑步姿势在我的调教下,逐渐正规起来,速度随之也有了提升。今晚测试的50</div> </li> <li><a href="/article/1835496402042580992.htm" title="GitHub上克隆项目" target="_blank">GitHub上克隆项目</a> <span class="text-muted">bigbig猩猩</span> <a class="tag" taget="_blank" href="/search/github/1.htm">github</a> <div>从GitHub上克隆项目是一个简单且直接的过程,它允许你将远程仓库中的项目复制到你的本地计算机上,以便进行进一步的开发、测试或学习。以下是一个详细的步骤指南,帮助你从GitHub上克隆项目。一、准备工作1.安装Git在克隆GitHub项目之前,你需要在你的计算机上安装Git工具。Git是一个开源的分布式版本控制系统,用于跟踪和管理代码变更。你可以从Git的官方网站(https://git-scm.</div> </li> <li><a href="/article/1835492487783870464.htm" title="CX8836:小体积大功率升降压方案推荐(附Demo设计指南)" target="_blank">CX8836:小体积大功率升降压方案推荐(附Demo设计指南)</a> <span class="text-muted">诚芯微科技</span> <a class="tag" taget="_blank" href="/search/%E7%A4%BE%E4%BA%A4%E7%94%B5%E5%AD%90/1.htm">社交电子</a> <div>CX8836是一颗同步四开关单向升降压控制器,在4.5V-40V宽输入电压范围内稳定工作,持续负载电流10A,能够在输入高于或低于输出电压时稳定调节输出电压,可适用于USBPD快充、车载充电器、HUB、汽车启停系统、工业PC电源等多种升降压应用场合,为大功率TYPE-CPD车载充电器提供最优解决方案。提供CX8836Demo测试、CX8836样品申请及CX8836方案开发技术支持。CX8836同升</div> </li> <li><a href="/article/1835491605138731008.htm" title="怎么做淘客赚钱(2022最新免费淘客盈利的方法)" target="_blank">怎么做淘客赚钱(2022最新免费淘客盈利的方法)</a> <span class="text-muted">高省_飞智666600</span> <div>很多人都不知道什么是淘宝客,今天小编为大家解答一下吧。淘宝客,现在简称淘客,是时下比较流行的一个词语,特质为淘宝店推广商品获取提成的人,这些人没有自己的产品,只是在淘宝里面选择适合自己的产品,在自己比较熟悉的领域推广,把产品卖出去之后,会从淘宝店家那里获得百分之五到百分之五十左右的佣金。淘宝客付出的是什么呢?时间。你需要花时间去选适合自己推广的产品,需要花时间去选自己的推广方法,如果你打算自己做个</div> </li> <li><a href="/article/1835491354004779008.htm" title="【华为OD技术面试真题 - 技术面】-测试八股文真题题库(1)" target="_blank">【华为OD技术面试真题 - 技术面】-测试八股文真题题库(1)</a> <span class="text-muted">算法大师</span> <a class="tag" taget="_blank" href="/search/%E5%8D%8E%E4%B8%BAod/1.htm">华为od</a><a class="tag" taget="_blank" href="/search/%E9%9D%A2%E8%AF%95/1.htm">面试</a><a class="tag" taget="_blank" href="/search/python/1.htm">python</a><a class="tag" taget="_blank" href="/search/%E7%AE%97%E6%B3%95/1.htm">算法</a><a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF/1.htm">前端</a> <div>华为OD面试真题精选专栏:华为OD面试真题精选目录:2024华为OD面试手撕代码真题目录以及八股文真题目录文章目录华为OD面试真题精选1.黑盒测试和白盒测试的区别2.假设我们公司现在开发一个类似于微信的软件1.0版本,现在要你测试这个功能:打开聊天窗口,输入文本,限制字数在200字以内。问你怎么提取测试点。功能测试性能测试安全性测试可用性测试跨平台兼容性测试网络环境测试3.接口测试的工具你了解哪些</div> </li> <li><a href="/article/1835481396408315904.htm" title="如何选择最适合你的项目研发管理软件?TAPD卓越版全面解析" target="_blank">如何选择最适合你的项目研发管理软件?TAPD卓越版全面解析</a> <span class="text-muted">北京云巴巴信息技术有限公司</span> <a class="tag" taget="_blank" href="/search/%E4%BA%A7%E5%93%81%E7%BB%8F%E7%90%86/1.htm">产品经理</a><a class="tag" taget="_blank" href="/search/%E9%9C%80%E6%B1%82%E5%88%86%E6%9E%90/1.htm">需求分析</a> <div>在当今快速发展的科技时代,项目研发管理软件已成为企业不可或缺的重要工具。面对市场上琳琅满目的产品,如何选择一款适合自己团队的项目研发管理软件呢?本文将围绕项目研发管理软件的选择标准,重点介绍TAPD卓越版的特点、优势以及使用体验,让你更好地理解和选择适合自己的项目研发管理软件。项目研发管理软件的选择标准在选择项目研发管理软件时,我们需要考虑以下几个方面的因素:功能全面性:软件是否覆盖了从需求管理、</div> </li> <li><a href="/article/1835472530849230848.htm" title="最超值的Mac——Mac mini" target="_blank">最超值的Mac——Mac mini</a> <span class="text-muted">初心么么哒</span> <div>你知道最超值的Mac是什么吗?自2005年以来,Macmini一直是Apple台式机产品线中的主要产品。最初推出是为了让对Mac好奇的Mac进入Apple生态系统的一种简单方式,现在新的AppleSiliconMacmini可能是任何寻找新Mac的人的最有吸引力的购买。什么是AppleSiliconMacmini?M1Macmini是Apple最小的台式电脑,同时也是最快的台式电脑之一。最新型号由</div> </li> <li><a href="/article/1835461728423473152.htm" title="第1步win10宿主机与虚拟机通过NAT共享上网互通" target="_blank">第1步win10宿主机与虚拟机通过NAT共享上网互通</a> <span class="text-muted">学习3人组</span> <a class="tag" taget="_blank" href="/search/%E5%A4%A7%E6%95%B0%E6%8D%AE/1.htm">大数据</a><a class="tag" taget="_blank" href="/search/%E5%A4%A7%E6%95%B0%E6%8D%AE/1.htm">大数据</a> <div>VM的CentOS采用NAT共用宿主机网卡宿主机器无法连接到虚拟CentOS要实现宿主机与虚拟机通信,原理就是给宿主机的网卡配置一个与虚拟机网关相同网段的IP地址,实现可以互通。1、查看虚拟机的IP地址2、编辑虚拟机的虚拟网络的NAT和DHCP的配置,设置虚拟机的网卡选择NAT共享模式3、宿主机的IP配置,确保vnet8的IPV4属性与虚拟机在同一网段4、ping测试连通性[root@localh</div> </li> <li><a href="/article/1835458199755517952.htm" title="spring如何整合druid连接池?" target="_blank">spring如何整合druid连接池?</a> <span class="text-muted">惜.己</span> <a class="tag" taget="_blank" href="/search/spring/1.htm">spring</a><a class="tag" taget="_blank" href="/search/spring/1.htm">spring</a><a class="tag" taget="_blank" href="/search/junit/1.htm">junit</a><a class="tag" taget="_blank" href="/search/%E6%95%B0%E6%8D%AE%E5%BA%93/1.htm">数据库</a><a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/idea/1.htm">idea</a><a class="tag" taget="_blank" href="/search/%E5%90%8E%E7%AB%AF/1.htm">后端</a><a class="tag" taget="_blank" href="/search/xml/1.htm">xml</a> <div>目录spring整合druid连接池1.新建maven项目2.新建mavenModule3.导入相关依赖4.配置log4j2.xml5.配置druid.xml1)xml中如何引入properties2)下面是配置文件6.准备jdbc.propertiesJDBC配置项解释7.配置druid8.测试spring整合druid连接池1.新建maven项目打开IDE(比如IntelliJIDEA,Ecl</div> </li> <li><a href="/article/1835455048277127168.htm" title="Python神器!WEB自动化测试集成工具 DrissionPage" target="_blank">Python神器!WEB自动化测试集成工具 DrissionPage</a> <span class="text-muted">亚丁号</span> <a class="tag" taget="_blank" href="/search/python/1.htm">python</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a> <div>一、前言用requests做数据采集面对要登录的网站时,要分析数据包、JS源码,构造复杂的请求,往往还要应付验证码、JS混淆、签名参数等反爬手段,门槛较高。若数据是由JS计算生成的,还须重现计算过程,体验不好,开发效率不高。使用浏览器,可以很大程度上绕过这些坑,但浏览器运行效率不高。因此,这个库设计初衷,是将它们合而为一,能够在不同须要时切换相应模式,并提供一种人性化的使用方法,提高开发和运行效率</div> </li> <li><a href="/article/1835447700980592640.htm" title="摄影小白,怎么才能拍出高大上产品图片?" target="_blank">摄影小白,怎么才能拍出高大上产品图片?</a> <span class="text-muted">是波妞唉</span> <div>很多人以为文案只要会码字,会排版就OK了!说实话,没接触到这一行的时候,我的想法更简单,以为只要会写字就行!可是真做了文案才发现,码字只是入门级的基本功。一篇文章离不开排版、配图,说起来很简单!从头做到尾你就会发现,写文章用两个小时,找合适的配图居然要花掉半天的时间,甚至更久!图片能找到合适的就不怕,还有找不到的,比如产品图,只能亲自拍。拿着摆弄了半天,就是拍不出想要的效果,光线不好、搭出来丑破天</div> </li> <li><a href="/article/1835442375456026624.htm" title="收益,收益,还是收益" target="_blank">收益,收益,还是收益</a> <span class="text-muted">格局AUTOMAN</span> <div>邻居是一个卖早餐的小夫妻,除了过年,每天他们都要凌晨起床,准备明早要卖的东西。在今年偶尔的一次聊天中,他跟我讲去年没有赚什么钱,大部分都补贴家用了。这么勤劳的他,在今年该如何提高盈利或是收益呢?我觉得他们可以用如下方法:1.减少成本。也就是偷工减料,或者用便宜的东西。不太建议用这种方法,客户体验会变差。2.提高售价。在不降低产品质量的情况下,也是个办法。但是要结合竞争情况,有无替代品。3.开拓新的</div> </li> <li><a href="/article/1835436642270277632.htm" title="【Python搞定车载自动化测试】——Python实现车载以太网DoIP刷写(含Python源码)" target="_blank">【Python搞定车载自动化测试】——Python实现车载以太网DoIP刷写(含Python源码)</a> <span class="text-muted">疯狂的机器人</span> <a class="tag" taget="_blank" href="/search/Python%E6%90%9E%E5%AE%9A%E8%BD%A6%E8%BD%BD%E8%87%AA%E5%8A%A8%E5%8C%96/1.htm">Python搞定车载自动化</a><a class="tag" taget="_blank" href="/search/python/1.htm">python</a><a class="tag" taget="_blank" href="/search/DoIP/1.htm">DoIP</a><a class="tag" taget="_blank" href="/search/UDS/1.htm">UDS</a><a class="tag" taget="_blank" href="/search/ISO/1.htm">ISO</a><a class="tag" taget="_blank" href="/search/14229/1.htm">14229</a><a class="tag" taget="_blank" href="/search/1SO/1.htm">1SO</a><a class="tag" taget="_blank" href="/search/13400/1.htm">13400</a><a class="tag" taget="_blank" href="/search/Bootloader/1.htm">Bootloader</a><a class="tag" taget="_blank" href="/search/tcp%2Fip/1.htm">tcp/ip</a> <div>系列文章目录【Python搞定车载自动化测试】系列文章目录汇总文章目录系列文章目录前言一、环境搭建1.软件环境2.硬件环境二、目录结构三、源码展示1.DoIP诊断基础函数方法2.DoIP诊断业务函数方法3.27服务安全解锁4.DoIP自动化刷写四、测试日志1.测试日志五、完整源码链接前言随着智能电动汽车行业的发展,汽车=智能终端+四个轮子,各家车企都推出了各自的OTA升级方案,本章节主要介绍如何使</div> </li> <li><a href="/article/1835431727397433344.htm" title="进销存小程序源码 PHP网络版ERP进销存管理系统 全开源可二开" target="_blank">进销存小程序源码 PHP网络版ERP进销存管理系统 全开源可二开</a> <span class="text-muted">摸鱼小号</span> <a class="tag" taget="_blank" href="/search/php/1.htm">php</a> <div>可直接源码搭建部署发布后使用:一、功能模块介绍该系统模板主要有进,销,存三个主要模板功能组成,下面将介绍各模块所对应的功能;进:需要将产品采购入库,自动生成采购明细台账同时关联财务生成付款账单;销:是指对客户的销售订单记录,汇总生成产品销售明细及回款计划;存:库存的日常盘点与统计,库存下限预警、出入库台账、库存位置等。1.进购管理采购订单:采购下单审批→由上级审批通过采购入库;采购入库:货品到货></div> </li> <li><a href="/article/1835429202871021568.htm" title="Python 课程10-单元测试" target="_blank">Python 课程10-单元测试</a> <span class="text-muted">可愛小吉</span> <a class="tag" taget="_blank" href="/search/Python%E6%95%99%E5%AD%B8/1.htm">Python教學</a><a class="tag" taget="_blank" href="/search/python/1.htm">python</a><a class="tag" taget="_blank" href="/search/%E5%8D%95%E5%85%83%E6%B5%8B%E8%AF%95/1.htm">单元测试</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a><a class="tag" taget="_blank" href="/search/TDD/1.htm">TDD</a><a class="tag" taget="_blank" href="/search/unittest/1.htm">unittest</a> <div>前言在现代软件开发中,单元测试已成为一种必不可少的实践。通过测试,我们可以确保每个功能模块在开发和修改过程中按预期工作,从而减少软件缺陷,提高代码质量。而测试驱动开发(TDD)则进一步将测试作为开发的核心部分,先编写测试,再编写代码,以测试为指导开发出更稳定、更可靠的代码。Python提供了强大的unittest模块,它是Python标准库的一部分,专门用于编写和执行单元测试。与其他测试框架相比,</div> </li> <li><a href="/article/1835426624628158464.htm" title="阿里云服务器4核8G配置购买及价格类文章汇总(10篇)" target="_blank">阿里云服务器4核8G配置购买及价格类文章汇总(10篇)</a> <span class="text-muted">阿里云最新优惠和活动汇总</span> <div>阿里云服务器4核8G配置如何购买?价格是多少?4核8G配置的阿里云服务器可以通过云服务器产品页购买也可以通过阿里云活动去下单购买,一般通过活动购买的用户比较多,但是不同实例规格的阿里云服务器价格不一样,带宽不同价格也不一样,本文为大家汇总了10篇关于阿里云服务器4核8G配置购买教程文章和价格类文章,分为购买类文章和价格类文章,以供大家参考如何购买阿里云服务器4核8G配置和最新优惠价格是多少。阿里云</div> </li> <li><a href="/article/1835423821167947776.htm" title="2022-05-10" target="_blank">2022-05-10</a> <span class="text-muted">6d27355807f4</span> <div>2022年5月10月《儿童纪律教育》培训总结---翟少静春蕾四幼给孩子自由是指在思想上给孩子自由,而管孩子是指在行为规范上管孩子。这二者的关系不仅不对立,而且需要相互配合。给孩子自由并不是让孩子想做什么就做什么,而是允许孩子思考自己行为的原因,思考各种可能性及后果,培养孩子对自我的清楚认识和思考的全面性。管孩子也不是让孩子什么都按照父母的标准去做,而是教孩子思考、寻找行为的现实性,培养孩子的责任感</div> </li> <li><a href="/article/1835423779275239424.htm" title="4款毕业论文参考文献格式生成器(附加详细步骤)" target="_blank">4款毕业论文参考文献格式生成器(附加详细步骤)</a> <span class="text-muted">小猪包333</span> <a class="tag" taget="_blank" href="/search/%E5%86%99%E8%AE%BA%E6%96%87/1.htm">写论文</a><a class="tag" taget="_blank" href="/search/%E4%BA%BA%E5%B7%A5%E6%99%BA%E8%83%BD/1.htm">人工智能</a><a class="tag" taget="_blank" href="/search/%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0/1.htm">深度学习</a><a class="tag" taget="_blank" href="/search/%E8%AE%A1%E7%AE%97%E6%9C%BA%E8%A7%86%E8%A7%89/1.htm">计算机视觉</a><a class="tag" taget="_blank" href="/search/AI%E5%86%99%E4%BD%9C/1.htm">AI写作</a> <div>在撰写毕业论文时,参考文献的格式规范是至关重要的。为了帮助学生和学者们更高效地生成符合要求的参考文献格式,本文将详细介绍四款推荐的参考文献格式生成器,并提供详细的使用步骤。1.千笔-AIPassPaper千笔-AIPassPaper是一款先进的AI辅助论文写作工具,不仅能够自动生成大纲、开题报告,还能一键生成参考文献。AI论文,免费大纲,10分钟3万字https://www.aipaperpass</div> </li> <li><a href="/article/1835422044989255680.htm" title="《驴友的朝圣》065 户外运动论坛,论户外运动之现在与未来" target="_blank">《驴友的朝圣》065 户外运动论坛,论户外运动之现在与未来</a> <span class="text-muted">经典老表</span> <div>十几年来,我国户外运动蓬勃发展,已经形成全民参与热情。各类户外运动项目和形式层出不穷。各种户外运动装备产品花样百出。看着形势一派大好。但是,在这大好形势之下,仍存在着诸多的发展瓶颈及安全与管理问题,需要提请重视。为此,江城登山协会在本地召开了“户外运动论坛”,邀请市内户外运动俱乐部及体育系统领导一起研讨本地区户外运动发展的可持续性。2019年6月1日,论坛在世贸万锦大酒店的支持下,在其三层会议大厅</div> </li> <li><a href="/article/1835421510202912768.htm" title="【自动化测试】UI自动化的分类、如何选择合适的自动化测试工具以及其中appium的设计理念、引擎和引擎如何工作" target="_blank">【自动化测试】UI自动化的分类、如何选择合适的自动化测试工具以及其中appium的设计理念、引擎和引擎如何工作</a> <span class="text-muted">Lossya</span> <a class="tag" taget="_blank" href="/search/ui/1.htm">ui</a><a class="tag" taget="_blank" href="/search/%E8%87%AA%E5%8A%A8%E5%8C%96/1.htm">自动化</a><a class="tag" taget="_blank" href="/search/%E6%B5%8B%E8%AF%95%E5%B7%A5%E5%85%B7/1.htm">测试工具</a><a class="tag" taget="_blank" href="/search/%E8%87%AA%E5%8A%A8%E5%8C%96%E6%B5%8B%E8%AF%95/1.htm">自动化测试</a><a class="tag" taget="_blank" href="/search/appium/1.htm">appium</a> <div>引言UI自动化测试主要针对软件的用户界面进行测试,以确保用户界面元素的交互和功能符合预期文章目录引言一、UI自动化的分类1.1基于代码的自动化测试1.2基于录制/回放的自动化测试1.3基于框架的自动化测试1.4按测试对象分类1.5按测试层次分类1.6按测试执行方式分类1.7按测试目的分类二、如何选择合适的自动化测试工具2.1项目需求分析2.2工具特性评估2.3成本考虑2.4团队技能2.5试用和评估</div> </li> <li><a href="/article/1835420753252675584.htm" title="微信小程序开发注意事项" target="_blank">微信小程序开发注意事项</a> <span class="text-muted">jun778895</span> <a class="tag" taget="_blank" href="/search/%E5%BE%AE%E4%BF%A1%E5%B0%8F%E7%A8%8B%E5%BA%8F/1.htm">微信小程序</a><a class="tag" taget="_blank" href="/search/%E5%B0%8F%E7%A8%8B%E5%BA%8F/1.htm">小程序</a> <div>微信小程序开发是一个融合了前端开发、用户体验设计、后端服务(可选)以及微信小程序平台特性的综合性项目。这里,我将详细介绍一个典型的小程序开发项目的全过程,包括项目规划、设计、开发、测试及部署上线等各个环节,并尽量使内容达到或超过2000字的要求。一、项目规划1.1项目背景与目标假设我们要开发一个名为“智慧校园助手”的微信小程序,旨在为学生提供一站式校园生活服务,包括课程表查询、图书馆座位预约、食堂</div> </li> <li><a href="/article/1835417581499019264.htm" title="性格小测试" target="_blank">性格小测试</a> <span class="text-muted">熹大头</span> <div>有些人非常肯定自己属于外向型,有些人则发现自己是绝对的内向型。然而,多数人却发现他们似乎介于两者之间,是两种性格的结合。现在我们就来看看你在这种分类中处在何种位置。阅读以下问题,从a、b、c中选出最适合自己的选项。你可能会发现三个选项都不合适,或者合适的不止一项,这种情况下,选出相对来说更适合自己的即可。1人们经常会用下列哪个词语描述你:a善于分析b遵守纪律c有创造力2一连几天参与社交活动(比如,</div> </li> <li><a href="/article/1835412182377000960.htm" title="信息系统安全相关概念(上)" target="_blank">信息系统安全相关概念(上)</a> <span class="text-muted">YuanDaima2048</span> <a class="tag" taget="_blank" href="/search/%E8%AF%BE%E7%A8%8B%E7%AC%94%E8%AE%B0/1.htm">课程笔记</a><a class="tag" taget="_blank" href="/search/%E5%9F%BA%E7%A1%80%E6%A6%82%E5%BF%B5/1.htm">基础概念</a><a class="tag" taget="_blank" href="/search/%E5%AE%89%E5%85%A8/1.htm">安全</a><a class="tag" taget="_blank" href="/search/%E4%BF%A1%E6%81%AF%E5%AE%89%E5%85%A8/1.htm">信息安全</a><a class="tag" taget="_blank" href="/search/%E7%AC%94%E8%AE%B0/1.htm">笔记</a> <div>文章总览:YuanDaiMa2048博客文章总览下篇:信息系统安全相关概念(下)信息系统安全相关概念[上]信息系统概述信息系统信息系统架构信息系统发展趋势:信息系统日趋大型化、复杂化信息系统面临的安全威胁信息系统安全架构设计--以云计算为例信息系统安全需求及安全策略自主访问控制策略DAC强制访问控制策略MAC信息系统概述信息系统用于收集、存储和处理数据以及传递信息、知识和数字产品的一组集成组件。几</div> </li> <li><a href="/article/1835387473346260992.htm" title="2020年最新程序员职业发展路线指南,超详细!" target="_blank">2020年最新程序员职业发展路线指南,超详细!</a> <span class="text-muted">编程流川枫</span> <a class="tag" taget="_blank" href="/search/11/1.htm">11</a><a class="tag" taget="_blank" href="/search/%E7%BC%96%E7%A8%8B%E8%AF%AD%E8%A8%80/1.htm">编程语言</a><a class="tag" taget="_blank" href="/search/%E7%A8%8B%E5%BA%8F%E5%91%98/1.htm">程序员</a><a class="tag" taget="_blank" href="/search/%E4%BA%92%E8%81%94%E7%BD%91/1.htm">互联网</a><a class="tag" taget="_blank" href="/search/IT/1.htm">IT</a><a class="tag" taget="_blank" href="/search/%E8%81%8C%E4%B8%9A/1.htm">职业</a> <div>【文章来源微信公众号:每天学编程】01、程序员的特性技术出身的职场人特性很明显,与做市场、业务出身的职场人区别尤其明显。IT行业中常见的一些职场角色:老板、项目经理、产品经理、需求分析师、设计师、开发工程师、运维工程师等。开发工程师具有如下特征:1、逻辑思维清晰、严谨和细腻;但是有时不容易转弯,有些程序员容易较劲、钻牛角尖。2、性格偏内向、不善于沟通、表达和交际;但是在网络聊天工具上,有些显为幽默</div> </li> <li><a href="/article/1835386465652142080.htm" title="电子技术引领汽车智能新浪潮,尽在AUTO TECH 2025广州国际汽车电子技术盛会" target="_blank">电子技术引领汽车智能新浪潮,尽在AUTO TECH 2025广州国际汽车电子技术盛会</a> <span class="text-muted">JSZNZZ</span> <a class="tag" taget="_blank" href="/search/%E6%B1%BD%E8%BD%A6/1.htm">汽车</a> <div>随着科技的持续进步,汽车电子行业正迎来深刻的转型。这一变革的显著特征是从传统的机械控制方式逐渐过渡到智能化和网联化的管理系统。这种转变不仅提升了汽车电子产品的技术复杂性,还极大地丰富了其创新性和功能性。在这个过程中,产品开发的质量和效率变得尤为关键,它们直接决定了企业在激烈竞争环境中的市场地位和商业成功。面对快速变化的市场需求,汽车电子行业在产品开发过程中遇到了多方面的挑战。其中,信息孤岛是一个显</div> </li> <li><a href="/article/105.htm" title="Js函数返回值" target="_blank">Js函数返回值</a> <span class="text-muted">_wy_</span> <a class="tag" taget="_blank" href="/search/js/1.htm">js</a><a class="tag" taget="_blank" href="/search/return/1.htm">return</a> <div>一、返回控制与函数结果,语法为:return 表达式;作用: 结束函数执行,返回调用函数,而且把表达式的值作为函数的结果 二、返回控制语法为:return;作用: 结束函数执行,返回调用函数,而且把undefined作为函数的结果 在大多数情况下,为事件处理函数返回false,可以防止默认的事件行为.例如,默认情况下点击一个<a>元素,页面会跳转到该元素href属性</div> </li> <li><a href="/article/232.htm" title="MySQL 的 char 与 varchar" target="_blank">MySQL 的 char 与 varchar</a> <span class="text-muted">bylijinnan</span> <a class="tag" taget="_blank" href="/search/mysql/1.htm">mysql</a> <div> 今天发现,create table 时,MySQL 4.1有时会把 char 自动转换成 varchar 测试举例: CREATE TABLE `varcharLessThan4` ( `lastName` varchar(3) ) ; mysql> desc varcharLessThan4; +----------+---------+------+-</div> </li> <li><a href="/article/359.htm" title="Quartz——TriggerListener和JobListener" target="_blank">Quartz——TriggerListener和JobListener</a> <span class="text-muted">eksliang</span> <a class="tag" taget="_blank" href="/search/TriggerListener/1.htm">TriggerListener</a><a class="tag" taget="_blank" href="/search/JobListener/1.htm">JobListener</a><a class="tag" taget="_blank" href="/search/quartz/1.htm">quartz</a> <div>转载请出自出处:http://eksliang.iteye.com/blog/2208624 一.概述 listener是一个监听器对象,用于监听scheduler中发生的事件,然后执行相应的操作;你可能已经猜到了,TriggerListeners接受与trigger相关的事件,JobListeners接受与jobs相关的事件。   二.JobListener监听器  j</div> </li> <li><a href="/article/486.htm" title="oracle层次查询" target="_blank">oracle层次查询</a> <span class="text-muted">18289753290</span> <a class="tag" taget="_blank" href="/search/oracle%EF%BC%9B%E5%B1%82%E6%AC%A1%E6%9F%A5%E8%AF%A2%EF%BC%9B%E6%A0%91%E6%9F%A5%E8%AF%A2/1.htm">oracle;层次查询;树查询</a> <div>.oracle层次查询(connect  by) oracle的emp表中包含了一列mgr指出谁是雇员的经理,由于经理也是雇员,所以经理的信息也存储在emp表中。这样emp表就是一个自引用表,表中的mgr列是一个自引用列,它指向emp表中的empno列,mgr表示一个员工的管理者, select   empno,mgr,ename,sal  from e</div> </li> <li><a href="/article/613.htm" title="通过反射把map中的属性赋值到实体类bean对象中" target="_blank">通过反射把map中的属性赋值到实体类bean对象中</a> <span class="text-muted">酷的飞上天空</span> <a class="tag" taget="_blank" href="/search/javaee/1.htm">javaee</a><a class="tag" taget="_blank" href="/search/%E6%B3%9B%E5%9E%8B/1.htm">泛型</a><a class="tag" taget="_blank" href="/search/%E7%B1%BB%E5%9E%8B%E8%BD%AC%E6%8D%A2/1.htm">类型转换</a> <div>使用过struts2后感觉最方便的就是这个框架能自动把表单的参数赋值到action里面的对象中 但现在主要使用Spring框架的MVC,虽然也有@ModelAttribute可以使用但是明显感觉不方便。 好吧,那就自己再造一个轮子吧。 原理都知道,就是利用反射进行字段的赋值,下面贴代码 主要类如下:   import java.lang.reflect.Field; imp</div> </li> <li><a href="/article/740.htm" title="SAP HANA数据存储:传统硬盘的瓶颈问题" target="_blank">SAP HANA数据存储:传统硬盘的瓶颈问题</a> <span class="text-muted">蓝儿唯美</span> <a class="tag" taget="_blank" href="/search/HANA/1.htm">HANA</a> <div>SAPHANA平台有各种各样的应用场景,这也意味着客户的实施方法有许多种选择,关键是如何挑选最适合他们需求的实施方案。 在 《Implementing SAP HANA》这本书中,介绍了SAP平台在现实场景中的运作原理,并给出了实施建议和成功案例供参考。本系列文章节选自《Implementing SAP HANA》,介绍了行存储和列存储的各自特点,以及SAP HANA的数据存储方式如何提升空间压</div> </li> <li><a href="/article/867.htm" title="Java Socket 多线程实现文件传输" target="_blank">Java Socket 多线程实现文件传输</a> <span class="text-muted">随便小屋</span> <a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/socket/1.htm">socket</a> <div>        高级操作系统作业,让用Socket实现文件传输,有些代码也是在网上找的,写的不好,如果大家能用就用上。 客户端类:   package edu.logic.client; import java.io.BufferedInputStream; import java.io.Buffered</div> </li> <li><a href="/article/994.htm" title="java初学者路径" target="_blank">java初学者路径</a> <span class="text-muted">aijuans</span> <a class="tag" taget="_blank" href="/search/java/1.htm">java</a> <div>学习Java有没有什么捷径?要想学好Java,首先要知道Java的大致分类。自从Sun推出Java以来,就力图使之无所不包,所以Java发展到现在,按应用来分主要分为三大块:J2SE,J2ME和J2EE,这也就是Sun ONE(Open Net Environment)体系。J2SE就是Java2的标准版,主要用于桌面应用软件的编程;J2ME主要应用于嵌入是系统开发,如手机和PDA的编程;J2EE</div> </li> <li><a href="/article/1121.htm" title="APP推广" target="_blank">APP推广</a> <span class="text-muted">aoyouzi</span> <a class="tag" taget="_blank" href="/search/APP/1.htm">APP</a><a class="tag" taget="_blank" href="/search/%E6%8E%A8%E5%B9%BF/1.htm">推广</a> <div>一,免费篇 1,APP推荐类网站自主推荐 最美应用、酷安网、DEMO8、木蚂蚁发现频道等,如果产品独特新颖,还能获取最美应用的评测推荐。PS:推荐简单。只要产品有趣好玩,用户会自主分享传播。例如足迹APP在最美应用推荐一次,几天用户暴增将服务器击垮。 2,各大应用商店首发合作 老实盯着排期,多给应用市场官方负责人献殷勤。 3,论坛贴吧推广 百度知道,百度贴吧,猫扑论坛,天涯社区,豆瓣(</div> </li> <li><a href="/article/1248.htm" title="JSP转发与重定向" target="_blank">JSP转发与重定向</a> <span class="text-muted">百合不是茶</span> <a class="tag" taget="_blank" href="/search/jsp/1.htm">jsp</a><a class="tag" taget="_blank" href="/search/servlet/1.htm">servlet</a><a class="tag" taget="_blank" href="/search/Java+Web/1.htm">Java Web</a><a class="tag" taget="_blank" href="/search/jsp%E8%BD%AC%E5%8F%91/1.htm">jsp转发</a> <div>  在servlet和jsp中我们经常需要请求,这时就需要用到转发和重定向;   转发包括;forward和include     例子;forwrad转发;  将请求装法给reg.html页面   关键代码;    req.getRequestDispatcher("reg.html</div> </li> <li><a href="/article/1375.htm" title="web.xml之jsp-config" target="_blank">web.xml之jsp-config</a> <span class="text-muted">bijian1013</span> <a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/web.xml/1.htm">web.xml</a><a class="tag" taget="_blank" href="/search/servlet/1.htm">servlet</a><a class="tag" taget="_blank" href="/search/jsp-config/1.htm">jsp-config</a> <div>1.作用:主要用于设定JSP页面的相关配置。 2.常见定义: <jsp-config> <taglib> <taglib-uri>URI(定义TLD文件的URI,JSP页面的tablib命令可以经由此URI获取到TLD文件)</tablib-uri> <taglib-location> TLD文件所在的位置 </div> </li> <li><a href="/article/1502.htm" title="JSF2.2 ViewScoped Using CDI" target="_blank">JSF2.2 ViewScoped Using CDI</a> <span class="text-muted">sunjing</span> <a class="tag" taget="_blank" href="/search/CDI/1.htm">CDI</a><a class="tag" taget="_blank" href="/search/JSF+2.2/1.htm">JSF 2.2</a><a class="tag" taget="_blank" href="/search/ViewScoped/1.htm">ViewScoped</a> <div>JSF 2.0 introduced annotation @ViewScoped; A bean annotated with this scope maintained its state as long as the user stays on the same view(reloads or navigation - no intervening views). One problem w</div> </li> <li><a href="/article/1629.htm" title="【分布式数据一致性二】Zookeeper数据读写一致性" target="_blank">【分布式数据一致性二】Zookeeper数据读写一致性</a> <span class="text-muted">bit1129</span> <a class="tag" taget="_blank" href="/search/zookeeper/1.htm">zookeeper</a> <div>很多文档说Zookeeper是强一致性保证,事实不然。关于一致性模型请参考http://bit1129.iteye.com/blog/2155336    Zookeeper的数据同步协议 Zookeeper采用称为Quorum Based Protocol的数据同步协议。假如Zookeeper集群有N台Zookeeper服务器(N通常取奇数,3台能够满足数据可靠性同时</div> </li> <li><a href="/article/1756.htm" title="Java开发笔记" target="_blank">Java开发笔记</a> <span class="text-muted">白糖_</span> <a class="tag" taget="_blank" href="/search/java%E5%BC%80%E5%8F%91/1.htm">java开发</a> <div>1、Map<key,value>的remove方法只能识别相同类型的key值   Map<Integer,String> map = new HashMap<Integer,String>(); map.put(1,"a"); map.put(2,"b"); map.put(3,"c"</div> </li> <li><a href="/article/1883.htm" title="图片黑色阴影" target="_blank">图片黑色阴影</a> <span class="text-muted">bozch</span> <a class="tag" taget="_blank" href="/search/%E5%9B%BE%E7%89%87/1.htm">图片</a> <div> .event{ padding:0;    width:460px;    min-width: 460px;    border:0px solid #e4e4e4;    height: 350px;    min-heig</div> </li> <li><a href="/article/2010.htm" title="编程之美-饮料供货-动态规划" target="_blank">编程之美-饮料供货-动态规划</a> <span class="text-muted">bylijinnan</span> <a class="tag" taget="_blank" href="/search/%E5%8A%A8%E6%80%81%E8%A7%84%E5%88%92/1.htm">动态规划</a> <div> import java.util.Arrays; import java.util.Random; public class BeverageSupply { /** * 编程之美 饮料供货 * 设Opt(V’,i)表示从i到n-1种饮料中,总容量为V’的方案中,满意度之和的最大值。 * 那么递归式就应该是:Opt(V’,i)=max{ k * Hi+Op</div> </li> <li><a href="/article/2137.htm" title="ajax大参数(大数据)提交性能分析" target="_blank">ajax大参数(大数据)提交性能分析</a> <span class="text-muted">chenbowen00</span> <a class="tag" taget="_blank" href="/search/Web/1.htm">Web</a><a class="tag" taget="_blank" href="/search/Ajax/1.htm">Ajax</a><a class="tag" taget="_blank" href="/search/%E6%A1%86%E6%9E%B6/1.htm">框架</a><a class="tag" taget="_blank" href="/search/%E6%B5%8F%E8%A7%88%E5%99%A8/1.htm">浏览器</a><a class="tag" taget="_blank" href="/search/prototype/1.htm">prototype</a> <div>近期在项目中发现如下一个问题 项目中有个提交现场事件的功能,该功能主要是在web客户端保存现场数据(主要有截屏,终端日志等信息)然后提交到服务器上方便我们分析定位问题。客户在使用该功能的过程中反应点击提交后反应很慢,大概要等10到20秒的时间浏览器才能操作,期间页面不响应事件。 根据客户描述分析了下的代码流程,很简单,主要通过OCX控件截屏,在将前端的日志等文件使用OCX控件打包,在将之转换为</div> </li> <li><a href="/article/2264.htm" title="[宇宙与天文]在太空采矿,在太空建造" target="_blank">[宇宙与天文]在太空采矿,在太空建造</a> <span class="text-muted">comsci</span> <div>     我们在太空进行工业活动...但是不太可能把太空工业产品又运回到地面上进行加工,而一般是在哪里开采,就在哪里加工,太空的微重力环境,可能会使我们的工业产品的制造尺度非常巨大....      地球上制造的最大工业机器是超级油轮和航空母舰,再大些就会遇到困难了,但是在空间船坞中,制造的最大工业机器,可能就没</div> </li> <li><a href="/article/2391.htm" title="ORACLE中CONSTRAINT的四对属性" target="_blank">ORACLE中CONSTRAINT的四对属性</a> <span class="text-muted">daizj</span> <a class="tag" taget="_blank" href="/search/oracle/1.htm">oracle</a><a class="tag" taget="_blank" href="/search/CONSTRAINT/1.htm">CONSTRAINT</a> <div>ORACLE中CONSTRAINT的四对属性 summary:在data migrate时,某些表的约束总是困扰着我们,让我们的migratet举步维艰,如何利用约束本身的属性来处理这些问题呢?本文详细介绍了约束的四对属性: Deferrable/not deferrable, Deferred/immediate, enalbe/disable, validate/novalidate,以及如</div> </li> <li><a href="/article/2518.htm" title="Gradle入门教程" target="_blank">Gradle入门教程</a> <span class="text-muted">dengkane</span> <a class="tag" taget="_blank" href="/search/gradle/1.htm">gradle</a> <div>一、寻找gradle的历程 一开始的时候,我们只有一个工程,所有要用到的jar包都放到工程目录下面,时间长了,工程越来越大,使用到的jar包也越来越多,难以理解jar之间的依赖关系。再后来我们把旧的工程拆分到不同的工程里,靠ide来管理工程之间的依赖关系,各工程下的jar包依赖是杂乱的。一段时间后,我们发现用ide来管理项程很不方便,比如不方便脱离ide自动构建,于是我们写自己的ant脚本。再后</div> </li> <li><a href="/article/2645.htm" title="C语言简单循环示例" target="_blank">C语言简单循环示例</a> <span class="text-muted">dcj3sjt126com</span> <a class="tag" taget="_blank" href="/search/c/1.htm">c</a> <div># include <stdio.h> int main(void) { int i; int count = 0; int sum = 0; float avg; for (i=1; i<=100; i++) { if (i%2==0) { count++; sum += i; } } avg</div> </li> <li><a href="/article/2772.htm" title="presentModalViewController 的动画效果" target="_blank">presentModalViewController 的动画效果</a> <span class="text-muted">dcj3sjt126com</span> <a class="tag" taget="_blank" href="/search/controller/1.htm">controller</a> <div>系统自带(四种效果): presentModalViewController模态的动画效果设置:     [cpp]  view plain copy   UIViewController *detailViewController = [[UIViewController al</div> </li> <li><a href="/article/2899.htm" title="java 二分查找" target="_blank">java 二分查找</a> <span class="text-muted">shuizhaosi888</span> <a class="tag" taget="_blank" href="/search/%E4%BA%8C%E5%88%86%E6%9F%A5%E6%89%BE/1.htm">二分查找</a><a class="tag" taget="_blank" href="/search/java%E4%BA%8C%E5%88%86%E6%9F%A5%E6%89%BE/1.htm">java二分查找</a> <div>需求:在排好顺序的一串数字中,找到数字T   一般解法:从左到右扫描数据,其运行花费线性时间O(N)。然而这个算法并没有用到该表已经排序的事实。 /** * * @param array * 顺序数组 * @param t * 要查找对象 * @return */ public stati</div> </li> <li><a href="/article/3026.htm" title="Spring Security(07)——缓存UserDetails" target="_blank">Spring Security(07)——缓存UserDetails</a> <span class="text-muted">234390216</span> <a class="tag" taget="_blank" href="/search/ehcache/1.htm">ehcache</a><a class="tag" taget="_blank" href="/search/%E7%BC%93%E5%AD%98/1.htm">缓存</a><a class="tag" taget="_blank" href="/search/Spring+Security/1.htm">Spring Security</a> <div>        Spring Security提供了一个实现了可以缓存UserDetails的UserDetailsService实现类,CachingUserDetailsService。该类的构造接收一个用于真正加载UserDetails的UserDetailsService实现类。当需要加载UserDetails时,其首先会从缓存中获取,如果缓存中没</div> </li> <li><a href="/article/3153.htm" title="Dozer 深层次复制" target="_blank">Dozer 深层次复制</a> <span class="text-muted">jayluns</span> <a class="tag" taget="_blank" href="/search/VO/1.htm">VO</a><a class="tag" taget="_blank" href="/search/maven/1.htm">maven</a><a class="tag" taget="_blank" href="/search/po/1.htm">po</a> <div>最近在做项目上遇到了一些小问题,因为架构在做设计的时候web前段展示用到了vo层,而在后台进行与数据库层操作的时候用到的是Po层。这样在业务层返回vo到控制层,每一次都需要从po-->转化到vo层,用到BeanUtils.copyProperties(source, target)只能复制简单的属性,因为实体类都配置了hibernate那些关联关系,所以它满足不了现在的需求,但后发现还有个很</div> </li> <li><a href="/article/3280.htm" title="CSS规范整理(摘自懒人图库)" target="_blank">CSS规范整理(摘自懒人图库)</a> <span class="text-muted">a409435341</span> <a class="tag" taget="_blank" href="/search/html/1.htm">html</a><a class="tag" taget="_blank" href="/search/UI/1.htm">UI</a><a class="tag" taget="_blank" href="/search/css/1.htm">css</a><a class="tag" taget="_blank" href="/search/%E6%B5%8F%E8%A7%88%E5%99%A8/1.htm">浏览器</a> <div>   刚没事闲着在网上瞎逛,找了一篇CSS规范整理,粗略看了一下后还蛮有一定的道理,并自问是否有这样的规范,这也是初入前端开发的人一个很好的规范吧。 一、文件规范 1、文件均归档至约定的目录中。 具体要求通过豆瓣的CSS规范进行讲解: 所有的CSS分为两大类:通用类和业务类。通用的CSS文件,放在如下目录中: 基本样式库 /css/core </div> </li> <li><a href="/article/3407.htm" title="C++动态链接库创建与使用" target="_blank">C++动态链接库创建与使用</a> <span class="text-muted">你不认识的休道人</span> <a class="tag" taget="_blank" href="/search/C%2B%2B/1.htm">C++</a><a class="tag" taget="_blank" href="/search/dll/1.htm">dll</a> <div>一、创建动态链接库 1.新建工程test中选择”MFC [dll]”dll类型选择第二项"Regular DLL With MFC shared linked",完成 2.在test.h中添加 extern “C” 返回类型 _declspec(dllexport)函数名(参数列表); 3.在test.cpp中最后写 extern “C” 返回类型 _decls</div> </li> <li><a href="/article/3534.htm" title="Android代码混淆之ProGuard" target="_blank">Android代码混淆之ProGuard</a> <span class="text-muted">rensanning</span> <a class="tag" taget="_blank" href="/search/ProGuard/1.htm">ProGuard</a> <div>Android应用的Java代码,通过反编译apk文件(dex2jar、apktool)很容易得到源代码,所以在release版本的apk中一定要混淆一下一些关键的Java源码。 ProGuard是一个开源的Java代码混淆器(obfuscation)。ADT r8开始它被默认集成到了Android SDK中。 官网: http://proguard.sourceforge.net/</div> </li> <li><a href="/article/3661.htm" title="程序员在编程中遇到的奇葩弱智问题" target="_blank">程序员在编程中遇到的奇葩弱智问题</a> <span class="text-muted">tomcat_oracle</span> <a class="tag" taget="_blank" href="/search/jquery/1.htm">jquery</a><a class="tag" taget="_blank" href="/search/%E7%BC%96%E7%A8%8B/1.htm">编程</a><a class="tag" taget="_blank" href="/search/ide/1.htm">ide</a> <div>  现在收集一下:         排名不分先后,按照发言顺序来的。   1、Jquery插件一个通用函数一直报错,尤其是很明显是存在的函数,很有可能就是你没有引入jquery。。。或者版本不对 2、调试半天没变化:不在同一个文件中调试。这个很可怕,我们很多时候会备份好几个项目,改完发现改错了。有个群友说的好:   在汤匙</div> </li> <li><a href="/article/3788.htm" title="解决maven-dependency-plugin (goals "copy-dependencies","unpack") is not supported" target="_blank">解决maven-dependency-plugin (goals "copy-dependencies","unpack") is not supported</a> <span class="text-muted">xp9802</span> <a class="tag" taget="_blank" href="/search/dependency/1.htm">dependency</a> <div>解决办法:在plugins之前添加如下pluginManagement,二者前后顺序如下:   [html]  view plain copy   <build>           <pluginManagement</div> </li> </ul> </div> </div> </div> <div> <div class="container"> <div class="indexes"> <strong>按字母分类:</strong> <a href="/tags/A/1.htm" target="_blank">A</a><a href="/tags/B/1.htm" target="_blank">B</a><a href="/tags/C/1.htm" target="_blank">C</a><a href="/tags/D/1.htm" target="_blank">D</a><a href="/tags/E/1.htm" target="_blank">E</a><a href="/tags/F/1.htm" target="_blank">F</a><a href="/tags/G/1.htm" target="_blank">G</a><a href="/tags/H/1.htm" target="_blank">H</a><a href="/tags/I/1.htm" target="_blank">I</a><a href="/tags/J/1.htm" target="_blank">J</a><a href="/tags/K/1.htm" target="_blank">K</a><a href="/tags/L/1.htm" target="_blank">L</a><a href="/tags/M/1.htm" target="_blank">M</a><a href="/tags/N/1.htm" target="_blank">N</a><a href="/tags/O/1.htm" target="_blank">O</a><a href="/tags/P/1.htm" target="_blank">P</a><a href="/tags/Q/1.htm" target="_blank">Q</a><a href="/tags/R/1.htm" target="_blank">R</a><a href="/tags/S/1.htm" target="_blank">S</a><a href="/tags/T/1.htm" target="_blank">T</a><a href="/tags/U/1.htm" target="_blank">U</a><a href="/tags/V/1.htm" target="_blank">V</a><a href="/tags/W/1.htm" target="_blank">W</a><a href="/tags/X/1.htm" target="_blank">X</a><a href="/tags/Y/1.htm" target="_blank">Y</a><a href="/tags/Z/1.htm" target="_blank">Z</a><a href="/tags/0/1.htm" target="_blank">其他</a> </div> </div> </div> <footer id="footer" class="mb30 mt30"> <div class="container"> <div class="footBglm"> <a target="_blank" href="/">首页</a> - <a target="_blank" href="/custom/about.htm">关于我们</a> - <a target="_blank" href="/search/Java/1.htm">站内搜索</a> - <a target="_blank" href="/sitemap.txt">Sitemap</a> - <a target="_blank" href="/custom/delete.htm">侵权投诉</a> </div> <div class="copyright">版权所有 IT知识库 CopyRight © 2000-2050 E-COM-NET.COM , All Rights Reserved. <!-- <a href="https://beian.miit.gov.cn/" rel="nofollow" target="_blank">京ICP备09083238号</a><br>--> </div> </div> </footer> <!-- 代码高亮 --> <script type="text/javascript" src="/static/syntaxhighlighter/scripts/shCore.js"></script> <script type="text/javascript" src="/static/syntaxhighlighter/scripts/shLegacy.js"></script> <script type="text/javascript" src="/static/syntaxhighlighter/scripts/shAutoloader.js"></script> <link type="text/css" rel="stylesheet" href="/static/syntaxhighlighter/styles/shCoreDefault.css"/> <script type="text/javascript" src="/static/syntaxhighlighter/src/my_start_1.js"></script> </body> </html>