﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>IT博客-51Testing软件测试网-文章分类-软件业务知识</title><link>http://www.cnitblog.com/shbwf/category/6172.html</link><description /><language>zh-cn</language><lastBuildDate>Tue, 19 Jun 2018 00:22:26 GMT</lastBuildDate><pubDate>Tue, 19 Jun 2018 00:22:26 GMT</pubDate><ttl>60</ttl><item><title>以市场需求为导向提升技术</title><link>http://www.cnitblog.com/shbwf/articles/91058.html</link><dc:creator>51testing</dc:creator><author>51testing</author><pubDate>Fri, 15 Jun 2018 07:40:00 GMT</pubDate><guid>http://www.cnitblog.com/shbwf/articles/91058.html</guid><wfw:comment>http://www.cnitblog.com/shbwf/comments/91058.html</wfw:comment><comments>http://www.cnitblog.com/shbwf/articles/91058.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/shbwf/comments/commentRss/91058.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/shbwf/services/trackbacks/91058.html</trackback:ping><description><![CDATA[<p style="padding-top: 0px; padding-bottom: 0px; list-style: none; box-sizing: border-box; counter-reset: list-1 0 list-2 0 list-3 0 list-4 0 list-5 0 list-6 0 list-7 0 list-8 0 list-9 0; font-family: Helvetica, Arial, sans-serif; font-size: 14px; white-space: pre-wrap;">由于各种原因，今年进入三月份之后，我就开始着手换工作。出于个人习惯，我每次换工作的时候都会把业界知名的公司都给面一遍，一是为了找到更好的机会，另一个也是收集一下现在业务同仁正在做的东西和使用的技术，以更好地指导自己提升相应的能力。下面我就把最近了解的情况总结一下，做测试，测试开发的同学也可以借鉴一下。</p><p style="padding-top: 0px; padding-bottom: 0px; list-style: none; box-sizing: border-box; counter-reset: list-1 0 list-2 0 list-3 0 list-4 0 list-5 0 list-6 0 list-7 0 list-8 0 list-9 0; font-family: Helvetica, Arial, sans-serif; font-size: 14px; white-space: pre-wrap;"><strong style="margin: 0px; padding: 0px; list-style: none; box-sizing: border-box;"> 一，&nbsp;完全的<u style="margin: 0px; padding: 0px; list-style: none; box-sizing: border-box;">功能测试</u>人员正在退出舞台</strong></p><p style="padding-top: 0px; padding-bottom: 0px; list-style: none; box-sizing: border-box; counter-reset: list-1 0 list-2 0 list-3 0 list-4 0 list-5 0 list-6 0 list-7 0 list-8 0 list-9 0; font-family: Helvetica, Arial, sans-serif; font-size: 14px; white-space: pre-wrap;">从测试这个行业被大家认可时起，有不少有志之士投入于测试行业。不论是通过自己学习，积极转行，还是通过社会上各种培训机构来转行，最终的结果就是大量的测试人员进入到互联网相关的各个行业。当时的情况确实一片大好，进入这个行业后薪资待遇普通提高了不少。可是经过这几年的发展，社会对测试人员要求越来越高：不管你工作了几年，如果你仅仅只会功能测试，测试工具的使用或是再高级一点儿，在公司现在的平台或框架下写自动化测试用例的话，几乎不能通过一面面试。功能测试目前是校招生，刚刚工作的人的舞台，那些在社会上工作了几年的测试人员，从工资待遇，企业期望等方面来考虑都要求你退出舞台了。</p><p style="padding-top: 0px; padding-bottom: 0px; list-style: none; box-sizing: border-box; counter-reset: list-1 0 list-2 0 list-3 0 list-4 0 list-5 0 list-6 0 list-7 0 list-8 0 list-9 0; font-family: Helvetica, Arial, sans-serif; font-size: 14px; white-space: pre-wrap;"><strong style="margin: 0px; padding: 0px; list-style: none; box-sizing: border-box;">二，&nbsp;技术要求越来越精深</strong></p><p style="padding-top: 0px; padding-bottom: 0px; list-style: none; box-sizing: border-box; counter-reset: list-1 0 list-2 0 list-3 0 list-4 0 list-5 0 list-6 0 list-7 0 list-8 0 list-9 0; font-family: Helvetica, Arial, sans-serif; font-size: 14px; white-space: pre-wrap;">在<strong style="margin: 0px; padding: 0px; list-style: none; box-sizing: border-box;"><u style="margin: 0px; padding: 0px; list-style: none; box-sizing: border-box;">测试技术</u></strong>方面，现在要求越来越精深了。先前的测试开发人员，能搭建自动化测试工程，持续化集成框架，使用开源的框架解决工作中遇到的问题等技能就相当不错了，而且能找到比较满意的工作。而目前很多企业面试的时候，如果招的是高级测试开发，资深测试开发的话，要求不仅仅是常用的测试框架的使用，开发相关的框架如Spring，开发技术多线程，分步式，其他如mysql, mongodb, redis也要会使用。越来越接近于开发的要求，有的甚至要求更高，一个岗位多种技能，全栈式解决问题。</p><p style="padding-top: 0px; padding-bottom: 0px; list-style: none; box-sizing: border-box; counter-reset: list-1 0 list-2 0 list-3 0 list-4 0 list-5 0 list-6 0 list-7 0 list-8 0 list-9 0; font-family: Helvetica, Arial, sans-serif; font-size: 14px; white-space: pre-wrap;"><strong style="margin: 0px; padding: 0px; list-style: none; box-sizing: border-box;">三，&nbsp;注重解决问题的方案而不是细节</strong></p><p style="padding-top: 0px; padding-bottom: 0px; list-style: none; box-sizing: border-box; counter-reset: list-1 0 list-2 0 list-3 0 list-4 0 list-5 0 list-6 0 list-7 0 list-8 0 list-9 0; font-family: Helvetica, Arial, sans-serif; font-size: 14px; white-space: pre-wrap;">在要求测试开发人员技术更加精深的同时，对于高级别的测试开发人员更要求解决问题的方案，考虑问题的眼界。如一个测试流程就需要考虑以下问题：（1）需求测试阶段 （2）开发技术评审 （3）测试用例设计 （4）测试方案选择与测试验收 （5）项目流程控制 （6）项目问题总结与分析。而不是以往的一轮测试，二轮测试，bug验证，上线及回归测试等流程了。在测试一个需求的时候，如测试一个新的App，就需要从这几方面考虑：（1）app的功能与交互 （2）app的性能，兼容性相关（3）app UI自动化 （4）接口或是服务的自动化，安全性与监控等 （5）底层数据mysql,redis等验证与监控。从这些问题出发，我们需要不断培养自己解决问题的方法，开阔眼界，而这又不是一朝一夕就能提高的。</p><p style="padding-top: 0px; padding-bottom: 0px; list-style: none; box-sizing: border-box; counter-reset: list-1 0 list-2 0 list-3 0 list-4 0 list-5 0 list-6 0 list-7 0 list-8 0 list-9 0; font-family: Helvetica, Arial, sans-serif; font-size: 14px; white-space: pre-wrap;"><strong style="margin: 0px; padding: 0px; list-style: none; box-sizing: border-box;">四，工作经验注重切合实际的项目</strong></p><p style="padding-top: 0px; padding-bottom: 0px; list-style: none; box-sizing: border-box; counter-reset: list-1 0 list-2 0 list-3 0 list-4 0 list-5 0 list-6 0 list-7 0 list-8 0 list-9 0; font-family: Helvetica, Arial, sans-serif; font-size: 14px; white-space: pre-wrap;">在我们的求职简历中肯定会写不少项目，在以往的培训机构出来或是在工作中没有真实参与项目的时候，也会虚拟不少项目经验。而现在招聘过程中，大家更加注重真实有效的项目，像物流管理系统，学生管理系统，简单的自动化测试项目都已经过时了。因为他们会让你解释项目流程，代码架构，设计目的和使用效果，如果你的项目经验过时，或是虚构出来的项目，肯定过不了关的。建议还是学习与社会结合度高的技术，踏踏实实地做项目，积累真实有效的项目经验才是王道。</p><p style="padding-top: 0px; padding-bottom: 0px; list-style: none; box-sizing: border-box; counter-reset: list-1 0 list-2 0 list-3 0 list-4 0 list-5 0 list-6 0 list-7 0 list-8 0 list-9 0; font-family: Helvetica, Arial, sans-serif; font-size: 14px; white-space: pre-wrap;">针对上面的这些现状，我们需要做的最重要的事情就是不断地提升自己的能力。但是也不能盲目，要有目的和针对情况，否则会事倍功半。</p><p style="padding-top: 0px; padding-bottom: 0px; list-style: none; box-sizing: border-box; counter-reset: list-1 0 list-2 0 list-3 0 list-4 0 list-5 0 list-6 0 list-7 0 list-8 0 list-9 0; font-family: Helvetica, Arial, sans-serif; font-size: 14px; white-space: pre-wrap;"><strong style="margin: 0px; padding: 0px; list-style: none; box-sizing: border-box;">一，&nbsp;了解测试行业的技术走向</strong></p><p style="padding-top: 0px; padding-bottom: 0px; list-style: none; box-sizing: border-box; counter-reset: list-1 0 list-2 0 list-3 0 list-4 0 list-5 0 list-6 0 list-7 0 list-8 0 list-9 0; font-family: Helvetica, Arial, sans-serif; font-size: 14px; white-space: pre-wrap;">测试行业如同时尚界，主题元素就那么多，可是每天有不同的流行风格。主题包括功能测试，自动化测试，性能测试，安全测试，持续化集成，测试平台的开发；技术则包括语言类java,python,shell,ruby,go等等，框架类webdriver,appium,testNG以及其他流行度不高，或是二次封装等等。以我个人了解，12-14年比较流行自动化测试,接口自动化测试，Web&nbsp;UI自动化测试以及后来手机app的自动化测试；15-17年比较流程各种测试平台的开发，整合各个流程中的资源形成一个个测试体系；17年下半年到现在，由于docker技术的成熟，持续化集成，持续交付，Devops开始流程了起来，并逐渐出现测试由响应转变成支持的角色，通过提供测试服务，方案，工具等支持开发和产品进行自测的趋势。</p><p style="padding-top: 0px; padding-bottom: 0px; list-style: none; box-sizing: border-box; counter-reset: list-1 0 list-2 0 list-3 0 list-4 0 list-5 0 list-6 0 list-7 0 list-8 0 list-9 0; font-family: Helvetica, Arial, sans-serif; font-size: 14px; white-space: pre-wrap;"><strong style="margin: 0px; padding: 0px; list-style: none; box-sizing: border-box;">二，&nbsp;以市场需求为导向，针对性地学习</strong></p><p style="padding-top: 0px; padding-bottom: 0px; list-style: none; box-sizing: border-box; counter-reset: list-1 0 list-2 0 list-3 0 list-4 0 list-5 0 list-6 0 list-7 0 list-8 0 list-9 0; font-family: Helvetica, Arial, sans-serif; font-size: 14px; white-space: pre-wrap;">我们提升技术除了为单纯的追求新技术的个人兴趣，大部分还是为了涨工资，争取更多的机会。所以就不能盲目，一方面要了解业界技术走向，另一方面要有方法。目前通过参加培训班来提升自己的人比较多，那在选择培训班的时候就要多关注一下他们的课程，有没有与新技术相结合？有没有实用的项目供实训？如果内容过时，项目简单，还是不要花费那个时间和金钱了。还有就是自己主动学习，多关注一下开源社区，我们测试在使用技术的时候一定要注重时效性，投入产出比等，使用开源代码是首要选择。还要了解新技术，可能新技术目前用不到，但是社会发展总是向前的，不及时更新自己的知识体系，会在不知不觉中落伍。</p><p style="padding-top: 0px; padding-bottom: 0px; list-style: none; box-sizing: border-box; counter-reset: list-1 0 list-2 0 list-3 0 list-4 0 list-5 0 list-6 0 list-7 0 list-8 0 list-9 0; font-family: Helvetica, Arial, sans-serif; font-size: 14px; white-space: pre-wrap;"><strong style="margin: 0px; padding: 0px; list-style: none; box-sizing: border-box;">三，&nbsp;准确定位，步步为营</strong></p><p style="padding-top: 0px; padding-bottom: 0px; list-style: none; box-sizing: border-box; counter-reset: list-1 0 list-2 0 list-3 0 list-4 0 list-5 0 list-6 0 list-7 0 list-8 0 list-9 0; font-family: Helvetica, Arial, sans-serif; font-size: 14px; white-space: pre-wrap;">在了解了外面行业发展，技术走向的前提下，还要好好地审视一下自己。目前我都会哪些与业界需求相关的技术？哪些是我的弱项？以我现在的水平，在各大公司能定个什么级别？如果我要提升，需要补充什么能力？考虑好这些问题才是你行动的方面。就测试行业而言，大概发展路如下，仅供参考：</p><p style="padding-top: 0px; padding-bottom: 0px; list-style: none; box-sizing: border-box; counter-reset: list-1 0 list-2 0 list-3 0 list-4 0 list-5 0 list-6 0 list-7 0 list-8 0 list-9 0; font-family: Helvetica, Arial, sans-serif; font-size: 14px; white-space: pre-wrap;">（1） 功能测试（1到2年）：学习基本的测试流程，掌握相关的测试工具的使用，问题定位方法，项目跟进的策略。</p><p style="padding-top: 0px; padding-bottom: 0px; list-style: none; box-sizing: border-box; counter-reset: list-1 0 list-2 0 list-3 0 list-4 0 list-5 0 list-6 0 list-7 0 list-8 0 list-9 0; font-family: Helvetica, Arial, sans-serif; font-size: 14px; white-space: pre-wrap;">（2） 自动化测试与测试开发（1到2年）：借助于语言来解决遇到的问题，会使用开源的框架搭建接口，UI自动化测试工程，能使用Jenkins做持续化集成。</p><p style="padding-top: 0px; padding-bottom: 0px; list-style: none; box-sizing: border-box; counter-reset: list-1 0 list-2 0 list-3 0 list-4 0 list-5 0 list-6 0 list-7 0 list-8 0 list-9 0; font-family: Helvetica, Arial, sans-serif; font-size: 14px; white-space: pre-wrap;">（3） 高级测试开发（时间不定）：会开发测试平台，能系统地解决问题或是具有自己独特的解决问题的思路。此时有广度和深度两个方向，广度就要系统地考虑和解决问题，全面了解测试相关的技术与方案，能快速地把新的技术落实到实处；深度就是有自己专项的必杀技能，可以帮助开发优化代码，提高效率等等。高级测试开发水比较深，工作年限也不定。</p><p style="padding-top: 0px; padding-bottom: 0px; list-style: none; box-sizing: border-box; counter-reset: list-1 0 list-2 0 list-3 0 list-4 0 list-5 0 list-6 0 list-7 0 list-8 0 list-9 0; font-family: Helvetica, Arial, sans-serif; font-size: 14px; white-space: pre-wrap;">（4） 资深测试开发或是测试架构师（时间不定）：全面解决测试遇到的问题，时刻关注新技术；从团队建设，技术方案设计，整个公司的发展，同行业的发展等方面或是角度来考虑问题。目前好像也没有太清晰的界定，不同的公司定义这个级别的标准也不一样的。</p><p style="padding-top: 0px; padding-bottom: 0px; list-style: none; box-sizing: border-box; counter-reset: list-1 0 list-2 0 list-3 0 list-4 0 list-5 0 list-6 0 list-7 0 list-8 0 list-9 0; font-family: Helvetica, Arial, sans-serif; font-size: 14px; white-space: pre-wrap;">以上是我最近面试过程中遇到的一些问题及总结，现在归纳一下用以指导我的后续工作及技术的学习。不管什么情况下，都不能闭门造车，关注新技术，新方案，不停地给自己加油，提升自己相应的能力，与时代同步，才能在工作中偶尔任性一把！</p><p style="padding-top: 0px; padding-bottom: 0px; list-style: none; box-sizing: border-box; counter-reset: list-1 0 list-2 0 list-3 0 list-4 0 list-5 0 list-6 0 list-7 0 list-8 0 list-9 0; font-family: Helvetica, Arial, sans-serif; font-size: 14px; white-space: pre-wrap;">如果有任何疑问，欢迎添加qq群测试入门到大神 755431660 共同学习~</p><img alt="null" src="http://d.ifengimg.com/q100/img1.ugc.ifeng.com/newugc/20180614/13/wemedia/19a4d821febe3e55740126010f37dd9b2a01c4d7_size58_w627_h517.png" style="margin: 0px auto; padding: 0px; list-style: none; box-sizing: border-box; border: none; vertical-align: middle; display: block; max-width: 50%; font-family: Helvetica, Arial, sans-serif; font-size: 14px; white-space: pre-wrap;" /><div><font face="Helvetica, Arial, sans-serif"><span style="font-size: 14px; white-space: pre-wrap;"><br /></span></font><br /> </div><img src ="http://www.cnitblog.com/shbwf/aggbug/91058.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/shbwf/" target="_blank">51testing</a> 2018-06-15 15:40 <a href="http://www.cnitblog.com/shbwf/articles/91058.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>测试用例你了解多少？</title><link>http://www.cnitblog.com/shbwf/articles/91056.html</link><dc:creator>51testing</dc:creator><author>51testing</author><pubDate>Thu, 14 Jun 2018 05:59:00 GMT</pubDate><guid>http://www.cnitblog.com/shbwf/articles/91056.html</guid><wfw:comment>http://www.cnitblog.com/shbwf/comments/91056.html</wfw:comment><comments>http://www.cnitblog.com/shbwf/articles/91056.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/shbwf/comments/commentRss/91056.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/shbwf/services/trackbacks/91056.html</trackback:ping><description><![CDATA[<p style="padding-top: 0px; padding-bottom: 0px; list-style: none; box-sizing: border-box; counter-reset: list-1 0 list-2 0 list-3 0 list-4 0 list-5 0 list-6 0 list-7 0 list-8 0 list-9 0; font-family: Helvetica, Arial, sans-serif; font-size: 14px; white-space: pre-wrap;">&nbsp;这是一篇总结性的文章，很多小块的知识点，很久之前都有发过文章，大家可以自行的查找，菜单栏测试干货顶部有个搜索，就可以搜索到公众号之前的文章。相当的好用的。测试用例这一块前面发布过很多的文章，大家都是可以看一下</p><p style="padding-top: 0px; padding-bottom: 0px; list-style: none; box-sizing: border-box; counter-reset: list-1 0 list-2 0 list-3 0 list-4 0 list-5 0 list-6 0 list-7 0 list-8 0 list-9 0; font-family: Helvetica, Arial, sans-serif; font-size: 14px; white-space: pre-wrap;"><strong style="margin: 0px; padding: 0px; list-style: none; box-sizing: border-box;">1、什么是测试用例</strong></p><p style="padding-top: 0px; padding-bottom: 0px; list-style: none; box-sizing: border-box; counter-reset: list-1 0 list-2 0 list-3 0 list-4 0 list-5 0 list-6 0 list-7 0 list-8 0 list-9 0; font-family: Helvetica, Arial, sans-serif; font-size: 14px; white-space: pre-wrap;">一组由前提条件、输入、执行条件、预期结果等组成，以完成对某个特定需求或者目标测试的数据，体现测试方案、方法、技术和策略的文档</p><p style="padding-top: 0px; padding-bottom: 0px; list-style: none; box-sizing: border-box; counter-reset: list-1 0 list-2 0 list-3 0 list-4 0 list-5 0 list-6 0 list-7 0 list-8 0 list-9 0; font-family: Helvetica, Arial, sans-serif; font-size: 14px; white-space: pre-wrap;"><strong style="margin: 0px; padding: 0px; list-style: none; box-sizing: border-box;">　2、为什么要写测试用例</strong></p><p style="padding-top: 0px; padding-bottom: 0px; list-style: none; box-sizing: border-box; counter-reset: list-1 0 list-2 0 list-3 0 list-4 0 list-5 0 list-6 0 list-7 0 list-8 0 list-9 0; font-family: Helvetica, Arial, sans-serif; font-size: 14px; white-space: pre-wrap;">科学有效的对测试步骤进行组织规划，方便管理，记录</p><p style="padding-top: 0px; padding-bottom: 0px; list-style: none; box-sizing: border-box; counter-reset: list-1 0 list-2 0 list-3 0 list-4 0 list-5 0 list-6 0 list-7 0 list-8 0 list-9 0; font-family: Helvetica, Arial, sans-serif; font-size: 14px; white-space: pre-wrap;"><strong style="margin: 0px; padding: 0px; list-style: none; box-sizing: border-box;">3、测试用例主要包含哪些内容</strong></p><p style="padding-top: 0px; padding-bottom: 0px; list-style: none; box-sizing: border-box; counter-reset: list-1 0 list-2 0 list-3 0 list-4 0 list-5 0 list-6 0 list-7 0 list-8 0 list-9 0; font-family: Helvetica, Arial, sans-serif; font-size: 14px; white-space: pre-wrap;">编号、日期、设计和测试人员、优先级、标题、目标、环境、输入数据/动作、预期结果</p><p style="padding-top: 0px; padding-bottom: 0px; list-style: none; box-sizing: border-box; counter-reset: list-1 0 list-2 0 list-3 0 list-4 0 list-5 0 list-6 0 list-7 0 list-8 0 list-9 0; font-family: Helvetica, Arial, sans-serif; font-size: 14px; white-space: pre-wrap;">公众号也有测试用例的模板，大家也是可以回复关键词自行获取的&nbsp;</p><p style="padding-top: 0px; padding-bottom: 0px; list-style: none; box-sizing: border-box; counter-reset: list-1 0 list-2 0 list-3 0 list-4 0 list-5 0 list-6 0 list-7 0 list-8 0 list-9 0; font-family: Helvetica, Arial, sans-serif; font-size: 14px; white-space: pre-wrap;"><strong style="margin: 0px; padding: 0px; list-style: none; box-sizing: border-box;">　4、编写测试用例需要什么</strong></p><p style="padding-top: 0px; padding-bottom: 0px; list-style: none; box-sizing: border-box; counter-reset: list-1 0 list-2 0 list-3 0 list-4 0 list-5 0 list-6 0 list-7 0 list-8 0 list-9 0; font-family: Helvetica, Arial, sans-serif; font-size: 14px; white-space: pre-wrap;">软件需求设计说明书、软件模板</p><p style="padding-top: 0px; padding-bottom: 0px; list-style: none; box-sizing: border-box; counter-reset: list-1 0 list-2 0 list-3 0 list-4 0 list-5 0 list-6 0 list-7 0 list-8 0 list-9 0; font-family: Helvetica, Arial, sans-serif; font-size: 14px; white-space: pre-wrap;"><strong style="margin: 0px; padding: 0px; list-style: none; box-sizing: border-box;">　5、设计测试用例的注意事项</strong></p><p style="padding-top: 0px; padding-bottom: 0px; list-style: none; box-sizing: border-box; counter-reset: list-1 0 list-2 0 list-3 0 list-4 0 list-5 0 list-6 0 list-7 0 list-8 0 list-9 0; font-family: Helvetica, Arial, sans-serif; font-size: 14px; white-space: pre-wrap;">从高到低，独立性，与功能一一对应，根据需求设计，由有经验的人员设计</p><p style="padding-top: 0px; padding-bottom: 0px; list-style: none; box-sizing: border-box; counter-reset: list-1 0 list-2 0 list-3 0 list-4 0 list-5 0 list-6 0 list-7 0 list-8 0 list-9 0; font-family: Helvetica, Arial, sans-serif; font-size: 14px; white-space: pre-wrap;"><strong style="margin: 0px; padding: 0px; list-style: none; box-sizing: border-box;">6、设计测试用例的原则</strong></p><p style="padding-top: 0px; padding-bottom: 0px; list-style: none; box-sizing: border-box; counter-reset: list-1 0 list-2 0 list-3 0 list-4 0 list-5 0 list-6 0 list-7 0 list-8 0 list-9 0; font-family: Helvetica, Arial, sans-serif; font-size: 14px; white-space: pre-wrap;">有模板，正确性，代表性，可判断性，重现性，详细准确清晰的步骤，符合规范</p><p style="padding-top: 0px; padding-bottom: 0px; list-style: none; box-sizing: border-box; counter-reset: list-1 0 list-2 0 list-3 0 list-4 0 list-5 0 list-6 0 list-7 0 list-8 0 list-9 0; font-family: Helvetica, Arial, sans-serif; font-size: 14px; white-space: pre-wrap;"><strong style="margin: 0px; padding: 0px; list-style: none; box-sizing: border-box;">7、用例的管理工具</strong></p><p style="padding-top: 0px; padding-bottom: 0px; list-style: none; box-sizing: border-box; counter-reset: list-1 0 list-2 0 list-3 0 list-4 0 list-5 0 list-6 0 list-7 0 list-8 0 list-9 0; font-family: Helvetica, Arial, sans-serif; font-size: 14px; white-space: pre-wrap;">市场上的用例<strong style="margin: 0px; padding: 0px; list-style: none; box-sizing: border-box;"><u style="margin: 0px; padding: 0px; list-style: none; box-sizing: border-box;">缺陷管理</u></strong>工具很多：蛰了列举几个：mantis、redmine、jira、bugzilla、禅道等</p><p style="padding-top: 0px; padding-bottom: 0px; list-style: none; box-sizing: border-box; counter-reset: list-1 0 list-2 0 list-3 0 list-4 0 list-5 0 list-6 0 list-7 0 list-8 0 list-9 0; font-family: Helvetica, Arial, sans-serif; font-size: 14px; white-space: pre-wrap;">bug管理工具我记得之前有写过禅道的，大家可以看一看。</p><p style="padding-top: 0px; padding-bottom: 0px; list-style: none; box-sizing: border-box; counter-reset: list-1 0 list-2 0 list-3 0 list-4 0 list-5 0 list-6 0 list-7 0 list-8 0 list-9 0; font-family: Helvetica, Arial, sans-serif; font-size: 14px; white-space: pre-wrap;"><strong style="margin: 0px; padding: 0px; list-style: none; box-sizing: border-box;">8、用例的管理过程</strong></p><p style="padding-top: 0px; padding-bottom: 0px; list-style: none; box-sizing: border-box; counter-reset: list-1 0 list-2 0 list-3 0 list-4 0 list-5 0 list-6 0 list-7 0 list-8 0 list-9 0; font-family: Helvetica, Arial, sans-serif; font-size: 14px; white-space: pre-wrap;">编写&#8594;评审（修改&#8594;再次评审）&#8594;使用&#8594;保存管理&#8594;维护/升级</p><p style="padding-top: 0px; padding-bottom: 0px; list-style: none; box-sizing: border-box; counter-reset: list-1 0 list-2 0 list-3 0 list-4 0 list-5 0 list-6 0 list-7 0 list-8 0 list-9 0; font-family: Helvetica, Arial, sans-serif; font-size: 14px; white-space: pre-wrap;">今天这篇文章主要是总结，不然很多不知道用例是干什么的，写用例需要什么，这个文章都有介绍了。</p><p style="padding-top: 0px; padding-bottom: 0px; list-style: none; box-sizing: border-box; counter-reset: list-1 0 list-2 0 list-3 0 list-4 0 list-5 0 list-6 0 list-7 0 list-8 0 list-9 0; font-family: Helvetica, Arial, sans-serif; font-size: 14px; white-space: pre-wrap;">如果有任何疑问，欢迎添加qq群测试入门到大神 755431660 共同学习~</p><img alt="null" src="http://d.ifengimg.com/q100/img1.ugc.ifeng.com/newugc/20180614/13/wemedia/19a4d821febe3e55740126010f37dd9b2a01c4d7_size58_w627_h517.png" style="margin: 0px auto; padding: 0px; list-style: none; box-sizing: border-box; border: none; vertical-align: middle; display: block; max-width: 50%; font-family: Helvetica, Arial, sans-serif; font-size: 14px; white-space: pre-wrap;" /><div><font face="Helvetica, Arial, sans-serif"><span style="font-size: 14px; white-space: pre-wrap;"><br /></span></font><br /> </div><img src ="http://www.cnitblog.com/shbwf/aggbug/91056.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/shbwf/" target="_blank">51testing</a> 2018-06-14 13:59 <a href="http://www.cnitblog.com/shbwf/articles/91056.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>也谈柯洁再战人工智能</title><link>http://www.cnitblog.com/shbwf/articles/91054.html</link><dc:creator>51testing</dc:creator><author>51testing</author><pubDate>Tue, 12 Jun 2018 02:46:00 GMT</pubDate><guid>http://www.cnitblog.com/shbwf/articles/91054.html</guid><wfw:comment>http://www.cnitblog.com/shbwf/comments/91054.html</wfw:comment><comments>http://www.cnitblog.com/shbwf/articles/91054.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/shbwf/comments/commentRss/91054.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/shbwf/services/trackbacks/91054.html</trackback:ping><description><![CDATA[<div><div style="display: inline-block;"></div></div><p style="word-wrap: break-word; margin-top: 5px; margin-bottom: 5px; padding-top: 0px; padding-bottom: 0px; font-family: &quot;sans serif&quot;, tahoma, verdana, helvetica; font-size: 16px;">&nbsp;</p><p style="word-wrap: break-word; margin-top: 5px; margin-bottom: 5px; padding-top: 0px; padding-bottom: 0px; font-family: &quot;sans serif&quot;, tahoma, verdana, helvetica; font-size: 16px; text-indent: 21pt;">2018<span style="word-wrap: break-word;">年</span><span style="word-wrap: break-word;">4</span><span style="word-wrap: break-word;">月</span><span style="word-wrap: break-word;">27</span><span style="word-wrap: break-word;">日，柯洁（中国顶级职业围棋手，曾多次获得世界冠军）应邀参加福州举办的第一届&#8220;吴清源杯&#8221;世界女子围棋赛暨&#8220;贝瑞基因杯&#8221;</span><span style="word-wrap: break-word;">2018</span><span style="word-wrap: break-word;">世界人工智能围棋大赛，再次与围棋</span><span style="word-wrap: break-word;">AI</span><span style="word-wrap: break-word;">展开人机大战。</span></p><p style="word-wrap: break-word; margin-top: 5px; margin-bottom: 5px; padding-top: 0px; padding-bottom: 0px; font-family: &quot;sans serif&quot;, tahoma, verdana, helvetica; font-size: 16px; text-indent: 21pt;"><span style="word-wrap: break-word;">这是柯洁第三次与</span>AI<span style="word-wrap: break-word;">棋手对阵，与前面两次不同的是，这次对决的是我国自己研发的</span><span style="word-wrap: break-word;">AI</span><span style="word-wrap: break-word;">棋手&#8220;星阵&#8221;。在棋局进行到大约两小时的时候，柯洁遗憾落败，</span><span style="word-wrap: break-word;">AI</span><span style="word-wrap: break-word;">又赢了。我们不禁要问了，为什么柯洁会屡次败给人工智能呢？</span></p><p style="word-wrap: break-word; margin-top: 5px; margin-bottom: 5px; padding-top: 0px; padding-bottom: 0px; font-family: &quot;sans serif&quot;, tahoma, verdana, helvetica; font-size: 16px; text-indent: 21pt;"><span style="word-wrap: break-word;">这就要从人工智能的</span>&#8220;思维方式&#8221;谈起了。鉴于这次对弈的&#8220;星阵&#8221;使用的技术细节还未曾对外透露，并且&#8220;星阵&#8221;最重要的参考还是<span style="word-wrap: break-word;">AlphaGo</span><span style="word-wrap: break-word;">，我们这里就以</span><span style="word-wrap: break-word;">AlphaGo</span><span style="word-wrap: break-word;">背后的主要机制来给大家做讲解。</span></p><p style="word-wrap: break-word; margin-top: 5px; margin-bottom: 5px; padding-top: 0px; padding-bottom: 0px; font-family: &quot;sans serif&quot;, tahoma, verdana, helvetica; font-size: 16px; text-indent: 21pt;"><span style="word-wrap: break-word;">事实上，</span>AlphaGo<span style="word-wrap: break-word;">做决策主要依赖于计算机科学家们给它编写的三个函数。它们分别是：策略网络（</span><span style="word-wrap: break-word;">policy network</span><span style="word-wrap: break-word;">）、评价网络（</span><span style="word-wrap: break-word;">value network</span><span style="word-wrap: break-word;">）和蒙特卡洛树搜索（</span>Monte Carlo tree search）。</p><p style="word-wrap: break-word; margin-top: 5px; margin-bottom: 5px; padding-top: 0px; padding-bottom: 0px; font-family: &quot;sans serif&quot;, tahoma, verdana, helvetica; font-size: 16px; text-indent: 21pt;"><span style="word-wrap: break-word;">策略网络是个</span>13<span style="word-wrap: break-word;">层的卷积神经网络，它可以根据当前的盘面状态来预判对方的可能落子位置。策略网络为什么就可以预判到对方的落子位置呢？这是因为在正式比赛之前，科学家们会对</span><span style="word-wrap: break-word;">AlphaGo</span><span style="word-wrap: break-word;">进行&#8220;训练&#8221;&#8212;&#8212;输入大量的数以千万计的世界职业棋手的棋谱让</span><span style="word-wrap: break-word;">AlphaGo</span><span style="word-wrap: break-word;">进行学习，然后通过自我对弈的方式不断增强预测的正确率。</span></p><p style="word-wrap: break-word; margin-top: 5px; margin-bottom: 5px; padding-top: 0px; padding-bottom: 0px; font-family: &quot;sans serif&quot;, tahoma, verdana, helvetica; font-size: 16px; text-indent: 21pt;"><span style="word-wrap: break-word;">评价网络也是个</span>13<span style="word-wrap: break-word;">层的卷积神经网络，跟策略网络互相独立，它可以根据给定的盘面状态判断出每种落子的最终胜算概率。这个部分的样本通过两台机器对弈的方式产生，这样有效的保证了评价网络经过学习后能够正确的反映出胜算概率。需要指出的是，评价网络的评价机制不是精确的，而是近似值。</span></p><p style="word-wrap: break-word; margin-top: 5px; margin-bottom: 5px; padding-top: 0px; padding-bottom: 0px; font-family: &quot;sans serif&quot;, tahoma, verdana, helvetica; font-size: 16px; text-indent: 21pt;">蒙特卡洛树搜索的主要作用则在于可以根据当前棋盘状态、策略网络数据和评价网络数据的组合，计算出最佳的落子位置。蒙特卡洛树搜索算法包含四个步骤：</p><p style="word-wrap: break-word; margin-top: 5px; margin-bottom: 5px; padding-top: 0px; padding-bottom: 0px; font-family: &quot;sans serif&quot;, tahoma, verdana, helvetica; font-size: 16px; text-indent: 21pt;">选取：根据目前状态，选取出对方最可能的几种落子位置；</p><p style="word-wrap: break-word; margin-top: 5px; margin-bottom: 5px; padding-top: 0px; padding-bottom: 0px; font-family: &quot;sans serif&quot;, tahoma, verdana, helvetica; font-size: 16px; text-indent: 21pt;">展开：根据选取的对方落子位置，展开至我们最终胜算概率最大的几种落子位置；</p><p style="word-wrap: break-word; margin-top: 5px; margin-bottom: 5px; padding-top: 0px; padding-bottom: 0px; font-family: &quot;sans serif&quot;, tahoma, verdana, helvetica; font-size: 16px; text-indent: 21pt;">评估：评估最佳落子位置。最终选取的落子位置不仅取决于评价网络评估的胜算概率，同时还来自于更深度的蒙特卡洛树搜索；</p><p style="word-wrap: break-word; margin-top: 5px; margin-bottom: 5px; padding-top: 0px; padding-bottom: 0px; font-family: &quot;sans serif&quot;, tahoma, verdana, helvetica; font-size: 16px; text-indent: 21pt;">倒传导：在决定好了我们的最佳落子位置后，再根据这个位置，通过策略网络来评估对手可能的下一步落子位置，通过评价网络来评估落子胜算概率，选取出下一次的最佳落子位置。</p><p style="word-wrap: break-word; margin-top: 5px; margin-bottom: 5px; padding-top: 0px; padding-bottom: 0px; font-family: &quot;sans serif&quot;, tahoma, verdana, helvetica; font-size: 16px; text-indent: 21pt;"><span style="word-wrap: break-word;">由此可见，</span>AlphaGo<span style="word-wrap: break-word;">本质上其实就是通过大量的样本输入和以上这三个函数找到了对弈中的最佳落子位置。隐藏在这个</span><span style="word-wrap: break-word;">AI</span><span style="word-wrap: break-word;">超人背后的其实是专门针对于围棋领域的强大的计算机算法。</span></p><p style="word-wrap: break-word; margin-top: 5px; margin-bottom: 5px; padding-top: 0px; padding-bottom: 0px; font-family: &quot;sans serif&quot;, tahoma, verdana, helvetica; font-size: 16px; text-indent: 21pt;"><span style="word-wrap: break-word;">这个算法汇聚了几千万种棋局的经验，加上计算机做决策完全理性（不会受情绪影响也不会感受到任何压力），不会受任何外界因素干扰，战赢柯洁</span>&#8212;&#8212;一个只有两万多盘棋局经验的年轻人，也算是在情理之中。</p><p style="word-wrap: break-word; margin-top: 5px; margin-bottom: 5px; padding-top: 0px; padding-bottom: 0px; font-family: &quot;sans serif&quot;, tahoma, verdana, helvetica; font-size: 16px; text-indent: 21pt;"><span style="word-wrap: break-word;">而这次人机大战的积极意义则在于它证明了我国人工智能研发进入到了世界先进水平。期望有一天，</span>&#8220;星阵&#8221;可以有机会跟<span style="word-wrap: break-word;">AlphaGo</span><span style="word-wrap: break-word;">一较高下。<br style="word-wrap: break-word;" />&#8203;如果有任何疑问，欢迎添加qq群测试入门到大神 755431660 共同学习~<br style="word-wrap: break-word;" />&#8203;<img src="http://blog.chinaunix.net/attachment/201806/12/29734443_1528771156JJJT.png" data-ke-src="/attachment/201806/12/29734443_1528771156JJJT.png" width="627" height="517" alt="" style="word-wrap: break-word; border: 0px;" />&#8203;</span></p><img src ="http://www.cnitblog.com/shbwf/aggbug/91054.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/shbwf/" target="_blank">51testing</a> 2018-06-12 10:46 <a href="http://www.cnitblog.com/shbwf/articles/91054.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>一次老系统的Bug解决过程</title><link>http://www.cnitblog.com/shbwf/articles/91042.html</link><dc:creator>51testing</dc:creator><author>51testing</author><pubDate>Mon, 04 Jun 2018 06:22:00 GMT</pubDate><guid>http://www.cnitblog.com/shbwf/articles/91042.html</guid><wfw:comment>http://www.cnitblog.com/shbwf/comments/91042.html</wfw:comment><comments>http://www.cnitblog.com/shbwf/articles/91042.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/shbwf/comments/commentRss/91042.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/shbwf/services/trackbacks/91042.html</trackback:ping><description><![CDATA[<div style="word-wrap: break-word; margin: 0px auto; padding: 0px; font-family: 微软雅黑; line-height: 24px; color: #3e3e3e; font-size: 14px;">　<strong style="word-wrap: break-word; margin: 0px auto; padding: 0px; font-family: &quot;&quot;;">　系统概要：</strong></div><div style="word-wrap: break-word; margin: 0px auto; padding: 0px; font-family: 微软雅黑; line-height: 24px; color: #3e3e3e; font-size: 14px;">　　1、一台<a target="_self" style="word-wrap: break-word; margin: 0px auto; padding: 0px; font-family: &quot;color:#111010;&quot;;">数据库</a>服务器，SQLServer，没有读写分离，没有进行任何效能的处理</div><div style="word-wrap: break-word; margin: 0px auto; padding: 0px; font-family: 微软雅黑; line-height: 24px; color: #3e3e3e; font-size: 14px;">　　2、其中有一张Table，每天客户端大概写入30W笔数据</div><div style="word-wrap: break-word; margin: 0px auto; padding: 0px; font-family: 微软雅黑; line-height: 24px; color: #3e3e3e; font-size: 14px;">　　3、报表查询导出功能，Table中大约 3000W笔资料，查询一周时间，大概150~200W笔数据，并生成Excel文件</div><div style="word-wrap: break-word; margin: 0px auto; padding: 0px; font-family: 微软雅黑; line-height: 24px; color: #3e3e3e; font-size: 14px;">　　4、数据库操作使用的是ADO.NET</div><div style="word-wrap: break-word; margin: 0px auto; padding: 0px; font-family: 微软雅黑; line-height: 24px; color: #3e3e3e; font-size: 14px;">　　<strong style="word-wrap: break-word; margin: 0px auto; padding: 0px; font-family: &quot;&quot;;"><a target="_self" style="word-wrap: break-word; margin: 0px auto; padding: 0px; color: #111010;"><strong style="word-wrap: break-word; margin: 0px auto; padding: 0px;">Bug</strong></a>:</strong></div><div style="word-wrap: break-word; margin: 0px auto; padding: 0px; font-family: 微软雅黑; line-height: 24px; color: #3e3e3e; font-size: 14px;">　　在点击【查询导出】的按钮后，时常会抛出SQLServer的Error 信息，报表导出 NG</div><div style="word-wrap: break-word; margin: 0px auto; padding: 0px; font-family: 微软雅黑; line-height: 24px; color: #3e3e3e; font-size: 14px;">　　<strong style="word-wrap: break-word; margin: 0px auto; padding: 0px; font-family: &quot;&quot;;">解决过程：</strong></div><div style="word-wrap: break-word; margin: 0px auto; padding: 0px; font-family: 微软雅黑; line-height: 24px; color: #3e3e3e; font-size: 14px;">　　1、Table 的查询效能问题，建立index，结果 问题依旧</div><div style="word-wrap: break-word; margin: 0px auto; padding: 0px; font-family: 微软雅黑; line-height: 24px; color: #3e3e3e; font-size: 14px;">　　2、因为没有进行读写分离，怀疑是否是死锁，观察数据库，不是因为死锁的问题造成的</div><div style="word-wrap: break-word; margin: 0px auto; padding: 0px; font-family: 微软雅黑; line-height: 24px; color: #3e3e3e; font-size: 14px;">　　3、建议客户在服务器上新增硬盘，增加一块硬盘，单独供数据库使用，OK后，但问题依然发生</div><div style="word-wrap: break-word; margin: 0px auto; padding: 0px; font-family: 微软雅黑; line-height: 24px; color: #3e3e3e; font-size: 14px;">　　4、建议客户增加服务器，使用独立的数据库服务器，读写分离，被客户Pass</div><div style="word-wrap: break-word; margin: 0px auto; padding: 0px; font-family: 微软雅黑; line-height: 24px; color: #3e3e3e; font-size: 14px;">　　5、只能牺牲<a target="_self" style="word-wrap: break-word; margin: 0px auto; padding: 0px; font-family: &quot;color:#111010;&quot;;">SQL</a>查询的效能了，comm.CommandTimeout = 0; 在 ADO.NET Command时不设置timeout 限制</div><div style="word-wrap: break-word; margin: 0px auto; padding: 0px; font-family: 微软雅黑; line-height: 24px; color: #3e3e3e; font-size: 14px;">　　至此，问题解决，只是查询导出报表的时间可能会变长一点，在不增加客户的硬件成本的情况下，客户接受，那 OK.<br style="word-wrap: break-word;" />&#8203;&nbsp; &nbsp;&nbsp;如果有任何疑问，欢迎添加qq群测试入门到大神 755431660 共同学习~<br style="word-wrap: break-word;" />&#8203;<img src="http://blog.chinaunix.net/attachment/201806/4/29734443_1528092131FOVb.png" data-ke-src="/attachment/201806/4/29734443_1528092131FOVb.png" width="617" height="501" alt="" style="word-wrap: break-word; border: 0px;" /></div><img src ="http://www.cnitblog.com/shbwf/aggbug/91042.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/shbwf/" target="_blank">51testing</a> 2018-06-04 14:22 <a href="http://www.cnitblog.com/shbwf/articles/91042.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>最终一轮面试被Google刷掉，这是一种什么样的体验？</title><link>http://www.cnitblog.com/shbwf/articles/91024.html</link><dc:creator>51testing</dc:creator><author>51testing</author><pubDate>Mon, 21 May 2018 03:53:00 GMT</pubDate><guid>http://www.cnitblog.com/shbwf/articles/91024.html</guid><wfw:comment>http://www.cnitblog.com/shbwf/comments/91024.html</wfw:comment><comments>http://www.cnitblog.com/shbwf/articles/91024.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/shbwf/comments/commentRss/91024.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/shbwf/services/trackbacks/91024.html</trackback:ping><description><![CDATA[<div style="word-wrap: break-word; margin: 0px auto; padding: 0px; font-family: 微软雅黑; line-height: 24px; color: #3e3e3e; font-size: 14px;">　&nbsp;<img src="http://blog.chinaunix.net/attachment/201805/21/29734443_1526873501C45S.jpg" data-ke-src="/attachment/201805/21/29734443_1526873501C45S.jpg" width="700" height="581" alt="" style="word-wrap: break-word; border: 0px;" /><br style="word-wrap: break-word;" />&#8203;&nbsp; &nbsp; &nbsp; &nbsp;编者按：入职<a target="_self" style="word-wrap: break-word; margin: 0px auto; padding: 0px; font-family: &quot;color:#111010;&quot;;">谷歌</a>向来是可遇不可求的，只有那最为顶尖的万分之一的人才，才有资格收到谷歌的橄榄枝。因此，就算应聘谷歌失败了，也很正常。重要的是，从失败经历中不断学习，砥砺前行。本文作者 Jacob Levi Peterson 分享了自己与谷歌offer失之交臂的求职经历。</div><div style="word-wrap: break-word; margin: 0px auto; padding: 0px; font-family: 微软雅黑; line-height: 24px; color: #3e3e3e; font-size: 14px;">　　我应聘的是位于美国密歇根安娜堡分公司的 Associate Account Strategist，实质上是谷歌前线业务的销售岗，归谷歌 AdWords 部门管辖。</div><div style="word-wrap: break-word; margin: 0px auto; padding: 0px; font-family: 微软雅黑; line-height: 24px; color: #3e3e3e; font-size: 14px;">　　整个招聘流程持续了大约一个月。如果顺利，应聘这个岗位要经历五轮面试。谷歌是在今年一月份给我发出面试邀请的。</div><div style="word-wrap: break-word; margin: 0px auto; padding: 0px; font-family: 微软雅黑; line-height: 24px; color: #3e3e3e; font-size: 14px;">　　以前的招聘流程通常会更长，一个求职者要经历许多轮面试，通常为六个月或更长时间。 所以我没有什么可抱怨的，毕竟我的经历只有一个月。这也是我最终被刷掉的一点安慰。</div><div style="word-wrap: break-word; margin: 0px auto; padding: 0px; font-family: 微软雅黑; line-height: 24px; color: #3e3e3e; font-size: 14px;">　　另外，这不是我第一次申请谷歌。 这也是我第二次经过朋友的推荐找工作。</div><div style="word-wrap: break-word; margin: 0px auto; padding: 0px; font-family: 微软雅黑; line-height: 24px; color: #3e3e3e; font-size: 14px;">　　<strong style="word-wrap: break-word; margin: 0px auto; padding: 0px; font-family: &quot;&quot;;">下面，就让我来聊聊整个面试体验的所感所想吧。</strong></div><div style="word-wrap: break-word; margin: 0px auto; padding: 0px; font-family: 微软雅黑; line-height: 24px; color: #3e3e3e; font-size: 14px;"><strong style="word-wrap: break-word; margin: 0px auto; padding: 0px; font-family: &quot;&quot;;">　　三轮<a target="_self" style="word-wrap: break-word; margin: 0px auto; padding: 0px; color: #111010;"><strong style="word-wrap: break-word; margin: 0px auto; padding: 0px;">电话</strong></a>面试</strong></div><div style="word-wrap: break-word; margin: 0px auto; padding: 0px; font-family: 微软雅黑; line-height: 24px; color: #3e3e3e; font-size: 14px;">　　谷歌的招聘流程总体是高效的。但是，我经历了一个月无数次准备、学习面试经验、参与各轮面试，最终还是背谷歌拒绝了，这种感觉还是很不好受的。如果你也有过类似经历，那么真的很难过。但是，事情无疑会好转起来的。</div><div style="word-wrap: break-word; margin: 0px auto; padding: 0px; font-family: 微软雅黑; line-height: 24px; color: #3e3e3e; font-size: 14px;">　　提交了简历和求职信，有个HR就找我做了电话面试。我通过了。一个礼拜以后，安娜堡那边的团队成员又给我做了两轮电话面试。</div><div style="word-wrap: break-word; margin: 0px auto; padding: 0px; font-family: 微软雅黑; line-height: 24px; color: #3e3e3e; font-size: 14px;">　　由于保密协议，我不能具体透露面试的问题。下面聊聊面试给我的感受。</div><div style="word-wrap: break-word; margin: 0px auto; padding: 0px; font-family: 微软雅黑; line-height: 24px; color: #3e3e3e; font-size: 14px;">　　HR在电话里面还是挺热情的，我感觉聊天进行得很顺利。后来，HR在后续与我沟通的时候，老是喜欢发各种emoji表情包，让我一度不知道要怎么回复他。不过，下一轮的电话面试的时间还是很早的，不用等太久。</div><div style="word-wrap: break-word; margin: 0px auto; padding: 0px; font-family: 微软雅黑; line-height: 24px; color: #3e3e3e; font-size: 14px;">　　第二轮电话面试的时候，是安娜堡团队的人给我面的。当时我就感觉对方的语气明显没有第一轮电面的时候那么亲切。整轮面试让我感觉像是咨询公司常用的&#8220;压力面试&#8221;，HR不断质疑我、否定我的答案，问我各种问题。当时我几乎确定自己要被刷掉了。</div><div style="word-wrap: break-word; margin: 0px auto; padding: 0px; font-family: 微软雅黑; line-height: 24px; color: #3e3e3e; font-size: 14px;">　　当天又进行了第三轮电话面试，是安娜堡团队的一名经理给我面的。这一次我感觉谈话氛围要友善很多。我给HR聊了自己关于安娜堡地区的一些看法和体验，HR似乎对我的话很满意，甚至还谈到他自己对这个地方的感受。</div><div style="word-wrap: break-word; margin: 0px auto; padding: 0px; font-family: 微软雅黑; line-height: 24px; color: #3e3e3e; font-size: 14px;">　　<strong style="word-wrap: break-word; margin: 0px auto; padding: 0px; font-family: &quot;&quot;;">两轮现场面试</strong></div><div style="word-wrap: break-word; margin: 0px auto; padding: 0px; font-family: 微软雅黑; line-height: 24px; color: #3e3e3e; font-size: 14px;">　　几天之后，我接到电话，受邀到谷歌公司参加面试。我欣喜若狂。</div><div style="word-wrap: break-word; margin: 0px auto; padding: 0px; font-family: 微软雅黑; line-height: 24px; color: #3e3e3e; font-size: 14px;">　　面试之前，我做了无数次准备。到达密歇根以后，我感觉自己准备好了。</div><div style="word-wrap: break-word; margin: 0px auto; padding: 0px; font-family: 微软雅黑; line-height: 24px; color: #3e3e3e; font-size: 14px;">　　谷歌的面试是分批进行的，在同一时间段，同一个岗位的不同求职者会集中在一起于同一天进行面试。谷歌告诉求职者们，要对其他求职者友善，不能针锋相对。潜台词就是：如果我们对所有人都满意，就会全部招进来。我认为这句话也可以这样理解：如果我们不要你，那是因为你不够优秀。岗位就在那里。但我们就是不想要你。直到面试之前我都在纠结谷歌到底是不是这个意思。</div><div style="word-wrap: break-word; margin: 0px auto; padding: 0px; font-family: 微软雅黑; line-height: 24px; color: #3e3e3e; font-size: 14px;">　　面试那天我到得非常早，早到了40分钟。签到以后，我在等接待我的人。我跟其他应聘者有礼貌地闲聊。我发现我不是最早到的，心里有了些宽慰。</div><div style="word-wrap: break-word; margin: 0px auto; padding: 0px; font-family: 微软雅黑; line-height: 24px; color: #3e3e3e; font-size: 14px;">　　接待人员到了以后，给我们每人发了一个颜色鲜艳的袋子，上面印有谷歌的标记。</div><div style="word-wrap: break-word; margin: 0px auto; padding: 0px; font-family: 微软雅黑; line-height: 24px; color: #3e3e3e; font-size: 14px;">　　我们组带着进去了，穿过了一个接待区的门。这是我第一次去谷歌。谷歌公司跟我之前见过的任何公司都不一样，它的空间设计充满未来感、给人高效的感觉，非常棒。有很多灯光。我感觉这里就是我的家。虽然我的合同期很短，但是在那个瞬间我依然觉得，&#8220;我属于这里&#8221;。</div><div style="word-wrap: break-word; margin: 0px auto; padding: 0px; font-family: 微软雅黑; line-height: 24px; color: #3e3e3e; font-size: 14px;">　　我们组的人逐渐走散，被分配至各个面试室。轮到我的面试室里面已经有人在面试了，于是接待人员跟我就开始闲聊起来。我跟他说，这个地方让我着迷，这是我第一次来谷歌。</div><div style="word-wrap: break-word; margin: 0px auto; padding: 0px; font-family: 微软雅黑; line-height: 24px; color: #3e3e3e; font-size: 14px;">　　既然我们都要等，接待人员就带我带了游戏室。在游戏室门口，他指了指里面各种新奇的娱乐设备。我看到里面有乒乓球台，居然还有大雄鹿猎人（Big Buck Hunter），那是一款电子游戏室里才有的游戏。我还聊了聊乒乓球桌的标志性质对<a target="_self" style="word-wrap: break-word; margin: 0px auto; padding: 0px; font-family: &quot;color:#111010;&quot;;">Google</a>空间的作用，以及这种图像学如何更广泛地塑造了初创企业文化。房间里充满了各种各样的东西，但似乎没有Google员工。</div><div style="word-wrap: break-word; margin: 0px auto; padding: 0px; font-family: 微软雅黑; line-height: 24px; color: #3e3e3e; font-size: 14px;">　　然后我们就回到了面试室。那里依然有人在用。于是我的接待人员就大声敲门，里面的人跟他说了以后他就马上走开了，快步走到了一个走廊里。然后我就一个人尴尬地站在面试室房间，手里拿着我的谷歌袋子，里面装着一个文件件、一个笔记本。我看着房间里的员工走出来，然后说了声抱歉，然后看了看接待人员那边的走廊，仿佛在表明&#8220;门不是我敲的&#8221;。</div><div style="word-wrap: break-word; margin: 0px auto; padding: 0px; font-family: 微软雅黑; line-height: 24px; color: #3e3e3e; font-size: 14px;">　　我的第一个面试官来找我的时候，我就是这副摸样。他问我接待人员回来了没有，还问我是不是可以开始面试了。接待人员还没回来，我有点心慌，支支吾吾地说可以开始了。</div><div style="word-wrap: break-word; margin: 0px auto; padding: 0px; font-family: 微软雅黑; line-height: 24px; color: #3e3e3e; font-size: 14px;">　　后来面试很快就开始了。面试进行的似乎还算顺利，很快就聊到了一些行为和假设性问题。我谈到了我的弟弟（小企业主）和他对谷歌产品的一些积极看法。然后面试就结束了。</div><div style="word-wrap: break-word; margin: 0px auto; padding: 0px; font-family: 微软雅黑; line-height: 24px; color: #3e3e3e; font-size: 14px;">　　第二轮面试是我的未来上司给我面的。这一轮面试，我感到自己的肢体语言在面试当中给我加分了。从他们的言谈当中，我也感到他们很满意我的答案。</div><div style="word-wrap: break-word; margin: 0px auto; padding: 0px; font-family: 微软雅黑; line-height: 24px; color: #3e3e3e; font-size: 14px;">　　我问他是否认为我符合岗位的要求（我在Youtube上看了两个前谷歌HR的经验之谈）。他说，他觉得我挺合适的，但也说&#8220;要看看最终情况如何&#8221;。他好像对这个表达不太满意，但是现在回想起来，我觉得还是应符合我的面试结果的（我最后毕竟被刷）。</div><div style="word-wrap: break-word; margin: 0px auto; padding: 0px; font-family: 微软雅黑; line-height: 24px; color: #3e3e3e; font-size: 14px;">　　我很开心地离开面试室，觉得offer快到手了。遇到一个应聘者，他问我面试感觉如何。我一时间不知道说什么，最后有点迟疑地说：&#8220;还不错。&#8221;</div><div style="word-wrap: break-word; margin: 0px auto; padding: 0px; font-family: 微软雅黑; line-height: 24px; color: #3e3e3e; font-size: 14px;">　　我怀疑有谷歌员工听到我的话了，于是我感到一阵紧张，害怕&#8220;打脸&#8221;。</div><div style="word-wrap: break-word; margin: 0px auto; padding: 0px; font-family: 微软雅黑; line-height: 24px; color: #3e3e3e; font-size: 14px;">　　在等其他面试者的过程中，我和接待员聊了起来。我问他为什么喜欢到谷歌工作。他说：&#8220;也许主要是因为福利和工作、<a target="_self" style="word-wrap: break-word; margin: 0px auto; padding: 0px; font-family: &quot;color:#111010;&quot;;">生活</a>之间的平衡关系吧。&#8221;</div><div style="word-wrap: break-word; margin: 0px auto; padding: 0px; font-family: 微软雅黑; line-height: 24px; color: #3e3e3e; font-size: 14px;">　　&#8220;不过，这份工作也有难处，比如给应聘者打电话，通知他们被刷掉了。&#8221;他接着说。</div><div style="word-wrap: break-word; margin: 0px auto; padding: 0px; font-family: 微软雅黑; line-height: 24px; color: #3e3e3e; font-size: 14px;">　　于是我又感到一直不安。后来是游览环节，接待员领着我们逛了一圈公司，我们就回去了。</div><div style="word-wrap: break-word; margin: 0px auto; padding: 0px; font-family: 微软雅黑; line-height: 24px; color: #3e3e3e; font-size: 14px;">　　<strong style="word-wrap: break-word; margin: 0px auto; padding: 0px; font-family: &quot;&quot;;">两天后，我被刷了。</strong></div><div style="word-wrap: break-word; margin: 0px auto; padding: 0px; font-family: 微软雅黑; line-height: 24px; color: #3e3e3e; font-size: 14px;">　　两天以后，HR打电话给我说，我被刷掉了。我顿时感觉晴空霹雳。</div><div style="word-wrap: break-word; margin: 0px auto; padding: 0px; font-family: 微软雅黑; line-height: 24px; color: #3e3e3e; font-size: 14px;">　　我也没法告诉你我到底哪里做的不好。谷歌从来不给反馈。我的忠告只能是：不断准备、不断学习、并试着让自己别那么尴尬（参考我的经历）。</div><div style="word-wrap: break-word; margin: 0px auto; padding: 0px; font-family: 微软雅黑; line-height: 24px; color: #3e3e3e; font-size: 14px;">　　入职谷歌一直都是可遇不可求的事。Inc的数据显示，谷歌每年接收200万份简历，最终只招0.02%，淘汰比例是5000：1。</div><div style="word-wrap: break-word; margin: 0px auto; padding: 0px; font-family: 微软雅黑; line-height: 24px; color: #3e3e3e; font-size: 14px;">　　电话里，HR对我说：&#8220;走到了这一步，不管最终结果如何，你都应该为自己感到万分自豪。&#8221;我觉得自己也许是自豪的。但是，无论如何这都是一场旷日持久的求职经历，而且其中不乏尴尬与窘迫的境遇。</div><div style="word-wrap: break-word; margin: 0px auto; padding: 0px; font-family: 微软雅黑; line-height: 24px; color: #3e3e3e; font-size: 14px;">　　如果你最近也被谷歌刷了，我希望你能继续向前看，永远别对未来失去激情！<br style="word-wrap: break-word;" />&nbsp; &nbsp; &nbsp; &nbsp;欢迎加入 测试入门到大神的QQ群：755431660&#8203;<br style="word-wrap: break-word;" />&#8203;<img src="http://blog.chinaunix.net/attachment/201805/21/29734443_1526873564f8j9.png" data-ke-src="/attachment/201805/21/29734443_1526873564f8j9.png" width="402" height="381" alt="" style="word-wrap: break-word; border: 0px;" /></div><img src ="http://www.cnitblog.com/shbwf/aggbug/91024.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/shbwf/" target="_blank">51testing</a> 2018-05-21 11:53 <a href="http://www.cnitblog.com/shbwf/articles/91024.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>像个专业人士一样去调试Bug</title><link>http://www.cnitblog.com/shbwf/articles/91016.html</link><dc:creator>51testing</dc:creator><author>51testing</author><pubDate>Mon, 14 May 2018 05:24:00 GMT</pubDate><guid>http://www.cnitblog.com/shbwf/articles/91016.html</guid><wfw:comment>http://www.cnitblog.com/shbwf/comments/91016.html</wfw:comment><comments>http://www.cnitblog.com/shbwf/articles/91016.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/shbwf/comments/commentRss/91016.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/shbwf/services/trackbacks/91016.html</trackback:ping><description><![CDATA[<div style="word-wrap: break-word; margin: 0px auto; padding: 0px; font-family: 微软雅黑; line-height: 24px; color: #3e3e3e; font-size: 14px;"><a href="http://www.51testing.com/batch.download.php?aid=83169" data-ke-src="http://www.51testing.com/batch.download.php?aid=83169" target="_blank" style="word-wrap: break-word; margin: 0px auto; padding: 0px; font-family: &quot;color:#111010;text-decoration-line:none;&quot;;"><img src="http://www.51testing.com/attachments/2018/02/14982672_201802241143571TUos.png" data-ke-src="http://www.51testing.com/attachments/2018/02/14982672_201802241143571TUos.png" border="0" data-bd-imgshare-binded="1" style="word-wrap: break-word; border: 0px; margin: 0px auto; padding: 0px; max-width: 600px;"  alt="" /></a></div><div style="word-wrap: break-word; margin: 0px auto; padding: 0px; font-family: 微软雅黑; line-height: 24px; color: #3e3e3e; font-size: 14px;">　　欢迎收藏。当你遇到非常难缠的<a target="_self" style="word-wrap: break-word; margin: 0px auto; padding: 0px; font-family: &quot;color:#111010;&quot;;"><u style="word-wrap: break-word; margin: 0px auto; padding: 0px;"><strong style="word-wrap: break-word; margin: 0px auto; padding: 0px;">Bug</strong></u></a>时，不妨回来这里看看...</div><div style="word-wrap: break-word; margin: 0px auto; padding: 0px; font-family: 微软雅黑; line-height: 24px; color: #3e3e3e; font-size: 14px;">　　编程本来是一项非常优雅的工作，而程序员，也理应是那种如艺术家一般，不断写出极具观赏性和创造力的作品的职业。 然而自从工作之后，却发现<strong style="word-wrap: break-word; margin: 0px auto; padding: 0px; font-family: &quot;&quot;;">身边的程序员大多深陷赶迭代出口和修复紧急Bug的泥潭。经常可以看到下面这些场景：</strong></div><div style="word-wrap: break-word; margin: 0px auto; padding: 0px; font-family: 微软雅黑; line-height: 24px; color: #3e3e3e; font-size: 14px;">　　&#183; 修复了一个Bug，却引入了更加致命的Bug</div><div style="word-wrap: break-word; margin: 0px auto; padding: 0px; font-family: 微软雅黑; line-height: 24px; color: #3e3e3e; font-size: 14px;">　　&#183;&nbsp;不停的修改代码，重启服务器，Bug依然没有修复</div><div style="word-wrap: break-word; margin: 0px auto; padding: 0px; font-family: 微软雅黑; line-height: 24px; color: #3e3e3e; font-size: 14px;">　　&#183;&nbsp;补丁打上去后，Bug依旧存在，定位了很久，最后发现是补丁打错地方了</div><div style="word-wrap: break-word; margin: 0px auto; padding: 0px; font-family: 微软雅黑; line-height: 24px; color: #3e3e3e; font-size: 14px;">　　虽然我们应该尽可能保证提交上去的代码里Bug越少越好，但是当Bug真的出现时，我们往往十分慌乱，像一只无头苍蝇一样，调试的过程<strong style="word-wrap: break-word; margin: 0px auto; padding: 0px; font-family: &quot;&quot;;">毫无章法</strong>。</div><div style="word-wrap: break-word; margin: 0px auto; padding: 0px; font-family: 微软雅黑; line-height: 24px; color: #3e3e3e; font-size: 14px;">　　直到最近偶然看到了这本书&#8212;&#8212;《调试九法》，这是我看到的第一本讲<strong style="word-wrap: break-word; margin: 0px auto; padding: 0px; font-family: &quot;&quot;;">调试方法论</strong>的书，回想自己之前在解决Bug时的经常遇到的手足无措，像无头苍蝇一般四处乱撞，最后瞎猫碰上死耗子般地解决了Bug，我毫不犹豫地买下这本书。</div><div style="word-wrap: break-word; margin: 0px auto; padding: 0px; font-family: 微软雅黑; line-height: 24px; color: #3e3e3e; font-size: 14px;">　<strong style="word-wrap: break-word; margin: 0px auto; padding: 0px; font-family: &quot;&quot;;">　这是一套系统的调试理论。</strong></div><div style="word-wrap: break-word; margin: 0px auto; padding: 0px; font-family: 微软雅黑; line-height: 24px; color: #3e3e3e; font-size: 14px;">　　希望本文介绍的这套调试学的知识，能够帮助你在今后遇到Bug时，思路更加清晰，心情更加淡定，从容不迫地去解决问题。</div><div style="word-wrap: break-word; margin: 0px auto; padding: 0px; font-family: 微软雅黑; line-height: 24px; color: #3e3e3e; font-size: 14px;">　<strong style="word-wrap: break-word; margin: 0px auto; padding: 0px; font-family: &quot;&quot;;">　调试法则总览</strong></div><div style="word-wrap: break-word; margin: 0px auto; padding: 0px; font-family: 微软雅黑; line-height: 24px; color: #3e3e3e; font-size: 14px;">　　这套方法论可以总结成一句话：</div><div style="word-wrap: break-word; margin: 0px auto; padding: 0px; font-family: 微软雅黑; line-height: 24px; color: #3e3e3e; font-size: 14px;">　<strong style="word-wrap: break-word; margin: 0px auto; padding: 0px; font-family: &quot;&quot;;">　调试是一门科学，任何不懂原理就进行的操作都是耍流氓。</strong></div><div style="word-wrap: break-word; margin: 0px auto; padding: 0px; font-family: 微软雅黑; line-height: 24px; color: #3e3e3e; font-size: 14px;">　　这句话可以分为两个步骤进行实践：</div><div style="word-wrap: break-word; margin: 0px auto; padding: 0px; font-family: 微软雅黑; line-height: 24px; color: #3e3e3e; font-size: 14px;">　　准备工作：</div><div style="word-wrap: break-word; margin: 0px auto; padding: 0px; font-family: 微软雅黑; line-height: 24px; color: #3e3e3e; font-size: 14px;">　　&#183; 如果你要调试这个系统，首先你必须先理解它。</div><div style="word-wrap: break-word; margin: 0px auto; padding: 0px; font-family: 微软雅黑; line-height: 24px; color: #3e3e3e; font-size: 14px;">　　&#183;&nbsp;在开始调试之前，检查一下&#8220;插头&#8221;，别因为一些简单的问题而瞎忙活半天。</div><div style="word-wrap: break-word; margin: 0px auto; padding: 0px; font-family: 微软雅黑; line-height: 24px; color: #3e3e3e; font-size: 14px;">　　&#183;&nbsp;确定&#8220;插头&#8221;没有问题之后，你需要重现Bug。</div><div style="word-wrap: break-word; margin: 0px auto; padding: 0px; font-family: 微软雅黑; line-height: 24px; color: #3e3e3e; font-size: 14px;">　　寻找原因并解决Bug</div><div style="word-wrap: break-word; margin: 0px auto; padding: 0px; font-family: 微软雅黑; line-height: 24px; color: #3e3e3e; font-size: 14px;">　　&#183;&nbsp;不要认为你猜测的原因是对的，要去观察，验证你的猜测。</div><div style="word-wrap: break-word; margin: 0px auto; padding: 0px; font-family: 微软雅黑; line-height: 24px; color: #3e3e3e; font-size: 14px;">　　&#183;&nbsp;采用分而治之的方法，定位多模块的系统问题和修复由多个子问题引发的问题。</div><div style="word-wrap: break-word; margin: 0px auto; padding: 0px; font-family: 微软雅黑; line-height: 24px; color: #3e3e3e; font-size: 14px;">　　&#183;&nbsp;一次只修改一个地方</div><div style="word-wrap: break-word; margin: 0px auto; padding: 0px; font-family: 微软雅黑; line-height: 24px; color: #3e3e3e; font-size: 14px;">　　&#183;&nbsp;做好修改<a target="_self" style="word-wrap: break-word; margin: 0px auto; padding: 0px; font-family: &quot;color:#111010;&quot;;"><u style="word-wrap: break-word; margin: 0px auto; padding: 0px;"><strong style="word-wrap: break-word; margin: 0px auto; padding: 0px;">记录</strong></u></a></div><div style="word-wrap: break-word; margin: 0px auto; padding: 0px; font-family: 微软雅黑; line-height: 24px; color: #3e3e3e; font-size: 14px;">　　&#183;&nbsp;如果正向调试走不通，不妨试一下反向调试法</div><div style="word-wrap: break-word; margin: 0px auto; padding: 0px; font-family: 微软雅黑; line-height: 24px; color: #3e3e3e; font-size: 14px;">　　&#183;&nbsp;最后一招：求助他人</div><div style="word-wrap: break-word; margin: 0px auto; padding: 0px; font-family: 微软雅黑; line-height: 24px; color: #3e3e3e; font-size: 14px;">　　下面对这些法则逐一进行详细地介绍。</div><div style="word-wrap: break-word; margin: 0px auto; padding: 0px; font-family: 微软雅黑; line-height: 24px; color: #3e3e3e; font-size: 14px;">　　<strong style="word-wrap: break-word; margin: 0px auto; padding: 0px; font-family: &quot;&quot;;">理解系统</strong></div><div style="word-wrap: break-word; margin: 0px auto; padding: 0px; font-family: 微软雅黑; line-height: 24px; color: #3e3e3e; font-size: 14px;">　　理解系统是定位Bug的前提条件。</div><div style="word-wrap: break-word; margin: 0px auto; padding: 0px; font-family: 微软雅黑; line-height: 24px; color: #3e3e3e; font-size: 14px;">　　我之前遇到程序抛出异常时，经常就把异常信息贴到网上搜，然后把网上的解决方案执行一遍，有时work了，就大吉大利，可大多数时候，是不work的，原因很简单，也许对方的JDK版本跟你的不一样，也许你们俩只是报错信息相同，但是抛异常的原因不同，更大的可能，对方的解决方案本来就行不通。</div><div style="word-wrap: break-word; margin: 0px auto; padding: 0px; font-family: 微软雅黑; line-height: 24px; color: #3e3e3e; font-size: 14px;">　　这就能理解为什么理解系统是定位Bug的前提了，如果你在定位一个JDK异常，那么至少你要掌握Java SE吧，如果你能掌握JVM的垃圾回收原理、类加载机制，自然更好；而如果你在定位一个支付系统为什么没有把账打到客户的账户，那么你得了解支付的流程吧。</div><div style="word-wrap: break-word; margin: 0px auto; padding: 0px; font-family: 微软雅黑; line-height: 24px; color: #3e3e3e; font-size: 14px;">　　总之，在开始调试之前，我们得弄清楚，<strong style="word-wrap: break-word; margin: 0px auto; padding: 0px; font-family: &quot;&quot;;">调试是一门科学，而不是一门概率学</strong>，你需要理解整个系统，才能够进行调试。<strong style="word-wrap: break-word; margin: 0px auto; padding: 0px; font-family: &quot;&quot;;">有以下方法可以帮助你理解这个系统：</strong></div><div style="word-wrap: break-word; margin: 0px auto; padding: 0px; font-family: 微软雅黑; line-height: 24px; color: #3e3e3e; font-size: 14px;">　　&#183;&nbsp;阅读手册：阅读需求设计文档、产品文档、使用手册等</div><div style="word-wrap: break-word; margin: 0px auto; padding: 0px; font-family: 微软雅黑; line-height: 24px; color: #3e3e3e; font-size: 14px;">　　&#183;&nbsp;仔细阅读手册的每一个细节：说不定解决Bug的方案就在某个段落里</div><div style="word-wrap: break-word; margin: 0px auto; padding: 0px; font-family: 微软雅黑; line-height: 24px; color: #3e3e3e; font-size: 14px;">　　&#183;&nbsp;掌握基础知识：最后你总是要看源码的，至少你要掌握相应的编程语言把</div><div style="word-wrap: break-word; margin: 0px auto; padding: 0px; font-family: 微软雅黑; line-height: 24px; color: #3e3e3e; font-size: 14px;">　　&#183;&nbsp;了解工作流程：从整体的角度来观察，而不是做井底之蛙</div><div style="word-wrap: break-word; margin: 0px auto; padding: 0px; font-family: 微软雅黑; line-height: 24px; color: #3e3e3e; font-size: 14px;">　　可以说，理解系统的最终目的就是为了了解工作流程，<strong style="word-wrap: break-word; margin: 0px auto; padding: 0px; font-family: &quot;&quot;;">了解了工作流程，你才能够从整体的角度来观察，不然就像井底之蛙</strong>，以为问题一定出在自己这个模块，而其实问题是在上游的某个模块里。这一点，和《程序员的思维修炼》中提到的，&#8220;专家从整体进行思考&#8221;的观点不谋而合。</div><div style="word-wrap: break-word; margin: 0px auto; padding: 0px; font-family: 微软雅黑; line-height: 24px; color: #3e3e3e; font-size: 14px;">　　<strong style="word-wrap: break-word; margin: 0px auto; padding: 0px; font-family: &quot;&quot;;">检查插头</strong></div><div style="word-wrap: break-word; margin: 0px auto; padding: 0px; font-family: 微软雅黑; line-height: 24px; color: #3e3e3e; font-size: 14px;">　　这里当然不是让你去问人家插头插了没，插头在这里是泛指一切让产品正常运行的基本要求。这些基本要求通常我们都认为理所当然是正常的，可事实有时并非如此。</div><div style="word-wrap: break-word; margin: 0px auto; padding: 0px; font-family: 微软雅黑; line-height: 24px; color: #3e3e3e; font-size: 14px;">　　比如你的一个系统，需要在配置界面配置白名单，不然上游的请求就会被拒绝，那么当出现问题时，你应该首先去检查一下这个白名单配置了没，因为对方有可能是个新手。</div><div style="word-wrap: break-word; margin: 0px auto; padding: 0px; font-family: 微软雅黑; line-height: 24px; color: #3e3e3e; font-size: 14px;">　　甚至当出现一些不可理喻的错误时，你要去软件的运行目录下，比如Tomcat的webapps目录，看看软件包是不是完整。</div><div style="word-wrap: break-word; margin: 0px auto; padding: 0px; font-family: 微软雅黑; line-height: 24px; color: #3e3e3e; font-size: 14px;">　　当你替换新代码上去后，发现Bug依然存在时，不妨上去看看正在运行着的，是不是还是旧代码。</div><div style="word-wrap: break-word; margin: 0px auto; padding: 0px; font-family: 微软雅黑; line-height: 24px; color: #3e3e3e; font-size: 14px;">　　书中把这条规则放到了倒数第三条，我这里把它放到第二条，原因很简单，通常我们在发现Bug或者别人跟自己说这里有Bug时，心里都会慌，都会紧张，所以不妨先检查一下插头，缓解一下自己紧张的心情，同时也强迫你从整体的视角进行观察，不会局限在一个小模块里。</div><div style="word-wrap: break-word; margin: 0px auto; padding: 0px; font-family: 微软雅黑; line-height: 24px; color: #3e3e3e; font-size: 14px;">　　<strong style="word-wrap: break-word; margin: 0px auto; padding: 0px; font-family: &quot;&quot;;">重现失败</strong></div><div style="word-wrap: break-word; margin: 0px auto; padding: 0px; font-family: 微软雅黑; line-height: 24px; color: #3e3e3e; font-size: 14px;">　　这几乎是一个下意识的动作，就算你之前没读过这本书，在遇到Bug时，你也会去尝试重现它，原因很简单：</div><div style="word-wrap: break-word; margin: 0px auto; padding: 0px; font-family: 微软雅黑; line-height: 24px; color: #3e3e3e; font-size: 14px;">　　&#183;&nbsp;重现失败让你可以观察失败发生时的上下文信息，进而找到失败的原因</div><div style="word-wrap: break-word; margin: 0px auto; padding: 0px; font-family: 微软雅黑; line-height: 24px; color: #3e3e3e; font-size: 14px;">　　&#183;&nbsp;重现失败让你可以判断是否已经修复了问题</div><div style="word-wrap: break-word; margin: 0px auto; padding: 0px; font-family: 微软雅黑; line-height: 24px; color: #3e3e3e; font-size: 14px;">　　有些问题很好重现，而有些呢，却是要在特定的输入的情况下才会出现的。</div><div style="word-wrap: break-word; margin: 0px auto; padding: 0px; font-family: 微软雅黑; line-height: 24px; color: #3e3e3e; font-size: 14px;">　　<strong style="word-wrap: break-word; margin: 0px auto; padding: 0px; font-family: &quot;&quot;;">我们犯的绝大多数错误是在重现的方式上，</strong>作者对重现提出了两条原则：</div><div style="word-wrap: break-word; margin: 0px auto; padding: 0px; font-family: 微软雅黑; line-height: 24px; color: #3e3e3e; font-size: 14px;">　　&#183;&nbsp;模拟失败发生的条件，但是不要模拟失败的机理，因为你认为的导致失败的机理很可能是错误的。举个例子，你认为是高并发导致的bug，于是你模拟了高并发的环境，问题重现了，然后你就说是高并发导致的，其实呢，只不过是高并发提高了问题发生的几率。</div><div style="word-wrap: break-word; margin: 0px auto; padding: 0px; font-family: 微软雅黑; line-height: 24px; color: #3e3e3e; font-size: 14px;">　　&#183;&nbsp;只影响错误发生的频率，不影响错误发生的方式。其实高并发的环境可以用来提高错误发生的频率，只不过你要在问题重现时，要找到相应的日志信息，然后定位出问题发生的原因，而不是直接认为就是并发导致的。</div><div style="word-wrap: break-word; margin: 0px auto; padding: 0px; font-family: 微软雅黑; line-height: 24px; color: #3e3e3e; font-size: 14px;">　　<strong style="word-wrap: break-word; margin: 0px auto; padding: 0px; font-family: &quot;&quot;;">不要猜，要观察</strong></div><div style="word-wrap: break-word; margin: 0px auto; padding: 0px; font-family: 微软雅黑; line-height: 24px; color: #3e3e3e; font-size: 14px;">　　现在我们可以重现Bug了，直觉告诉我要在那个地方进行一个字符串编码的转换，且慢，在进行这个武断的尝试之前，先来看看《福尔摩斯》是怎么说的：</div><div style="word-wrap: break-word; margin: 0px auto; padding: 0px; font-family: 微软雅黑; line-height: 24px; color: #3e3e3e; font-size: 14px;">　　主观臆断的人，总是为了套用理论而扭曲事实，而不是用理论来解释事实。</div><div style="word-wrap: break-word; margin: 0px auto; padding: 0px; font-family: 微软雅黑; line-height: 24px; color: #3e3e3e; font-size: 14px;">　　猜测只是为了确定搜索的重点，但是在开始修复之前要观察确认你的猜测。所以在我们修改代码之前，还是看一下发生错误时的日志信息，还可以调试一下代码，在必要的时候打开源码深入研究一下，确定确实是字符串编码的问题，再去修改代码。</div><div style="word-wrap: break-word; margin: 0px auto; padding: 0px; font-family: 微软雅黑; line-height: 24px; color: #3e3e3e; font-size: 14px;">　　有人说，那我直接改代码，然后看结果不就知道是不是字符串编码的问题了。当然不是，要知道一个问题的产生可能是由多处地方的代码引起的，也许解决完这个字符串编码的问题，还需要解决另一个问题，才能把整个问题解决呢？<strong style="word-wrap: break-word; margin: 0px auto; padding: 0px; font-family: &quot;&quot;;">如果你在修改前就没进行观察，就会认为这次修改毫无意义，这样整个调试过程就会陷入死局。</strong></div><div style="word-wrap: break-word; margin: 0px auto; padding: 0px; font-family: 微软雅黑; line-height: 24px; color: #3e3e3e; font-size: 14px;">　　记住，调试是一门科学，任何不懂原理就进行的操作都是耍流氓。</div><div style="word-wrap: break-word; margin: 0px auto; padding: 0px; font-family: 微软雅黑; line-height: 24px; color: #3e3e3e; font-size: 14px;">　　<strong style="word-wrap: break-word; margin: 0px auto; padding: 0px; font-family: &quot;&quot;;">分而治之</strong></div><div style="word-wrap: break-word; margin: 0px auto; padding: 0px; font-family: 微软雅黑; line-height: 24px; color: #3e3e3e; font-size: 14px;">　　系统通常都是由很多个模块组成的，这也就要求我们要检查很多个模块的日志才能够确定问题发生的原因。尤其是现在流行的微服务框架，一笔业务出现问题，你需要到很多个服务的机器上去找日志。</div><div style="word-wrap: break-word; margin: 0px auto; padding: 0px; font-family: 微软雅黑; line-height: 24px; color: #3e3e3e; font-size: 14px;">　　但是，如果你的业务执行是线性的，也就是说如果节点A执行失败，那么节点A之后的也都会执行失败，那么你就可以采用二分法的方式来定位了。要知道，在1到100里猜一个数字，最多也就需要7次。</div><div style="word-wrap: break-word; margin: 0px auto; padding: 0px; font-family: 微软雅黑; line-height: 24px; color: #3e3e3e; font-size: 14px;">　　采用二分法的方式，你将逐步缩小嫌疑的范围，最终找到问题的根因。</div><div style="word-wrap: break-word; margin: 0px auto; padding: 0px; font-family: 微软雅黑; line-height: 24px; color: #3e3e3e; font-size: 14px;">　　当然，如果问题是由多个子问题引起的，那么记住，找到一个，消灭一个，这就是所谓的<strong style="word-wrap: break-word; margin: 0px auto; padding: 0px; font-family: &quot;&quot;;">分而治之</strong>。</div><div style="word-wrap: break-word; margin: 0px auto; padding: 0px; font-family: 微软雅黑; line-height: 24px; color: #3e3e3e; font-size: 14px;">　<strong style="word-wrap: break-word; margin: 0px auto; padding: 0px; font-family: &quot;&quot;;">　一次只修改一个地方</strong></div><div style="word-wrap: break-word; margin: 0px auto; padding: 0px; font-family: 微软雅黑; line-height: 24px; color: #3e3e3e; font-size: 14px;">　　通过观察，你认为你的修改方法会起作用，但如果实际上你修改完代码之后，并没有起到任何作用，那么请你马上改回去，<strong style="word-wrap: break-word; margin: 0px auto; padding: 0px; font-family: &quot;&quot;;">以免这个修改引入了新的Bug。</strong></div><div style="word-wrap: break-word; margin: 0px auto; padding: 0px; font-family: 微软雅黑; line-height: 24px; color: #3e3e3e; font-size: 14px;">　<strong style="word-wrap: break-word; margin: 0px auto; padding: 0px; font-family: &quot;&quot;;">　做好修改记录</strong></div><div style="word-wrap: break-word; margin: 0px auto; padding: 0px; font-family: 微软雅黑; line-height: 24px; color: #3e3e3e; font-size: 14px;">　　<strong style="word-wrap: break-word; margin: 0px auto; padding: 0px; font-family: &quot;&quot;;">把你调试过程中的操作和结果按顺序全部记录下来</strong>，方便你在发现做了那么多处修改依然没有解决问题时，进行回溯，反思自己的操作有没有不对的地方。</div><div style="word-wrap: break-word; margin: 0px auto; padding: 0px; font-family: 微软雅黑; line-height: 24px; color: #3e3e3e; font-size: 14px;">　<strong style="word-wrap: break-word; margin: 0px auto; padding: 0px; font-family: &quot;&quot;;">　反向调试法</strong></div><div style="word-wrap: break-word; margin: 0px auto; padding: 0px; font-family: 微软雅黑; line-height: 24px; color: #3e3e3e; font-size: 14px;">　　上面的调试规则，都是从问题出发，去寻找犯错的代码。但有时候反过来也许会更好。</div><div style="word-wrap: break-word; margin: 0px auto; padding: 0px; font-family: 微软雅黑; line-height: 24px; color: #3e3e3e; font-size: 14px;">　　你可以找到最新一个可以正常运行的版本，然后对比现在这个版本和那个版本之间的差别，通过分析改动的代码，来分析是哪块代码导致的问题。</div><div style="word-wrap: break-word; margin: 0px auto; padding: 0px; font-family: 微软雅黑; line-height: 24px; color: #3e3e3e; font-size: 14px;">　　<strong style="word-wrap: break-word; margin: 0px auto; padding: 0px; font-family: &quot;&quot;;">求助他人</strong></div><div style="word-wrap: break-word; margin: 0px auto; padding: 0px; font-family: 微软雅黑; line-height: 24px; color: #3e3e3e; font-size: 14px;">　　有时候问题比较紧急，这时候不妨问一下专家，正如《程序员的思维修炼》中提到的，专家依靠直觉，他们往往会一针见血的给你指出问题的地方。</div><div style="word-wrap: break-word; margin: 0px auto; padding: 0px; font-family: 微软雅黑; line-height: 24px; color: #3e3e3e; font-size: 14px;">　　如果你对系统有一定理解的情况下，可以上软件供应商的官网、<a target="_self" style="word-wrap: break-word; margin: 0px auto; padding: 0px; font-family: &quot;color:#111010;&quot;;"><u style="word-wrap: break-word; margin: 0px auto; padding: 0px;"><strong style="word-wrap: break-word; margin: 0px auto; padding: 0px;">谷歌</strong></u></a>、StackOverflow等网站寻找相关的资料。</div><div style="word-wrap: break-word; margin: 0px auto; padding: 0px; font-family: 微软雅黑; line-height: 24px; color: #3e3e3e; font-size: 14px;">　　在求助的过程中，你只需要描述问题的症状，如果对方没有要求，那么不要给他讲自己的理论，以免将对方带入自己的思维定式。</div><div style="word-wrap: break-word; margin: 0px auto; padding: 0px; font-family: 微软雅黑; line-height: 24px; color: #3e3e3e; font-size: 14px;">　　而在给他人描述问题的同时，你自己可能也会得到启发。</div><div style="word-wrap: break-word; margin: 0px auto; padding: 0px; font-family: 微软雅黑; line-height: 24px; color: #3e3e3e; font-size: 14px;">　　<strong style="word-wrap: break-word; margin: 0px auto; padding: 0px; font-family: &quot;&quot;;">总结</strong></div><div style="word-wrap: break-word; margin: 0px auto; padding: 0px; font-family: 微软雅黑; line-height: 24px; color: #3e3e3e; font-size: 14px;">　　以上就是我看完《调试九法》这本书之后总结的一套调试方法论，当然还是建议大家看一下原著，说不定会有新的收获。不过书中列举了大量的例子，多的让我感觉有些冗余，建议大家看的时候，先看每一章节的开头，和每章结尾的小总结，看完之后有不理解的，再去看每章中间的案例。</div><div style="word-wrap: break-word; margin: 0px auto; padding: 0px; font-family: 微软雅黑; line-height: 24px; color: #3e3e3e; font-size: 14px;">　　本书的例子虽然大多数都是关于工程<a target="_self" style="word-wrap: break-word; margin: 0px auto; padding: 0px; font-family: &quot;color:#111010;&quot;;"><u style="word-wrap: break-word; margin: 0px auto; padding: 0px;"><strong style="word-wrap: break-word; margin: 0px auto; padding: 0px;">技术</strong></u></a>的，但是里面的一些想法还是可以借鉴到<a target="_self" style="word-wrap: break-word; margin: 0px auto; padding: 0px; font-family: &quot;color:#111010;&quot;;"><u style="word-wrap: break-word; margin: 0px auto; padding: 0px;"><strong style="word-wrap: break-word; margin: 0px auto; padding: 0px;">生活</strong></u></a>中去。比如，夫妻吵架了，表面看上去是因为丈夫不愿意洗碗，但是如果你能从全局的角度去观察，你就知道，其实是因为丈夫情人节时没有给夫人买礼物。</div><div style="word-wrap: break-word; margin: 0px auto; padding: 0px; font-family: 微软雅黑; line-height: 24px; color: #3e3e3e; font-size: 14px;">　　回过头来看这些规则，其实我们在工作和生活中时不时都会用到，但是我们之前一直没有一个系统的理论体系，在掌握了书中介绍的调试规则之后，我们在今后定位错误根源时，会更加井井有条，从容不迫。</div><div style="word-wrap: break-word; margin: 0px auto; padding: 0px; font-family: 微软雅黑; line-height: 24px; color: #3e3e3e; font-size: 14px;">　　最后必须说一句，<strong style="word-wrap: break-word; margin: 0px auto; padding: 0px; font-family: &quot;&quot;;">专业人士应该在开发时就尽可能地保证软件的质量，而不是经常靠调试来弥补缺陷</strong>。完善而充分的<a target="_self" style="word-wrap: break-word; margin: 0px auto; padding: 0px; font-family: &quot;color:#111010;&quot;;"><u style="word-wrap: break-word; margin: 0px auto; padding: 0px;"><strong style="word-wrap: break-word; margin: 0px auto; padding: 0px;">单元测试</strong></u></a>是保证代码质量的关键。当你发现Bug时，也就说明你的<a target="_self" style="word-wrap: break-word; margin: 0px auto; padding: 0px; font-family: &quot;color:#111010;&quot;;"><u style="word-wrap: break-word; margin: 0px auto; padding: 0px;"><strong style="word-wrap: break-word; margin: 0px auto; padding: 0px;">测试用例</strong></u></a>不全，在修复完Bug之后，要及时补上测试用例。</div><span style="word-wrap: break-word; color: #1a1a1a; font-family: Helvetica, 黑体; font-size: 16.5px; letter-spacing: 0.7px;">如果有任何疑问，欢迎添加qq群测试入门大神 755431660 共同学习~</span><span style="font-family: &quot;sans serif&quot;, tahoma, verdana, helvetica; font-size: 16px;">&#8203;</span><br style="word-wrap: break-word; font-family: &quot;sans serif&quot;, tahoma, verdana, helvetica; font-size: 16px;" /><span style="font-family: &quot;sans serif&quot;, tahoma, verdana, helvetica; font-size: 16px;">&#8203;</span><img src="http://blog.chinaunix.net/attachment/201805/14/29734443_152627472148qe.png" data-ke-src="/attachment/201805/14/29734443_152627472148qe.png" width="402" height="381" alt="" style="word-wrap: break-word; border: 0px; font-family: &quot;sans serif&quot;, tahoma, verdana, helvetica; font-size: 16px;" /><span style="font-family: &quot;sans serif&quot;, tahoma, verdana, helvetica; font-size: 16px;">&#8203;</span><img src ="http://www.cnitblog.com/shbwf/aggbug/91016.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/shbwf/" target="_blank">51testing</a> 2018-05-14 13:24 <a href="http://www.cnitblog.com/shbwf/articles/91016.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>给你一句话的需求，如何拆分测试点来设计测试案例</title><link>http://www.cnitblog.com/shbwf/articles/90969.html</link><dc:creator>51testing</dc:creator><author>51testing</author><pubDate>Wed, 18 Apr 2018 03:57:00 GMT</pubDate><guid>http://www.cnitblog.com/shbwf/articles/90969.html</guid><wfw:comment>http://www.cnitblog.com/shbwf/comments/90969.html</wfw:comment><comments>http://www.cnitblog.com/shbwf/articles/90969.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/shbwf/comments/commentRss/90969.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/shbwf/services/trackbacks/90969.html</trackback:ping><description><![CDATA[<p style="padding-top: 0px; padding-bottom: 0px; list-style: none; box-sizing: border-box; counter-reset: list-1 0 list-2 0 list-3 0 list-4 0 list-5 0 list-6 0 list-7 0 list-8 0 list-9 0; font-family: Helvetica, Arial, sans-serif; font-size: 14px; white-space: pre-wrap;"><strong style="margin: 0px; padding: 0px; list-style: none; box-sizing: border-box;"></strong></p><p style="word-wrap: break-word; padding-top: 0px; padding-bottom: 0px; list-style: none; box-sizing: border-box; counter-reset: list-1 0 list-2 0 list-3 0 list-4 0 list-5 0 list-6 0 list-7 0 list-8 0 list-9 0; font-family: Helvetica, Arial, sans-serif; font-size: 14px; white-space: pre-wrap;"><strong style="word-wrap: break-word; margin: 0px; padding: 0px; list-style: none; box-sizing: border-box;">早上看到一个<u style="word-wrap: break-word; margin: 0px; padding: 0px; list-style: none; box-sizing: border-box;">测试</u>面试题目：</strong></p><p style="word-wrap: break-word; padding-top: 0px; padding-bottom: 0px; list-style: none; box-sizing: border-box; counter-reset: list-1 0 list-2 0 list-3 0 list-4 0 list-5 0 list-6 0 list-7 0 list-8 0 list-9 0; font-family: Helvetica, Arial, sans-serif; font-size: 14px; white-space: pre-wrap;">需求：&#8220;世上无难事，庸人自扰之&#8221;，如何拆分测试点来设计<u style="word-wrap: break-word; margin: 0px; padding: 0px; list-style: none; box-sizing: border-box;">测试用例</u>（要求列出测试点）</p><p style="word-wrap: break-word; padding-top: 0px; padding-bottom: 0px; list-style: none; box-sizing: border-box; counter-reset: list-1 0 list-2 0 list-3 0 list-4 0 list-5 0 list-6 0 list-7 0 list-8 0 list-9 0; font-family: Helvetica, Arial, sans-serif; font-size: 14px; white-space: pre-wrap;">没错，现在测面试官已经不按套路了，大概是以前的杯子啊，椅子啊，都已经用烂了，所以换套路了，不过方法基本不变。</p><p style="word-wrap: break-word; padding-top: 0px; padding-bottom: 0px; list-style: none; box-sizing: border-box; counter-reset: list-1 0 list-2 0 list-3 0 list-4 0 list-5 0 list-6 0 list-7 0 list-8 0 list-9 0; font-family: Helvetica, Arial, sans-serif; font-size: 14px; white-space: pre-wrap;"><strong style="word-wrap: break-word; margin: 0px; padding: 0px; list-style: none; box-sizing: border-box;">1.对世上测试点做等价类划分</strong></p><p style="word-wrap: break-word; padding-top: 0px; padding-bottom: 0px; list-style: none; box-sizing: border-box; counter-reset: list-1 0 list-2 0 list-3 0 list-4 0 list-5 0 list-6 0 list-7 0 list-8 0 list-9 0; font-family: Helvetica, Arial, sans-serif; font-size: 14px; white-space: pre-wrap;">输入世上，期望成功</p><p style="word-wrap: break-word; padding-top: 0px; padding-bottom: 0px; list-style: none; box-sizing: border-box; counter-reset: list-1 0 list-2 0 list-3 0 list-4 0 list-5 0 list-6 0 list-7 0 list-8 0 list-9 0; font-family: Helvetica, Arial, sans-serif; font-size: 14px; white-space: pre-wrap;">输入世中，期望失败</p><p style="word-wrap: break-word; padding-top: 0px; padding-bottom: 0px; list-style: none; box-sizing: border-box; counter-reset: list-1 0 list-2 0 list-3 0 list-4 0 list-5 0 list-6 0 list-7 0 list-8 0 list-9 0; font-family: Helvetica, Arial, sans-serif; font-size: 14px; white-space: pre-wrap;">输入世下，期望失败</p><p style="word-wrap: break-word; padding-top: 0px; padding-bottom: 0px; list-style: none; box-sizing: border-box; counter-reset: list-1 0 list-2 0 list-3 0 list-4 0 list-5 0 list-6 0 list-7 0 list-8 0 list-9 0; font-family: Helvetica, Arial, sans-serif; font-size: 14px; white-space: pre-wrap;"><strong style="word-wrap: break-word; margin: 0px; padding: 0px; list-style: none; box-sizing: border-box;">　2.对无测试点做等价类划分</strong></p><p style="word-wrap: break-word; padding-top: 0px; padding-bottom: 0px; list-style: none; box-sizing: border-box; counter-reset: list-1 0 list-2 0 list-3 0 list-4 0 list-5 0 list-6 0 list-7 0 list-8 0 list-9 0; font-family: Helvetica, Arial, sans-serif; font-size: 14px; white-space: pre-wrap;">无，期望成功</p><p style="word-wrap: break-word; padding-top: 0px; padding-bottom: 0px; list-style: none; box-sizing: border-box; counter-reset: list-1 0 list-2 0 list-3 0 list-4 0 list-5 0 list-6 0 list-7 0 list-8 0 list-9 0; font-family: Helvetica, Arial, sans-serif; font-size: 14px; white-space: pre-wrap;">有，期望失败</p><p style="word-wrap: break-word; padding-top: 0px; padding-bottom: 0px; list-style: none; box-sizing: border-box; counter-reset: list-1 0 list-2 0 list-3 0 list-4 0 list-5 0 list-6 0 list-7 0 list-8 0 list-9 0; font-family: Helvetica, Arial, sans-serif; font-size: 14px; white-space: pre-wrap;"><strong style="word-wrap: break-word; margin: 0px; padding: 0px; list-style: none; box-sizing: border-box;">　3.难等价类划分</strong></p><p style="word-wrap: break-word; padding-top: 0px; padding-bottom: 0px; list-style: none; box-sizing: border-box; counter-reset: list-1 0 list-2 0 list-3 0 list-4 0 list-5 0 list-6 0 list-7 0 list-8 0 list-9 0; font-family: Helvetica, Arial, sans-serif; font-size: 14px; white-space: pre-wrap;">难，期望成功</p><p style="word-wrap: break-word; padding-top: 0px; padding-bottom: 0px; list-style: none; box-sizing: border-box; counter-reset: list-1 0 list-2 0 list-3 0 list-4 0 list-5 0 list-6 0 list-7 0 list-8 0 list-9 0; font-family: Helvetica, Arial, sans-serif; font-size: 14px; white-space: pre-wrap;">不难，期望失败</p><p style="word-wrap: break-word; padding-top: 0px; padding-bottom: 0px; list-style: none; box-sizing: border-box; counter-reset: list-1 0 list-2 0 list-3 0 list-4 0 list-5 0 list-6 0 list-7 0 list-8 0 list-9 0; font-family: Helvetica, Arial, sans-serif; font-size: 14px; white-space: pre-wrap;">不怎么难，期望失败</p><p style="word-wrap: break-word; padding-top: 0px; padding-bottom: 0px; list-style: none; box-sizing: border-box; counter-reset: list-1 0 list-2 0 list-3 0 list-4 0 list-5 0 list-6 0 list-7 0 list-8 0 list-9 0; font-family: Helvetica, Arial, sans-serif; font-size: 14px; white-space: pre-wrap;"><strong style="word-wrap: break-word; margin: 0px; padding: 0px; list-style: none; box-sizing: border-box;">4.对庸人测试点做等价类划分</strong></p><p style="word-wrap: break-word; padding-top: 0px; padding-bottom: 0px; list-style: none; box-sizing: border-box; counter-reset: list-1 0 list-2 0 list-3 0 list-4 0 list-5 0 list-6 0 list-7 0 list-8 0 list-9 0; font-family: Helvetica, Arial, sans-serif; font-size: 14px; white-space: pre-wrap;">庸人</p><p style="word-wrap: break-word; padding-top: 0px; padding-bottom: 0px; list-style: none; box-sizing: border-box; counter-reset: list-1 0 list-2 0 list-3 0 list-4 0 list-5 0 list-6 0 list-7 0 list-8 0 list-9 0; font-family: Helvetica, Arial, sans-serif; font-size: 14px; white-space: pre-wrap;">俗人</p><p style="word-wrap: break-word; padding-top: 0px; padding-bottom: 0px; list-style: none; box-sizing: border-box; counter-reset: list-1 0 list-2 0 list-3 0 list-4 0 list-5 0 list-6 0 list-7 0 list-8 0 list-9 0; font-family: Helvetica, Arial, sans-serif; font-size: 14px; white-space: pre-wrap;">僧人</p><p style="word-wrap: break-word; padding-top: 0px; padding-bottom: 0px; list-style: none; box-sizing: border-box; counter-reset: list-1 0 list-2 0 list-3 0 list-4 0 list-5 0 list-6 0 list-7 0 list-8 0 list-9 0; font-family: Helvetica, Arial, sans-serif; font-size: 14px; white-space: pre-wrap;">男人</p><p style="word-wrap: break-word; padding-top: 0px; padding-bottom: 0px; list-style: none; box-sizing: border-box; counter-reset: list-1 0 list-2 0 list-3 0 list-4 0 list-5 0 list-6 0 list-7 0 list-8 0 list-9 0; font-family: Helvetica, Arial, sans-serif; font-size: 14px; white-space: pre-wrap;">女人</p><p style="word-wrap: break-word; padding-top: 0px; padding-bottom: 0px; list-style: none; box-sizing: border-box; counter-reset: list-1 0 list-2 0 list-3 0 list-4 0 list-5 0 list-6 0 list-7 0 list-8 0 list-9 0; font-family: Helvetica, Arial, sans-serif; font-size: 14px; white-space: pre-wrap;"><strong style="word-wrap: break-word; margin: 0px; padding: 0px; list-style: none; box-sizing: border-box;">　5.对庸人测试点做边界值测试</strong></p><p style="word-wrap: break-word; padding-top: 0px; padding-bottom: 0px; list-style: none; box-sizing: border-box; counter-reset: list-1 0 list-2 0 list-3 0 list-4 0 list-5 0 list-6 0 list-7 0 list-8 0 list-9 0; font-family: Helvetica, Arial, sans-serif; font-size: 14px; white-space: pre-wrap;">刚出生的小孩</p><p style="word-wrap: break-word; padding-top: 0px; padding-bottom: 0px; list-style: none; box-sizing: border-box; counter-reset: list-1 0 list-2 0 list-3 0 list-4 0 list-5 0 list-6 0 list-7 0 list-8 0 list-9 0; font-family: Helvetica, Arial, sans-serif; font-size: 14px; white-space: pre-wrap;">快挂掉的老头</p><p style="word-wrap: break-word; padding-top: 0px; padding-bottom: 0px; list-style: none; box-sizing: border-box; counter-reset: list-1 0 list-2 0 list-3 0 list-4 0 list-5 0 list-6 0 list-7 0 list-8 0 list-9 0; font-family: Helvetica, Arial, sans-serif; font-size: 14px; white-space: pre-wrap;"><strong style="word-wrap: break-word; margin: 0px; padding: 0px; list-style: none; box-sizing: border-box;">　6.对庸人考虑特殊人群</strong></p><p style="word-wrap: break-word; padding-top: 0px; padding-bottom: 0px; list-style: none; box-sizing: border-box; counter-reset: list-1 0 list-2 0 list-3 0 list-4 0 list-5 0 list-6 0 list-7 0 list-8 0 list-9 0; font-family: Helvetica, Arial, sans-serif; font-size: 14px; white-space: pre-wrap;">孕妇</p><p style="word-wrap: break-word; padding-top: 0px; padding-bottom: 0px; list-style: none; box-sizing: border-box; counter-reset: list-1 0 list-2 0 list-3 0 list-4 0 list-5 0 list-6 0 list-7 0 list-8 0 list-9 0; font-family: Helvetica, Arial, sans-serif; font-size: 14px; white-space: pre-wrap;">狱友</p><p style="word-wrap: break-word; padding-top: 0px; padding-bottom: 0px; list-style: none; box-sizing: border-box; counter-reset: list-1 0 list-2 0 list-3 0 list-4 0 list-5 0 list-6 0 list-7 0 list-8 0 list-9 0; font-family: Helvetica, Arial, sans-serif; font-size: 14px; white-space: pre-wrap;"><strong style="word-wrap: break-word; margin: 0px; padding: 0px; list-style: none; box-sizing: border-box;">　7.对自扰之做等价类</strong></p><p style="word-wrap: break-word; padding-top: 0px; padding-bottom: 0px; list-style: none; box-sizing: border-box; counter-reset: list-1 0 list-2 0 list-3 0 list-4 0 list-5 0 list-6 0 list-7 0 list-8 0 list-9 0; font-family: Helvetica, Arial, sans-serif; font-size: 14px; white-space: pre-wrap;">扰自己</p><p style="word-wrap: break-word; padding-top: 0px; padding-bottom: 0px; list-style: none; box-sizing: border-box; counter-reset: list-1 0 list-2 0 list-3 0 list-4 0 list-5 0 list-6 0 list-7 0 list-8 0 list-9 0; font-family: Helvetica, Arial, sans-serif; font-size: 14px; white-space: pre-wrap;">扰别人</p><p style="word-wrap: break-word; padding-top: 0px; padding-bottom: 0px; list-style: none; box-sizing: border-box; counter-reset: list-1 0 list-2 0 list-3 0 list-4 0 list-5 0 list-6 0 list-7 0 list-8 0 list-9 0; font-family: Helvetica, Arial, sans-serif; font-size: 14px; white-space: pre-wrap;"><strong style="word-wrap: break-word; margin: 0px; padding: 0px; list-style: none; box-sizing: border-box;">　8.对扰的类型测试</strong></p><p style="word-wrap: break-word; padding-top: 0px; padding-bottom: 0px; list-style: none; box-sizing: border-box; counter-reset: list-1 0 list-2 0 list-3 0 list-4 0 list-5 0 list-6 0 list-7 0 list-8 0 list-9 0; font-family: Helvetica, Arial, sans-serif; font-size: 14px; white-space: pre-wrap;">噪音干扰</p><p style="word-wrap: break-word; padding-top: 0px; padding-bottom: 0px; list-style: none; box-sizing: border-box; counter-reset: list-1 0 list-2 0 list-3 0 list-4 0 list-5 0 list-6 0 list-7 0 list-8 0 list-9 0; font-family: Helvetica, Arial, sans-serif; font-size: 14px; white-space: pre-wrap;">光干扰</p><p style="word-wrap: break-word; padding-top: 0px; padding-bottom: 0px; list-style: none; box-sizing: border-box; counter-reset: list-1 0 list-2 0 list-3 0 list-4 0 list-5 0 list-6 0 list-7 0 list-8 0 list-9 0; font-family: Helvetica, Arial, sans-serif; font-size: 14px; white-space: pre-wrap;">性骚扰</p><p style="word-wrap: break-word; padding-top: 0px; padding-bottom: 0px; list-style: none; box-sizing: border-box; counter-reset: list-1 0 list-2 0 list-3 0 list-4 0 list-5 0 list-6 0 list-7 0 list-8 0 list-9 0; font-family: Helvetica, Arial, sans-serif; font-size: 14px; white-space: pre-wrap;">自然干扰</p><p style="word-wrap: break-word; padding-top: 0px; padding-bottom: 0px; list-style: none; box-sizing: border-box; counter-reset: list-1 0 list-2 0 list-3 0 list-4 0 list-5 0 list-6 0 list-7 0 list-8 0 list-9 0; font-family: Helvetica, Arial, sans-serif; font-size: 14px; white-space: pre-wrap;"><strong style="word-wrap: break-word; margin: 0px; padding: 0px; list-style: none; box-sizing: border-box;">　9.对扰动作来源测试</strong></p><p style="word-wrap: break-word; padding-top: 0px; padding-bottom: 0px; list-style: none; box-sizing: border-box; counter-reset: list-1 0 list-2 0 list-3 0 list-4 0 list-5 0 list-6 0 list-7 0 list-8 0 list-9 0; font-family: Helvetica, Arial, sans-serif; font-size: 14px; white-space: pre-wrap;">用手扰</p><p style="word-wrap: break-word; padding-top: 0px; padding-bottom: 0px; list-style: none; box-sizing: border-box; counter-reset: list-1 0 list-2 0 list-3 0 list-4 0 list-5 0 list-6 0 list-7 0 list-8 0 list-9 0; font-family: Helvetica, Arial, sans-serif; font-size: 14px; white-space: pre-wrap;">用机器扰</p><p style="word-wrap: break-word; padding-top: 0px; padding-bottom: 0px; list-style: none; box-sizing: border-box; counter-reset: list-1 0 list-2 0 list-3 0 list-4 0 list-5 0 list-6 0 list-7 0 list-8 0 list-9 0; font-family: Helvetica, Arial, sans-serif; font-size: 14px; white-space: pre-wrap;"><strong style="word-wrap: break-word; margin: 0px; padding: 0px; list-style: none; box-sizing: border-box;">10.对扰的程度测试</strong></p><p style="word-wrap: break-word; padding-top: 0px; padding-bottom: 0px; list-style: none; box-sizing: border-box; counter-reset: list-1 0 list-2 0 list-3 0 list-4 0 list-5 0 list-6 0 list-7 0 list-8 0 list-9 0; font-family: Helvetica, Arial, sans-serif; font-size: 14px; white-space: pre-wrap;">一级干扰</p><p style="word-wrap: break-word; padding-top: 0px; padding-bottom: 0px; list-style: none; box-sizing: border-box; counter-reset: list-1 0 list-2 0 list-3 0 list-4 0 list-5 0 list-6 0 list-7 0 list-8 0 list-9 0; font-family: Helvetica, Arial, sans-serif; font-size: 14px; white-space: pre-wrap;">二级干扰</p><p style="word-wrap: break-word; padding-top: 0px; padding-bottom: 0px; list-style: none; box-sizing: border-box; counter-reset: list-1 0 list-2 0 list-3 0 list-4 0 list-5 0 list-6 0 list-7 0 list-8 0 list-9 0; font-family: Helvetica, Arial, sans-serif; font-size: 14px; white-space: pre-wrap;">终极干扰</p><p style="word-wrap: break-word; padding-top: 0px; padding-bottom: 0px; list-style: none; box-sizing: border-box; counter-reset: list-1 0 list-2 0 list-3 0 list-4 0 list-5 0 list-6 0 list-7 0 list-8 0 list-9 0; font-family: Helvetica, Arial, sans-serif; font-size: 14px; white-space: pre-wrap;"><strong style="word-wrap: break-word; margin: 0px; padding: 0px; list-style: none; box-sizing: border-box;"> 11.对扰的持久性测试</strong></p><p style="word-wrap: break-word; padding-top: 0px; padding-bottom: 0px; list-style: none; box-sizing: border-box; counter-reset: list-1 0 list-2 0 list-3 0 list-4 0 list-5 0 list-6 0 list-7 0 list-8 0 list-9 0; font-family: Helvetica, Arial, sans-serif; font-size: 14px; white-space: pre-wrap;">扰1分钟</p><p style="word-wrap: break-word; padding-top: 0px; padding-bottom: 0px; list-style: none; box-sizing: border-box; counter-reset: list-1 0 list-2 0 list-3 0 list-4 0 list-5 0 list-6 0 list-7 0 list-8 0 list-9 0; font-family: Helvetica, Arial, sans-serif; font-size: 14px; white-space: pre-wrap;">扰1天</p><p style="word-wrap: break-word; padding-top: 0px; padding-bottom: 0px; list-style: none; box-sizing: border-box; counter-reset: list-1 0 list-2 0 list-3 0 list-4 0 list-5 0 list-6 0 list-7 0 list-8 0 list-9 0; font-family: Helvetica, Arial, sans-serif; font-size: 14px; white-space: pre-wrap;">扰1整年</p><p style="word-wrap: break-word; padding-top: 0px; padding-bottom: 0px; list-style: none; box-sizing: border-box; counter-reset: list-1 0 list-2 0 list-3 0 list-4 0 list-5 0 list-6 0 list-7 0 list-8 0 list-9 0; font-family: Helvetica, Arial, sans-serif; font-size: 14px; white-space: pre-wrap;">大概思路是这样，初听到确实有点懵逼，后来发现主要是文字翻译，和我们平时测一个软件是差不多的。</p><p style="word-wrap: break-word; padding-top: 0px; padding-bottom: 0px; list-style: none; box-sizing: border-box; counter-reset: list-1 0 list-2 0 list-3 0 list-4 0 list-5 0 list-6 0 list-7 0 list-8 0 list-9 0; font-family: Helvetica, Arial, sans-serif; font-size: 14px; white-space: pre-wrap;">据说，测试的高级境界是：给你一块板砖，你都能写出几百条案例。</p><p style="word-wrap: break-word; padding-top: 0px; padding-bottom: 0px; list-style: none; box-sizing: border-box; counter-reset: list-1 0 list-2 0 list-3 0 list-4 0 list-5 0 list-6 0 list-7 0 list-8 0 list-9 0; font-family: Helvetica, Arial, sans-serif; font-size: 14px; white-space: pre-wrap;">只能说，加油吧，路还长着呢</p><p style="word-wrap: break-word; padding-top: 0px; padding-bottom: 0px; list-style: none; box-sizing: border-box; counter-reset: list-1 0 list-2 0 list-3 0 list-4 0 list-5 0 list-6 0 list-7 0 list-8 0 list-9 0; font-family: Helvetica, Arial, sans-serif; font-size: 14px; white-space: pre-wrap;">更多关于测试方面的技术，请添加qq群 测试入门到大神 755431660&nbsp;我们共同进步哦~</p><br style="word-wrap: break-word; font-family: &quot;sans serif&quot;, tahoma, verdana, helvetica; font-size: 16px;" /><span style="font-family: &quot;sans serif&quot;, tahoma, verdana, helvetica; font-size: 16px;">&#8203;</span><img src="http://blog.chinaunix.net/attachment/201804/18/29734443_1524023538z8iX.png" data-ke-src="/attachment/201804/18/29734443_1524023538z8iX.png" width="653" height="506" alt="" style="word-wrap: break-word; border: 0px; font-family: &quot;sans serif&quot;, tahoma, verdana, helvetica; font-size: 16px;" /><span style="font-family: &quot;sans serif&quot;, tahoma, verdana, helvetica; font-size: 16px;">&#8203;</span><p style="padding-top: 0px; padding-bottom: 0px; list-style: none; box-sizing: border-box; counter-reset: list-1 0 list-2 0 list-3 0 list-4 0 list-5 0 list-6 0 list-7 0 list-8 0 list-9 0; font-family: Helvetica, Arial, sans-serif; font-size: 14px; white-space: pre-wrap;"></p><img src ="http://www.cnitblog.com/shbwf/aggbug/90969.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/shbwf/" target="_blank">51testing</a> 2018-04-18 11:57 <a href="http://www.cnitblog.com/shbwf/articles/90969.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JMeter测试计划中的元素</title><link>http://www.cnitblog.com/shbwf/articles/90956.html</link><dc:creator>51testing</dc:creator><author>51testing</author><pubDate>Wed, 04 Apr 2018 04:37:00 GMT</pubDate><guid>http://www.cnitblog.com/shbwf/articles/90956.html</guid><wfw:comment>http://www.cnitblog.com/shbwf/comments/90956.html</wfw:comment><comments>http://www.cnitblog.com/shbwf/articles/90956.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/shbwf/comments/commentRss/90956.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/shbwf/services/trackbacks/90956.html</trackback:ping><description><![CDATA[<div style="line-height: 24px; font-size: 14px; word-wrap: break-word; margin: 0px auto; padding: 0px; font-family: 微软雅黑; color: #3e3e3e;">　　转载：http://www.51testing.com/html/10/n-3725610.html&#8203;<br style="line-height: 18.2px; word-wrap: break-word;" />&#8203;&nbsp; &nbsp; &nbsp; &nbsp;<a target="_self" style="line-height: 18.2px; word-wrap: break-word; margin: 0px auto; padding: 0px; font-family: &quot;color:#111010;&quot;;"><u style="line-height: 18.2px; word-wrap: break-word; margin: 0px auto; padding: 0px;"><strong style="line-height: 18.2px; word-wrap: break-word; margin: 0px auto; padding: 0px;">测试</strong></u></a>计划中的元素（elements of a test plan）</div><div style="line-height: 24px; font-size: 14px; word-wrap: break-word; margin: 0px auto; padding: 0px; font-family: 微软雅黑; color: #3e3e3e;">　　本节描述测试计划不同的部分。</div><div style="line-height: 24px; font-size: 14px; word-wrap: break-word; margin: 0px auto; padding: 0px; font-family: 微软雅黑; color: #3e3e3e;">　　最小测试将包括测试计划、线程组和一个或多个采样器。</div><div style="line-height: 24px; font-size: 14px; word-wrap: break-word; margin: 0px auto; padding: 0px; font-family: 微软雅黑; color: #3e3e3e;">　<strong style="line-height: 18.2px; word-wrap: break-word; margin: 0px auto; padding: 0px; font-family: &quot;&quot;;">　1、测试计划（Test Plan）</strong></div><div style="line-height: 24px; font-size: 14px; word-wrap: break-word; margin: 0px auto; padding: 0px; font-family: 微软雅黑; color: #3e3e3e;">　　测试计划对象有一个叫 &#8220;<a target="_self" style="line-height: 18.2px; word-wrap: break-word; margin: 0px auto; padding: 0px; font-family: &quot;color:#111010;&quot;;"><u style="line-height: 18.2px; word-wrap: break-word; margin: 0px auto; padding: 0px;"><strong style="line-height: 18.2px; word-wrap: break-word; margin: 0px auto; padding: 0px;">功能测试</strong></u></a>&#8221; 的复选框，如果选择了，它将导致JMeter记录从服务器返回的每个示例的数据。如果您在测试监听器中选择了一个文件，那么这些数据将被写入文件。如果您正在执行一个小的运行，以确保JMeter的配置正确，并且您的服务器正在返回预期的结果，那么这将非常有用。其结果是，文件将快速增长，JMeter的性能将受到影响。如果您正在进行<a target="_self" style="line-height: 18.2px; word-wrap: break-word; margin: 0px auto; padding: 0px; font-family: &quot;color:#111010;&quot;;"><u style="line-height: 18.2px; word-wrap: break-word; margin: 0px auto; padding: 0px;"><strong style="line-height: 18.2px; word-wrap: break-word; margin: 0px auto; padding: 0px;">压力测试</strong></u></a>(默认情况下是off)，则该选项应该关闭。</div><div style="line-height: 24px; font-size: 14px; word-wrap: break-word; margin: 0px auto; padding: 0px; font-family: 微软雅黑; color: #3e3e3e;">　　如果您没有将数据<a target="_self" style="line-height: 18.2px; word-wrap: break-word; margin: 0px auto; padding: 0px; font-family: &quot;color:#111010;&quot;;"><u style="line-height: 18.2px; word-wrap: break-word; margin: 0px auto; padding: 0px;"><strong style="line-height: 18.2px; word-wrap: break-word; margin: 0px auto; padding: 0px;">记录</strong></u></a>到文件中，则该选项没有任何区别。</div><div style="line-height: 24px; font-size: 14px; word-wrap: break-word; margin: 0px auto; padding: 0px; font-family: 微软雅黑; color: #3e3e3e;">　　您还可以使用侦听器(listener)的 配置 按钮来决定要保存哪些字段。</div><div style="line-height: 24px; font-size: 14px; word-wrap: break-word; margin: 0px auto; padding: 0px; font-family: 微软雅黑; color: #3e3e3e;">　　<strong style="line-height: 18.2px; word-wrap: break-word; margin: 0px auto; padding: 0px; font-family: &quot;&quot;;">2、线程组（Thread group）</strong></div><div style="line-height: 24px; font-size: 14px; word-wrap: break-word; margin: 0px auto; padding: 0px; font-family: 微软雅黑; color: #3e3e3e;">　　线程组元素是任何测试计划的起点。所有控制器和采样器必须在线程组下。其他元素，例如侦听器，可以直接置于测试计划之下，在这种情况下，它们将适用于所有的线程组。顾名思义，线程组元素控制JMeter用来执行测试的线程的数量。线程组的控件允许:</div><div style="line-height: 24px; font-size: 14px; word-wrap: break-word; margin: 0px auto; padding: 0px; font-family: 微软雅黑; color: #3e3e3e;">　　&#183; Set the number of threads： 设置线程数</div><div style="line-height: 24px; font-size: 14px; word-wrap: break-word; margin: 0px auto; padding: 0px; font-family: 微软雅黑; color: #3e3e3e;">　　&#183;&nbsp;Set the ramp-up period：设置过渡时期</div><div style="line-height: 24px; font-size: 14px; word-wrap: break-word; margin: 0px auto; padding: 0px; font-family: 微软雅黑; color: #3e3e3e;">　　&#183;&nbsp;Set the number of times to execute the test：设置执行测试的次数</div><div style="line-height: 24px; font-size: 14px; word-wrap: break-word; margin: 0px auto; padding: 0px; font-family: 微软雅黑; color: #3e3e3e;">　　每个线程将完全独立地执行测试计划，完全独立于其他测试线程。多个线程用于模拟与服务器应用程序的并发连接。</div><div style="line-height: 24px; font-size: 14px; word-wrap: break-word; margin: 0px auto; padding: 0px; font-family: 微软雅黑; color: #3e3e3e;">　　这个过渡时期告诉JMeter要花多长时间才能&#8220;加速&#8221;到选择的全部线程数。如果使用10个线程，并且过渡时期是100秒，那么JMeter将花费100秒来启动所有10个线程并运行。在前面的线程开始后，每个线程将开始10(100 / 10)秒。如果有30个线程和一个上升周期120秒，则每个连续线程将延迟4秒。</div><div style="line-height: 24px; font-size: 14px; word-wrap: break-word; margin: 0px auto; padding: 0px; font-family: 微软雅黑; color: #3e3e3e;">　　需要足够长的时间来避免在测试开始时工作负载过大，足够短的时间，最后的线程在第一个线程完成之前就开始运行(除非有人希望发生这样的情况)。 从增加的线程数开始，根据需要调整向上或向下。</div><div style="line-height: 24px; font-size: 14px; word-wrap: break-word; margin: 0px auto; padding: 0px; font-family: 微软雅黑; color: #3e3e3e;">　　默认情况下，线程组被配置为通过它的元素循环一次。</div><div style="line-height: 24px; font-size: 14px; word-wrap: break-word; margin: 0px auto; padding: 0px; font-family: 微软雅黑; color: #3e3e3e;">　　线程组还提供了一个 调度器 。单击线程组面板底部的复选框，以启用/禁用额外的字段，在该字段中您可以输入测试持续时间、启动延迟、运行的开始和结束时间。您可以配置 持续时间（秒） 和 启动延迟（秒） 来控制每个线程组的持续时间和启动后的秒数。当开始测试时，JMeter会等待 启动延迟（秒） 之前启动的线程组的线程和运行配置的持续时间（秒）的时间。注意，这两个选项覆盖了 开始时间 和 结束时间 。</div><div style="line-height: 24px; font-size: 14px; word-wrap: break-word; margin: 0px auto; padding: 0px; font-family: 微软雅黑; color: #3e3e3e;">　　或者(尽管不建议不是很灵活)，您可以使用其他两个字段 开始时间 和 结束时间。当测试开始时，JMeter将在必要时等待，直到到达开始时间。在每个循环的末尾，JMeter检查是否已经到达了结束时间，如果是，则停止运行，否则测试将继续运行下去，直到达到迭代限制。</div><div style="line-height: 24px; font-size: 14px; word-wrap: break-word; margin: 0px auto; padding: 0px; font-family: 微软雅黑; color: #3e3e3e;">　　<strong style="line-height: 18.2px; word-wrap: break-word; margin: 0px auto; padding: 0px; font-family: &quot;&quot;;">3、控制器（Controllers）</strong></div><div style="line-height: 24px; font-size: 14px; word-wrap: break-word; margin: 0px auto; padding: 0px; font-family: 微软雅黑; color: #3e3e3e;">　　JMeter有两种控制器：采样器和逻辑控制器。这些驱动测试的处理。</div><div style="line-height: 24px; font-size: 14px; word-wrap: break-word; margin: 0px auto; padding: 0px; font-family: 微软雅黑; color: #3e3e3e;">　　采样器告诉JMeter发送请求到服务器。例如，如果你想要JMeter发送http请求添加一个HTTP请求取样器。您还可以通过向采样器中添加一个或多个配置元素来定制请求。更多信息，参见：采样器。</div><div style="line-height: 24px; font-size: 14px; word-wrap: break-word; margin: 0px auto; padding: 0px; font-family: 微软雅黑; color: #3e3e3e;">　　逻辑控制器让你自定义JMeter决定要发送请求时用什么样的逻辑。例如，您可以在两个HTTP请求采样器之间添加交错逻辑控制器。有关更多信息，参见：逻辑控制器。</div><div style="line-height: 24px; font-size: 14px; word-wrap: break-word; margin: 0px auto; padding: 0px; font-family: 微软雅黑; color: #3e3e3e;">　<strong style="line-height: 18.2px; word-wrap: break-word; margin: 0px auto; padding: 0px; font-family: &quot;&quot;;">　3.1、采样器（Samplers）</strong></div><div style="line-height: 24px; font-size: 14px; word-wrap: break-word; margin: 0px auto; padding: 0px; font-family: 微软雅黑; color: #3e3e3e;">　　采样员告诉JMeter向服务器发送请求并等待响应。它们按照它们在树中出现的顺序进行处理。控制器可用于修改采样器的重复次数。</div><div style="line-height: 24px; font-size: 14px; word-wrap: break-word; margin: 0px auto; padding: 0px; font-family: 微软雅黑; color: #3e3e3e;">　　JMeter采样器包括：</div><div style="line-height: 24px; font-size: 14px; word-wrap: break-word; margin: 0px auto; padding: 0px; font-family: 微软雅黑; color: #3e3e3e;">　　&#183;&nbsp;FTP请求</div><div style="line-height: 24px; font-size: 14px; word-wrap: break-word; margin: 0px auto; padding: 0px; font-family: 微软雅黑; color: #3e3e3e;">　　&#183;&nbsp;HTTP请求(也可以用于SOAP或REST Webservice)</div><div style="line-height: 24px; font-size: 14px; word-wrap: break-word; margin: 0px auto; padding: 0px; font-family: 微软雅黑; color: #3e3e3e;">　　&#183;&nbsp;JDBC请求</div><div style="line-height: 24px; font-size: 14px; word-wrap: break-word; margin: 0px auto; padding: 0px; font-family: 微软雅黑; color: #3e3e3e;">　　&#183;&nbsp;Java对象请求</div><div style="line-height: 24px; font-size: 14px; word-wrap: break-word; margin: 0px auto; padding: 0px; font-family: 微软雅黑; color: #3e3e3e;">　　&#183;&nbsp;JMS请求</div><div style="line-height: 24px; font-size: 14px; word-wrap: break-word; margin: 0px auto; padding: 0px; font-family: 微软雅黑; color: #3e3e3e;">　　&#183;&nbsp;JUnit测试请求</div><div style="line-height: 24px; font-size: 14px; word-wrap: break-word; margin: 0px auto; padding: 0px; font-family: 微软雅黑; color: #3e3e3e;">　　&#183;&nbsp;LDAP请求</div><div style="line-height: 24px; font-size: 14px; word-wrap: break-word; margin: 0px auto; padding: 0px; font-family: 微软雅黑; color: #3e3e3e;">　　&#183;&nbsp;邮件请求</div><div style="line-height: 24px; font-size: 14px; word-wrap: break-word; margin: 0px auto; padding: 0px; font-family: 微软雅黑; color: #3e3e3e;">　　&#183;&nbsp;操作系统进程请求</div><div style="line-height: 24px; font-size: 14px; word-wrap: break-word; margin: 0px auto; padding: 0px; font-family: 微软雅黑; color: #3e3e3e;">　　&#183;&nbsp;TCP请求</div><div style="line-height: 24px; font-size: 14px; word-wrap: break-word; margin: 0px auto; padding: 0px; font-family: 微软雅黑; color: #3e3e3e;">　　每个采样器都有几个可以设置的属性。您可以通过在测试计划中添加一个或多个配置元素来自定义采样器。</div><div style="line-height: 24px; font-size: 14px; word-wrap: break-word; margin: 0px auto; padding: 0px; font-family: 微软雅黑; color: #3e3e3e;">　　如果要将同一类型的多个请求（例如HTTP请求）发送到同一服务器，请考虑使用默认配置元素。每个控制器都有一个或多个Defaults元素（见下文）。</div><div style="line-height: 24px; font-size: 14px; word-wrap: break-word; margin: 0px auto; padding: 0px; font-family: 微软雅黑; color: #3e3e3e;">　　请记住在测试计划中添加一个侦听器，以查看和/或将请求的结果存储到磁盘。</div><div style="line-height: 24px; font-size: 14px; word-wrap: break-word; margin: 0px auto; padding: 0px; font-family: 微软雅黑; color: #3e3e3e;">　　如果您有兴趣让JMeter对您的请求的响应进行基本验证，那么向sampler添加一个 断言 。例如，在压力测试<a target="_self" style="line-height: 18.2px; word-wrap: break-word; margin: 0px auto; padding: 0px; font-family: &quot;color:#111010;&quot;;"><u style="line-height: 18.2px; word-wrap: break-word; margin: 0px auto; padding: 0px;"><strong style="line-height: 18.2px; word-wrap: break-word; margin: 0px auto; padding: 0px;">web</strong></u></a>应用程序时，服务器可能返回一个成功的&#8220;HTTP响应&#8221;代码，但是页面可能有错误，或者可能缺少部分。您可以添加断言来检查某些HTML标记、常见的错误字符串等。JMeter允许使用正则表达式创建这些断言。</div><div style="line-height: 24px; font-size: 14px; word-wrap: break-word; margin: 0px auto; padding: 0px; font-family: 微软雅黑; color: #3e3e3e;">　<strong style="line-height: 18.2px; word-wrap: break-word; margin: 0px auto; padding: 0px; font-family: &quot;&quot;;">　3.2、逻辑控制器（Logic Controllers）</strong></div><div style="line-height: 24px; font-size: 14px; word-wrap: break-word; margin: 0px auto; padding: 0px; font-family: 微软雅黑; color: #3e3e3e;">　　逻辑控制器让您自定义JMeter决定要发送请求时的逻辑。逻辑控制器可以改变来自子元素的请求顺序。他们可以自己修改请求，导致JMeter重复请求，等等。</div><div style="line-height: 24px; font-size: 14px; word-wrap: break-word; margin: 0px auto; padding: 0px; font-family: 微软雅黑; color: #3e3e3e;">　　要了解逻辑控制器对测试计划的影响，请考虑以下测试树:</div><div style="line-height: 24px; font-size: 14px; word-wrap: break-word; margin: 0px auto; padding: 0px; font-family: 微软雅黑; color: #3e3e3e;">　　测试计划</div><div style="line-height: 24px; font-size: 14px; word-wrap: break-word; margin: 0px auto; padding: 0px; font-family: 微软雅黑; color: #3e3e3e;">　　&#183;&nbsp;线程组</div><div style="line-height: 24px; font-size: 14px; word-wrap: break-word; margin: 0px auto; padding: 0px; font-family: 微软雅黑; color: #3e3e3e;">　　&#183;&nbsp;仅一次控制器</div><div style="line-height: 24px; font-size: 14px; word-wrap: break-word; margin: 0px auto; padding: 0px; font-family: 微软雅黑; color: #3e3e3e;">　　登录请求(一个HTTP请求)</div><div style="line-height: 24px; font-size: 14px; word-wrap: break-word; margin: 0px auto; padding: 0px; font-family: 微软雅黑; color: #3e3e3e;">　　&#183; 加载搜索页面(HTTP采样器)</div><div style="line-height: 24px; font-size: 14px; word-wrap: break-word; margin: 0px auto; padding: 0px; font-family: 微软雅黑; color: #3e3e3e;">　　&#183; 交替控制器</div><div style="line-height: 24px; font-size: 14px; word-wrap: break-word; margin: 0px auto; padding: 0px; font-family: 微软雅黑; color: #3e3e3e;">　　搜索&#8220;A&#8221;(HTTP取样器)</div><div style="line-height: 24px; font-size: 14px; word-wrap: break-word; margin: 0px auto; padding: 0px; font-family: 微软雅黑; color: #3e3e3e;">　　搜索&#8220;B&#8221;(HTTP取样器)</div><div style="line-height: 24px; font-size: 14px; word-wrap: break-word; margin: 0px auto; padding: 0px; font-family: 微软雅黑; color: #3e3e3e;">　　HTTP请求默认值(配置元件)</div><div style="line-height: 24px; font-size: 14px; word-wrap: break-word; margin: 0px auto; padding: 0px; font-family: 微软雅黑; color: #3e3e3e;">　　&#183;&nbsp;HTTP默认请求(配置元件)</div><div style="line-height: 24px; font-size: 14px; word-wrap: break-word; margin: 0px auto; padding: 0px; font-family: 微软雅黑; color: #3e3e3e;">　　&#183;&nbsp;Cookie管理器(配置元件)</div><div style="line-height: 24px; font-size: 14px; word-wrap: break-word; margin: 0px auto; padding: 0px; font-family: 微软雅黑; color: #3e3e3e;">　　这个测试的第一件事是，登录请求将仅在第一次执行。随后的迭代将跳过它。这是由于Once Only Controller（只有一次控制器）的影响。</div><div style="line-height: 24px; font-size: 14px; word-wrap: break-word; margin: 0px auto; padding: 0px; font-family: 微软雅黑; color: #3e3e3e;">　　登录后，下一个采样器加载搜索页面(想象一个用户登录的web应用程序，然后进入搜索页面进行搜索)。这只是一个简单的请求，没有经过任何逻辑控制器的过滤。</div><div style="line-height: 24px; font-size: 14px; word-wrap: break-word; margin: 0px auto; padding: 0px; font-family: 微软雅黑; color: #3e3e3e;">　　加载搜索页面后，我们要进行搜索。实际上，我们想做两种不同的搜索。但是，我们希望在每次搜索之间重新加载搜索页面本身。我们可以通过4个简单的HTTP请求元素(加载搜索、搜索&#8220;A&#8221;、加载搜索、搜索&#8220;B&#8221;)来实现这一点。相反，我们使用Interleave Controller控制器每次通过测试传递一个子请求。它保持了排序(即它不会随机地传递一个，而是&#8220;记住&#8221;它的子元素的位置)。插入两个子请求可能会被过度使用，但是可能会有8个或20个子请求。</div><div style="line-height: 24px; font-size: 14px; word-wrap: break-word; margin: 0px auto; padding: 0px; font-family: 微软雅黑; color: #3e3e3e;">　　注意，HTTP Request Defaults属于Interleave Controller。假设&#8220;Search A&#8221;和&#8220;Search B&#8221;共享相同的路径信息(HTTP请求规范包括域、端口、方法、协议、路径和参数，以及其他可选项)。这是有意义的&#8212;&#8212;两者都是搜索请求，命中相同的后端搜索引擎(比如servlet或cgil - script)。我们可以将这些信息抽象为单个配置元素，而不是在路径字段中使用相同的信息配置两个HTTP Samplers。当Interleave控制器&#8220;传递&#8221;来自&#8220;Search A&#8221;或&#8220;Search B&#8221;的请求时，它将从HTTP默认请求配置元素的值中填充空白。因此，我们将这些请求的路径字段留空，并将这些信息放入配置元素中。在这种情况下，这充其量只是一个小的好处，但它展示了这个特性。</div><div style="line-height: 24px; font-size: 14px; word-wrap: break-word; margin: 0px auto; padding: 0px; font-family: 微软雅黑; color: #3e3e3e;">　　树中的下一个元素是另一个HTTP默认请求，这个时间添加到线程组本身。线程组有一个内置的逻辑控制器，因此，它使用这个配置元素，就像上面描述的那样。它填入经过的任何请求的空格。在web测试中，将所有HTTP Sampler元素中的域字段保留为空是非常有用的，相反，将这些信息放入HTTP默认请求元素中，添加到线程组中。通过这样做，您可以通过改变测试计划中的一个字段来测试您在不同服务器上的应用程序。否则，你必须编辑每一个采样器。</div><div style="line-height: 24px; font-size: 14px; word-wrap: break-word; margin: 0px auto; padding: 0px; font-family: 微软雅黑; color: #3e3e3e;">　　最后一个元素是HTTP Cookie管理器。所有web测试都应该添加一个Cookie管理器&#8212;&#8212;否则JMeter将忽略Cookie。通过在线程组级别添加它，我们确保所有HTTP请求将共享相同的cookie。</div><div style="line-height: 24px; font-size: 14px; word-wrap: break-word; margin: 0px auto; padding: 0px; font-family: 微软雅黑; color: #3e3e3e;">　　逻辑控制器可组合实现各种结果。请参阅内置逻辑控制器列表（ built-in Logic Controllers.）。</div><div style="line-height: 24px; font-size: 14px; word-wrap: break-word; margin: 0px auto; padding: 0px; font-family: 微软雅黑; color: #3e3e3e;">　　<strong style="line-height: 18.2px; word-wrap: break-word; margin: 0px auto; padding: 0px; font-family: &quot;&quot;;">3.2.3、测试片段（Test Fragments）</strong></div><div style="line-height: 24px; font-size: 14px; word-wrap: break-word; margin: 0px auto; padding: 0px; font-family: 微软雅黑; color: #3e3e3e;">　　测试片段元素是一种特殊类型的控制器，它存在于与线程组元素相同级别的测试计划树中。它与线程组不同，因为它没有被执行，除非由 模块控制器 或 包含控制器 引用。</div><div style="line-height: 24px; font-size: 14px; word-wrap: break-word; margin: 0px auto; padding: 0px; font-family: 微软雅黑; color: #3e3e3e;">　　此元素纯粹用于测试计划中的代码重用。</div><div style="line-height: 24px; font-size: 14px; word-wrap: break-word; margin: 0px auto; padding: 0px; font-family: 微软雅黑; color: #3e3e3e;">　<strong style="line-height: 18.2px; word-wrap: break-word; margin: 0px auto; padding: 0px; font-family: &quot;&quot;;">　4、侦听器（Listeners）</strong></div><div style="line-height: 24px; font-size: 14px; word-wrap: break-word; margin: 0px auto; padding: 0px; font-family: 微软雅黑; color: #3e3e3e;">　　当JMeter运行时，侦听器提供对<a target="_self" style="line-height: 18.2px; word-wrap: break-word; margin: 0px auto; padding: 0px; font-family: &quot;color:#111010;&quot;;"><u style="line-height: 18.2px; word-wrap: break-word; margin: 0px auto; padding: 0px;"><strong style="line-height: 18.2px; word-wrap: break-word; margin: 0px auto; padding: 0px;">测试用例</strong></u></a>的信息JMeter的访问。图的结果是监听器将响应时间绘制在图上。&#8220;视图结果树&#8221;侦听器显示了sampler请求和响应的详细信息，可以显示响应的基本HTML和XML表示。其他侦听器提供汇总信息或聚合信息。</div><div style="line-height: 24px; font-size: 14px; word-wrap: break-word; margin: 0px auto; padding: 0px; font-family: 微软雅黑; color: #3e3e3e;">　　此外，侦听器可以将数据直接引导到文件中以供以后使用。JMeter中的每个监听器都提供一个字段来指示要存储数据的文件。还有一个配置按钮，可以用来选择保存哪些字段，以及是否使用CSV或XML格式。</div><div style="line-height: 24px; font-size: 14px; word-wrap: break-word; margin: 0px auto; padding: 0px; font-family: 微软雅黑; color: #3e3e3e;">　　注意，所有侦听器都保存相同的数据;唯一的区别在于数据在屏幕上呈现的方式。</div><div style="line-height: 24px; font-size: 14px; word-wrap: break-word; margin: 0px auto; padding: 0px; font-family: 微软雅黑; color: #3e3e3e;">　　可以在测试的任何地方添加监听器，包括直接在测试计划下。他们只从他们的水平或低于他们水平的元素收集数据。</div><div style="line-height: 24px; font-size: 14px; word-wrap: break-word; margin: 0px auto; padding: 0px; font-family: 微软雅黑; color: #3e3e3e;">　　JMeter这里有这些监听器。</div><div style="line-height: 24px; font-size: 14px; word-wrap: break-word; margin: 0px auto; padding: 0px; font-family: 微软雅黑; color: #3e3e3e;">　　<strong style="line-height: 18.2px; word-wrap: break-word; margin: 0px auto; padding: 0px; font-family: &quot;&quot;;">5、定时器（Timers）</strong></div><div style="line-height: 24px; font-size: 14px; word-wrap: break-word; margin: 0px auto; padding: 0px; font-family: 微软雅黑; color: #3e3e3e;">　　默认情况下，JMeter线程在不暂停的情况下依次执行samplers。我们建议您通过向线程组添加一个可用的计时器来指定延迟。如果您不添加延迟，JMeter会在很短的时间内发出太多的请求，从而使服务器不堪重负。</div><div style="line-height: 24px; font-size: 14px; word-wrap: break-word; margin: 0px auto; padding: 0px; font-family: 微软雅黑; color: #3e3e3e;">　　定时器将导致JMeter在每个采样器在其范围内延迟一定的时间。</div><div style="line-height: 24px; font-size: 14px; word-wrap: break-word; margin: 0px auto; padding: 0px; font-family: 微软雅黑; color: #3e3e3e;">　　如果您选择将多个计时器添加到线程组，JMeter将使用计时器的总和，并在执行计时器所应用的samplers之前暂停此时间。计时器可以添加为samplers或控制器的子元素，以限制应用程序的采样器。</div><div style="line-height: 24px; font-size: 14px; word-wrap: break-word; margin: 0px auto; padding: 0px; font-family: 微软雅黑; color: #3e3e3e;">　　为了在测试计划中提供一个单独的位置，可以使用Test Action采样器。</div><div style="line-height: 24px; font-size: 14px; word-wrap: break-word; margin: 0px auto; padding: 0px; font-family: 微软雅黑; color: #3e3e3e;">　　<strong style="line-height: 18.2px; word-wrap: break-word; margin: 0px auto; padding: 0px; font-family: &quot;&quot;;">6、断言（Assertions）</strong></div><div style="line-height: 24px; font-size: 14px; word-wrap: break-word; margin: 0px auto; padding: 0px; font-family: 微软雅黑; color: #3e3e3e;">　　断言允许你断言你正在测试的服务器返回的结果。通过使用断言，你基本上可以断定你的程序返回的结果是否是你期望的值。</div><div style="line-height: 24px; font-size: 14px; word-wrap: break-word; margin: 0px auto; padding: 0px; font-family: 微软雅黑; color: #3e3e3e;">　　例如，你可以断言一个查询的返回结果将包含一些特定的文本，特定的文本可以是perl语言的正则表达式，也可以是返回结果中的一部分，或者整个返回值。</div><div style="line-height: 24px; font-size: 14px; word-wrap: break-word; margin: 0px auto; padding: 0px; font-family: 微软雅黑; color: #3e3e3e;">　　你可以为任何Sampler(取样器)添加断言，例如，您可以向&#8220;HTTP请求&#8221;中添加一个断言，用来检查文本 &#8220;&lt; / HTML &gt;&#8221; 。然后，JMeter将检查文本&#8216;&lt; / HTML &gt;&#8217;是否存在于HTTP响应中。如果JMeter不能找到文本，那么它将标记为请求失败。</div><div style="line-height: 24px; font-size: 14px; word-wrap: break-word; margin: 0px auto; padding: 0px; font-family: 微软雅黑; color: #3e3e3e;">　　注意：断言适用于所有的取样器，但是要将断言限制到具体的某一个取样器上，要将断言作为取样器的子元素添加。</div><div style="line-height: 24px; font-size: 14px; word-wrap: break-word; margin: 0px auto; padding: 0px; font-family: 微软雅黑; color: #3e3e3e;">　　要查看断言结果，请向线程组添加一个&#8220;断言结果&#8221;，断言失败的也会现在树视图和表侦听器中，并将统计到汇总、汇总报告的误差率里面。</div><div style="line-height: 24px; font-size: 14px; word-wrap: break-word; margin: 0px auto; padding: 0px; font-family: 微软雅黑; color: #3e3e3e;">　　<strong style="line-height: 18.2px; word-wrap: break-word; margin: 0px auto; padding: 0px; font-family: &quot;&quot;;">7、配置元件（Configuration Elements）</strong></div><div style="line-height: 24px; font-size: 14px; word-wrap: break-word; margin: 0px auto; padding: 0px; font-family: 微软雅黑; color: #3e3e3e;">　　一个配置元件与采样器紧密合作。虽然它不发送请求(HTTP(S)测试脚本记录器 除外)，但它可以添加或修改请求。</div><div style="line-height: 24px; font-size: 14px; word-wrap: break-word; margin: 0px auto; padding: 0px; font-family: 微软雅黑; color: #3e3e3e;">　　一个配置元件只能从放置元素的树分支中访问，例如，如果你把一个&#8220;HTTP Cookie管理器&#8221;放在一个简单控制器中，只有在简单控制器内，Cookie管理器才可以访问HTTP请求控制器(参见图1)。Cookie管理器可以访问HTTP请求&#8220;页面1&#8221;和&#8220;页面2&#8221;，而不是&#8220;页面3&#8221;。</div><div style="line-height: 24px; font-size: 14px; word-wrap: break-word; margin: 0px auto; padding: 0px; font-family: 微软雅黑; color: #3e3e3e;">　　此外，树分支中的配置元件的优先级高于&#8220;父&#8221;分支中的相同元素，例如，我们定义二个&#8220;HTTP请求默认值&#8221;元件：&#8221;HTTP请求默认值 1&#8221;和&#8221;HTTP请求默认值 2&#8221;,由于我们将&#8221;HTTP请求默认值 2&#8221;放在一个循环控制器中的，故只有&#8221;页面2&#8221;可以访问它。其他HTTP请求将使用&#8220;HTTP请求默认值 2&#8221;，因为我们将它放入了线程组(所有其他分支的&#8220;父&#8221;)。</div><div style="line-height: 24px; font-size: 14px; word-wrap: break-word; margin: 0px auto; padding: 0px; font-family: 微软雅黑; color: #3e3e3e;"><a href="http://www.51testing.com/batch.download.php?aid=85330" data-ke-src="http://www.51testing.com/batch.download.php?aid=85330" target="_blank" style="line-height: 18.2px; word-wrap: break-word; margin: 0px auto; padding: 0px; font-family: &quot;color:#111010;text-decoration-line:none;&quot;;"><img src="http://www.51testing.com/attachments/2018/04/14982672_201804041113091jRFu.png" data-ke-src="http://www.51testing.com/attachments/2018/04/14982672_201804041113091jRFu.png" border="0" style="line-height: 18.2px; border: 0px; word-wrap: break-word; margin: 0px auto; padding: 0px; max-width: 600px;"  alt="" /></a>　　</div><div style="line-height: 24px; font-size: 14px; word-wrap: break-word; margin: 0px auto; padding: 0px; font-family: 微软雅黑; color: #3e3e3e;">图1 测试计划显示了配置元件的可访问性</div><div style="line-height: 24px; font-size: 14px; word-wrap: break-word; margin: 0px auto; padding: 0px; font-family: 微软雅黑; color: #3e3e3e;">　　注意：配置元件中的&#8221;用户定义的变量&#8221;与其它元件是有区别的。它是在测试开始时进行处理的，而不管我们将它放在哪里。为了简单起见，建议将它放在线程组的开始处。</div><div style="line-height: 24px; font-size: 14px; word-wrap: break-word; margin: 0px auto; padding: 0px; font-family: 微软雅黑; color: #3e3e3e;">　　<strong style="line-height: 18.2px; word-wrap: break-word; margin: 0px auto; padding: 0px; font-family: &quot;&quot;;">8、前置处理器（Pre-Processor Elements）</strong></div><div style="line-height: 24px; font-size: 14px; word-wrap: break-word; margin: 0px auto; padding: 0px; font-family: 微软雅黑; color: #3e3e3e;">　　预处理器在执行Sampler(采样器)请求之前执行一些操作。如果一个预处理器被附加到一个采样器元件上，那么它就会在这个采样器元件运行之前执行。预处理程序通常用于在运行前修改采样品请求的设置，或者更新不是从响应文本中提取的变量。</div><div style="line-height: 24px; font-size: 14px; word-wrap: break-word; margin: 0px auto; padding: 0px; font-family: 微软雅黑; color: #3e3e3e;">　<strong style="line-height: 18.2px; word-wrap: break-word; margin: 0px auto; padding: 0px; font-family: &quot;&quot;;">　9、后置处理器（Post-Processor Elements）</strong></div><div style="line-height: 24px; font-size: 14px; word-wrap: break-word; margin: 0px auto; padding: 0px; font-family: 微软雅黑; color: #3e3e3e;">　　在采样器请求完成后，后处理器执行一些操作。如果一个后处理器被附加到一个采样器元件上，那么它将在Sampler元件运行后执行。后处理器通常用于处理响应数据，通常是从它提取值。</div><img src ="http://www.cnitblog.com/shbwf/aggbug/90956.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/shbwf/" target="_blank">51testing</a> 2018-04-04 12:37 <a href="http://www.cnitblog.com/shbwf/articles/90956.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>提高处理BUG效率第一步：提高测试工程师排查BUG能力</title><link>http://www.cnitblog.com/shbwf/articles/90955.html</link><dc:creator>51testing</dc:creator><author>51testing</author><pubDate>Tue, 03 Apr 2018 03:43:00 GMT</pubDate><guid>http://www.cnitblog.com/shbwf/articles/90955.html</guid><wfw:comment>http://www.cnitblog.com/shbwf/comments/90955.html</wfw:comment><comments>http://www.cnitblog.com/shbwf/articles/90955.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/shbwf/comments/commentRss/90955.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/shbwf/services/trackbacks/90955.html</trackback:ping><description><![CDATA[<p style="padding-top: 0px; padding-bottom: 0px; line-height: 21px; color: #666666; font-size: 14px; word-wrap: break-word; list-style: none; box-sizing: border-box; counter-reset: list-1 0 list-2 0 list-3 0 list-4 0 list-5 0 list-6 0 list-7 0 list-8 0 list-9 0; font-family: &quot;Helvetica， Arial， sans-serif&quot;; white-space: pre-wrap;"><strong style="line-height: 1.5em !important; word-wrap: break-word; margin: 0px; padding: 0px; list-style: none; box-sizing: border-box;">转载：http://www.51testing.com/html/47/n-3725347.html?<br style="line-height: 1.5em !important; word-wrap: break-word;" />背景：</strong></p><p style="padding-top: 0px; padding-bottom: 0px; line-height: 21px; color: #666666; font-size: 14px; word-wrap: break-word; list-style: none; box-sizing: border-box; counter-reset: list-1 0 list-2 0 list-3 0 list-4 0 list-5 0 list-6 0 list-7 0 list-8 0 list-9 0; font-family: &quot;Helvetica， Arial， sans-serif&quot;; white-space: pre-wrap;">一家主要是做一款<strong style="line-height: 1.5em !important; word-wrap: break-word; margin: 0px; padding: 0px; list-style: none; box-sizing: border-box;"><u style="line-height: 1.5em !important; word-wrap: break-word; margin: 0px; padding: 0px; list-style: none; box-sizing: border-box;">APP</u></strong>的公司，公司<strong style="line-height: 1.5em !important; word-wrap: break-word; margin: 0px; padding: 0px; list-style: none; box-sizing: border-box;"><u style="line-height: 1.5em !important; word-wrap: break-word; margin: 0px; padding: 0px; list-style: none; box-sizing: border-box;">技术</u></strong>部门有三个组：爬虫组、服务端组和APP客户端组。</p><p style="padding-top: 0px; padding-bottom: 0px; line-height: 21px; color: #666666; font-size: 14px; word-wrap: break-word; list-style: none; box-sizing: border-box; counter-reset: list-1 0 list-2 0 list-3 0 list-4 0 list-5 0 list-6 0 list-7 0 list-8 0 list-9 0; font-family: &quot;Helvetica， Arial， sans-serif&quot;; white-space: pre-wrap;"><strong style="line-height: 1.5em !important; word-wrap: break-word; margin: 0px; padding: 0px; list-style: none; box-sizing: border-box;">事实回放：</strong></p><p style="padding-top: 0px; padding-bottom: 0px; line-height: 21px; color: #666666; font-size: 14px; word-wrap: break-word; list-style: none; box-sizing: border-box; counter-reset: list-1 0 list-2 0 list-3 0 list-4 0 list-5 0 list-6 0 list-7 0 list-8 0 list-9 0; font-family: &quot;Helvetica， Arial， sans-serif&quot;; white-space: pre-wrap;">1）每次运营或产品提出一个<strong style="line-height: 1.5em !important; word-wrap: break-word; margin: 0px; padding: 0px; list-style: none; box-sizing: border-box;"><u style="line-height: 1.5em !important; word-wrap: break-word; margin: 0px; padding: 0px; list-style: none; box-sizing: border-box;">BUG</u></strong>给到<strong style="line-height: 1.5em !important; word-wrap: break-word; margin: 0px; padding: 0px; list-style: none; box-sizing: border-box;"><u style="line-height: 1.5em !important; word-wrap: break-word; margin: 0px; padding: 0px; list-style: none; box-sizing: border-box;">测试</u></strong>工程师后。</p><p style="padding-top: 0px; padding-bottom: 0px; line-height: 21px; color: #666666; font-size: 14px; word-wrap: break-word; list-style: none; box-sizing: border-box; counter-reset: list-1 0 list-2 0 list-3 0 list-4 0 list-5 0 list-6 0 list-7 0 list-8 0 list-9 0; font-family: &quot;Helvetica， Arial， sans-serif&quot;; white-space: pre-wrap;">2）测试工程师就会凭感觉和经验（而不是技能判断）判断这个BUG是哪个组，判断之后就会把这个BUG指派给该组的负责同事A。</p><p style="padding-top: 0px; padding-bottom: 0px; line-height: 21px; color: #666666; font-size: 14px; word-wrap: break-word; list-style: none; box-sizing: border-box; counter-reset: list-1 0 list-2 0 list-3 0 list-4 0 list-5 0 list-6 0 list-7 0 list-8 0 list-9 0; font-family: &quot;Helvetica， Arial， sans-serif&quot;; white-space: pre-wrap;">注意：我们的绩效是按照每个团队每位同事产生的生产BUG去扣分的。</p><p style="padding-top: 0px; padding-bottom: 0px; line-height: 21px; color: #666666; font-size: 14px; word-wrap: break-word; list-style: none; box-sizing: border-box; counter-reset: list-1 0 list-2 0 list-3 0 list-4 0 list-5 0 list-6 0 list-7 0 list-8 0 list-9 0; font-family: &quot;Helvetica， Arial， sans-serif&quot;; white-space: pre-wrap;">3）接收到这个BUG的开发同事A开始排查问题，花了半小时排查完之后发现这个BUG不是我这边的问题，于是就又丢给测试工程师，同时责备测试不应该把不是他的BUG指派给他，一来浪费他的时间，二来又影响他的绩效。</p><p style="padding-top: 0px; padding-bottom: 0px; line-height: 21px; color: #666666; font-size: 14px; word-wrap: break-word; list-style: none; box-sizing: border-box; counter-reset: list-1 0 list-2 0 list-3 0 list-4 0 list-5 0 list-6 0 list-7 0 list-8 0 list-9 0; font-family: &quot;Helvetica， Arial， sans-serif&quot;; white-space: pre-wrap;">4）测试根据开发同事A的各种排查描述，得知这个BUG可能（是的，可能）是另一个组的开发同事B的问题，于是测试就把这个BUG指派给开发同事B。</p><p style="padding-top: 0px; padding-bottom: 0px; line-height: 21px; color: #666666; font-size: 14px; word-wrap: break-word; list-style: none; box-sizing: border-box; counter-reset: list-1 0 list-2 0 list-3 0 list-4 0 list-5 0 list-6 0 list-7 0 list-8 0 list-9 0; font-family: &quot;Helvetica， Arial， sans-serif&quot;; white-space: pre-wrap;">5）接收到这个BUG的开发同事B开始排查问题（每个组的开发排查方式未必相同），顺利的情况下，最后排查得出这个BUG确实是我的。</p><p style="padding-top: 0px; padding-bottom: 0px; line-height: 21px; color: #666666; font-size: 14px; word-wrap: break-word; list-style: none; box-sizing: border-box; counter-reset: list-1 0 list-2 0 list-3 0 list-4 0 list-5 0 list-6 0 list-7 0 list-8 0 list-9 0; font-family: &quot;Helvetica， Arial， sans-serif&quot;; white-space: pre-wrap;">6）开发同事B开始处理BUG，处理完之后给到测试验收，直到BUG关闭。</p><p style="padding-top: 0px; padding-bottom: 0px; line-height: 21px; color: #666666; font-size: 14px; word-wrap: break-word; list-style: none; box-sizing: border-box; counter-reset: list-1 0 list-2 0 list-3 0 list-4 0 list-5 0 list-6 0 list-7 0 list-8 0 list-9 0; font-family: &quot;Helvetica， Arial， sans-serif&quot;; white-space: pre-wrap;">流程图如下图1：</p><img showalt="提高处理BUG效率第一步：提高测试工程师排查BUG能力" alt="null" src="http://www.51testing.com/attachments/2018/03/15201284_201803231113021rafr.png" data-ke-src="http://www.51testing.com/attachments/2018/03/15201284_201803231113021rafr.png" style="border: none; color: #666666; font-size: 14px; word-wrap: break-word; margin: 0px auto; padding: 0px; list-style: none; box-sizing: border-box; vertical-align: middle; display: block; max-width: 50%; font-family: &quot;Helvetica， Arial， sans-serif&quot;; white-space: pre-wrap; line-height: 1.5em !important;" /><p style="padding-top: 0px; padding-bottom: 0px; line-height: 21px; color: #666666; font-size: 14px; word-wrap: break-word; list-style: none; box-sizing: border-box; counter-reset: list-1 0 list-2 0 list-3 0 list-4 0 list-5 0 list-6 0 list-7 0 list-8 0 list-9 0; font-family: &quot;Helvetica， Arial， sans-serif&quot;; white-space: pre-wrap;"><br style="line-height: 1.5em !important; word-wrap: break-word;" /></p><p style="padding-top: 0px; padding-bottom: 0px; line-height: 21px; color: #666666; font-size: 14px; word-wrap: break-word; list-style: none; box-sizing: border-box; counter-reset: list-1 0 list-2 0 list-3 0 list-4 0 list-5 0 list-6 0 list-7 0 list-8 0 list-9 0; font-family: &quot;Helvetica， Arial， sans-serif&quot;; white-space: pre-wrap;">图1</p><p style="padding-top: 0px; padding-bottom: 0px; line-height: 21px; color: #666666; font-size: 14px; word-wrap: break-word; list-style: none; box-sizing: border-box; counter-reset: list-1 0 list-2 0 list-3 0 list-4 0 list-5 0 list-6 0 list-7 0 list-8 0 list-9 0; font-family: &quot;Helvetica， Arial， sans-serif&quot;; white-space: pre-wrap;">在这个过程中，还有隐形的多种问题：</p><p style="padding-top: 0px; padding-bottom: 0px; line-height: 21px; color: #666666; font-size: 14px; word-wrap: break-word; list-style: none; box-sizing: border-box; counter-reset: list-1 0 list-2 0 list-3 0 list-4 0 list-5 0 list-6 0 list-7 0 list-8 0 list-9 0; font-family: &quot;Helvetica， Arial， sans-serif&quot;; white-space: pre-wrap;">1、验收在接收到测试工程师指派的无法确定是否是需要我处理的这类BUG时，会一直让这个BUG挂机在那不做处理，原因很简单，我花半小时去排查这个BUG，很有可能这个BUG不是我的。</p><p style="padding-top: 0px; padding-bottom: 0px; line-height: 21px; color: #666666; font-size: 14px; word-wrap: break-word; list-style: none; box-sizing: border-box; counter-reset: list-1 0 list-2 0 list-3 0 list-4 0 list-5 0 list-6 0 list-7 0 list-8 0 list-9 0; font-family: &quot;Helvetica， Arial， sans-serif&quot;; white-space: pre-wrap;">2、开发经常性怼测试工程师，你怎么证明这个BUG就是我的？我就是不处理！还有你为什么总是把不是我的BUG指派给我？而测试工程师的回怼总是无力的&#8220;我怎么知道这个BUG是不是你的？&#8221;。</p><p style="padding-top: 0px; padding-bottom: 0px; line-height: 21px; color: #666666; font-size: 14px; word-wrap: break-word; list-style: none; box-sizing: border-box; counter-reset: list-1 0 list-2 0 list-3 0 list-4 0 list-5 0 list-6 0 list-7 0 list-8 0 list-9 0; font-family: &quot;Helvetica， Arial， sans-serif&quot;; white-space: pre-wrap;">3、在互相扯皮的过程中，严重降低了&#8220;测试-研发&#8221;的合作效率。</p><p style="padding-top: 0px; padding-bottom: 0px; line-height: 21px; color: #666666; font-size: 14px; word-wrap: break-word; list-style: none; box-sizing: border-box; counter-reset: list-1 0 list-2 0 list-3 0 list-4 0 list-5 0 list-6 0 list-7 0 list-8 0 list-9 0; font-family: &quot;Helvetica， Arial， sans-serif&quot;; white-space: pre-wrap;"><strong style="line-height: 1.5em !important; word-wrap: break-word; margin: 0px; padding: 0px; list-style: none; box-sizing: border-box;">　处理方案：</strong></p><p style="padding-top: 0px; padding-bottom: 0px; line-height: 21px; color: #666666; font-size: 14px; word-wrap: break-word; list-style: none; box-sizing: border-box; counter-reset: list-1 0 list-2 0 list-3 0 list-4 0 list-5 0 list-6 0 list-7 0 list-8 0 list-9 0; font-family: &quot;Helvetica， Arial， sans-serif&quot;; white-space: pre-wrap;">孔子曰&#8220;其身正，不令而行；其身不正，虽令不从&#8221;，对于测试工程师来说，打铁还需自身硬。提高测试工程师排查BUG的能力势在必行。</p><p style="padding-top: 0px; padding-bottom: 0px; line-height: 21px; color: #666666; font-size: 14px; word-wrap: break-word; list-style: none; box-sizing: border-box; counter-reset: list-1 0 list-2 0 list-3 0 list-4 0 list-5 0 list-6 0 list-7 0 list-8 0 list-9 0; font-family: &quot;Helvetica， Arial， sans-serif&quot;; white-space: pre-wrap;">当测试工程师拿到一个BUG时，可以通过APP抓包和查找<strong style="line-height: 1.5em !important; word-wrap: break-word; margin: 0px; padding: 0px; list-style: none; box-sizing: border-box;"><u style="line-height: 1.5em !important; word-wrap: break-word; margin: 0px; padding: 0px; list-style: none; box-sizing: border-box;">数据库</u></strong>表的方式排查这个问题到底是那个开发工程师的。</p><p style="padding-top: 0px; padding-bottom: 0px; line-height: 21px; color: #666666; font-size: 14px; word-wrap: break-word; list-style: none; box-sizing: border-box; counter-reset: list-1 0 list-2 0 list-3 0 list-4 0 list-5 0 list-6 0 list-7 0 list-8 0 list-9 0; font-family: &quot;Helvetica， Arial， sans-serif&quot;; white-space: pre-wrap;">举例：在APP上有一张图片无法正常呈现出来，而这个图片是由爬虫工程师采集过来的。</p><p style="padding-top: 0px; padding-bottom: 0px; line-height: 21px; color: #666666; font-size: 14px; word-wrap: break-word; list-style: none; box-sizing: border-box; counter-reset: list-1 0 list-2 0 list-3 0 list-4 0 list-5 0 list-6 0 list-7 0 list-8 0 list-9 0; font-family: &quot;Helvetica， Arial， sans-serif&quot;; white-space: pre-wrap;"><strong style="line-height: 1.5em !important; word-wrap: break-word; margin: 0px; padding: 0px; list-style: none; box-sizing: border-box;">　处理：</strong></p><p style="padding-top: 0px; padding-bottom: 0px; line-height: 21px; color: #666666; font-size: 14px; word-wrap: break-word; list-style: none; box-sizing: border-box; counter-reset: list-1 0 list-2 0 list-3 0 list-4 0 list-5 0 list-6 0 list-7 0 list-8 0 list-9 0; font-family: &quot;Helvetica， Arial， sans-serif&quot;; white-space: pre-wrap;">1）测试工程师先通过抓包的方式找出这个图片相关的HTTP请求内容，如果这个请求内容里面的图片URL为空，那么这个BUG很可能就是爬虫在采集数据或入库数据时出了问题，找出共性和规则给到爬虫工程师去处理。</p><p style="padding-top: 0px; padding-bottom: 0px; line-height: 21px; color: #666666; font-size: 14px; word-wrap: break-word; list-style: none; box-sizing: border-box; counter-reset: list-1 0 list-2 0 list-3 0 list-4 0 list-5 0 list-6 0 list-7 0 list-8 0 list-9 0; font-family: &quot;Helvetica， Arial， sans-serif&quot;; white-space: pre-wrap;">2）如果这个图片URL是有值的，并且这个URL可以正常打开，但是这个URL的格式不是OSS的格式（服务端会把外面的图片保存到我们的OSS环境中），那么这个问题就是服务端在保存图片时出了问题，找出共性和规则给到服务端工程师去处理。</p><p style="padding-top: 0px; padding-bottom: 0px; line-height: 21px; color: #666666; font-size: 14px; word-wrap: break-word; list-style: none; box-sizing: border-box; counter-reset: list-1 0 list-2 0 list-3 0 list-4 0 list-5 0 list-6 0 list-7 0 list-8 0 list-9 0; font-family: &quot;Helvetica， Arial， sans-serif&quot;; white-space: pre-wrap;">3）如果这个图片URL的格式是OSS，并且可以正常打开，但是只是在APP上无法呈现，那么这个问题就是客户端在显示图片时出了问题，找出共性和规则给到客户端工程师去处理。</p><p style="padding-top: 0px; padding-bottom: 0px; line-height: 21px; color: #666666; font-size: 14px; word-wrap: break-word; list-style: none; box-sizing: border-box; counter-reset: list-1 0 list-2 0 list-3 0 list-4 0 list-5 0 list-6 0 list-7 0 list-8 0 list-9 0; font-family: &quot;Helvetica， Arial， sans-serif&quot;; white-space: pre-wrap;">如果测试工程师可以做到这样的话，BUG提交和处理的流程变成如下图2所示：</p><img showalt="提高处理BUG效率第一步：提高测试工程师排查BUG能力" alt="null" src="http://www.51testing.com/attachments/2018/03/15201284_201803231113301ybyn.png" data-ke-src="http://www.51testing.com/attachments/2018/03/15201284_201803231113301ybyn.png" style="border: none; color: #666666; font-size: 14px; word-wrap: break-word; margin: 0px auto; padding: 0px; list-style: none; box-sizing: border-box; vertical-align: middle; display: block; max-width: 50%; font-family: &quot;Helvetica， Arial， sans-serif&quot;; white-space: pre-wrap; line-height: 1.5em !important;" /><p style="padding-top: 0px; padding-bottom: 0px; line-height: 21px; color: #666666; font-size: 14px; word-wrap: break-word; list-style: none; box-sizing: border-box; counter-reset: list-1 0 list-2 0 list-3 0 list-4 0 list-5 0 list-6 0 list-7 0 list-8 0 list-9 0; font-family: &quot;Helvetica， Arial， sans-serif&quot;; white-space: pre-wrap;"><br style="line-height: 1.5em !important; word-wrap: break-word;" /></p><p style="padding-top: 0px; padding-bottom: 0px; line-height: 21px; color: #666666; font-size: 14px; word-wrap: break-word; list-style: none; box-sizing: border-box; counter-reset: list-1 0 list-2 0 list-3 0 list-4 0 list-5 0 list-6 0 list-7 0 list-8 0 list-9 0; font-family: &quot;Helvetica， Arial， sans-serif&quot;; white-space: pre-wrap;">图2</p><p style="padding-top: 0px; padding-bottom: 0px; line-height: 21px; color: #666666; font-size: 14px; word-wrap: break-word; list-style: none; box-sizing: border-box; counter-reset: list-1 0 list-2 0 list-3 0 list-4 0 list-5 0 list-6 0 list-7 0 list-8 0 list-9 0; font-family: &quot;Helvetica， Arial， sans-serif&quot;; white-space: pre-wrap;">当然，在这个过程中，测试工程师一要提高自己排查BUG的准确度，二要提高自己排查BUG过程可以给开发做参考的可用度。</p><p style="padding-top: 0px; padding-bottom: 0px; line-height: 21px; color: #666666; font-size: 14px; word-wrap: break-word; list-style: none; box-sizing: border-box; counter-reset: list-1 0 list-2 0 list-3 0 list-4 0 list-5 0 list-6 0 list-7 0 list-8 0 list-9 0; font-family: &quot;Helvetica， Arial， sans-serif&quot;; white-space: pre-wrap;"><strong style="line-height: 1.5em !important; word-wrap: break-word; margin: 0px; padding: 0px; list-style: none; box-sizing: border-box;">扩展：</strong></p><p style="padding-top: 0px; padding-bottom: 0px; line-height: 21px; color: #666666; font-size: 14px; word-wrap: break-word; list-style: none; box-sizing: border-box; counter-reset: list-1 0 list-2 0 list-3 0 list-4 0 list-5 0 list-6 0 list-7 0 list-8 0 list-9 0; font-family: &quot;Helvetica， Arial， sans-serif&quot;; white-space: pre-wrap;">&#8220;作为一名<strong style="line-height: 1.5em !important; word-wrap: break-word; margin: 0px; padding: 0px; list-style: none; box-sizing: border-box;"><u style="line-height: 1.5em !important; word-wrap: break-word; margin: 0px; padding: 0px; list-style: none; box-sizing: border-box;">软件测试</u></strong>工程师，需要具备哪些能力？&#8221;需要具备的能力很多，但是我觉得排查BUG能力是最重要，最有效，也是最容易被忽视的一点。</p><p style="padding-top: 0px; padding-bottom: 0px; line-height: 21px; color: #666666; font-size: 14px; word-wrap: break-word; list-style: none; box-sizing: border-box; counter-reset: list-1 0 list-2 0 list-3 0 list-4 0 list-5 0 list-6 0 list-7 0 list-8 0 list-9 0; font-family: &quot;Helvetica， Arial， sans-serif&quot;; white-space: pre-wrap;">测试工程师的主要职责包括质检和质控，质检的东西大家都说的很多，质控的就比较少啦，我在这里也提一下。</p><p style="padding-top: 0px; padding-bottom: 0px; line-height: 21px; color: #666666; font-size: 14px; word-wrap: break-word; list-style: none; box-sizing: border-box; counter-reset: list-1 0 list-2 0 list-3 0 list-4 0 list-5 0 list-6 0 list-7 0 list-8 0 list-9 0; font-family: &quot;Helvetica， Arial， sans-serif&quot;; white-space: pre-wrap;"><strong style="line-height: 1.5em !important; word-wrap: break-word; margin: 0px; padding: 0px; list-style: none; box-sizing: border-box;">质控一：上游工作质控</strong></p><p style="padding-top: 0px; padding-bottom: 0px; line-height: 21px; color: #666666; font-size: 14px; word-wrap: break-word; list-style: none; box-sizing: border-box; counter-reset: list-1 0 list-2 0 list-3 0 list-4 0 list-5 0 list-6 0 list-7 0 list-8 0 list-9 0; font-family: &quot;Helvetica， Arial， sans-serif&quot;; white-space: pre-wrap;">在产品刚立项、进行需求确认的时候，测试人员就会参与进去，仔细地Review需求，看需求是不是完整、有没有<strong style="line-height: 1.5em !important; word-wrap: break-word; margin: 0px; padding: 0px; list-style: none; box-sizing: border-box;"><u style="line-height: 1.5em !important; word-wrap: break-word; margin: 0px; padding: 0px; list-style: none; box-sizing: border-box;">漏洞</u></strong>，这个时候还没有进入正式开发，修改需求对于项目组来说代价是最少的。在这个环节，测试人员凭借缜密的推演、发散性的思维，往往能发现很多需求的漏洞，提高了项目的整体效率。</p><p style="padding-top: 0px; padding-bottom: 0px; line-height: 21px; color: #666666; font-size: 14px; word-wrap: break-word; list-style: none; box-sizing: border-box; counter-reset: list-1 0 list-2 0 list-3 0 list-4 0 list-5 0 list-6 0 list-7 0 list-8 0 list-9 0; font-family: &quot;Helvetica， Arial， sans-serif&quot;; white-space: pre-wrap;">另外，测试人员在完成测试计划、<strong style="line-height: 1.5em !important; word-wrap: break-word; margin: 0px; padding: 0px; list-style: none; box-sizing: border-box;"><u style="line-height: 1.5em !important; word-wrap: break-word; margin: 0px; padding: 0px; list-style: none; box-sizing: border-box;">测试用例</u></strong>以后，会邀请开发、产品一起评审测试用例，在这个环节，由于测试人员把每个需求如何细化测试都体现在了用例里面，就相当于再次把<strong style="line-height: 1.5em !important; word-wrap: break-word; margin: 0px; padding: 0px; list-style: none; box-sizing: border-box;"><u style="line-height: 1.5em !important; word-wrap: break-word; margin: 0px; padding: 0px; list-style: none; box-sizing: border-box;">需求分析</u></strong>了个透，往往还能发现很多需求的漏洞。这也是提早发现需求漏洞的有效环节。</p><p style="padding-top: 0px; padding-bottom: 0px; line-height: 21px; color: #666666; font-size: 14px; word-wrap: break-word; list-style: none; box-sizing: border-box; counter-reset: list-1 0 list-2 0 list-3 0 list-4 0 list-5 0 list-6 0 list-7 0 list-8 0 list-9 0; font-family: &quot;Helvetica， Arial， sans-serif&quot;; white-space: pre-wrap;"><strong style="line-height: 1.5em !important; word-wrap: break-word; margin: 0px; padding: 0px; list-style: none; box-sizing: border-box;">质控二：下游工作质控</strong></p><p style="padding-top: 0px; padding-bottom: 0px; line-height: 21px; color: #666666; font-size: 14px; word-wrap: break-word; list-style: none; box-sizing: border-box; counter-reset: list-1 0 list-2 0 list-3 0 list-4 0 list-5 0 list-6 0 list-7 0 list-8 0 list-9 0; font-family: &quot;Helvetica， Arial， sans-serif&quot;; white-space: pre-wrap;">在产品完成了测试以后，就是发布的环节了，测试人员在发布的环节也能发挥作用。首先，测试人员为了部署测试环境，研究自动化部署的技术，可以把上线部署的环节也自动化，以前需要2个小时的部署环节压缩到半个小时甚至更少，而且更加准确可靠。</p><p style="padding-top: 0px; padding-bottom: 0px; line-height: 21px; color: #666666; font-size: 14px; word-wrap: break-word; list-style: none; box-sizing: border-box; counter-reset: list-1 0 list-2 0 list-3 0 list-4 0 list-5 0 list-6 0 list-7 0 list-8 0 list-9 0; font-family: &quot;Helvetica， Arial， sans-serif&quot;; white-space: pre-wrap;">如果有些版本修改比较多，上线的质量风险大，测试人员会跟产品一起制定灰度发布的方案并在技术上进行实现，让版本先面向一小部分用户开放，如果发现Bug了，影响的用户也比较小，Bug改掉以后，再逐渐扩大用户范围。</p><p style="padding-top: 0px; padding-bottom: 0px; line-height: 21px; color: #666666; font-size: 14px; word-wrap: break-word; list-style: none; box-sizing: border-box; counter-reset: list-1 0 list-2 0 list-3 0 list-4 0 list-5 0 list-6 0 list-7 0 list-8 0 list-9 0; font-family: &quot;Helvetica， Arial， sans-serif&quot;; white-space: pre-wrap;">另外，优秀的测试人员还会发动项目组的其他人一起来保证项目质量，比如推动开发进行代码Review；引入冒烟自测流程，让开发先自测以后再提交给测试做冒烟测试；通过在项目组分析Bug，让开发提高自测，降低Bug数量等；引入策划、交互、视觉在测试阶段进行走查等等各种措施。</p><img src ="http://www.cnitblog.com/shbwf/aggbug/90955.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/shbwf/" target="_blank">51testing</a> 2018-04-03 11:43 <a href="http://www.cnitblog.com/shbwf/articles/90955.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>兼容性测试——一起来GET技能啦</title><link>http://www.cnitblog.com/shbwf/articles/90953.html</link><dc:creator>51testing</dc:creator><author>51testing</author><pubDate>Thu, 29 Mar 2018 23:23:00 GMT</pubDate><guid>http://www.cnitblog.com/shbwf/articles/90953.html</guid><wfw:comment>http://www.cnitblog.com/shbwf/comments/90953.html</wfw:comment><comments>http://www.cnitblog.com/shbwf/articles/90953.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/shbwf/comments/commentRss/90953.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/shbwf/services/trackbacks/90953.html</trackback:ping><description><![CDATA[<div style="word-wrap: break-word; margin: 0px auto; padding: 0px; font-family: 微软雅黑; line-height: 24px; color: #3e3e3e; font-size: 14px;"><strong style="word-wrap: break-word; margin: 0px auto; padding: 0px; font-family: &quot;&quot;;">&nbsp; &nbsp; &nbsp; &nbsp; 转载：http://www.51testing.com/html/17/n-3720317.html&#8203;&#8203;<br style="word-wrap: break-word;" />&#8203;&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;一、什么是<a target="_self" style="word-wrap: break-word; margin: 0px auto; padding: 0px; color: #111010;"><u style="word-wrap: break-word; margin: 0px auto; padding: 0px;"><strong style="word-wrap: break-word; margin: 0px auto; padding: 0px;">兼容性测试</strong></u></a></strong></div><div style="word-wrap: break-word; margin: 0px auto; padding: 0px; font-family: 微软雅黑; line-height: 24px; color: #3e3e3e; font-size: 14px;">　　很多人都知道兼容性测试，但是却很少能准确理解兼容性测试，大多都只会想到<a target="_self" style="word-wrap: break-word; margin: 0px auto; padding: 0px; font-family: &quot;color:#111010;&quot;;"><u style="word-wrap: break-word; margin: 0px auto; padding: 0px;"><strong style="word-wrap: break-word; margin: 0px auto; padding: 0px;">浏览器</strong></u></a>的兼容；实际兼容性还有其他内容，包括<a target="_self" style="word-wrap: break-word; margin: 0px auto; padding: 0px; font-family: &quot;color:#111010;&quot;;"><u style="word-wrap: break-word; margin: 0px auto; padding: 0px;"><strong style="word-wrap: break-word; margin: 0px auto; padding: 0px;">web</strong></u></a>兼容和APP兼容；那么下面咱们先说说什么是兼容性测试：</div><div style="word-wrap: break-word; margin: 0px auto; padding: 0px; font-family: 微软雅黑; line-height: 24px; color: #3e3e3e; font-size: 14px;">　　兼容测试（Compatibility Test Suite ）官方简称CTS ，指对所设计程序与硬件、软件之间的兼容性的测试。一般来说，兼容性指能同时容纳多个方面，在计算机术语上兼容是指几个硬件之间、几个软件之间或是软硬件之间的相互配合程度。</div><div style="word-wrap: break-word; margin: 0px auto; padding: 0px; font-family: 微软雅黑; line-height: 24px; color: #3e3e3e; font-size: 14px;">　　按照我的理解，我认为兼容性测试是指测试软件在特定的硬件平台上、不同的应用软件之间、不同的<a target="_self" style="word-wrap: break-word; margin: 0px auto; padding: 0px; font-family: &quot;color:#111010;&quot;;"><u style="word-wrap: break-word; margin: 0px auto; padding: 0px;"><strong style="word-wrap: break-word; margin: 0px auto; padding: 0px;">操作系统</strong></u></a>平台上、不同的网络等环境中是否能够很友好的运行的测试。</div><div style="word-wrap: break-word; margin: 0px auto; padding: 0px; font-family: 微软雅黑; line-height: 24px; color: #3e3e3e; font-size: 14px;">　　<strong style="word-wrap: break-word; margin: 0px auto; padding: 0px; font-family: &quot;&quot;;">二、兼容性测试分类</strong></div><div style="word-wrap: break-word; margin: 0px auto; padding: 0px; font-family: 微软雅黑; line-height: 24px; color: #3e3e3e; font-size: 14px;">　　兼容性测试目前我关注的包括web兼容性测试和APP兼容性测试；</div><div style="word-wrap: break-word; margin: 0px auto; padding: 0px; font-family: 微软雅黑; line-height: 24px; color: #3e3e3e; font-size: 14px;">　　兼容测试包括：</div><div style="word-wrap: break-word; margin: 0px auto; padding: 0px; font-family: 微软雅黑; line-height: 24px; color: #3e3e3e; font-size: 14px;">　　（1）浏览器兼容测试：测试程序在不同浏览器上是否可以正常运行，功能能否正常使用；</div><div style="word-wrap: break-word; margin: 0px auto; padding: 0px; font-family: 微软雅黑; line-height: 24px; color: #3e3e3e; font-size: 14px;">　　（2）屏幕尺寸和分辨率兼容测试：测试程序在不同分辨率下能否正常显示；</div><div style="word-wrap: break-word; margin: 0px auto; padding: 0px; font-family: 微软雅黑; line-height: 24px; color: #3e3e3e; font-size: 14px;">　　（3）操作系统兼容测试：测试程序在不同的操作系统下面能否正常运行，功能能否正常使用，显示是否正确等；</div><div style="word-wrap: break-word; margin: 0px auto; padding: 0px; font-family: 微软雅黑; line-height: 24px; color: #3e3e3e; font-size: 14px;">　　（4）不同设备型号兼容测试：针对于APP，现在移动设备型号五花八门，主要测试APP在主流设备上能否正常运行，会不会出现崩溃的现象。</div><div style="word-wrap: break-word; margin: 0px auto; padding: 0px; font-family: 微软雅黑; line-height: 24px; color: #3e3e3e; font-size: 14px;">　<strong style="word-wrap: break-word; margin: 0px auto; padding: 0px; font-family: &quot;&quot;;">　三、兼容性测试方法</strong></div><div style="word-wrap: break-word; margin: 0px auto; padding: 0px; font-family: 微软雅黑; line-height: 24px; color: #3e3e3e; font-size: 14px;">　　Web端和APP端的兼容性测试，有两种方法：</div><div style="word-wrap: break-word; margin: 0px auto; padding: 0px; font-family: 微软雅黑; line-height: 24px; color: #3e3e3e; font-size: 14px;">　　一种是人工测试即全手工测试兼容；</div><div style="word-wrap: break-word; margin: 0px auto; padding: 0px; font-family: 微软雅黑; line-height: 24px; color: #3e3e3e; font-size: 14px;">　　另外一种是借助第三方兼容性测试工具；</div><div style="word-wrap: break-word; margin: 0px auto; padding: 0px; font-family: 微软雅黑; line-height: 24px; color: #3e3e3e; font-size: 14px;">　　人工测试<a target="_self" style="word-wrap: break-word; margin: 0px auto; padding: 0px; font-family: &quot;color:#111010;&quot;;"><u style="word-wrap: break-word; margin: 0px auto; padding: 0px;"><strong style="word-wrap: break-word; margin: 0px auto; padding: 0px;">工作</strong></u></a>量大，而且覆盖不全；第三方测试工作虽说工作量小，但是在主功能和主流程测试的时候没有侧重点，很难发现一些隐藏的问题；要说这两种方法哪一种更好，我个人认为没有最好，我觉得这两种方法适当的结合才是最好的兼容性测试方法；</div><div style="word-wrap: break-word; margin: 0px auto; padding: 0px; font-family: 微软雅黑; line-height: 24px; color: #3e3e3e; font-size: 14px;">　<strong style="word-wrap: break-word; margin: 0px auto; padding: 0px; font-family: &quot;&quot;;">　四、如何进行兼容性测试</strong></div><div style="word-wrap: break-word; margin: 0px auto; padding: 0px; font-family: 微软雅黑; line-height: 24px; color: #3e3e3e; font-size: 14px;">　　（1）Web兼容性测试</div><div style="word-wrap: break-word; margin: 0px auto; padding: 0px; font-family: 微软雅黑; line-height: 24px; color: #3e3e3e; font-size: 14px;">　　首先开展人工测试，测试工程师测试主流浏览器和常用操作系统测试主流程和主界面，看看主流程和主界面是否有问题，如果存在问题，那么<a target="_self" style="word-wrap: break-word; margin: 0px auto; padding: 0px; font-family: &quot;color:#111010;&quot;;"><u style="word-wrap: break-word; margin: 0px auto; padding: 0px;"><strong style="word-wrap: break-word; margin: 0px auto; padding: 0px;">记录</strong></u></a>下bug情况，以及浏览器型号和版本，以及操作系统，准确定位bug产生的原因，提交bug，告知开发人员修改。所有的主流设备都需要进行测试，只关注主流程和主界面，毕竟每个系统主流程和主界面不是很多，所以这个工作量还是可以承受的。</div><div style="word-wrap: break-word; margin: 0px auto; padding: 0px; font-family: 微软雅黑; line-height: 24px; color: #3e3e3e; font-size: 14px;">　　其次借助第三方测试工具，目前我觉得比较好用的第三方<a target="_self" style="word-wrap: break-word; margin: 0px auto; padding: 0px; font-family: &quot;color:#111010;&quot;;"><u style="word-wrap: break-word; margin: 0px auto; padding: 0px;"><strong style="word-wrap: break-word; margin: 0px auto; padding: 0px;">Web测试</strong></u></a>工具有IEtester（离线）、SuperPreview（离线）和Browsershots：browsershots.org（在线），一款可以测试IE的兼容，一款可以测试主流浏览器的兼容，包括<a target="_self" style="word-wrap: break-word; margin: 0px auto; padding: 0px; font-family: &quot;color:#111010;&quot;;"><u style="word-wrap: break-word; margin: 0px auto; padding: 0px;"><strong style="word-wrap: break-word; margin: 0px auto; padding: 0px;">谷歌</strong></u></a>、火狐、Opera等等。借助第三方测试工具，找到bug产生的位置，分析测试结果，告知程序员调整。</div><div style="word-wrap: break-word; margin: 0px auto; padding: 0px; font-family: 微软雅黑; line-height: 24px; color: #3e3e3e; font-size: 14px;">　　（2）APP兼容性测试</div><div style="word-wrap: break-word; margin: 0px auto; padding: 0px; font-family: 微软雅黑; line-height: 24px; color: #3e3e3e; font-size: 14px;">　　APP的兼容性测试和Web测试类似，首先开展人工测试，测试工程师借助测试设备对主流程和主功能，主界面进行测试；收集所有的能收集到的不同型号的测试设备测试主流程和主界面，看看主流程和主界面是否有问题，如果存在问题，综合考虑设备的使用率等因素，看看是否需要调整，如果需要，那么记录下bug情况以及测试设备的型号和操作系统，准确定位bug产生的原因，提交bug，告知开发人员修改。</div><div style="word-wrap: break-word; margin: 0px auto; padding: 0px; font-family: 微软雅黑; line-height: 24px; color: #3e3e3e; font-size: 14px;">　　其次借助第三方测试工具，对于APP的兼容性测试，我推荐的是<a target="_self" style="word-wrap: break-word; margin: 0px auto; padding: 0px; font-family: &quot;color:#111010;&quot;;"><u style="word-wrap: break-word; margin: 0px auto; padding: 0px;"><strong style="word-wrap: break-word; margin: 0px auto; padding: 0px;">百度</strong></u></a>众测平台和云测平台，我经常使用的是云测平台，这两款测试工具里面包含了安卓和iOS的测试；测试很齐全，包括<a target="_self" style="word-wrap: break-word; margin: 0px auto; padding: 0px; font-family: &quot;color:#111010;&quot;;"><u style="word-wrap: break-word; margin: 0px auto; padding: 0px;"><strong style="word-wrap: break-word; margin: 0px auto; padding: 0px;">功能测试</strong></u></a>、深度兼容测试、<a target="_self" style="word-wrap: break-word; margin: 0px auto; padding: 0px; font-family: &quot;color:#111010;&quot;;"><u style="word-wrap: break-word; margin: 0px auto; padding: 0px;"><strong style="word-wrap: break-word; margin: 0px auto; padding: 0px;">性能测试</strong></u></a>、网络环境测试，还可以模拟海量用户测试，，还可以导入自己编写的<a target="_self" style="word-wrap: break-word; margin: 0px auto; padding: 0px; font-family: &quot;color:#111010;&quot;;"><u style="word-wrap: break-word; margin: 0px auto; padding: 0px;"><strong style="word-wrap: break-word; margin: 0px auto; padding: 0px;">测试用例</strong></u></a>进行功能测试，里面还包括测试专家的测试，当然了找专家是要花钱滴。基本进行兼容性测试是不需要花钱的；测试工程师把打包好的apk或者IPA文件，上传到测试平台，选择需要测试的设备型号，开始任务即可；等待一段时间，在等待的时间你是不需要盯着的，你可以做其他的工作。测试完成后会生成一份测试报告，可以查看错误页面和错误日志，如果需要调整，那么提交bug，告知程序员修改即可。</div><div style="word-wrap: break-word; margin: 0px auto; padding: 0px; font-family: 微软雅黑; line-height: 24px; color: #3e3e3e; font-size: 14px;"><strong style="word-wrap: break-word; margin: 0px auto; padding: 0px; font-family: &quot;&quot;;">　　五、兼容性测试的作用</strong></div><div style="word-wrap: break-word; margin: 0px auto; padding: 0px; font-family: 微软雅黑; line-height: 24px; color: #3e3e3e; font-size: 14px;">　　兼容性测试是<a target="_self" style="word-wrap: break-word; margin: 0px auto; padding: 0px; font-family: &quot;color:#111010;&quot;;"><u style="word-wrap: break-word; margin: 0px auto; padding: 0px;"><strong style="word-wrap: break-word; margin: 0px auto; padding: 0px;">软件测试</strong></u></a>过程必不可少的一个过程，没有兼容测试的测试是不完整的测试，兼容性测试的存在是有一定作用的。我个人觉得最少有以下几点：</div><div style="word-wrap: break-word; margin: 0px auto; padding: 0px; font-family: 微软雅黑; line-height: 24px; color: #3e3e3e; font-size: 14px;">　　兼容性测试能够进一步提高产品的质量，提高用户体验；</div><div style="word-wrap: break-word; margin: 0px auto; padding: 0px; font-family: 微软雅黑; line-height: 24px; color: #3e3e3e; font-size: 14px;">　　兼容性测试能使软件与尽可能多的其他软件&#8220;和平共处&#8221;，尽可能达到平台无关性；</div><div style="word-wrap: break-word; margin: 0px auto; padding: 0px; font-family: 微软雅黑; line-height: 24px; color: #3e3e3e; font-size: 14px;">　　兼容性测试能尽可能的保证软件存在的价值，它是衡量一个软件质量的重要指标；</div><div style="word-wrap: break-word; margin: 0px auto; padding: 0px; font-family: 微软雅黑; line-height: 24px; color: #3e3e3e; font-size: 14px;">　　兼容性测试能使软件产品的市场更广阔。</div><img src ="http://www.cnitblog.com/shbwf/aggbug/90953.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/shbwf/" target="_blank">51testing</a> 2018-03-30 07:23 <a href="http://www.cnitblog.com/shbwf/articles/90953.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>如何操作Linux 定时删除指定目下N天前的文件</title><link>http://www.cnitblog.com/shbwf/articles/90898.html</link><dc:creator>51testing</dc:creator><author>51testing</author><pubDate>Tue, 13 Mar 2018 05:26:00 GMT</pubDate><guid>http://www.cnitblog.com/shbwf/articles/90898.html</guid><wfw:comment>http://www.cnitblog.com/shbwf/comments/90898.html</wfw:comment><comments>http://www.cnitblog.com/shbwf/articles/90898.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/shbwf/comments/commentRss/90898.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/shbwf/services/trackbacks/90898.html</trackback:ping><description><![CDATA[<p data-paragraph-id="73f5f87a" style="word-wrap: break-word; margin-top: 20px; margin-bottom: 20px; padding: 0px 15px; font-size: 18px; color: #333333; line-height: 32px; font-family: &quot;text-align:justify;white-space:normal;&quot;;">转载：http://www.51testing.com/html/74/n-3725074.html&#8203;<br style="word-wrap: break-word;" />&#8203;做测试的童鞋相信对Linux这个系统不陌生吧，若不及时清理某些文件，长时间运行下去，系统也会吃不消的呢？正好，前几天在网上看到一篇文章【给 Linux 下的 rm 命令添加个&#8220;回收站&#8221;】一文来实现对 rm 命令的安全防护，但是这样&#8220;回收站&#8221;文件夹会随着使用 rm 命令的时间越来越占据容量，这明显是不科学的，所以应该有个智能的解决办法，那就是可以自动定时的清除指定某个时间段之前文件，几天就来详细说说如何实现。</p><p style="word-wrap: break-word; margin-top: 25px; margin-bottom: 20px; padding-top: 0px; padding-bottom: 0px; text-align: initial; font-size: 18px; color: #333333; line-height: 32px; font-family: &quot;white-space:normal;&quot;;"><img src="https://mp.dayu.com/images/385dafcb87384c40bdb12553bd4da09b5e0115203b923fff721686fa7d231ba01520918115123" uploaded="1" data-infoed="1" data-width="558" data-height="456" data-format="JPEG" data-size="12495" data-phash="a280808000000080" _src="https://mp.dayu.com/images/385dafcb87384c40bdb12553bd4da09b5e0115203b923fff721686fa7d231ba01520918115123" data-ke-src="https://mp.dayu.com/images/385dafcb87384c40bdb12553bd4da09b5e0115203b923fff721686fa7d231ba01520918115123" style="word-wrap: break-word; border: 0px; margin: 0px auto; max-width: 100%; float: none; display: inherit !important; -webkit-tap-highlight-color: rgba(0, 0, 0, 0) !important;"  alt="" /></p><p style="word-wrap: break-word; margin-top: 26px; margin-bottom: 5px; padding: 0px 15px; font-size: 12px; color: #999999; line-height: 1.7; text-align: center; font-family: &quot;white-space:normal;margin-bottom:20px !important;&quot;;">请点击此处输入图片描述</p><p data-paragraph-id="5fb5ba9a" style="word-wrap: break-word; margin-top: 10px; margin-bottom: 20px; padding: 0px 15px; font-size: 18px; color: #333333; line-height: 32px; font-family: &quot;text-align:justify;white-space:normal;&quot;;">可以利用Linux的crontab定时任务来实现这样的需求，具体命令如下：</p><p data-paragraph-id="357073db" style="word-wrap: break-word; margin-top: 20px; margin-bottom: 20px; padding: 0px 15px; font-size: 18px; color: #333333; line-height: 32px; font-family: &quot;text-align:justify;white-space:normal;&quot;;">* 6 * * * find /root/home/zhang/* ctime 1 -exec rm -rf {} \;</p><p data-paragraph-id="3ed6af15" style="word-wrap: break-word; margin-top: 20px; margin-bottom: 20px; padding: 0px 15px; font-size: 18px; color: #333333; line-height: 32px; font-family: &quot;text-align:justify;white-space:normal;&quot;;">表示每天早上六点删除/root/home/zhang目录下一天前创建的所有文件，不删除文件夹zhang，如果这个文件夹也要删除的话用</p><p data-paragraph-id="3ddde63d" style="word-wrap: break-word; margin-top: 20px; margin-bottom: 20px; padding: 0px 15px; font-size: 18px; color: #333333; line-height: 32px; font-family: &quot;text-align:justify;white-space:normal;&quot;;">* 6 * * * find /root/home/zhang ctime 1 -exec rm -rf {} \;</p><h2><strong style="word-wrap: break-word;">* 6 * * *释义：</strong></h2><p data-paragraph-id="923c3123" style="word-wrap: break-word; margin-top: 20px; margin-bottom: 20px; padding: 0px 15px; font-size: 18px; color: #333333; line-height: 32px; font-family: &quot;text-align:justify;white-space:normal;&quot;;">第一个*号表示时间中的 分钟 取值范围：0-59</p><p data-paragraph-id="e7f190df" style="word-wrap: break-word; margin-top: 20px; margin-bottom: 20px; padding: 0px 15px; font-size: 18px; color: #333333; line-height: 32px; font-family: &quot;text-align:justify;white-space:normal;&quot;;">第二个*号表示时间中的 小时 取值范围：0-23</p><p data-paragraph-id="4ca65a22" style="word-wrap: break-word; margin-top: 20px; margin-bottom: 20px; padding: 0px 15px; font-size: 18px; color: #333333; line-height: 32px; font-family: &quot;text-align:justify;white-space:normal;&quot;;">第三个*号表示一个月中的第几天，取值范围：1-31</p><p data-paragraph-id="7b9c0fd9" style="word-wrap: break-word; margin-top: 20px; margin-bottom: 20px; padding: 0px 15px; font-size: 18px; color: #333333; line-height: 32px; font-family: &quot;text-align:justify;white-space:normal;&quot;;">第四个*号表示一年中的第几个月，取值范围：1-12</p><p data-paragraph-id="9eb1da5d" style="word-wrap: break-word; margin-top: 20px; margin-bottom: 20px; padding: 0px 15px; font-size: 18px; color: #333333; line-height: 32px; font-family: &quot;text-align:justify;white-space:normal;&quot;;">第五个*号表示一个星期中的第几天，以星期天开始依次的取值为0～7，0、7都表示星期天</p><p data-paragraph-id="aabd2b05" style="word-wrap: break-word; margin-top: 20px; margin-bottom: 20px; padding: 0px 15px; font-size: 18px; color: #333333; line-height: 32px; font-family: &quot;text-align:justify;white-space:normal;&quot;;">ctime 表示创建时间，1 表示一天前，其实Linux中不存在文件创建时间，只有访问时间（atime）、修改时间（mtime）、状态改动时间（ctime） 。</p><p data-paragraph-id="47a939e2" style="word-wrap: break-word; margin-top: 20px; margin-bottom: 20px; padding: 0px 15px; font-size: 18px; color: #333333; line-height: 32px; font-family: &quot;text-align:justify;white-space:normal;&quot;;">可以通过命令 stat + 文件路径 查看时间</p><p data-paragraph-id="15034f44" style="word-wrap: break-word; margin-top: 20px; margin-bottom: 20px; padding: 0px 15px; font-size: 18px; color: #333333; line-height: 32px; font-family: &quot;text-align:justify;white-space:normal;&quot;;">也可通过命令 touch -t 201212212359 aa （建立文件aa,时间是2012年12月21日23时59分）修改时间</p><h2><strong style="word-wrap: break-word;">若是删除目录下的指定文件可以用：</strong></h2><p data-paragraph-id="c90a2be7" style="word-wrap: break-word; margin-top: 20px; margin-bottom: 20px; padding: 0px 15px; font-size: 18px; color: #333333; line-height: 32px; font-family: &quot;text-align:justify;white-space:normal;&quot;;">find 对应目录 -mtime +天数 -name "文件名" -exec rm -rf {} \;</p><p data-paragraph-id="47f76662" style="word-wrap: break-word; margin-top: 20px; margin-bottom: 20px; padding: 0px 15px; font-size: 18px; color: #333333; line-height: 32px; font-family: &quot;text-align:justify;white-space:normal;&quot;;">写好了命令，下面就是启动定时任务了。</p><p data-paragraph-id="1d4c4458" style="word-wrap: break-word; margin-top: 20px; margin-bottom: 20px; padding: 0px 15px; font-size: 18px; color: #333333; line-height: 32px; font-family: &quot;text-align:justify;white-space:normal;&quot;;">首先要创建一个crontab,输入命令crontab -e 进入编辑界面，编写你的定时任务，即上面的命令。</p><p data-paragraph-id="a880ea75" style="word-wrap: break-word; margin-top: 20px; margin-bottom: 20px; padding: 0px 15px; font-size: 18px; color: #333333; line-height: 32px; font-family: &quot;text-align:justify;white-space:normal;&quot;;">也可以不使用crontab -e命令创建crontab配置文件，其他任何文本编辑器编写命令序列，比如文件名为abc.cron，然后使用命令：crontab abc.cron将命令序列添加到crontab中。</p><p data-paragraph-id="b7383db9" style="word-wrap: break-word; margin-top: 20px; margin-bottom: 20px; padding: 0px 15px; font-size: 18px; color: #333333; line-height: 32px; font-family: &quot;text-align:justify;white-space:normal;&quot;;">创建好crontab之后，就可以把上面的命令写道 /etc/crontab这个文件中</p><p data-paragraph-id="80070d51" style="word-wrap: break-word; margin-top: 20px; margin-bottom: 20px; padding: 0px 15px; font-size: 18px; color: #333333; line-height: 32px; font-family: &quot;text-align:justify;white-space:normal;&quot;;">通过 crontab /etc/crontab 命令启动这个定时任务，可以通过 crontab -l 命令查看当下的定时任务</p><p data-paragraph-id="3858f61d" style="word-wrap: break-word; margin-top: 20px; margin-bottom: 20px; padding: 0px 15px; font-size: 18px; color: #333333; line-height: 32px; font-family: &quot;text-align:justify;white-space:normal;&quot;;">为保险起见，最好再重启服务，之后查看下crontab的服务状态</p><h2><strong style="word-wrap: break-word;">命令如下：</strong></h2><p data-paragraph-id="b252c0fc" style="word-wrap: break-word; margin-top: 20px; margin-bottom: 20px; padding: 0px 15px; font-size: 18px; color: #333333; line-height: 32px; font-family: &quot;text-align:justify;white-space:normal;&quot;;">查看crontab服务状态：service crond status</p><p data-paragraph-id="e88d862d" style="word-wrap: break-word; margin-top: 20px; margin-bottom: 20px; padding: 0px 15px; font-size: 18px; color: #333333; line-height: 32px; font-family: &quot;text-align:justify;white-space:normal;&quot;;">/sbin/service crond start //启动服务</p><p data-paragraph-id="794ed64b" style="word-wrap: break-word; margin-top: 20px; margin-bottom: 20px; padding: 0px 15px; font-size: 18px; color: #333333; line-height: 32px; font-family: &quot;text-align:justify;white-space:normal;&quot;;">/sbin/service crond stop //关闭服务</p><p data-paragraph-id="b5fb94df" style="word-wrap: break-word; margin-top: 20px; margin-bottom: 20px; padding: 0px 15px; font-size: 18px; color: #333333; line-height: 32px; font-family: &quot;text-align:justify;white-space:normal;&quot;;">/sbin/service crond restart //重启服务</p><p data-paragraph-id="2978b968" style="word-wrap: break-word; margin-top: 20px; margin-bottom: 20px; padding: 0px 15px; font-size: 18px; color: #333333; line-height: 32px; font-family: &quot;text-align:justify;white-space:normal;&quot;;">/sbin/service crond reload //重新载入配置</p><p data-paragraph-id="af1ebf90" style="word-wrap: break-word; margin-top: 20px; margin-bottom: 20px; padding: 0px 15px; font-size: 18px; color: #333333; line-height: 32px; font-family: &quot;text-align:justify;white-space:normal;&quot;;">基本流程就是这样。</p><p data-paragraph-id="69233b4d" style="word-wrap: break-word; margin-top: 20px; margin-bottom: 20px; padding: 0px 15px; font-size: 18px; color: #333333; line-height: 32px; font-family: &quot;text-align:justify;white-space:normal;&quot;;">不得不叹服，Linux命令行的强大呀！ Windows 下的回收站功能在Linux下就是这容易就实现了！还多了个智能定时清理&#8220;回收站&#8221;的功能！嘿嘿，比 Windows 的回收站好用多了！</p><img src ="http://www.cnitblog.com/shbwf/aggbug/90898.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/shbwf/" target="_blank">51testing</a> 2018-03-13 13:26 <a href="http://www.cnitblog.com/shbwf/articles/90898.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>测试管理之从需求到跟踪的操作实务</title><link>http://www.cnitblog.com/shbwf/articles/90892.html</link><dc:creator>51testing</dc:creator><author>51testing</author><pubDate>Tue, 06 Mar 2018 03:35:00 GMT</pubDate><guid>http://www.cnitblog.com/shbwf/articles/90892.html</guid><wfw:comment>http://www.cnitblog.com/shbwf/comments/90892.html</wfw:comment><comments>http://www.cnitblog.com/shbwf/articles/90892.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/shbwf/comments/commentRss/90892.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/shbwf/services/trackbacks/90892.html</trackback:ping><description><![CDATA[<span style="font-family: &quot;sans serif&quot;, tahoma, verdana, helvetica; font-size: 16px;">本文链接：</span><span style="font-family: &quot;sans serif&quot;, tahoma, verdana, helvetica; font-size: 16px;">http://www.51testing.com/html/09/n-3724909.html</span><span style="font-family: &quot;sans serif&quot;, tahoma, verdana, helvetica; font-size: 16px;">&#8203;</span><br style="word-wrap: break-word; font-family: &quot;sans serif&quot;, tahoma, verdana, helvetica; font-size: 16px;" /><span style="font-family: &quot;sans serif&quot;, tahoma, verdana, helvetica; font-size: 16px;">&#8203;</span><img alt="null" src="http://d.ifengimg.com/q100/img1.ugc.ifeng.com/newugc/20180306/10/wemedia/2957ec2cbd538c2cb0761f2831628451d0cab333_size215_w700_h621.png" data-ke-src="http://d.ifengimg.com/q100/img1.ugc.ifeng.com/newugc/20180306/10/wemedia/2957ec2cbd538c2cb0761f2831628451d0cab333_size215_w700_h621.png" style="word-wrap: break-word; border: none; margin: 0px auto; padding: 0px; list-style: none; box-sizing: border-box; vertical-align: middle; display: block; max-width: 50%; font-family: Helvetica, Arial, sans-serif; font-size: 14px; white-space: pre-wrap;" /><p style="word-wrap: break-word; padding-top: 0px; padding-bottom: 0px; list-style: none; box-sizing: border-box; counter-reset: list-1 0 list-2 0 list-3 0 list-4 0 list-5 0 list-6 0 list-7 0 list-8 0 list-9 0; font-family: Helvetica, Arial, sans-serif; font-size: 14px; white-space: pre-wrap;">需求跟踪是一个高阶的管理活动，目标是为了更好地管理需求的状态，更好地分析需求变更产生的影响。虽然执行需求跟踪会带来不错的效益，但其所需付出的工作量也是巨大的。因此在需求定义，需求开发和需求管理还没有非常顺畅时，不太建议引入需求跟踪活动。</p><h2><strong style="word-wrap: break-word; margin: 0px; padding: 0px; list-style: none; box-sizing: border-box;"> 1.1 需求跟踪的基本概念</strong></h2><p style="word-wrap: break-word; padding-top: 0px; padding-bottom: 0px; list-style: none; box-sizing: border-box; counter-reset: list-1 0 list-2 0 list-3 0 list-4 0 list-5 0 list-6 0 list-7 0 list-8 0 list-9 0; font-family: Helvetica, Arial, sans-serif; font-size: 14px; white-space: pre-wrap;">需求跟踪是将单个需求和其他系统元素之间的依赖关系和逻辑联系建立跟踪。这些元素包括：各种类型的需求，业务规则，系统架构，设计组件，源码，测试用例，以及帮助文档等。具体来说需求跟踪涉及5中类型的跟踪链：</p><img alt="null" src="http://d.ifengimg.com/q100/img1.ugc.ifeng.com/newugc/20180306/10/wemedia/c01d6920c0398000b6f5983cdd9f262e1c1491d2_size33_w697_h311.jpg" data-ke-src="http://d.ifengimg.com/q100/img1.ugc.ifeng.com/newugc/20180306/10/wemedia/c01d6920c0398000b6f5983cdd9f262e1c1491d2_size33_w697_h311.jpg" style="word-wrap: break-word; border: none; margin: 0px auto; padding: 0px; list-style: none; box-sizing: border-box; vertical-align: middle; display: block; max-width: 50%; font-family: Helvetica, Arial, sans-serif; font-size: 14px; white-space: pre-wrap;" /><p style="word-wrap: break-word; padding-top: 0px; padding-bottom: 0px; list-style: none; box-sizing: border-box; counter-reset: list-1 0 list-2 0 list-3 0 list-4 0 list-5 0 list-6 0 list-7 0 list-8 0 list-9 0; font-family: Helvetica, Arial, sans-serif; font-size: 14px; white-space: pre-wrap;"><br style="word-wrap: break-word;" /></p><p style="word-wrap: break-word; padding-top: 0px; padding-bottom: 0px; list-style: none; box-sizing: border-box; counter-reset: list-1 0 list-2 0 list-3 0 list-4 0 list-5 0 list-6 0 list-7 0 list-8 0 list-9 0; font-family: Helvetica, Arial, sans-serif; font-size: 14px; white-space: pre-wrap;">通常需求跟踪的收益体现在以下几个方面，都属于比较高阶的管理收益：</p><p style="word-wrap: break-word; padding-top: 0px; padding-bottom: 0px; list-style: none; box-sizing: border-box; counter-reset: list-1 0 list-2 0 list-3 0 list-4 0 list-5 0 list-6 0 list-7 0 list-8 0 list-9 0; font-family: Helvetica, Arial, sans-serif; font-size: 14px; white-space: pre-wrap;">》审核：跟踪信息可以帮助审核确保所有需求都被应用。</p><p style="word-wrap: break-word; padding-top: 0px; padding-bottom: 0px; list-style: none; box-sizing: border-box; counter-reset: list-1 0 list-2 0 list-3 0 list-4 0 list-5 0 list-6 0 list-7 0 list-8 0 list-9 0; font-family: Helvetica, Arial, sans-serif; font-size: 14px; white-space: pre-wrap;">》变更影响分析：跟踪信息在增删改需求时，可以确保不忽略每个受到影响的系统元素。</p><p style="word-wrap: break-word; padding-top: 0px; padding-bottom: 0px; list-style: none; box-sizing: border-box; counter-reset: list-1 0 list-2 0 list-3 0 list-4 0 list-5 0 list-6 0 list-7 0 list-8 0 list-9 0; font-family: Helvetica, Arial, sans-serif; font-size: 14px; white-space: pre-wrap;">》维护：可靠的跟踪信息使得维护时能正确，完整地实施变更，从而提高生产率。</p><p style="word-wrap: break-word; padding-top: 0px; padding-bottom: 0px; list-style: none; box-sizing: border-box; counter-reset: list-1 0 list-2 0 list-3 0 list-4 0 list-5 0 list-6 0 list-7 0 list-8 0 list-9 0; font-family: Helvetica, Arial, sans-serif; font-size: 14px; white-space: pre-wrap;">》项目跟踪：认真记录跟踪数据，可以使得计划当前的实现状态。</p><p style="word-wrap: break-word; padding-top: 0px; padding-bottom: 0px; list-style: none; box-sizing: border-box; counter-reset: list-1 0 list-2 0 list-3 0 list-4 0 list-5 0 list-6 0 list-7 0 list-8 0 list-9 0; font-family: Helvetica, Arial, sans-serif; font-size: 14px; white-space: pre-wrap;">》再设计：可以列出传统系统中将要替换的功能，记录他们在新系统的需求和软件组件中的位置。</p><p style="word-wrap: break-word; padding-top: 0px; padding-bottom: 0px; list-style: none; box-sizing: border-box; counter-reset: list-1 0 list-2 0 list-3 0 list-4 0 list-5 0 list-6 0 list-7 0 list-8 0 list-9 0; font-family: Helvetica, Arial, sans-serif; font-size: 14px; white-space: pre-wrap;">需求跟踪是比较高阶的管理活动，所需的工作量非常大，特别是软件需求到设计元素的跟踪，因此一定要考虑投入与收益是否成正比。</p><p style="word-wrap: break-word; padding-top: 0px; padding-bottom: 0px; list-style: none; box-sizing: border-box; counter-reset: list-1 0 list-2 0 list-3 0 list-4 0 list-5 0 list-6 0 list-7 0 list-8 0 list-9 0; font-family: Helvetica, Arial, sans-serif; font-size: 14px; white-space: pre-wrap;"><strong style="word-wrap: break-word; margin: 0px; padding: 0px; list-style: none; box-sizing: border-box;"> </strong>1.1.1 用户需求到软件需求的跟踪</p><p style="word-wrap: break-word; padding-top: 0px; padding-bottom: 0px; list-style: none; box-sizing: border-box; counter-reset: list-1 0 list-2 0 list-3 0 list-4 0 list-5 0 list-6 0 list-7 0 list-8 0 list-9 0; font-family: Helvetica, Arial, sans-serif; font-size: 14px; white-space: pre-wrap;">跟踪链第一类是用户需求到软件需求的跟踪，工作量中等，对与项目管理好处很明显，建议有时间尽量实现此类跟踪。</p><p style="word-wrap: break-word; padding-top: 0px; padding-bottom: 0px; list-style: none; box-sizing: border-box; counter-reset: list-1 0 list-2 0 list-3 0 list-4 0 list-5 0 list-6 0 list-7 0 list-8 0 list-9 0; font-family: Helvetica, Arial, sans-serif; font-size: 14px; white-space: pre-wrap;">1.1.1.1 目的：保证所有的用户原始需求都得到满足。</p><p style="word-wrap: break-word; padding-top: 0px; padding-bottom: 0px; list-style: none; box-sizing: border-box; counter-reset: list-1 0 list-2 0 list-3 0 list-4 0 list-5 0 list-6 0 list-7 0 list-8 0 list-9 0; font-family: Helvetica, Arial, sans-serif; font-size: 14px; white-space: pre-wrap;">1.1.1.2 好处：</p><p style="word-wrap: break-word; padding-top: 0px; padding-bottom: 0px; list-style: none; box-sizing: border-box; counter-reset: list-1 0 list-2 0 list-3 0 list-4 0 list-5 0 list-6 0 list-7 0 list-8 0 list-9 0; font-family: Helvetica, Arial, sans-serif; font-size: 14px; white-space: pre-wrap;">》开发人员在实现时能精确地定位到相关的原始需求。</p><p style="word-wrap: break-word; padding-top: 0px; padding-bottom: 0px; list-style: none; box-sizing: border-box; counter-reset: list-1 0 list-2 0 list-3 0 list-4 0 list-5 0 list-6 0 list-7 0 list-8 0 list-9 0; font-family: Helvetica, Arial, sans-serif; font-size: 14px; white-space: pre-wrap;">》可以为软件需求是否必要提供第一手证据。</p><p style="word-wrap: break-word; padding-top: 0px; padding-bottom: 0px; list-style: none; box-sizing: border-box; counter-reset: list-1 0 list-2 0 list-3 0 list-4 0 list-5 0 list-6 0 list-7 0 list-8 0 list-9 0; font-family: Helvetica, Arial, sans-serif; font-size: 14px; white-space: pre-wrap;">》容易找到需求之间的矛盾和歧义。</p><p style="word-wrap: break-word; padding-top: 0px; padding-bottom: 0px; list-style: none; box-sizing: border-box; counter-reset: list-1 0 list-2 0 list-3 0 list-4 0 list-5 0 list-6 0 list-7 0 list-8 0 list-9 0; font-family: Helvetica, Arial, sans-serif; font-size: 14px; white-space: pre-wrap;">1.1.1.2 具体手段：在第六章 需求分析与建模最佳实践中介绍到一种方法，就是将一句话标识的用户原始需求直接归并到软件需求的用例中。</p><p style="word-wrap: break-word; padding-top: 0px; padding-bottom: 0px; list-style: none; box-sizing: border-box; counter-reset: list-1 0 list-2 0 list-3 0 list-4 0 list-5 0 list-6 0 list-7 0 list-8 0 list-9 0; font-family: Helvetica, Arial, sans-serif; font-size: 14px; white-space: pre-wrap;">1.1.2 软件需求到软件需求的跟踪</p><p style="word-wrap: break-word; padding-top: 0px; padding-bottom: 0px; list-style: none; box-sizing: border-box; counter-reset: list-1 0 list-2 0 list-3 0 list-4 0 list-5 0 list-6 0 list-7 0 list-8 0 list-9 0; font-family: Helvetica, Arial, sans-serif; font-size: 14px; white-space: pre-wrap;">跟踪链中的第二类是软件需求到软件需求的跟踪，这类跟踪工作量规模较小，对于需求管理的好处十分明显，此类跟踪最应该建立。</p><p style="word-wrap: break-word; padding-top: 0px; padding-bottom: 0px; list-style: none; box-sizing: border-box; counter-reset: list-1 0 list-2 0 list-3 0 list-4 0 list-5 0 list-6 0 list-7 0 list-8 0 list-9 0; font-family: Helvetica, Arial, sans-serif; font-size: 14px; white-space: pre-wrap;">1.1.2.1 主要内容：</p><p style="word-wrap: break-word; padding-top: 0px; padding-bottom: 0px; list-style: none; box-sizing: border-box; counter-reset: list-1 0 list-2 0 list-3 0 list-4 0 list-5 0 list-6 0 list-7 0 list-8 0 list-9 0; font-family: Helvetica, Arial, sans-serif; font-size: 14px; white-space: pre-wrap;">》项目目标，stakeholder关注点到软件需求的跟踪。</p><p style="word-wrap: break-word; padding-top: 0px; padding-bottom: 0px; list-style: none; box-sizing: border-box; counter-reset: list-1 0 list-2 0 list-3 0 list-4 0 list-5 0 list-6 0 list-7 0 list-8 0 list-9 0; font-family: Helvetica, Arial, sans-serif; font-size: 14px; white-space: pre-wrap;">》相关软件需求之间的跟踪。</p><p style="word-wrap: break-word; padding-top: 0px; padding-bottom: 0px; list-style: none; box-sizing: border-box; counter-reset: list-1 0 list-2 0 list-3 0 list-4 0 list-5 0 list-6 0 list-7 0 list-8 0 list-9 0; font-family: Helvetica, Arial, sans-serif; font-size: 14px; white-space: pre-wrap;">1.1.2.2 目的：确保项目目标，stakeholder关注点被实现。</p><p style="word-wrap: break-word; padding-top: 0px; padding-bottom: 0px; list-style: none; box-sizing: border-box; counter-reset: list-1 0 list-2 0 list-3 0 list-4 0 list-5 0 list-6 0 list-7 0 list-8 0 list-9 0; font-family: Helvetica, Arial, sans-serif; font-size: 14px; white-space: pre-wrap;">1.1.2.3 好处：</p><p style="word-wrap: break-word; padding-top: 0px; padding-bottom: 0px; list-style: none; box-sizing: border-box; counter-reset: list-1 0 list-2 0 list-3 0 list-4 0 list-5 0 list-6 0 list-7 0 list-8 0 list-9 0; font-family: Helvetica, Arial, sans-serif; font-size: 14px; white-space: pre-wrap;">》更好地理解软件需求的实现意义。</p><p style="word-wrap: break-word; padding-top: 0px; padding-bottom: 0px; list-style: none; box-sizing: border-box; counter-reset: list-1 0 list-2 0 list-3 0 list-4 0 list-5 0 list-6 0 list-7 0 list-8 0 list-9 0; font-family: Helvetica, Arial, sans-serif; font-size: 14px; white-space: pre-wrap;">》更好地处理软件需求之间的逻辑相关性。</p><p style="word-wrap: break-word; padding-top: 0px; padding-bottom: 0px; list-style: none; box-sizing: border-box; counter-reset: list-1 0 list-2 0 list-3 0 list-4 0 list-5 0 list-6 0 list-7 0 list-8 0 list-9 0; font-family: Helvetica, Arial, sans-serif; font-size: 14px; white-space: pre-wrap;">1.1.2.4 具体手段：为项目目标，stakeholder关注点，创建唯一编号，通过表格或链接法实现跟踪。</p><p style="word-wrap: break-word; padding-top: 0px; padding-bottom: 0px; list-style: none; box-sizing: border-box; counter-reset: list-1 0 list-2 0 list-3 0 list-4 0 list-5 0 list-6 0 list-7 0 list-8 0 list-9 0; font-family: Helvetica, Arial, sans-serif; font-size: 14px; white-space: pre-wrap;">1.1.3 软件需求到下游工作产品的跟踪</p><p style="word-wrap: break-word; padding-top: 0px; padding-bottom: 0px; list-style: none; box-sizing: border-box; counter-reset: list-1 0 list-2 0 list-3 0 list-4 0 list-5 0 list-6 0 list-7 0 list-8 0 list-9 0; font-family: Helvetica, Arial, sans-serif; font-size: 14px; white-space: pre-wrap;">跟踪链中第三类是软件需求到下游工作产品(系统架构，设计组件，源码，测试用例，帮助文件等)的跟踪。这类跟踪对于变更管理的好处十分明显，但工作量巨大，因此此类跟踪应该谨慎使用。</p><p style="word-wrap: break-word; padding-top: 0px; padding-bottom: 0px; list-style: none; box-sizing: border-box; counter-reset: list-1 0 list-2 0 list-3 0 list-4 0 list-5 0 list-6 0 list-7 0 list-8 0 list-9 0; font-family: Helvetica, Arial, sans-serif; font-size: 14px; white-space: pre-wrap;">1.1.3.1 目的：维护软件需求与设计元素，测试元素之间的关联关系。</p><p style="word-wrap: break-word; padding-top: 0px; padding-bottom: 0px; list-style: none; box-sizing: border-box; counter-reset: list-1 0 list-2 0 list-3 0 list-4 0 list-5 0 list-6 0 list-7 0 list-8 0 list-9 0; font-family: Helvetica, Arial, sans-serif; font-size: 14px; white-space: pre-wrap;">1.1.3.2 好处：</p><p style="word-wrap: break-word; padding-top: 0px; padding-bottom: 0px; list-style: none; box-sizing: border-box; counter-reset: list-1 0 list-2 0 list-3 0 list-4 0 list-5 0 list-6 0 list-7 0 list-8 0 list-9 0; font-family: Helvetica, Arial, sans-serif; font-size: 14px; white-space: pre-wrap;">》在针对变更的技术影响分析时，能够得到更加精确的评估结果。</p><p style="word-wrap: break-word; padding-top: 0px; padding-bottom: 0px; list-style: none; box-sizing: border-box; counter-reset: list-1 0 list-2 0 list-3 0 list-4 0 list-5 0 list-6 0 list-7 0 list-8 0 list-9 0; font-family: Helvetica, Arial, sans-serif; font-size: 14px; white-space: pre-wrap;">》可以更好地隔离变更影响。</p><p style="word-wrap: break-word; padding-top: 0px; padding-bottom: 0px; list-style: none; box-sizing: border-box; counter-reset: list-1 0 list-2 0 list-3 0 list-4 0 list-5 0 list-6 0 list-7 0 list-8 0 list-9 0; font-family: Helvetica, Arial, sans-serif; font-size: 14px; white-space: pre-wrap;">1.1.3.3 具体手段：手动更新或通过配置管理软件来实现更新。</p><h2><strong style="word-wrap: break-word; margin: 0px; padding: 0px; list-style: none; box-sizing: border-box;"> 1.2 需求跟踪的操作方法</strong></h2><p style="word-wrap: break-word; padding-top: 0px; padding-bottom: 0px; list-style: none; box-sizing: border-box; counter-reset: list-1 0 list-2 0 list-3 0 list-4 0 list-5 0 list-6 0 list-7 0 list-8 0 list-9 0; font-family: Helvetica, Arial, sans-serif; font-size: 14px; white-space: pre-wrap;">要对需求进行跟踪，就必须对每个需求定义唯一标识。在实际操作过程中，主要有表格法和链表法两种跟踪策略。</p><p style="word-wrap: break-word; padding-top: 0px; padding-bottom: 0px; list-style: none; box-sizing: border-box; counter-reset: list-1 0 list-2 0 list-3 0 list-4 0 list-5 0 list-6 0 list-7 0 list-8 0 list-9 0; font-family: Helvetica, Arial, sans-serif; font-size: 14px; white-space: pre-wrap;">1.2.1 表格法</p><img alt="null" src="http://d.ifengimg.com/q100/img1.ugc.ifeng.com/newugc/20180306/10/wemedia/1a01afce76d44603780b9d6bae26144734f3f7e9_size46_w713_h369.jpg" data-ke-src="http://d.ifengimg.com/q100/img1.ugc.ifeng.com/newugc/20180306/10/wemedia/1a01afce76d44603780b9d6bae26144734f3f7e9_size46_w713_h369.jpg" style="word-wrap: break-word; border: none; margin: 0px auto; padding: 0px; list-style: none; box-sizing: border-box; vertical-align: middle; display: block; max-width: 50%; font-family: Helvetica, Arial, sans-serif; font-size: 14px; white-space: pre-wrap;" /><p style="word-wrap: break-word; padding-top: 0px; padding-bottom: 0px; list-style: none; box-sizing: border-box; counter-reset: list-1 0 list-2 0 list-3 0 list-4 0 list-5 0 list-6 0 list-7 0 list-8 0 list-9 0; font-family: Helvetica, Arial, sans-serif; font-size: 14px; white-space: pre-wrap;"><br style="word-wrap: break-word;" /></p><p style="word-wrap: break-word; padding-top: 0px; padding-bottom: 0px; list-style: none; box-sizing: border-box; counter-reset: list-1 0 list-2 0 list-3 0 list-4 0 list-5 0 list-6 0 list-7 0 list-8 0 list-9 0; font-family: Helvetica, Arial, sans-serif; font-size: 14px; white-space: pre-wrap;">在使用需求跟踪矩阵时，只是制定了计划而没做具体工作时还不能填写这些信息，必须完成了工作并且通过验证后才能填入这些信息。</p><p style="word-wrap: break-word; padding-top: 0px; padding-bottom: 0px; list-style: none; box-sizing: border-box; counter-reset: list-1 0 list-2 0 list-3 0 list-4 0 list-5 0 list-6 0 list-7 0 list-8 0 list-9 0; font-family: Helvetica, Arial, sans-serif; font-size: 14px; white-space: pre-wrap;">1.2.2 链表法</p><p style="word-wrap: break-word; padding-top: 0px; padding-bottom: 0px; list-style: none; box-sizing: border-box; counter-reset: list-1 0 list-2 0 list-3 0 list-4 0 list-5 0 list-6 0 list-7 0 list-8 0 list-9 0; font-family: Helvetica, Arial, sans-serif; font-size: 14px; white-space: pre-wrap;">链表法主要是用于特定软件上，比如需求管理工具Telelogic DOORS。</p><h2><strong style="word-wrap: break-word; margin: 0px; padding: 0px; list-style: none; box-sizing: border-box;"> 1.3 小结</strong></h2><p style="word-wrap: break-word; padding-top: 0px; padding-bottom: 0px; list-style: none; box-sizing: border-box; counter-reset: list-1 0 list-2 0 list-3 0 list-4 0 list-5 0 list-6 0 list-7 0 list-8 0 list-9 0; font-family: Helvetica, Arial, sans-serif; font-size: 14px; white-space: pre-wrap;">每当谈起需求跟踪活动，总是有一句话作为核心：需求开发活动都是必须的，需求管理活动都是可选的。因为任何管理活动都是有成本的，因此我们必须做好成本效益分析，而不是将所有管理活动都做到位了就是最好的。</p><p style="word-wrap: break-word; padding-top: 0px; padding-bottom: 0px; list-style: none; box-sizing: border-box; counter-reset: list-1 0 list-2 0 list-3 0 list-4 0 list-5 0 list-6 0 list-7 0 list-8 0 list-9 0; font-family: Helvetica, Arial, sans-serif; font-size: 14px; white-space: pre-wrap;">我们可以根据项目，人员，团队的特点，选择部分意义重大，价值较高的项目做需求跟踪，甚至可以在一个项目内，选择部分需求进行跟踪；另外还应该选择合适的需求管理工具，以降低需求跟踪的工作量。</p><p style="word-wrap: break-word; padding-top: 0px; padding-bottom: 0px; list-style: none; box-sizing: border-box; counter-reset: list-1 0 list-2 0 list-3 0 list-4 0 list-5 0 list-6 0 list-7 0 list-8 0 list-9 0; font-family: Helvetica, Arial, sans-serif; font-size: 14px; white-space: pre-wrap;"><br style="word-wrap: break-word;" /></p><img src ="http://www.cnitblog.com/shbwf/aggbug/90892.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/shbwf/" target="_blank">51testing</a> 2018-03-06 11:35 <a href="http://www.cnitblog.com/shbwf/articles/90892.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>这样做，让你的渗透测试更有效！</title><link>http://www.cnitblog.com/shbwf/articles/90886.html</link><dc:creator>51testing</dc:creator><author>51testing</author><pubDate>Mon, 26 Feb 2018 03:40:00 GMT</pubDate><guid>http://www.cnitblog.com/shbwf/articles/90886.html</guid><wfw:comment>http://www.cnitblog.com/shbwf/comments/90886.html</wfw:comment><comments>http://www.cnitblog.com/shbwf/articles/90886.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/shbwf/comments/commentRss/90886.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/shbwf/services/trackbacks/90886.html</trackback:ping><description><![CDATA[<br />本文来源：<span style="text-align: left; widows: 2; text-transform: none; background-color: rgb(255,255,255); font-style: normal; text-indent: 0px; letter-spacing: normal; display: inline !important; font-family: 宋体, Arial; white-space: normal; orphans: 2; float: none; color: rgb(102,102,102); font-size: 16px; font-weight: normal; word-spacing: 0px; font-variant-ligatures: normal; font-variant-caps: normal; -webkit-text-stroke-width: 0px">http://www.51testing.com</span><br />　　进行渗透测试首先需要确认渗透测试项目的起始状态。定义起始状态的最常见的方法是确定选择黑盒测试或白盒测试或灰盒测试。<br /><br />　　测试类型的选择<br />　　黑盒测试存在不少问题。由于被测系统的原因，也由于测试者对环境的熟悉程度不同，要估算侦察阶段能持续多长时间是很困难的，而且侦察阶段的长短涉及到费用问题。但是，如果测试时间不足，渗透测试往往可能&#8220;流产&#8221;。还有一点不太现实的因素，就是一个有着强烈动机的攻击者在仔细研究攻击目标时，是不会顾及那些限制因素的，因为他往往是专业的渗透测试者。所以，我们建议实施灰盒测试而不是黑盒测试。<br />　　如果渗透测试者可以与被测试系统有密切接触，或者充分了解被测系统，就可以明确地定义渗透测试的目标，并且测试报告的结果往往也可以预料。被测者要向测试者提供一些关于目标系统的细节，如网络信息、系统类型、公司的流程、服务，等等。白盒测试一般关注的是具体的业务目标，如满足合规需要，而不是一般性的评估，而且由于受到目标系统的范围限制，白盒测试往往是一种更为简短的任务。白盒测试能够减少信息收集的工作量，如侦察服务，可以减少渗透测试服务的成本。因而，内部的安全团队往往进行白盒测试。<br />　　什么情况下实施灰盒测试?答案就是在客户或系统的所有者同意在侦察阶段需要发现一些未知信息时，但又允许渗透测试人员跳过这个部分。渗透测试人员从系统所有者那里得到一些目标系统的基本信息;然而，内部工作和有些特权信息仍对渗透测试者保密。<br />　　真正的攻击者在攻击目标之前都要收集一些关于目标的信息。多数攻击者并不会选择随机的目标。攻击者往往有着强烈的动机，并且在攻击之前往往以某种方式与攻击目标进行交互。灰盒测试对于许多执行渗透测试的安全专家来说是很有吸引力的，因为这种测试模仿攻击者使用的真实方法，并且其关注的重点是漏洞而不是侦察。<br />　　测试范围定义了渗透服务怎样开始，怎样执行。渗透测试应当进行信息收集，用以记录目标环境和定义任务的范围，这样做的目的是避免一些不必要的侦察服务或超出范围的攻击系统。<br />　　真正的攻击者往往不受时间、资金、道德、工具的限制，这意味限制渗透测试的范围并不能代表真实情况。例如，一个渗透测试者可以捕获用户登录到关键系统的凭据，他根本无需测试这些系统是否容易遭受基于网络的攻击，就可以访问这些系统。还有很重要的一点，就是哪些人应知道渗透测试。真正的攻击者可能会在任何时间发动攻击。<br />　　确定渗透测试的范围<br />　　在制定渗透测试的范围时，你应该注意如下基本要点：<br />　　&#183; 目标系统的确定：即确定应当测试哪些系统。其中包括网络位置、系统类型、对这些系统的业务使用等等。<br />　　&#183; 测试工作的时间范围：测试应当在何时开始?为满足指定的测试目标，确定的时间范围是什么?<br />　　&#183; 如何评估目标系统：你允许使用哪些测试方法(如扫描和漏洞利用)?如果你允许使用特定的测试方法，会带来哪些风险?如果由于渗透测试而造成目标系统无法运行，其影响是什么?例如，通过冒充雇员而使用社会网络，对关键系统使用拒绝服务攻击，对有漏洞的服务执行脚本，等等。有些方法可能比其它方法给系统带来更高的风险。<br />　　&#183; 工具和软件：在渗透测试期间，你要使用哪些软件和工具?很多安全专家认为，如果泄露了工具就等于泄露了秘密武器。只有在安全专家在使用一些可以广泛获得的商业产品时，并且只是根据这些产品的报告来重新打造自己的品牌时，你才可能需要保密。有经验的安全专家会透露自己使用的工具，在揭露漏洞时，还要记录使用了工具的哪些命令才发现了漏洞。这可以使漏洞利用重现，并且允许客户真正理解系统是如何被攻破的，也可以理解漏洞被利用的难度。<br />　　&#183; 通知哪些人：谁应当知道渗透测试?向哪些人做简要的叙述?需要他们做准备吗?对渗透测试的反应是测试范围的一部分吗?如是这样，在进行测试之前，不通知安全运营团队就很有意义。如果你测试的是一款由另一方(例如，云服务供应商)托管的Web应用时，通知对方就非常重要，因为你的服务可能会影响到供应商。<br />　　&#183; 初始访问水平：在开始渗透测试之前，要提供哪些类型的信息和访问?渗透测试人员可以通过互联网或内联网访问服务器吗?允许哪些类型的最初等级的账户访问?对每个目标系统来说，这是一个黑盒测试、白盒测试还是灰盒测试?<br />　　&#183; 目标范围的定义：这里就是要确定渗透测试中的具体业务功能。例如，对销售人员使用的特定Web应用程序执行渗透测试，还不能影响到托管在同一服务器上的不同应用。<br />　　&#183; 关键操作范围的确定：渗透测试者必须确定应避免改变和影响哪些系统，其目的是防止渗透测试服务造成的负作用。是否应禁止访问活动的认证服务器?非常重要的问题是，在对目标进行渗透测试之前，就明确定义对哪些资产进行测试。<br />　　&#183; 标准的定义：渗透测试应该在何种程度上来攻击系统或过程?是否应当清除数据，或者攻击者仅需要获得特定水平的未授权访问?<br />　　&#183; 交付什么：最终交付的报告是什么样子的?在完成渗透测试服务协议时，客户期望什么样的目标?要确保测试目标不是开放性的，这样做的目的是为了避免测试范围超出所期望的服务。是否对特定的人员进行数据分类或指定数据?最终的报告应该如何交付?非常重要的问题是，测试人员要交付一个样本报告，或者定期地对报告进行更新，这样做的目的是为了避免最后的报告令人吃惊。<br />　　&#183; 修复期望：你期望在查出漏洞时，还记录一些可行的修复操作吗?如果在渗透测试期间，造成了系统的不可用，我们应该通知哪些人呢?如果发现了敏感数据会发生什么呢?多数渗透测试服务并没有对所发现问题提出修复措施。<br />　　漏洞评估<br />　　在很多情况下，根据审计标准或基准进行安全测试或审计给客户一种虚假的安全感。多数标准和基准都有一种长期更新的过程，却无法跟得上当今世界快速发展的威胁变化。因而，安全测试和审计应提供超出安全标准和基准的安全服务，将安全水平提高到一种针对现实威胁的保护水平。<br />　　漏洞评估是一种对网络设备、操作系统、应用软件进行扫描的过程，其目的是为了确认已知和未知漏洞的存在。在发现漏洞后，渗透测试者并不会针对漏洞实施攻击，验证其是否真实。漏洞评估交付的结果提供了与所有漏洞有关联的潜在风险。有许多解决方案(如Kali Linux)都可用于根据系统或服务器的类型、根据开放的通信端口或其它方式扫描漏洞。<br />　　只有漏洞扫描能够计算风险，才具备真正的价值。许多安全审计的问题就是漏洞扫描的结果使安全审计更笨重，却没有什么真正的价值。许多漏洞扫描器会提供虚假情报，或者会确认一些并不存存的漏洞。为什么?这是因为这些漏洞扫描器错误地确认操作系统，或者错误地查找特定的补丁来修复漏洞，却没有关注软件的版本。将风险与漏洞结合起来分析，可以提供一种明确的定义，并且可以确切地知道一个系统的脆弱程度。在很多情况下，这意味着需要对自动工具报告的漏洞进行检查。 <img src ="http://www.cnitblog.com/shbwf/aggbug/90886.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/shbwf/" target="_blank">51testing</a> 2018-02-26 11:40 <a href="http://www.cnitblog.com/shbwf/articles/90886.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>python 区块链的简易实现</title><link>http://www.cnitblog.com/shbwf/articles/90880.html</link><dc:creator>51testing</dc:creator><author>51testing</author><pubDate>Thu, 22 Feb 2018 03:42:00 GMT</pubDate><guid>http://www.cnitblog.com/shbwf/articles/90880.html</guid><wfw:comment>http://www.cnitblog.com/shbwf/comments/90880.html</wfw:comment><comments>http://www.cnitblog.com/shbwf/articles/90880.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/shbwf/comments/commentRss/90880.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/shbwf/services/trackbacks/90880.html</trackback:ping><description><![CDATA[<h3><p style="margin-bottom: 20px; box-sizing: inherit; color: #333333; font-family: -apple-system, BlinkMacSystemFont, &quot;Helvetica Neue&quot;, &quot;PingFang SC&quot;, &quot;Microsoft YaHei&quot;, &quot;Source Han Sans SC&quot;, &quot;Noto Sans CJK SC&quot;, &quot;WenQuanYi Micro Hei&quot;, sans-serif; font-size: medium; font-weight: 400;">区块链技术因为比特币的火爆而广受关注，我们这里用 python 代码来聊一下区块链技术：</p><p style="margin-bottom: 20px; box-sizing: inherit; color: #333333; font-family: -apple-system, BlinkMacSystemFont, &quot;Helvetica Neue&quot;, &quot;PingFang SC&quot;, &quot;Microsoft YaHei&quot;, &quot;Source Han Sans SC&quot;, &quot;Noto Sans CJK SC&quot;, &quot;WenQuanYi Micro Hei&quot;, sans-serif; font-size: medium; font-weight: 400;"><span style="box-sizing: inherit; font-weight: 600;">区块链实现原理的简易描述</span></p><p style="margin-bottom: 20px; box-sizing: inherit; color: #333333; font-family: -apple-system, BlinkMacSystemFont, &quot;Helvetica Neue&quot;, &quot;PingFang SC&quot;, &quot;Microsoft YaHei&quot;, &quot;Source Han Sans SC&quot;, &quot;Noto Sans CJK SC&quot;, &quot;WenQuanYi Micro Hei&quot;, sans-serif; font-size: medium; font-weight: 400;">区块链技术做为一种数字记账技术，其核心是将保存了交易数据的区块，以加密的方式，按时间的顺序链式记录。区块链本身就是一个公共的数据库，系统将新诞生的业务数据存储在被称为区块的容器之中，并将该区块添加到已有区块组成的链条之中。有点像贪吃蛇，吃的区块越多，蛇的身体越长；在比特币的应用场景下，这些数据是一组转账交易记录。在共享单车的应用场景下，这些数据就可以是借车还车的交易记录。</p><p style="margin-bottom: 20px; box-sizing: inherit; color: #333333; font-family: -apple-system, BlinkMacSystemFont, &quot;Helvetica Neue&quot;, &quot;PingFang SC&quot;, &quot;Microsoft YaHei&quot;, &quot;Source Han Sans SC&quot;, &quot;Noto Sans CJK SC&quot;, &quot;WenQuanYi Micro Hei&quot;, sans-serif; font-size: medium; font-weight: 400;"><span style="box-sizing: inherit; font-weight: 600;">区块链的简易实现代码</span></p><figure style="box-sizing: inherit; margin: 24px 0px; color: #333333; font-family: -apple-system, BlinkMacSystemFont, &quot;Helvetica Neue&quot;, &quot;PingFang SC&quot;, &quot;Microsoft YaHei&quot;, &quot;Source Han Sans SC&quot;, &quot;Noto Sans CJK SC&quot;, &quot;WenQuanYi Micro Hei&quot;, sans-serif; font-size: medium; font-weight: 400;"><img src="http://www.cnitblog.com/images/cnitblog_com/shbwf/1.jpg" border="0" alt="" /><br /></figure><p style="margin-bottom: 20px; box-sizing: inherit; color: #333333; font-family: -apple-system, BlinkMacSystemFont, &quot;Helvetica Neue&quot;, &quot;PingFang SC&quot;, &quot;Microsoft YaHei&quot;, &quot;Source Han Sans SC&quot;, &quot;Noto Sans CJK SC&quot;, &quot;WenQuanYi Micro Hei&quot;, sans-serif; font-size: medium; font-weight: 400;">在上述的代码中，区块链核心存储的数据结构是列表，通过 new_block()产生的新区块，被不断的增添到区块链的尾部，每个区块的 Hash 值中包含该区块所有的数据信息，在计算该 Hash 值的过程中需引用前一区块的 Hash 值，故而实现了防篡改。而区块链数据库的最大价值就是这种高度防篡改的可信计算。在我们的简易区块链实现中成功体现了这一点。在商用级的区块链应用中，新建区块的过程被称为智能合约，区块链就是通过智能合约不断的壮大。<br />以下是代码的运行结果，在不同的时间下，运行结果不同。</p><p style="margin-bottom: 20px; box-sizing: inherit; color: #333333; font-family: -apple-system, BlinkMacSystemFont, &quot;Helvetica Neue&quot;, &quot;PingFang SC&quot;, &quot;Microsoft YaHei&quot;, &quot;Source Han Sans SC&quot;, &quot;Noto Sans CJK SC&quot;, &quot;WenQuanYi Micro Hei&quot;, sans-serif; font-size: medium; font-weight: 400;"><span style="box-sizing: inherit; font-weight: 600;">运行结果<br /><img src="http://www.cnitblog.com/images/cnitblog_com/shbwf/2.jpg" border="0" alt="" /><br /></span></p><p style="margin-bottom: 20px; box-sizing: inherit; color: #333333; font-family: -apple-system, BlinkMacSystemFont, &quot;Helvetica Neue&quot;, &quot;PingFang SC&quot;, &quot;Microsoft YaHei&quot;, &quot;Source Han Sans SC&quot;, &quot;Noto Sans CJK SC&quot;, &quot;WenQuanYi Micro Hei&quot;, sans-serif; font-size: medium; font-weight: 400;">如想学习更多关于IT技术方面的文章，请前往<a href="http://link.zhihu.com/?target=http%3A//www.51testing.com" wrap=""  external"="" target="_blank" rel="nofollow noreferrer" data-za-detail-view-id="1043" style="color: #225599; box-sizing: inherit; border-bottom: 1px solid rgba(68, 68, 68, 0.721569); word-break: break-all; cursor: pointer;">51Testing软件测试网-中国软件测试人的精神家园</a>(<span style="background-color: #ffffff;">http://www.51testing.com)</span>。</p></h3><img src ="http://www.cnitblog.com/shbwf/aggbug/90880.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/shbwf/" target="_blank">51testing</a> 2018-02-22 11:42 <a href="http://www.cnitblog.com/shbwf/articles/90880.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>对 React 组件进行单元测试</title><link>http://www.cnitblog.com/shbwf/articles/90872.html</link><dc:creator>51testing</dc:creator><author>51testing</author><pubDate>Thu, 01 Feb 2018 05:37:00 GMT</pubDate><guid>http://www.cnitblog.com/shbwf/articles/90872.html</guid><wfw:comment>http://www.cnitblog.com/shbwf/comments/90872.html</wfw:comment><comments>http://www.cnitblog.com/shbwf/articles/90872.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/shbwf/comments/commentRss/90872.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/shbwf/services/trackbacks/90872.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 前端开发的一个特点是更多的会涉及用户界面，当开发规模达到一定程度时，几乎注定了其复杂度会成倍的增长。无论是在代码的初始搭建过程中，还是之后难以避免的重构和修正bug过程中，常常会陷入逻辑难以梳理、无法掌握全局关联的境地。而单元测试作为一种&#8220;提纲挈领、保驾护航&#8221;的基础手段，为开发提供了&#8220;围墙和脚手架&#8221;，可以有效的改善这些问题。作为一种经典的开发和重构手...&nbsp;&nbsp;<a href='http://www.cnitblog.com/shbwf/articles/90872.html'>阅读全文</a><img src ="http://www.cnitblog.com/shbwf/aggbug/90872.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/shbwf/" target="_blank">51testing</a> 2018-02-01 13:37 <a href="http://www.cnitblog.com/shbwf/articles/90872.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>周五的即兴测试</title><link>http://www.cnitblog.com/shbwf/articles/90867.html</link><dc:creator>51testing</dc:creator><author>51testing</author><pubDate>Fri, 26 Jan 2018 06:41:00 GMT</pubDate><guid>http://www.cnitblog.com/shbwf/articles/90867.html</guid><wfw:comment>http://www.cnitblog.com/shbwf/comments/90867.html</wfw:comment><comments>http://www.cnitblog.com/shbwf/articles/90867.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/shbwf/comments/commentRss/90867.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/shbwf/services/trackbacks/90867.html</trackback:ping><description><![CDATA[<br />　　软件测试人员在跑完所有测试用例，并且验证完所有BUG，完成回归测试时，会不会还有疑问，测试用例是不是覆盖了一切的场景？版本真的稳定OK了吗，交付验收后会不会还有Block级别的BUG呢？<br />　　如果存在这样的疑问，测试人员在跑完测试用例、通过回归测试、差不多完成测试、时间还允许的情况下，不妨再来一波简单的即兴测试。<br />　　即兴测试，顾名思义就是指临时准备的、即兴的Bug搜索测试过程，是随性而发的测试。通过即兴测试，由于测试用例中测试数据较为单一造成之前被忽略的BUG又被挖掘出来了。即兴测试强调测试人员的主观能动性，无需章法随时随地都可以去测，是相当地自由。<br />　　举个简单的例子：测试网站的搜索功能。<br />　　测试人员在设计测试用例时，包括测试详细的搜索规则、搜索结果、页面UI、后台数据、处理逻辑等。测试数据也用等价类划分、边界值、经验积累等方法准备好。但是即使测试人员绞尽脑汁尽力设计了测试用例和测试数据，在面对不确定的成千上万的数据面前，准备工作好像还是有所欠缺。所以测试工作差不多完成后，测试人员再来一波即兴测试--随性自由地跳出传统思维，使用测试数据以外的数据去找BUG。这不失为一种可行的方法。<br />　　当然，从鄙人测试工作的经历中来讲，这样的即兴测试对于软件测试人员而言，只是在整个测试工作中有小小小部分的占比，测试人员不能寄希望于&#8220;即兴测试&#8221;来验证版本可靠性，重头还是得设计出合理、多元化的测试用例覆盖较为全面的测试范围。即兴测试只是辅助过程。<br />更多实用的测试文章，请前往51Testing软件测试网。（<span style="background-color: #ffffff;">http://www.51testing.com）</span><img src ="http://www.cnitblog.com/shbwf/aggbug/90867.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/shbwf/" target="_blank">51testing</a> 2018-01-26 14:41 <a href="http://www.cnitblog.com/shbwf/articles/90867.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>为什么人工智能不会让软件测试消失？</title><link>http://www.cnitblog.com/shbwf/articles/90866.html</link><dc:creator>51testing</dc:creator><author>51testing</author><pubDate>Thu, 25 Jan 2018 04:07:00 GMT</pubDate><guid>http://www.cnitblog.com/shbwf/articles/90866.html</guid><wfw:comment>http://www.cnitblog.com/shbwf/comments/90866.html</wfw:comment><comments>http://www.cnitblog.com/shbwf/articles/90866.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/shbwf/comments/commentRss/90866.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/shbwf/services/trackbacks/90866.html</trackback:ping><description><![CDATA[此刻在质量保障（QA）中最令人激动的事情是机器学习和人工智能给测试技术带来的潜在的影响。我们迫切地想要知道，软件如何能够做到自我测试？软件能够自动地跟踪和消除Bug吗？<br /><br />这并不仅仅是幻想。2016-2017世界质量报告上有这样的阐述&#8220;我们认为人工智能将是克服日益增长的质量保证和测试挑战的重要的解决方案。基于人工智能的测试方法将是继基于风险的测试策略和自动化测试技术之后的另一个测试技术的变革浪潮&#8221;。<br /><br />Forrester的研究认为，测试是目前&#8220;应用AI进行软件交付的生命周期中最受欢迎的阶段&#8221;。在我们在Belatrix进行的一项调查中，81％的商业和技术专业人员（需要注册）说机器学习在五年内将会对其组织造成一些甚至重大影响。<br /><br />AI支持的测试是继自动化后测试领域的又一个自然的发展。<br /><br />我们见证了手动测试到自动化测试，再到AI支持的测试的逐渐演变。我们可以追踪这一发展过程：<br /><br />手动测试仍然可以发挥核心作用：测试开始于并将继续依赖于手动测试。在软件开发过程中总会有bug出现。即使今天我们有那么多的工具可以使用，手动测试仍然是测试策略中的一部分，尤其是为了确保高质量的用户体验。<br /><br />随着软件变得越来越复杂，自动化变得越来越重要：测试自动化是一种成熟的方法。在许多情况下，它是唯一可实现的选择&#8212;&#8212;在不同场景下运行大量测试用例并按时完成回归测试的唯一方法。它提供了更高的效率，用更少的精力和时间找到大量的缺陷。<br /><br />未来将会看到支持AI的测试：通过使用大量的数据来有效地使用机器学习和AI，自动化测试会变得&#8220;更智能&#8221;。我们正在看到支持AI的测试案例，例如，使用可视化验证，或者使用基本机器人轻点和滑过应用程序并测量性能。我们将看到人工智能在自动代码评审中发挥作用，通过漏洞评估提高安全性并自动生成测试用例。 QA工程师用历史数据来训练算法以提高检测率。机器学习也可以用来提供应用程序性能的实时反馈，并自动调整。<br /><br />尽管人工智能兴起，QA工程师不应该担心他们的工作会被抢走。<br /><br />在市场上有一些基本的使用机器学习来测试移动应用的测试服务，例如Eggplant AI。这些工具能有效地发现应用中的错误。自动化解决方案背后的引擎通过应用程序生成新的测试路径。我们可以使用通过算法自动化产生测试用例的web应用。然而，你需要注意到，你所获得的测试服务发生在整个产品开发生命周期的末尾。<br /><br />如果公司决定独自采取这种方式，他们将错过高水平的QA工程师可以提供的巨大价值，从安全和风险管理，可扩展性和性能评估，文档管理，过程保证（如规范和关键指标的跟踪）。<br /><br />QA工程师能够让AI变得更好。<br /><br />虽然AI不会让测试人员变得多余，但如果QA工程师不熟悉AI以及AI如何能够帮助自己创造更好的软件，那么他们将正在犯错。AI不仅可以帮助我们更快地发现错误，还可以帮助我们确定需要测试什么，或者哪里更可能发现错误。例如，如果手动测试人员学习使用算法创建测试用例，则可以创建更多与用户体验有关的测试用例，包括测试人员根本不会想到的用例。<br /><br />我相信机器学习实际上会增加我们对高素质QA专家的需求。这是因为算法的底层软件将根据收到的数据做出决定。潜在的变量在增加，QA工程师如何知道什么是正确的结果？<br /><br />想象一下基于自学模式的测试的未来。<br /><br />在思考未来如何发展时，我们有必要讨论一下神经网络和科学家们所取得的最新进展。神经网络虽然可训练，但不一定要从经验中学习。你必须把它们放在&#8220;学习模式&#8221;。然而，人工智能科学家已经提出了&#8220;生成式对抗网络或GANs&#8221;，其本质上是多个神经网络，它们相互激励，相互学习。现在设想一个世界，有不同的神经网络在测试、并一直学习破坏软件系统和发现安全漏洞。这更接近无监督的学习，将代表软件构建和测试过程的革命。<br /><br />如果你是一名开发者，不要以为没有你什么事情，你同样会被AI影响。为了看看这将会是什么样子，看一下一些人在循环神经网络（RNNs）上所做的工作：一位专家能够将奥巴马总统的演讲稿提供给RNN，RNNs网络就可以产生听起来像奥巴马所写的文字。但更加可怕的是，他将Linux源代码添加到RNNs中，现在网络就能够生成结构良好的C代码（尽管它不能编译，你可以想象一个带有监督的神经网络运行多个这样的代码，用一种革命性的方式生成可编译代码将是多么的不可思议）。<br /><br />在数字时代，支持AI的测试将是必不可少的。<br /><br />随着各种团体组织希望能够持续交付、企业需要更快的软件开发，支持AI的测试将成为QA工作的核心部分。这将是确保数字时代软件质量的唯一途径。然而，我们仍然需要测试人员，因为人类能够理解其他人类需要什么，而机器在开发&#8220;常识&#8221;的道路上还有很长距离要走。我们仍然需要有创造力、高素质的QA工程师将他们的见解应用到整个产品开发生命周期中。<br /><br />更多关于软件测试方面的文章，请前往51Testing软件测试网。（<span style="background-color: #ffffff;">http://www.51testing.com）</span><img src ="http://www.cnitblog.com/shbwf/aggbug/90866.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/shbwf/" target="_blank">51testing</a> 2018-01-25 12:07 <a href="http://www.cnitblog.com/shbwf/articles/90866.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>自建Hadoop集群迁移到EMR之数据迁移篇</title><link>http://www.cnitblog.com/shbwf/articles/90863.html</link><dc:creator>51testing</dc:creator><author>51testing</author><pubDate>Tue, 23 Jan 2018 02:51:00 GMT</pubDate><guid>http://www.cnitblog.com/shbwf/articles/90863.html</guid><wfw:comment>http://www.cnitblog.com/shbwf/comments/90863.html</wfw:comment><comments>http://www.cnitblog.com/shbwf/articles/90863.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/shbwf/comments/commentRss/90863.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/shbwf/services/trackbacks/90863.html</trackback:ping><description><![CDATA[<strong>　摘要</strong>：自建集群要迁移到EMR集群，往往需要迁移已有数据。本文主要介绍hdfs数据和hive meta数据如何迁移。 前置 已按需求创建好EMR集群。 迁移hdfs数据 主要依靠distcp,核心是打通网络，确定hdfs参数和要迁移内容，测速，迁移。<br />　　自建集群要迁移到EMR集群，往往需要迁移已有数据。本文主要介绍hdfs数据和hive meta数据如何迁移。<br />　<strong>　前置</strong><br />　　已按需求创建好EMR集群。<br />　　<strong>迁移hdfs数据</strong><br />　　主要依靠distcp,核心是打通网络，确定hdfs参数和要迁移内容，测速，迁移。<br />　　<strong>网络</strong><br />　　需要自建集群和EMR各个节点网络互通。同为VPC网络只需要同一个安全组，不同的安全组需要设置安全组互通。<br />　　如果自建集群是经典网络，EMR集群是vpc，网络访问需要设置CLASSICLINK.参见文档,详情可以咨询ECS客服。<br />　　设置后可以在新集群节点上ssh 老集群节点确定网络连通情况，distcp操作如果有xx 节点无法连接xx节点的异常，说明没有连通，需要继续设置。<br />　　<strong>hdfs权限配置确认</strong><br />　　hdfs有权限设置，确定老集群是否有acl规则，是否要同步，检查dfs.permissions.enabled 和dfs.namenode.acls.enabled的配置新老集群是否一致，按照实际需要修改。<br />　　如果有acl规则要同步，distcp参数要加-p同步权限参数。如果distcp操作提示xx集群不支持acl，说明对应集群没配置。新集群没配置可以修改配置并重启NM。旧集群不支持，说明旧集群根本就没有acl方面的设置，也不需要同步。<br />　　<strong>同步参数</strong><br />　　一般在新集群上运行同步，这样同步的作业可以在新集群上运行，对老集群影响较小。<br />　　distcp 参数细节 ，一般命令格式如下：<br />　　hadoop distcp -Ddfs.replication=3 -pbugpcax -m 1000 -bandwidth 30 hdfs://oldclusterip:8020 /user/hive/warehouse /user/hive/<br />　<strong>　注意事项：</strong><br />　　1.hdfs://oldclusterip:8020写老集群nameode ip，多个namenode写当前active的。<br />　　2.指定了副本数3，如想保留原有副本数-p后加r如-prbugpcax。如果不同步权限和acl，-p后去掉p和a。<br />　　3.-m指定map数，和集群规模，数据量有关。比如集群有2000核cpu，就可以指定2000个map。 -bandwidth指定单个map的同步速度，是靠控制副本复制速度实现的，是大概值。<br />　　4.迁移整体速度受集群间带宽，集群规模影响。同时文件越多，checksum需要的时间越长。如果迁移数据量大，可以先试着同步几个目录评估一下整体时间。如果只能在指定时间段内同步，可以将目录切为几个小目录，依次同步。<br />　　5.如果迁移过程中老集群还有写入，可以用-udpate再将变化同步过来。<br />　　6.一般完全同步，需要有个短暂的业务停写，以启用双写双算或直接将业务切换到新集群上。<br />　　hive meta数据同步<br />　　hive meta数据同步，本质是hive meta db，一般是mysql db的数据同步。和一般的mysql数据同步相比，要注意location改变，和hive版本对齐。<br /><strong>　　meta db设置</strong><br />　　meta数据较多时，一般推荐用rds作为meta db。自建集群可能已有一个rds db，由于location不同，一般需要新建一个数据库。最佳实践是跟EMR集群在一个可用区，一个vpc 安全组下新建一个rds 数据库。<br />　　登录新集群master节点（如果是ha集群两个master都需要），修改/usr/local/emr/emr-agent/run/meta_db_info.json，把里面的use_local_meta_db设置为false，meta数据库信息的链接地址、用户名和密码换成新建rds的信息。然后重启hive组件的metaserver。<br />　<strong>　</strong>初始化meta的表信息：<br />　　&#183;&#183;&#183;<br />　　cd /usr/lib/hive-current/bin<br />　　./schematool - initSchema -dbType mysql<br />　　&#183;&#183;&#183;<br />　<strong>　location</strong><br />　　hive的表，分区等信息是有location信息的，带dfs nameservices前缀，如hdfs://mycluster:8020/，而EMR集群的nameservices前缀是统一的emr-cluster,所以需要订正。订正的最佳方式是先导出数据 mysqldump --databases hivemeta --single-transaction -u root &#8211;p &gt; hive_databases.sql ,用sed替换hdfs://oldcluster:8020/为hdfs://emr-cluster/ ,再导入新db中。<br />　　mysql hivemeta -p &lt; hive_databases.sql<br />　　<strong>版本对齐</strong><br />　　EMR的hive版本一般是当前社区最新的稳定版，自建集群hive版本可能会更老，所以导入的旧版本数据可能不能直接使用。需要执行hive的升级脚本， 地址 。例如hive从1.2升级到2.3.0，需要依次执行upgrade-1.2.0-to-2.0.0.mysql.sql，upgrade-2.0.0-to-2.1.0.mysql.sql，upgrade-2.1.0-to-2.2.0.mysql.sql，upgrade-2.2.0-to-2.3.0.mysql.sql。脚本主要是建表，加字段，改内容，如有表已存在，字段已存在的异常可以忽略。<br />　<strong>　验证</strong><br />　　meta数据全部订正后，就可以重启metaserver了。命令行 hive ，查询库和表，查询数据，验证正确性。<br /><br />　　饮水思源，&#8220;欢饮&#8221;前往51Testing软件测试网，学习更多测试技术文章。（http://www.51testing.com）<img src ="http://www.cnitblog.com/shbwf/aggbug/90863.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/shbwf/" target="_blank">51testing</a> 2018-01-23 10:51 <a href="http://www.cnitblog.com/shbwf/articles/90863.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>如何进行“有效”测试的探讨</title><link>http://www.cnitblog.com/shbwf/articles/90861.html</link><dc:creator>51testing</dc:creator><author>51testing</author><pubDate>Mon, 22 Jan 2018 02:01:00 GMT</pubDate><guid>http://www.cnitblog.com/shbwf/articles/90861.html</guid><wfw:comment>http://www.cnitblog.com/shbwf/comments/90861.html</wfw:comment><comments>http://www.cnitblog.com/shbwf/articles/90861.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/shbwf/comments/commentRss/90861.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/shbwf/services/trackbacks/90861.html</trackback:ping><description><![CDATA[即使是一些资深的测试工程师，也会承认：<br />　　测试的主要困难是不知道如何进行有效地测试，也不知道什么时候可以放心地结束测试。<br />　　如果不知道什么样的测试是&#8220;有效&#8221;的测试，项目组就会面临这样的问题：预留给测试的时间用完了，即使怀疑软件中仍然遗漏很多缺陷，也只好匆匆收场，把麻烦留给将来。<br />　　怎样的测试才是&#8220;有效&#8221;的测试？面对这一难题，估且谈谈自己的一些粗浅的看法，借以抛砖引玉。<br />　　<strong>&#9679;要合理安排测试人员。</strong><br />　　测试活动是由人来完成的，所以测试是否&#8220;有效&#8221;要看执行的人安排得是否恰当。<br />　　<strong>1）程序员不能测试自己的程序</strong><br />　　测试的思维和开发是完全不同的。开发者是从完成软件功能以及软件的质量出发来考虑问题的，而测试人员则是从发现软件缺陷的角度来考虑问题的。程序员要测试自己的程序，很难做好这种思维的转变。从心理上，要对自己的作品挑错，也是很难做到的一件事。<br />　　<strong>2）安排最好的程序员测试</strong><br />　　测试并不是一件简单的事。要能从一个功能已经实现的软件产品中找到错误，需要具备一定的经验程序员才有可能做好。如果随便安排一个人来做测试，有可能只能给出一堆让软件产品顺利通过的无用的测试用例而已。<br />　　<strong>&#9679;正确理解测试的目的</strong><br />　　测试是为了找出缺陷，不是为了证明程序是正确的。只有从这个目的出发，才有可能发现程序中潜在的错误。<br />　　如果为了说明软件有多么好，那么应当制作专门的演示。千万不要将&#8220;测试&#8221;与&#8220;演示&#8221;混为一谈。<br />　　<strong>&#9679;注重异常测试</strong><br />　　在进行测试设计的时候，不仅要编制有效输入数据的测试用例，还要编制无效输入数据的测试用例。有效输入，只能验证程序的功能性是否正确，对于程序的可靠性，安全性，它是无能为力的。<br />　<strong>　&#9679;分析测试结果</strong><br />　　完成一轮测试之后，不仅要对发现的问题进行改错，对更改的代码进行回归测试，还应对测试结果进行分析，以决定:<br />　　1）是否满足测试终止条件，可以结束测试。<br />　　2）在已发现的问题类型当中，是否存在一些习惯性或普遍性的问题，如果有，分析其可能存在的位置，设计合适的测试用例，找出它来。<br />　　3）通常在已经发现错误的地方会发现更多的错误。要分析已经发现问题的测试用例设计的是否充分，是否需要设计新的测试用例，以找出尚未发现的问题。<br />　　<strong>&#9679;必要的测试类型一个都不能少</strong><br />　　测试一般包括单元测试、集成测试、系统测试、验收测试。从开发与测试的关系来看，这些测试类型分别用于验证详细设计、结构设计、需求规格说明、用户需求。单元测试，用于验证软件单元的正确性；集成测试，用于验证软件单元和模块接口的正确性；系统测试用于验证软件需求的实现；用户测试，用于验证用户需求的实现。这些测试类型验证的对象完全不同，只有完成了这些测试工作，开发出来的软件才满足&#8220;正确的做&#8221;和&#8220;做的正确 &#8221;。所以这些测试类型，一个都不能少。<br />　　<strong>&#9679;测试类型的有效性</strong><br />　<strong>　1）单元测试的有效性</strong><br />　　a）单元测试，要确保详细设计的软件单元的功能的实现；<br />　　b）最合理的单元测试，应当是边开发、边审查、边测试。如果等到所有的软件单元全部开发完成，才开始进行单元测试，你会耗费更多测试的时间；<br />　　c）单元测试，要解决软件单元代码的规范性、正确性的问题；<br />　　d）单元测试要满足一定的代码覆盖率和路径覆盖率的要求，特别是关键的软件单元。<br />　　<strong>2）集成测试的有效性</strong><br />　　a）制定一个有效的集成策略。集成顺序不应是随意的，应优先考虑那些关键的软件单元（如果它出现问题，将给软件带来很大的影响后果）以及与软件外部输出有关系的软件单元。<br />　　b）在开发软件单元的时候就要考虑集成的顺序，将单元测试和集成测试一并考虑，按照提成的先后顺序开发软件单元，边开发边审查边测试边集成。<br />　　<strong>3）系统测试和验收测试的有效性</strong><br />　　a) 系统测试和验收测试，都不应只关注功能测试、性能测试、接口测试，除此之外，还要考虑用户界面测试、安全性测试、压力测试、可靠性测试、安装/反安装测试等内容。<br />　　b) 验收测试是以用户为主导的测试，验收测试的测试用例应从用户使用的角度考虑。<br />　　以上零零散散地谈了几点如何&#8220;有效&#8221;测试的想法。这些是从过程方法上面谈的，后面会从技术层面再来探讨。<br />&nbsp; &nbsp; &nbsp; 本文转自51Testing软件测试网，跟多热点测试技术，请前往51Testing软件测试网：<span style="background-color: #ffffff;">http://www.51testing.com 。</span><img src ="http://www.cnitblog.com/shbwf/aggbug/90861.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/shbwf/" target="_blank">51testing</a> 2018-01-22 10:01 <a href="http://www.cnitblog.com/shbwf/articles/90861.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>进行app性能和安全性测试的重要性</title><link>http://www.cnitblog.com/shbwf/articles/90856.html</link><dc:creator>51testing</dc:creator><author>51testing</author><pubDate>Wed, 17 Jan 2018 07:42:00 GMT</pubDate><guid>http://www.cnitblog.com/shbwf/articles/90856.html</guid><wfw:comment>http://www.cnitblog.com/shbwf/comments/90856.html</wfw:comment><comments>http://www.cnitblog.com/shbwf/articles/90856.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/shbwf/comments/commentRss/90856.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/shbwf/services/trackbacks/90856.html</trackback:ping><description><![CDATA[如何让用户感觉App运行速度更快呢，这需要对App进行性能测试。限制App性能的因素按照App的系统结构分为App自身和App需要用到的后台服务。<br />　　<strong>测试App连接网络的速度</strong><br />　　一般采用在模拟Mock环境下进行测试，测试方法更多使用的是在App的log中添加时间戳的方式计算时间，例如使用Apple公司提供的iPhone Configuration Utility中Devices的Console查看App的log。<br />　　<strong>测试App在不同网络速度下操作的流程程度</strong><br />　　测试可以使用在App的log中添加时间戳方法验证，也可以通过使用App的直观感受来验证App性能带给用户的体验。<br />　　<strong>测试App对于前台页面渲染的性能</strong><br />　　测试可以使用在App的log中添加时间戳方法验证，也可以通过使用App的直观感受来验证App性能带给用户的体验。特殊的是，当App中使用WebView，测试人员可以快速地刷新当前页面或者在使用WebView的页面间进行切换，来验证App是否有性能问题甚至发生崩溃。<br />　　<strong>测试App操作数据库的性能</strong><br />　　iOS操作系统在设备本地存储App数据时使用的是CoreData或者SQLite数据库;Android操作系统在设备本地存储App数据时使用SQLite数据库。如果操作的数据量很大，便有可能出现App的性能问题，此时App测试就很重要，对数据库操作的功能进行大数据量的测试。测试人员也可以和开发人员一起，遵照Web端数据库优化的一些原则，如数据库启用事务，使用索引，数据的批量操作等优化方法，提高数据库的性能。<br />　　<strong>测试App的会话session是否有过期设置</strong><br />　　对于App的会话session是否有过期设置的测试，可以在App运行中切换到别的App或者桌面一段时间，然后再次进入App，看App是否需要输入密码等验证信息。值得注意的是不同App的合理session过期时间不一样，测试人员需要和产品经理、开发人员等确认之后制定出合理的测试用例。<br />　　<strong>测试App请求中是否包含了明文的用户信息</strong><br />　　包含了明文的信息，如同App中标示用户应该使用UUID或GUID等转码后的信息，而不是直接的用户电话号码或账户信息，当然更不应该明文传送这些信息。测试人员可以使用Apple的iPhone Configuration Utility，Android SDK自带的DDMS，Charles和Fiddler这些工具来监控App发送的请求。<br />　　<strong>测试App的请求是否加密</strong><br />　　一般App请求可以使用HTTP，但是关系到用户敏感信息的请求，需要使用HTTPS等加密传输。<br />　　<strong>测试SQLite数据库的存储是否安全</strong><br />　　测试人员可以通过ADB连接到root的Android蛇别，并使用SQLite来查看具体的数据库保存的信息。显然，把用户实际的登录信息明文存储在数据库文件中是不安全的，最好不要存储，如果必须存储，最好对这些信息加密后再存储。<br />　　<strong>测试App使用WebView的安全性</strong><br />　　由于WebView的请求和在Web端请求数据是一样的，所以任何适用于Web端的攻击方式和漏洞对于WebView来说都是通用的。<br />&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;<br />&nbsp; &nbsp; &nbsp; &nbsp; END<br />&nbsp; &nbsp; &nbsp; &nbsp; 更多关于软件测试方面的文章，请前往51Testing软件测试网。（<span style="background-color: #ffffff;">http://www.51testing.com）</span><img src ="http://www.cnitblog.com/shbwf/aggbug/90856.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/shbwf/" target="_blank">51testing</a> 2018-01-17 15:42 <a href="http://www.cnitblog.com/shbwf/articles/90856.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>有这么一项技术，据说可能取代云计算，你怎么看？ </title><link>http://www.cnitblog.com/shbwf/articles/90714.html</link><dc:creator>51testing</dc:creator><author>51testing</author><pubDate>Tue, 18 Jul 2017 07:52:00 GMT</pubDate><guid>http://www.cnitblog.com/shbwf/articles/90714.html</guid><wfw:comment>http://www.cnitblog.com/shbwf/comments/90714.html</wfw:comment><comments>http://www.cnitblog.com/shbwf/articles/90714.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/shbwf/comments/commentRss/90714.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/shbwf/services/trackbacks/90714.html</trackback:ping><description><![CDATA[<div style="word-wrap: break-word; color: #666666; font-family: 宋体, Arial; font-size: 16px;">前沿科技产业的一个特点，就是总会给大家制造出各种各样的风口。这些风口往往有着特别酷炫的名字，有强大的学术论证和巨头背书，但真正落实到应用性和商业行为当中，结果怎么样又不好说了。</div><div style="word-wrap: break-word; color: #666666; font-family: 宋体, Arial; font-size: 16px;"><a href="http://www.51testing.com/batch.download.php?aid=70979" target="_blank" style="word-wrap: break-word; color: #565656;"><img src="http://www.51testing.com/attachments/2017/07/15201284_201707170945011bfwc.jpg" border="0" style="word-wrap: break-word; border: 0px;"  alt="" /></a></div><div style="word-wrap: break-word; color: #666666; font-family: 宋体, Arial; font-size: 16px;">　　比如说，大数据与<a target="_self" style="word-wrap: break-word; color: #565656;"><u style="word-wrap: break-word;"><strong style="word-wrap: break-word;">云计算</strong></u></a>产业当中，能明显感觉到最近一个词热度蹿升的速度特别快：边缘计算。</div><div style="word-wrap: break-word; color: #666666; font-family: 宋体, Arial; font-size: 16px;">　　事实上，边缘计算并非新生事物，其运算原理在很多年前就已经被提出了。但随着近期物联网产业发展、5G时代到来，与这些领域息息相关的边缘计算又被重新推向了风口浪尖。</div><div style="word-wrap: break-word; color: #666666; font-family: 宋体, Arial; font-size: 16px;">　　去年11月，<a target="_self" style="word-wrap: break-word; color: #565656;"><u style="word-wrap: break-word;"><strong style="word-wrap: break-word;">华为</strong></u></a>、沈阳自动化所、Intel、ARM、信通院、软通动力联合发起成立了边缘计算产业联盟(Edge Computing Consortium)，更是让整个2017年中国的ICT与物联网市场弥漫着边缘计算的芬芳。</div><div style="word-wrap: break-word; color: #666666; font-family: 宋体, Arial; font-size: 16px;">　　半年时间里，国内大批以边缘计算为卖点的智能家居和物联网企业狂飙突进，希望借助边缘计算的火爆成为&#8220;风口上的猪&#8221;。但边缘计算真有那么神吗？又是什么在吸引着大批跟风者进场？</div><div style="word-wrap: break-word; color: #666666; font-family: 宋体, Arial; font-size: 16px;">　　今天让我们十分辩证地走进这个&#8220;重要又不重要&#8221;的领域，讨论一下&#8220;后云计算&#8221;时代的物联网。</div><div style="word-wrap: break-word; color: #666666; font-family: 宋体, Arial; font-size: 16px;">　<strong style="word-wrap: break-word;"><span style="word-wrap: break-word; font-size: small;">　边缘计算、雾计算，都是些什么鬼？</span></strong></div><div style="word-wrap: break-word; color: #666666; font-family: 宋体, Arial; font-size: 16px;">　　要讲边缘计算，没法绕过去的一个概念叫做&#8220;雾计算&#8221;。一听名字就知道这哥们是从云计算那变化出来的。雾计算的原理与云计算一样，都是把数据上传到远程中心进行分析、存储和处理。但相比于云计算要把所有数据集中运输到同一个中心，雾计算的模式是设置众多分散的中心节点，即所谓&#8220;雾节点&#8221;来处理。这样能够让运算处理速度更快，更高效得出运算结果。</div><div style="word-wrap: break-word; color: #666666; font-family: 宋体, Arial; font-size: 16px;">　　假如说云计算是把所有东西都送往天上的云彩中，雾计算就是把数据送到身边的雾气里，这种逻辑被称为&#8220;分散式云计算&#8221;。也有人开玩笑说，是不是接下来就该是霾计算了？（这笑话八成是中国人想的）。</div><div style="word-wrap: break-word; color: #666666; font-family: 宋体, Arial; font-size: 16px;">　　但把云计算分散化的设想，不止产生了雾计算一个结果。有一种更激进的想法是，既然要分散，那为什么不干脆在最近距离完成计算？跑到云端或者跑到分散中心不都是跑吗？于是就有了所谓的边缘计算。</div><div style="word-wrap: break-word; color: #666666; font-family: 宋体, Arial; font-size: 16px;">　　边缘计算，是指利用靠近数据源的边缘地带来完成的运算程序。运算可以在大型运算设备内完成，也可以在中、小型运算设备、本地端网络内完成。而用于边缘运算的设备既可以是<a target="_self" style="word-wrap: break-word; color: #565656;"><u style="word-wrap: break-word;"><strong style="word-wrap: break-word;">智能手机</strong></u></a>这样的移动设备，也可以是PC、智能家居等家用终端，甚至可以是ATM机、摄像头等市政终端。</div><div style="word-wrap: break-word; color: #666666; font-family: 宋体, Arial; font-size: 16px;">　　总之一句话，你附近哪能算就在哪算，越近越好。</div><div style="word-wrap: break-word; color: #666666; font-family: 宋体, Arial; font-size: 16px;"><a href="http://www.51testing.com/batch.download.php?aid=70978" target="_blank" style="word-wrap: break-word; color: #565656;"><img src="http://www.51testing.com/attachments/2017/07/15201284_201707170944471sx3f.jpg" border="0" style="word-wrap: break-word; border: 0px;"  alt="" /></a></div><div style="word-wrap: break-word; color: #666666; font-family: 宋体, Arial; font-size: 16px;">　　举个不恰当但十分容易理解的例子：加入你手机里有个文件太大装不下了，云计算的解决方法是把它传到千里之外的服务器中心帮你存着，雾计算是传到小区的服务器帮你存着，边缘计算是看看你的电脑、冰箱、洗衣机，谁有地方就帮你存哪&#8230;&#8230;</div><div style="word-wrap: break-word; color: #666666; font-family: 宋体, Arial; font-size: 16px;">　　显然，边缘计算运算设备和终端设备之间距离最近，传输效果最直接，还可以利用近距离网络和局域网络，当然运算效率也会更高一点。</div><div style="word-wrap: break-word; color: #666666; font-family: 宋体, Arial; font-size: 16px;">　<strong style="word-wrap: break-word;"><span style="word-wrap: break-word; font-size: small;">　云计算对物联网说：他比我更适合你</span></strong></div><div style="word-wrap: break-word; color: #666666; font-family: 宋体, Arial; font-size: 16px;">　　边缘计算之所以短时间内名声鹊起，是与算法、数据和传输网络几个领域的发展密不可分的。但边缘计算带来的价值想象，最核心的一点还是它与一个词发生了&#8220;难以描述的关系&#8221;&#8212;&#8212;物联网。</div><div style="word-wrap: break-word; color: #666666; font-family: 宋体, Arial; font-size: 16px;">　　我们知道，物联网能够达成的基础，是让设备连接网络，达成交互、数据收集和数据处理的能力。而现阶段物联网的主要运算能力都是由云计算提供的，边缘计算带来的几个好处，仿佛让物联网感觉到应该抛弃云计算去投怀送抱。</div><div style="word-wrap: break-word; color: #666666; font-family: 宋体, Arial; font-size: 16px;">　　首先，是边缘计算带来了更快的传输和响应速度；其次是部分摆脱了网络环境制约，也更加安全；最后，边缘计算利用了传统云计算的遗漏区域，产能比更划算。这些优势，都让很多人看到了边缘计算的潜在价值。甚至喊出了&#8220;边缘计算干掉云计算&#8221;的口号，而在一些更有诱惑力的东西吸引下，一些物联网企业开始按捺不住，纷纷走向了豪赌边缘计算的道路。</div><div style="word-wrap: break-word; color: #666666; font-family: 宋体, Arial; font-size: 16px;"><strong style="word-wrap: break-word;"><span style="word-wrap: break-word; font-size: small;">　　物联网企业大力拥抱边缘计算，可能有点小心思？</span></strong></div><div style="word-wrap: break-word; color: #666666; font-family: 宋体, Arial; font-size: 16px;">　　先不判断这股行业风气的对错，我们先来看看相比<a target="_self" style="word-wrap: break-word; color: #565656;"><u style="word-wrap: break-word;"><strong style="word-wrap: break-word;">技术</strong></u></a>逻辑，边缘计算带来的商业吸引力都来自哪里？</div><div style="word-wrap: break-word; color: #666666; font-family: 宋体, Arial; font-size: 16px;">　　一、云计算被巨头切割之后，打开的机会缺口：经过几年的超高速发展，云计算已经在世界范围内成为了核心资源和社会生产力。可谓&#8220;举国上下尽知云&#8221;，但云计算的中心化特征，让这个领域注定是巨头们玩的游戏，小企业很难分得一杯羹。今天边缘计算带来了一种仿佛可以推翻云计算的可能，当然会吸引无数目光，毕竟云计算带来的巨型回报就在眼前。</div><div style="word-wrap: break-word; color: #666666; font-family: 宋体, Arial; font-size: 16px;">　　二、大公司相继背书。今年4月，全球最大开源社群<a target="_self" style="word-wrap: break-word; color: #565656;"><u style="word-wrap: break-word;"><strong style="word-wrap: break-word;">Linux</strong></u></a>决定成立新项目来推动边缘计算。目前已经有的Dell、AMD等超过50家厂商加入。这只是众多边缘计算联盟中的一个。随着<a target="_self" style="word-wrap: break-word; color: #565656;"><u style="word-wrap: break-word;"><strong style="word-wrap: break-word;">亚马逊</strong></u></a>、<a target="_self" style="word-wrap: break-word; color: #565656;"><u style="word-wrap: break-word;"><strong style="word-wrap: break-word;">微软</strong></u></a>、英特尔等大企业相继入局，边缘计算的前景也在某种程度上成为了行业共识。</div><div style="word-wrap: break-word; color: #666666; font-family: 宋体, Arial; font-size: 16px;">　　三、更适合工业生产的物联网技术解决方案。相比较泛在化的云计算+物联网解决方案，边缘计算的特点之一是能大幅解决延迟率问题，对于工业生产体系至关重要。这也是边缘计算经常与&#8220;工业4.0&#8221;放在一起的原因。工业，意味着客户，意味着钱，当然是比其他飘在天上的物联网技术更受人待见。</div><div style="word-wrap: break-word; color: #666666; font-family: 宋体, Arial; font-size: 16px;">　　四、人工智能和机器人的应用落地。边缘计算的另一大优势，是为人工智能硬件、智能机器人提供高速交互所需的运算服务。这类智能产品的运算需求特别大，都挤压到云端对运算能力、传输能力是巨大考验，边缘计算能解决一部分问题。这就把边缘计算的前景和人工智能技术的前景捆绑到了一起，想象空间骤然加大。</div><div style="word-wrap: break-word; color: #666666; font-family: 宋体, Arial; font-size: 16px;">　　五、关乎5G这场大动作。更直接的一个风口，来自于我们翘首以盼的5G。在5G环境里，移动边缘计算将运算下沉到了用户附件，提供了高宽带、低延时的网络传输效果。这为5G传输提供了至关重要的保障，并且也提供了更好的用户体验。比如在线看视频，云计算传输在足够快的速度下也能保障流畅度，但却很容易造成画质损害，利用边缘计算保障视频传输理论上可以显著提高画质。</div><div style="word-wrap: break-word; color: #666666; font-family: 宋体, Arial; font-size: 16px;">　　这些非常明显的商业机遇，加速了边缘计算引发的风潮。但最后不得不泼一盆冷水：至少从目前来看，边缘计算取代云计算是基本不可能的事。</div><div style="word-wrap: break-word; color: #666666; font-family: 宋体, Arial; font-size: 16px;"><strong style="word-wrap: break-word;"><span style="word-wrap: break-word; font-size: small;">　　边缘计算与云计算：难构成挑战，也难独自存在</span></strong></div><div style="word-wrap: break-word; color: #666666; font-family: 宋体, Arial; font-size: 16px;">　　目前看起来完成大量的计算任务主要还是依靠云。边缘计算的设想很精密，但落地的应用却很少，尤其高度适配各个领域的技术解决方案似乎还没有出现。综合来看，边缘计算走向实际应用还有距离，更有两个难以跨越的难关：</div><div style="word-wrap: break-word; color: #666666; font-family: 宋体, Arial; font-size: 16px;">　　一方面，边缘计算难以兼容异构。也就是说如何让冰箱算洗衣机的数据、空调算手机的数据还没人回答。这就导致了真正能提供边缘计算能力的设备和网络非常稀少。虽然边缘计算能借力打力，但压根没有可借的力就呜呼奈何了。</div><div style="word-wrap: break-word; color: #666666; font-family: 宋体, Arial; font-size: 16px;">　　另一方面，边缘计算的智能化进度也让人疑惑。我们知道，大数据处理和呈现，是高度依赖智能化的运算方式。将数据中心化集成，意味着可以通过不同算法整合处理，得到各种需要的结果。但边缘计算的运算场景却无法兼容过多智能化处理方式，这就让运算体系间的适用性不高。说白了，边缘计算快是快了，但代价是必然比云计算笨上很多。</div><div style="word-wrap: break-word; color: #666666; font-family: 宋体, Arial; font-size: 16px;">　　总而言之，边缘计算在很长一段时间里，是无法实际取代云计算的。更大概率是作为辅助手段与云计算相结合，作为补充手段和特定场景技术。</div><div style="word-wrap: break-word; color: #666666; font-family: 宋体, Arial; font-size: 16px;">　　巨头们纷纷进场，更多是战略上的占领和完成技术储备。国内物联网的设备基础和网络基础都还薄弱，短期想要靠边缘计算赚钱，恐怕有点过分乐观了。<br style="word-wrap: break-word;" />End.<br style="word-wrap: break-word;" />如果对软件测试感兴趣，想了解更多的软件测试知识，请大家关注&#8220;51Testing软件测试网&#8221;头条号。<br style="word-wrap: break-word;" /><br style="word-wrap: break-word;" />相关热门文章<br style="word-wrap: break-word;" /><br style="word-wrap: break-word;" /><a href="http://www.toutiao.com/i6426594521361940994/" target="_blank" style="word-wrap: break-word; color: #565656;">http://www.toutiao.com/i6426594521361940994/</a><br style="word-wrap: break-word;" /><br style="word-wrap: break-word;" /><a href="http://www.toutiao.com/i6439201903241855490/" target="_blank" style="word-wrap: break-word; color: #565656;">http://www.toutiao.com/i6439201903241855490/</a><br style="word-wrap: break-word;" /><br style="word-wrap: break-word;" /><a href="http://www.toutiao.com/i6439580855500276226/" target="_blank" style="word-wrap: break-word; color: #565656;">http://www.toutiao.com/i6439580855500276226/</a><br style="word-wrap: break-word;" /><br style="word-wrap: break-word;" /><a href="http://www.toutiao.com/i6439919722615013889/" target="_blank" style="word-wrap: break-word; color: #565656;">http://www.toutiao.com/i6439919722615013889/</a></div><img src ="http://www.cnitblog.com/shbwf/aggbug/90714.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/shbwf/" target="_blank">51testing</a> 2017-07-18 15:52 <a href="http://www.cnitblog.com/shbwf/articles/90714.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>2014软件测试现状调查活动开始啦！</title><link>http://www.cnitblog.com/shbwf/articles/89835.html</link><dc:creator>51testing</dc:creator><author>51testing</author><pubDate>Wed, 12 Nov 2014 14:20:00 GMT</pubDate><guid>http://www.cnitblog.com/shbwf/articles/89835.html</guid><wfw:comment>http://www.cnitblog.com/shbwf/comments/89835.html</wfw:comment><comments>http://www.cnitblog.com/shbwf/articles/89835.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/shbwf/comments/commentRss/89835.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/shbwf/services/trackbacks/89835.html</trackback:ping><description><![CDATA[<b>调查名称：2014软件测试现状调查活动<br></b>
<b>调查时间：即日起至2015年3月12日<br></b>
<b><span style="color: #e3ae6">参与调查问卷请点击>> </span><a href="http://vote.51testing.com/ "><span style="color: #">http://vote.51testing.com/</span></a></b><br><br>
51Testing作为目前国内人气最旺的软件测试门户网站,为了帮助软件测试从业人员自身和相关企业，更深入、全面的了解中国软件测试从业人员现状，在2007年开展了首届中国软件测试从业人员调查活动。活动一经推出，立即受到广大会员的关注和支持。<br>
在2007年至2013年期间，51Testing软件测试网共开展了八次行业调查活动，其中除了2008年是企业软件测试现状调查外，其余七次都进行了中国软件测试从业人员调查并公布了调查所得数据和调查分析报告，每份报告都被下载超过万次，反响强烈。<br>
2014软件测试现状调查活动正在火热进行中，本次调查将继续从软件测试从业人员的角度，对软件测试从业人员及业内现状进行调查；问卷的设计在2013年的基础上做了进一步的修改和完善，力求使本次调查活动更专业、严谨、客观、实用，力争打造出中国软件测试领域最具广泛性、权威性和实用性的产业调查。<br>
51Testing希望通过本次调查活动，帮助大家了解2014年的软件测试从业人员现状，帮助测试人员更好的认识和定位自我，规划职业发展。<br>
欢迎广大软件测试从业人员前来参与，与51Testing携手，共同为提升软件测试从业人员整体价值，提高软件测试领域发展水平尽一份力量。<br>
感谢每个填写问卷的用户，你们的信息我们会保密的，对于完成问卷的用户，在调查报告一出来时我们就会通知大家，方便大家在第一时间了解行业现状~<br>
<span style="color: Ea590b">PS:必须全部填完才能提交问卷，如果有用户还是不愿意填联系方式什么的，可以直接填&#8220;无&#8221;。 </span> <br>   <img src ="http://www.cnitblog.com/shbwf/aggbug/89835.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/shbwf/" target="_blank">51testing</a> 2014-11-12 22:20 <a href="http://www.cnitblog.com/shbwf/articles/89835.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Bug敏感度的培养</title><link>http://www.cnitblog.com/shbwf/articles/89172.html</link><dc:creator>51testing</dc:creator><author>51testing</author><pubDate>Tue, 07 Jan 2014 07:28:00 GMT</pubDate><guid>http://www.cnitblog.com/shbwf/articles/89172.html</guid><wfw:comment>http://www.cnitblog.com/shbwf/comments/89172.html</wfw:comment><comments>http://www.cnitblog.com/shbwf/articles/89172.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/shbwf/comments/commentRss/89172.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/shbwf/services/trackbacks/89172.html</trackback:ping><description><![CDATA[<p>在我们刚踏入软件测试行业时，不管你是专业的、非专业的，培训出来的还是未培训的。刚进公司时你看着身边的同时报的Bug很多并且大都是严重程度高，自己也很想提高一下，想要提高自己的bug敏感度，建议从下面几点做起，纯属个人建议。<br />　　1 熟悉需求：这是最基础也是最重要的，原始需求随着项目的进度在不断地变化，这就需要你多沟通多交流清楚最新的需求是什么。毕竟书面上的需求是不完整的，隐性需求就靠你和PM沟通了，让PM听你的建议，从用户的角度考虑。<br />　　2 Bug库：多看Bug库，看看别人找Bug的测试角度，可以增加自己的测试思路 ；可以避免提交重复的Bug。比如别人提了一个上边界值的问题，但下边界值也存在问题，这时候你就可以提下边界值的问题了。随着你看Bug库熟悉程度越深你的测试思路越宽阔。<br />　　3 被测对象和同类产品相对比：现在市面上大部分开发的软件都有同类产品，你可以对照同类产品对自己测试的软件进行参考测试，如：功能上、建议问题。尤其是性能方面，测试的指标如CPU、内存等都不要超过同类产品。<br />　　4 异常方面：断网时页面显示是否满足要求，是否有相应提示；快速切换页面是否出现异常、加载过程中进行其他操作、快速连续提交按钮是否提交多条数据、输入错误数据是否有相应处理等等<br />　　5 不断总结：学到的东西要不断总结，不然会杂乱无章。可以写博客或者写日记把自己的进步记录下来，每天进步一点点，时间长了会有很大收获的，要相信上天总是眷顾勤奋的人。如果你想以后提高自己，现在就开始养成一个好习惯。<br />　　以上是自己的一点拙见，希望看到这篇文章的同学，发表一下自己的意见。 </p>
<p>更多内容请关注51testing软件测试网</p><img src ="http://www.cnitblog.com/shbwf/aggbug/89172.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/shbwf/" target="_blank">51testing</a> 2014-01-07 15:28 <a href="http://www.cnitblog.com/shbwf/articles/89172.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Web应用程序完全测试指南</title><link>http://www.cnitblog.com/shbwf/articles/89167.html</link><dc:creator>51testing</dc:creator><author>51testing</author><pubDate>Mon, 06 Jan 2014 06:41:00 GMT</pubDate><guid>http://www.cnitblog.com/shbwf/articles/89167.html</guid><wfw:comment>http://www.cnitblog.com/shbwf/comments/89167.html</wfw:comment><comments>http://www.cnitblog.com/shbwf/articles/89167.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/shbwf/comments/commentRss/89167.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/shbwf/services/trackbacks/89167.html</trackback:ping><description><![CDATA[<p>随着Web技术和移动互联网的发展，越来越多的应用被迁移到了云端，这也使得用户可以随时随地使用它们。目前大量的优质应用，逐渐提升了用户的品味，也降低了用户的容忍度，如果你的Web应用无法使用户满意，那么很快就会有其他的应用来代替。<br />　　对于开发者来说，建立良好的客户口碑才是最有意义的事情。在完成了Web应用的设计和开发工作后，并不意味着你就可以直接发布了，你还需要从各方面来对其进行测试，以便让用户在使用过程中，不会出现各种各样的问题，比如性能、使用体验、安全问题等等。</p>
<p>　　那么对于Web应用来说，该测试哪些方面，该如何测试呢？来看看作者 Abhimanyu Ghoshal给出的这些建议。<br />　　一、首先应该测试什么？<br />　　当测试Web应用的时候，首先要明确你的应用要用来做什么，比如帮助用户编辑照片、发送票据、联系朋友或跟踪社交媒介等。你通常需要着眼于这四大领域：<br />　　1.&nbsp; 功能性测试<br />　　几乎所有的用户都期望自己所使用的Web应用功能准确、迅速、一致。这就意味着开发者必须精益求精，帮助用户实现某种形式上的结果。下面是一些需要全面测试的常见的功能元素：<br />　　表单：无论是反馈调查、创建任务计划，还是订阅新闻，都需要用到表单。你需要检查提交操作是否正常，是否能够提交连接并提交到你的数据中，所有字段是否能够接收输入的内容。<br />　　文件操作和计算：这其中涉及图像和文档的上传、编辑、计算功能和正确的输出值。首先，要确保你能想象得到会有多少用户会使用你的应用，并尽可能地针对他们进行调节。另外，要考虑一下如何使你的App更有效地计算并显示出结果，给用户提供一个更加流畅的用户体验。<br />　　搜索：如果你的应用允许用户搜索内容、文档或文件，那么就要保证你的搜索引擎能够索引这些信息，并定期更新，以便能够让用户实现快速查找，并根据查找条件快速显示相关结果。<br />　　媒体播放组件：测试音频、视频、动画和互动媒体播放组件（如游戏和图形工具）的时候，这些组件应该像预期的功能效果一样，在加载和运行的时候不能影响（暂停或减缓）其他应用的运行。<br />　　脚本和类库：确保你的脚本（比如图像显示或Ajax页面加载）在各种浏览器之间是相互兼容的，因为不同的用户可能会使用不同的浏览器访问你的应用，同时你可以测量不同浏览器的加载时间来进行性能优化。如果你的脚本只能和某些浏览器相互兼容，那么就要确保应用中的其他组件有更好的性能，这样所有的用户就能得到最好的应用体验。<br />　　最后，就是要全面检查其他组件的功能，包括提示系统、用户配置文件和管理仪表板等。</p>
<p>更多内容请关注51testing软件测试网...</p><img src ="http://www.cnitblog.com/shbwf/aggbug/89167.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/shbwf/" target="_blank">51testing</a> 2014-01-06 14:41 <a href="http://www.cnitblog.com/shbwf/articles/89167.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>测试功能总结得与失随谈</title><link>http://www.cnitblog.com/shbwf/articles/89157.html</link><dc:creator>51testing</dc:creator><author>51testing</author><pubDate>Thu, 02 Jan 2014 06:25:00 GMT</pubDate><guid>http://www.cnitblog.com/shbwf/articles/89157.html</guid><wfw:comment>http://www.cnitblog.com/shbwf/comments/89157.html</wfw:comment><comments>http://www.cnitblog.com/shbwf/articles/89157.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/shbwf/comments/commentRss/89157.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/shbwf/services/trackbacks/89157.html</trackback:ping><description><![CDATA[一直在做功能测试工作，负责公司网站和软件功能测试工作，却很少静下心来总结工作中的得失。<br />　　很多不了解测试的人，认为功能测试不过就是拿鼠标点来点去，没有什么技术含量，随便招个应届毕业生就能干的工作。我也曾经认为功能测试没什么前途，现在看来觉得自己太浮躁，想法太固执了。功能测试的门槛可能比较低，做测试工作的人大多都是从功能测试开始，但要做好功能测试却不容易，需要学习的知识还很多。<br />　　功能测试最重要的是理解业务和需求。知道系统要实现什么功能，业务流程是怎样的，然后就可以根据需求编写测试计划和测试用例了以及记录Bug异常。<br />　　要做好功能测试，还需要对整个系统的数据库结构比较清楚，每个功能点涉及哪些数据表，对数据的操作方式是怎样的。这样就不单从前台页面来进行测试，通过对数据库中数据的验证，可以发现隐藏的一些bug。比如库表没有进行关联删除，从前台页面是看不出来的，但实际可能导致程序出现问题。对一些比较复杂的组合查询或数据排序，也可以自己编写sql语句对结果进行验证，这样有利于更好的发现产品潜在的Bug。<br />　　除此之外，了解程序的框架结构和一些简单的开发知识也有助于更好地测试程序和定位错误。做完一个业务，可以通过系统日志来查看错误原因，结合数据库结构，如果发现产品错误，却不知道问题在哪，就要学会用谷歌freedebug这个工具，查找出程序存在的异常，该工具还能更加好的做样式测试，能及时发现问题，及时解决问题，可以更好帮助开发人员定位该错误，促进产品更好，更高效率的开发。<br />　　最后，对bug的分析和总结有助于积累测试经验，比如一个产品那种问题出现的类似错误次数最多，哪些模块功能点考虑不全面问题，哪中测试异常记录方法能更好的利于开发人员进行查看，利于自己后期维护和修改。通过测试经验的累积，可以更好地了解系统常出现的错误，提高测试和产品的效率。<br />更多内容请登录 51Testing软件测试网<br /><img src ="http://www.cnitblog.com/shbwf/aggbug/89157.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/shbwf/" target="_blank">51testing</a> 2014-01-02 14:25 <a href="http://www.cnitblog.com/shbwf/articles/89157.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>测试应该在产品开发的哪个阶段进入？</title><link>http://www.cnitblog.com/shbwf/articles/89140.html</link><dc:creator>51testing</dc:creator><author>51testing</author><pubDate>Fri, 27 Dec 2013 07:48:00 GMT</pubDate><guid>http://www.cnitblog.com/shbwf/articles/89140.html</guid><wfw:comment>http://www.cnitblog.com/shbwf/comments/89140.html</wfw:comment><comments>http://www.cnitblog.com/shbwf/articles/89140.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/shbwf/comments/commentRss/89140.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/shbwf/services/trackbacks/89140.html</trackback:ping><description><![CDATA[<p>测试应该在产品开发的哪个阶段进入？</p>
<p>官方标准应该是：<br />　　在产品的需求探索阶段，测试就需要进入，提出测试对产品的一些可测试性需求，比如在产品中增加调试命令，增加模拟告警信息等。同时，对产品的需求，从测试本职业务的角度进行分析、设计。<br />　　实际上，不同的产品、项目，团队的成熟度，可能测试进入的时间并不一定。<br />　　比如测试团队是新成立的团队，本身没有足够的能力去对产品进行出谋划策，那么还不如老老实实的等产品设计完成后，请开发人员或项目经理培训一下，然后先从功能黑盒测试开始入手。<br />　　比如产品是老产品，是V4.0升级到V4.1，产品线经年累月就是不停的迭代开发一个主产品，那么在少量的增量开发的前提下，在需求阶段过多的介入，反而是投入产出不成正比，还不如少量的投入，抽出精力把测试用例进行优化、开发测试工具、提炼场景式测试方法等等。<br />　　国内的测试还不太正规，所以结合实际情况，做到比较适合、符合本公司的实际业务情况和成熟度即可。</p>
<p>ipadmini、惠普平板电脑、京东购物卡...一大波好礼正在接近！参与51Testing圣诞节新年活动 ~2014马上有礼！</p>
<p>活动一：【&#8220;购房通&#8221;圣诞新年找茬活动】找茬，找房，找BUG，找出你的ipadmini~&nbsp; bbs.51testing.com/thread-999309-1-1.html<br />活动二：【圣诞&amp;新年猜猜猜】猜中有礼，百元京东购物卡，圣诞只为等你猜！bbs.51testing.com/thread-999324-1-1.html<br /></p><img src ="http://www.cnitblog.com/shbwf/aggbug/89140.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/shbwf/" target="_blank">51testing</a> 2013-12-27 15:48 <a href="http://www.cnitblog.com/shbwf/articles/89140.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>SQL</title><link>http://www.cnitblog.com/shbwf/articles/89134.html</link><dc:creator>51testing</dc:creator><author>51testing</author><pubDate>Thu, 26 Dec 2013 07:49:00 GMT</pubDate><guid>http://www.cnitblog.com/shbwf/articles/89134.html</guid><wfw:comment>http://www.cnitblog.com/shbwf/comments/89134.html</wfw:comment><comments>http://www.cnitblog.com/shbwf/articles/89134.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/shbwf/comments/commentRss/89134.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/shbwf/services/trackbacks/89134.html</trackback:ping><description><![CDATA[<p>　之前总结过sql注入的一些特征。这里总结一下数据库的内部特征。和安全选项。<br />　　MySQL<br />　　权限划分<br />　　mysql用户的权限，大体来说比较简单，分别存储于这几个表中<br />mysql.User，mysql.db，mysql.Host，mysql.table_priv，mysql.column_priv </p>
<p>　　因为存取频繁，所以这几个表的数据存在内存中，更新数据后使用，语句来进行内存更新<br />　　当然执行这个命令需要reload权限<br />FLUSH PRIVILEGES </p>
<p>　　用户登录时需检查，mysql.user中的user host pass 三个字段，如果允许任何主机外部链接可以吧host设置成%<br />　　用户登录通过后，mysql会自上而下的检查用户权限，首先在mysql.user中读取对应用户的权限。</p>
<p><br />51Testing软件测试论坛圣诞活动火热进行中 ipad 大奖等你拿&nbsp; 详情请上51testing软件测试网论坛</p><img src ="http://www.cnitblog.com/shbwf/aggbug/89134.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/shbwf/" target="_blank">51testing</a> 2013-12-26 15:49 <a href="http://www.cnitblog.com/shbwf/articles/89134.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>网络异常测试初探</title><link>http://www.cnitblog.com/shbwf/articles/89120.html</link><dc:creator>51testing</dc:creator><author>51testing</author><pubDate>Tue, 24 Dec 2013 09:07:00 GMT</pubDate><guid>http://www.cnitblog.com/shbwf/articles/89120.html</guid><wfw:comment>http://www.cnitblog.com/shbwf/comments/89120.html</wfw:comment><comments>http://www.cnitblog.com/shbwf/articles/89120.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/shbwf/comments/commentRss/89120.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/shbwf/services/trackbacks/89120.html</trackback:ping><description><![CDATA[<a href="http://www.cnitblog.com/">
<p>&nbsp;</p>
<p>开发或者测试互联网产品的过程中，同学们一定遇到过connection timed out和socket read timed out两种和网络相关的异常。今天我们并不分析引起这些异常的原因，也不谈发生异常以后的解决办法，我们来说说如何制造这类异常，从而模拟对应的异常场景。<br />　　了解tcp协议就知道connection即建立连接的过程，其实和socket read即传输数据的过程并没有太大的差别，两者都是请求应答模式，而只是前者的请求数据量很小而已。要使两者超时，我们可以采用相同的方法即限制网络传输的带宽来达到目的。<br />　　Tc即traffic control就是这样一款能够限制网络流量的工具。Tc中主要的概念包括类class和过滤器filter。<br />　　我们可以用class把网络设备的带宽划分成不同的区间<br />　　tc class add dev $DEV parent 1: classid 1:11 htb rate 90mbps ceil 100mbps<br />　　tc class add dev $DEV parent 1: classid 1:12 htb rate 90bps ceil 100bps<br />　　如上，11这个class对应的带宽为90到100mbps，12这个class对应的带宽只有90到100bps。划分好了class，我们就可以用filter把符合特定条件的数据包归入不同的class中<br />　　tc filter add dev $DEV protocol ip parent 1:0 prio 1 u32 match ip sport $PORT 0xffff match ip dst $IP flowid 1:12<br />　　如上就把源端口是$PORT，目的地址是$IP的数据包归入12这个class中了，这样就把符合该条件的数据流量限制到了90到100bps。在正在运行的系统中开启上述tc限制，即把特定数据流限制到一个极小值，我们就能模拟出connection timed out异常了。关于tc更详细的教程可以参考1、2。<br />　　那么socket read timed out异常又该如何模拟呢，我们怎么才能区分建立连接和数据传输这两个过程，tc工具还能满足我们的需求吗？在寻找问题答案的过程中，另一个linux内核组件iptables进入了我们的视野。<br />　　Iptables是linux系统中常用的防火墙组件，功能十分强大，网上有十分丰富的资料。由于其能够识别数据包中的syn、ack等标志位，故能把建立连接和后续的数据传输过程区分开来。<br />　　iptables -A INPUT -p tcp --src $IP --dport $PORT ! --syn -j DROP<br />　　如上，在目的机器上加入该条iptables规则，可以实现将未设置syn标志位的数据包丢弃的功能，这样连接能够建立完成但后续的数据传输将无响应。<br />　　另外，Iptables具有一种连接跟踪机制，即能够记录连接的状态。这些状态分别是NEW、ESTABLISHED、RELATED和INVALID。我们可以利用该特性实现相同的效果。<br />　　iptables -A INPUT -p tcp -m state --state ESTABLISHED -s $IP --dport $PORT -j DROP<br />　　如上，在目的机器上加入该条iptables规则，当匹配了ip和端口，并且数据包所对应的连接状态是ESTABLISHED时将其丢弃。<br />　　至此read timed out异常也能轻松模拟了。Tc和Iptables是linux网络模块中强有力的工具，除了能够利用它们开发功能，也能够在网络异常测试中发挥关键的作用。</p>
<p>51Testing软件测试论坛圣诞活动期待您的参与~ipadmini 惠普平板 京东购物卡等你来抢！</p>
<p>&nbsp;</p></a><img src ="http://www.cnitblog.com/shbwf/aggbug/89120.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/shbwf/" target="_blank">51testing</a> 2013-12-24 17:07 <a href="http://www.cnitblog.com/shbwf/articles/89120.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>接口测试数据管理</title><link>http://www.cnitblog.com/shbwf/articles/89066.html</link><dc:creator>51testing</dc:creator><author>51testing</author><pubDate>Thu, 19 Dec 2013 07:52:00 GMT</pubDate><guid>http://www.cnitblog.com/shbwf/articles/89066.html</guid><wfw:comment>http://www.cnitblog.com/shbwf/comments/89066.html</wfw:comment><comments>http://www.cnitblog.com/shbwf/articles/89066.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/shbwf/comments/commentRss/89066.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/shbwf/services/trackbacks/89066.html</trackback:ping><description><![CDATA[<p>接口测试数据准备方案<br />　　[数据准备部分主要是单元测试的测试数据准备策略方案。]<br />　　1&nbsp; 背景测试数据<br />　　测试背景数据是被测试系统运行依赖的业务数据，可能来自于其他外围系统，背景数据通常在被测试系统中作为输入数据，业务操作只是读取操作，并不做任何修改，业务处理完成后者部分可能保持位置不动也可能被备份到其他地方。<br />　　背景测试数据在测试前根据测试需求进行一次性准备，并在测试前对背景数据表进行备份作为数据基线。<br />　　背景测试数据修改时可能影响原有测试用例和测试数据，因此背景数据要与测试数据和测试用例建立版本对应关系。<br />　　2&nbsp; 系统业务测试数据<br />　　系统业务数据包括静态业务数据和动态业务数据，静态业务数据指业务操作中不会被修改的数据例如业务字典、业务规则等，动态业务数据是指在业务操作过程中会被生成或修改的数据，例如审批记录、审批单据等等<br />　　系统业务数据与测试用例紧密相关，测试用例依赖于系统业务数据。测试执行前测试用例脚本依据测试输入数据修改业务数据满足测试需求，测试业务执行完，测试脚本要读取动态业务数据验证结果正确性，在测试执行结束前通常要对修改和影响的数据进行回退。<br />　　业务数据于测试集合建立对应关系。<br />　　3&nbsp; 测试输入数据<br />　　测试输入数据提供给测试脚本使用的测试数据，测试输入数据应该包括：业务触发数据、期望结果数据和配置数据等。<br />　　测试输入数据与测试用例是一一对应的关系，在单元测试和接口测试中采用读取Excel或者读取Database方式。<br />　　对特殊的输入对象数据或文件数据等，在指定目录中进行保存。通过接口方式读取这类数据。<br />　　测试输入数据与测试脚本建立对应关系。 更多内容请关注51testing软件测试网</p><img src ="http://www.cnitblog.com/shbwf/aggbug/89066.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/shbwf/" target="_blank">51testing</a> 2013-12-19 15:52 <a href="http://www.cnitblog.com/shbwf/articles/89066.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>测试与杀虫剂困境</title><link>http://www.cnitblog.com/shbwf/articles/89060.html</link><dc:creator>51testing</dc:creator><author>51testing</author><pubDate>Wed, 18 Dec 2013 08:42:00 GMT</pubDate><guid>http://www.cnitblog.com/shbwf/articles/89060.html</guid><wfw:comment>http://www.cnitblog.com/shbwf/comments/89060.html</wfw:comment><comments>http://www.cnitblog.com/shbwf/articles/89060.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/shbwf/comments/commentRss/89060.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/shbwf/services/trackbacks/89060.html</trackback:ping><description><![CDATA[<p>读微软的软件测试之道，其中有一个有趣的小故事。讲得是主人公自己有个菜园，菜园里的植物面临着各种动物和昆虫的威胁，所以必须要找到某种防护措施来阻止包括野兔，害虫的侵扰，否则肯定会颗粒无收。主人经过分析，发现野兔对菜园的破坏其实并不大，最令人深恶痛绝的害虫是蛞蝓。<br />　　主人发现蛞蝓对啤酒很是偏爱，所以在菜园的土垛栅栏外通过啤酒陷阱能拦下这些害虫，另外还发现在栅栏外面撒盐也是击溃蛞蝓入侵的有效方法，木屑和蛋壳也是对付这些小贼的另一种途径。可是不管在菜园外围布下怎么样的天罗地网来捕捉和阻挡蛞蝓，一些漏网之徒还是会成功突破。<br />　　和菜园主人的蛞蝓阻击战十分类似，我们在实施一个以揭示潜在缺陷为目的的软件测试时，会采取各种手段和方法的搭配。富有经验的测试工程师会告诉你，没有任何一种单一的测试方法能够有效地揭示出所有种类的缺陷或对软件的能力做出完整的评估，这种困境被称为杀虫剂困境。杀虫剂困境这个术语来自Beizer的第一定律：&#8220;任何用以防止和发现缺陷的方法都会留下一些残余的，更为微妙的缺陷，而对于这些缺陷而言，前面的方法会统统失效。&#8221;本质上，没有任何一种单一的技术或者手段对于软件测试百试百灵。所以，增加测试方法的多样性，以及考虑从更多的视角审视软件，我们就更有可能发现更多潜在问题的同时，提高测试工作的有效性。<br />　　园艺工作确实很费神，也会遭遇到一些特别的挑战。但是刚看到家人品尝到美美的果实，你会觉得一切都是值得的。同样，软件测试工作是辛劳的，并且面临着很多特有的困难，但经过由一系列手段达成了其当的结果时，对于整个产品组的回报也是令人鼓舞的。更多内容请关注51testing软件测试网...</p><img src ="http://www.cnitblog.com/shbwf/aggbug/89060.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/shbwf/" target="_blank">51testing</a> 2013-12-18 16:42 <a href="http://www.cnitblog.com/shbwf/articles/89060.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>