发布新日志

  • windows2003终端服务器连接数超出

    2013-03-28 13:40:52

    windows2003终端服务器超出了最大允许连接数

    windows2003默认允许同时连接数是2个,而且不能更改,在这个时候如果提示终端服务器超出了最大允许连接数并且连接不上时可以尝试以下方法。

    方法一:

    老的远程桌面使用mstsc /console /v:192.168.0.1 强行登陆

    更新后的新版远程桌面使用mstsc /admin /v:192.168.0.1 强行登陆

    方法二:

    mstsc连接不上时但2003默认的tsmmc.msc管理工具可以连接上。

    1、找到一台能连上网络的windows2003的机器

    2、开始–运行–输入“tsmmc.msc”,跳出一个远程桌面控制台

    3、右键点击左边的“远程桌面”,选择“新建远程桌面”,按照要求填写要连接的虚拟主机的ip、用户名、密码、域名,然后点击“确定”

    4、点击新建好的远程桌面,就可以登陆到远程虚拟主机了

    登陆以后就需要对服务器的终端服务进行设置了,以免日后再出现类似情况。

    一、限制断开会话存在时间

      一般情况下,我们在维护远程服务器时,不可能长时间在线,但是系统默认的却是只要登录就不再断开。因此,我们可以修改这一默认设置,给他指定一个自动断开的时间即可。

      在远程服务器上打开“运行”窗口,输入“tscc.msc”连接设置窗口。然后双击“连接”项右侧的“RDP-Tcp”,切换到“会话”标签,选中“替代用户设置”选项,再给“结束已断开的会话”设置一个合适的时间即可。

    二、增加连接数量

      默认情况下允许远程终端连接的数量是2个用户,这也太少了一些,我们可以根据需要适当增加远程连接同时在线的用户。

      打开“运行”窗口,输入“gpedit.msc”打开组策略编辑器窗口,依次选择“计算机配置”-“管理模板”-“Windows组件”-“终端服务”,再双击右侧的“限制连接数量”,将其TS允许的最大连接数设置大一些就可以了。

      经过上面两个配置,基本上就可以保证远程终端连接时不再受限。但有一些用户反映,当前同时只有一个用户进行连接,却提示超出最大允许链接数,这又是什么原因呢?出现这种情况也是因为操作不当所造成的。在上一个账户登录过错程桌面后退出时,没有采用注销的方式,而是直接关闭远程桌面窗口,那么导致该会话并没有被释放,而是继续保留在服务器端,占用了连接数,这样就会影响下一个用户的正常登录了

  • 职业人生规划与感悟

    2012-10-24 20:45:58

    序言
    
    在担任公司高管的几年间,我面试过数以百计的各个层面的员工,其中最让我感到遗憾的一个现象就是很多人有着非常好的素质,甚至有的还是名校的毕业生,因为不懂得去规划自己的职业,在工作多年后,依然拿着微薄的薪水,为了一份好一点的工作而奔波。很多这样的人,他们只要稍微修正一下自己的职业方向,就能够在职业发展上走得更从容。

    有一次一个大连理工大学的研究生,好像是学电子的,来应聘我们的公关企划部部长。那小伙长得不错,将近一米八的身高,很阳光,个人素质也很好。他研究生毕业后去了一家稍微有点规模的IT企业,因为他对于软件的了解很不够,就没有做技术,而是从事管理,后来做到了总经理助理,主管行政和企划。工作5年后的薪水也就是5000多点,他在公司的发展也受到了一定的局限。我在面试的过程中了解到,他之所以应聘我们的公关企划部部长,只是因为我们这个职位给的薪水还可以,而不是因为他喜欢这样的工作。后来我帮助他分析,依照他的素质和职业兴趣,如果选择得当,几年后应该有着很好的发展。但是我们公关企划部部长的职位并不适合他,如果我们聘用了他,不但耽误企业的发展,而且也会耽误他本人的发展。我帮助他分析以后他恍然大悟,对我十分的感谢。后来他经过认真的思考及时修正了自己的职业道路,目前取得了不错的发展。所以有时候没有应聘上反而是面试的成功。在今天的市场环境中,类似的例子还有很多,这样的人大多都有一个共性,那就是最初的时候不知道自己应该在哪个领域开始自己的职业生涯,几年过去了,稀里糊涂的换了几家公司,回过头来才发现,只是积累了不同行业、不同职能方向不成功地丰富经验。而且据我观察越是聪明的人越容易产生这样的问题。因为似乎什么工作都难不倒聪明人,他们就有机会尝试不同的工作,结果却都是“蜻蜓点水”。一段时间以后突然发现,多种多样的工作经验并没有给自己带来沉甸甸的收获,反而造成了自己缺乏专长、缺乏核心竞争力的局面。最最关键的就是他们永远都难以结束低薪长跑,白白浪费了上天赋予他们的才智。

    当然,和此相对应的是另外的例子。有的人起点并不高,既非名校也不是什么好得不得了的专业,甚至这里边还有大专和中专毕业的人,但是因为他们的正确的职业发展之路,几年之后他们在职场上的价值超过了很多当初起点比他们高的人。我们公司现在的财务总监就是专科毕业的。但在十多年的财务生涯中,从出纳、会计、主管会计到财务经理,他一步一个脚印走得很踏实。不少和他同龄的本科生、研究生也还没有取得这样的成绩。我也认识不少拿着高薪的人士,他们中不乏低学历的人才,只是因为在一个领域里辛勤耕耘而成为这个领域的专精之士,从而能够获得和他们价值相匹配的薪酬。

    各种有趣的职场现象还有很多。

    有的人进了国有企业,进了政府机关,没有得到太大发展,一直非常矛盾,想离开又不愿失去既得利益,转换成本越来越大,勉强得来一官半职,也很是没意思。始终处在矛盾当中,年轻人的激情在无聊的事务中慢慢消磨。

    也有的人盲目的相信考证和考研,希望借助证书增加自己在职场的砝码;有人成功了,为数不少的人却越读越穷,所获得的薪酬远远达不到自己的期望。如果把考证和考研比作投资的话,至少是投资收益率不高。我就亲自面试过不少MBA,至少我是觉得他们没有获得和他们的投资相匹配的回报。
    我们身边总有这种从一工作就抱怨不断却委曲求全的人存在,他们或者从一开始就没有为自己的职业做过规划,要么只进行过短期的职业指导,等有了一份自己可以接受的工作之后就“适可而止”,任由无聊和无奈一天天侵蚀自己日渐衰老的心。

    根据我个人的经验和观察。有太多的人不了解如何去规划自己的职业生涯,包括不少读过职业生涯方面的书的人。接触到不少刚刚毕业的大学生,他们对这样的问题更是全然没有概念,甚至我看到有的人30岁了还在为自己的职业发展感到迷茫,而且看趋势还要继续迷茫下去。究其原因关键是功力太浅,仅仅囿于职业来考虑职业,没有能够从更高的高度上来考虑这样的问题;而目前所谓的职业生涯之南的书也大都为学者所作,理论性有余,实践性不足,用以促进思考或许还有点帮助,用来指导实践则全无所获。正是基于这样的原因,近来我一直考虑怎么样将自己对于职业生涯的经验和观点能够系统的表达出来,以期能够对这方面的问题感到困惑的朋友有所帮助。
    
    事实上,只要我们拥有了一定的理念和技巧,我们完全可以使我们的职业生涯不断增值,达到我们所期望的境界。今天我就就和大家探讨一下职业规划相关的理念。




    首先想表达的第一个观点就是选择比努力更重要。其实一生来讲失败的人和成功的人努力差不多,我甚至发现很多在职业发展上并不顺利的人非常努力,反而一些人顺风顺水,仿佛很轻易的就得到了别人眼中的成功。成功的人努力几年就很轻松了,顶多智力上开发的多一些;而失败的人也很努力,因为一旦他不努力就没有饭吃。
    
    一个人一生当中最大的幸福在于选择对两件事, 一是找对单位、找对老板、找对上司;第二件事就是找对妻子或丈夫。 为什么这么说呢?当太阳升起时我们与上司共 事,当日落西下时我们与自己的爱人相拥。
    
    正确的选择是如此重要,然而你会发现现实生活当中很多的人面临选择的时候竟然会非常草率。一个人花在影响自己未来命运的工作选择上的精力,竟比花在购买衣服上的心思要少的多,这是一件多么奇怪的事情,尤其是当他的未来幸福和富足全部依赖于这份工作时。 几乎没有人会认为自己是错误的——没有人会故意做出一个不利于自己的决定。他们之所以选错,往往是由于不懂得如何选择。很多人认为自己无法了解自己到底适合做什么工作,只好换来换去,希望能在过程中找到自己的兴趣所在,但许多年过去了,仍然很迷惑。所以我们要认真选择,否则你根本不知道这个世界上那片土地适合你生长,什么样的环境适合你发展。和企业发展是一个道理,方向比速度更重要,在没有选择对明确地方向以前,单纯的谈速度是没有太大意义的,甚至有时等待优于行动。没有明确选择的行动就是我们平时所说的瞎折腾,瞎折腾的结果就是无序导致无效.
    
    在这个世界上,通向成功的道路何止千万条,但你要记住:所有的道路,不是别人给的,而是你自己选择的结果。你有什么样的选择,也就有了什么样的人生。你有什么样的职业选择,你就拥有什么样的职业生涯。你今天的现状是你几年前选择的结果,你今天的选择决定你几年后的职业状况.成功与失败者的区别在于,成功者选择了正确的方向,而失败者选择了错误,因此我们经常能够看到一些基础相差无几的人由于选择了不同的方向,职业生涯迥然不同。问题是人们在做出选择时,几乎没有人认为自己是错误的,因为没有人会故意作出一个错误的不利于自己将来发展的职业选择,他们之所以做出了错误的选择,是因为没有能力作出正确的答案,就如同我们在考场上遇到自己不会做的选择题,只能根据自己的判断去选择,就如同我们的父母,他们就认为我们做某一份工作会对我们有利,全然不知道那会把我们推向职业的陷阱。
    
    晋惠帝司马衷当皇帝的时候,有一年闹大饥荒,官员向他汇报百姓无粮可吃,饿死了很多人。这个历史上有名的白痴皇帝很惊讶的问道:“他们为什么不吃肉呢。” 我们或者所谓得职业生涯规划专家很容易对于别人的职业选择开出药方,如果不喜欢自己当前所作的工作,那就去做自己喜欢做的事情吧。话很容易,但对于职业发展感到迷茫的人来说,就如同上面的笑话一样,这种美好的愿望在现实中很难轻易实现。
    
     职场生涯是很现实的,这也是为什么那么多的生涯规划理论对我们没有实质性的意义,我个人的意见是一定要立足于现实积极思考,并且充分利用机会,一步一步的改善自己的职业状况。正如我开始所言,职业生涯扬帆与选择。在职业生涯发展的过程中,选择是一个连续的过程,你很难一下子就作出完全正确的选择,但要学会选择正确的方向。在生涯之初或者遭遇职业困境的时候,你的个人选择余地非常的狭小,并不能完全自主地做出决定,但是有志者自有千方百计,无志者只感千难万难,无论如何,你总是会有一定的选择余地,如何把握有效的选择权,使你的职业路径逐渐导向一个正确的方向是非常重要的,只有这样,在职业发展的长征路上,你的路才会越走越宽,你在职场的选在余地也才会越来越大并最终达到真正的职业自由。
    
    那么究竟如何来做职业选择?职业选择的依据是什么?选择要考虑的要点又有哪些呢?

    根据我个人的经验,选择的最深层次的依据是你的价值观,选择的表面依据是你的职业目标,当然对于没有目标的人选择的依据就是他个人所理解的利益。主动选择要考虑的要点主要包括地域、行业、企业和职业。或者说一个非常清晰的职业目标应该描述为多少年后我希望在某地(北京/上海/纽约/老家的县城)某个行业(房地产/物流/教育培训等等)某个企业(500强/民企/国企/政府等等)的一个从事某职业(人力资源/财务/金融/管理等等高/中/低层)的人士。这几个要点我会在后面做详细地论述,我个人觉得也是最有实际参考作用的部分。
    
    从实际的例子来看,我们的人生价值观决定了我们的生活态度,从而决定了我们的职业取向并导致了我们做出各种的职业选择,这种职业选择决定了我们的职业状况从而也决定了我们的生活方式,这种生活方式又最后决定了我们的人生幸福感。
    
    价值观的这个环节是我们大多数人很容易忽略的,虽然它在事实上左右着我们的决定并进而决定我们的人生包括职业。一个人之要想成为职场的顶尖人物,他就必须清楚知道自己的价值观,同时确实按照这个价值观过其人生。我所见到的在职业上有着良好发展的人士都是因为他们秉持他们的价值观念,而一些不太顺利的人士大多思想混乱,要么是秉持错误的价值观念,要么是根本没有,随着社会大众的舆论摇摆不定。
    
    从企业选人的角度也能够很好地揭示价值观的重要性。为什么麦肯锡的咨询顾问很多并不是出身于管理专业?为什么一些学业上并不突出的同学能够在竞争激烈的应聘中胜过那些学习成绩突出的人?为什么外企在招聘trainee的面试中总是会有“你最大的成就是什么”、“你最大的优缺点是什么”等等看似非常普通的问题?其实我觉得都和价值观有非常密切的关系。因为一个人在职业上的价值观念和他能取得的成就是息息相关的,与此相比,一时的学习成绩反倒成了末节。
    从价值观的角度来说,职业发展成功还是失败的判别标准就是你是否得到了你想要的生活,你的职业所带来的生活方式是否符合你的价值观。如果符合,你就会感觉很快乐,哪怕收入会相对低一些;如果不符合,你会感觉很疼苦,哪怕你拿着看起来很高的年薪。我刚刚工作的时候,遇到哪些拿高薪的人,总是很羡慕;到了今天心态就比较平和,遇到比自己薪水高的人能够理解甚至有时候有些高薪的朋友还让人觉得同情,因为为了高薪他们也失去了很多,比如天伦之乐和某种程度的身体健康,但他们得到了成就感。所以,我一向主张在职业发展上我们没有必要去羡慕别人,因为当你得到的时候你就失去了,反之亦然。你可能得到的是高薪,但失去的是时间;你可能不能成为一个好领导,但会成为一个好儿子。关键是你得到的正好是你想要的,而你失去的你并不介意,真正的职业追求是圆满和平衡。
    
    职业发展不能用挣钱的多少来判断,那不应该成为我们职业上的目标。我看到的真正成功的职业人士,即使在他们职业生涯的早期,也没有单纯的考虑金钱而是更多的追求自己的梦想,按照自己的价值观去发展,应该说,这样的人反而会成功,金钱是职业发展所带来的副产品。当你按照自己的梦想去追求而后成功,所有美好的东西都会朝你拥来,包括金钱。
    
    接下来想谈一下选择的要点。来点实际的。

    第一个选择是要考虑地域。这也是不少人容易忽略的。我的高中同学的案例最能说明地域对一个人职业发展的重要性。我们高中同学大都来自于农村,也有部分是县城的,我们当地的教育不是很发达。同班的50个同学,包括后来复读的在内,后来考上大学包括本科、专科和中专的在内,也就是在30人左右。从我大学毕业到现在10年的时间,应该说大家的职业发展基本上定型。大学毕业后,大部分同学选择了比较发达的城市,但也有部分同学回到了并不发达的老家。尤其是家在县城的同学,因为当时大都专科或中专,基本上都回去了。但其中有两个本科毕业的农村同学也选择了回去。去年春节回家同学聚会,这两个同学都很后悔,因为他们所谓的学历和能力在落后的县城并没有用武之地,失去了竞争优势,稍微好点的企业加起来不超过5家,想跳槽都没有地方去,想再去一线城市吧,早已失去了当初的锋芒,更何况已经娶妻生子;反倒是家在县城的同学,因为家庭有良好的人际网络大都发展得不错。我说这话的意思并不是反对大家回去建设家乡,而是说一定要考虑长远发展,因为你改变不了落后的思维,更何况工作之初你本身就不成熟。如果你却由此意,我到建议你可以先在比较发达的地方学习,将来成为真正的职业人士在返回家乡或者到家乡去投资,都是一个很好的方式。
    
    地域甚至会成为限制一个人发展的瓶颈。如果你分到县城,如果从政的话,基本上你就当到县委书记,至多当到地区专员,还要运气非常的好;如果你分到各大部委,运气不算太差的话也能混个处长,稍微好点就能干个司长,不小心就当了部长。当然,我这里有说笑的味道,但从概率上来讲,大致如此。
    
    企业设立时选择和自己配套的区域。咨询公司基本上分布在北京、上海、广州和深圳,这四个地方恐怕占了全国咨询公司的80%,其他地方也有,但大都规模不大。济南和大连、青岛等地也有咨询公司,但日子整体上就不如上述四个地方的滋润。工厂选择时也要考虑配套,所以长三角和珠三角的工厂就星罗棋布。人才要发展也要考虑配套。你去比较适合自己的区域,就能够得到好的配套,比如比较好的平台、比较好的培训、更宽广的视野等等;否则缺了某个环节,比如得不到培训、事业狭窄等等你就很难得到发展。
    
    单纯的说要去大地方发展或应该固守一隅都是不对的。因为更换地域而获得发展或发展受阻的例子都很常见,我只是告诉你这是个值得考虑的因素。在职业流动越来越普遍的今天,一生中在几个城市工作也很正常。我个人的建议是在职业发展的初期要尽可能在比较发达的地方工作,等你已经在职业发展上达到相当的程度再考虑生活上更能接受的城市;我也不建议职业发展过程中频繁的更换城市,因为你在某个城市积累的资源随着地域的变动而大大贬值,会无形中使你的很多成本上升。
    
    有的人认为大城市竞争过于激烈,生活成本太高而没有勇气去面对挑战;其实完全没有必要。因为从另一方面来说,大城市的机会更多,而且激烈的竞争更能够激发个人潜能,更容易达到更高的职业高度。在二三线城市有个二三十万的年薪就很难再有上升的空间,但在北京、上海这样的薪水算不上什么。我原来公司的行政秘书素质很好,是学建筑的,身高178,很有气质,钢琴九级,因为工作的原因从大连调到上海,后来跳槽到斯坦威,是一家销售奢侈钢琴的公司,有了更为光明的职业前景,但在大连她永远没有这样的机会。
    
    大多数人毕业时理所当然的留在自己读书的城市,或者回老家等等,其实有必要深思哪些地方更适合自己发展。即使在职业中期的朋友也可以考虑通过地域的转换让自己的职业生涯跃上一个新的平台。

    第二个选择是要考虑行业。也有不少的朋友在这个问题上犯错误。有的人工作了7,8年都难说自己停留在哪个行业,其实行业和个人发展息息相关。如果你选择了金融,那就意味着几个人操纵上亿的资金;二三十个人操纵上千万上亿的资金,那是房地产行业;几百人拼死拼活的再干,只有百万数量级的利润,那是生产行业。选择什么样的行业,就有了什么样的发展空间。
    
    在行业选择上最容易犯的错误就是没有行业。这是职业发展的大忌,也是最让人感到惋惜的,但是这点确实是比较容易避免的,关键是是要有行业的意识。有的人聊起来我干过多少多少行业,以为这是一个非常值得自豪的事情,其实对自己的职业发展并没有多少好处。我面试中遇到不少的人,在不同的行业作过,但是对哪个行业都没有深入地了解。我们前段时间招聘一个地产的副总裁收到了不少的简历,30-35岁这个年龄段,只有很少的人在这个行业拥有超过6年以上的行业经验,仅从这一点就能够淘汰很多的人。我在后面会讲到职业的选择,职业的选择也一定要结合行业才能有更大的发展。即使就财务而言,房地产的财务和物流行业、贸易行业的财务也会有相当大的差异。
    
    刚刚工作的人有时也很难马上发现最适合自己的行业,但你可以去尝试,但我建议你的目标是要成为这个行业的专家,无论你是从事技术还是管理。没有相当年的行业经验,你很难说了解了一个行业,比如对于行业的惯例、发展趋势得了解、行业的价值链条、各个层面的细节、人脉关系的积累等等都需要相当时间的积累。失去了行业背景,你的价值就会大打折扣。
    
    要尽可能的在一个行业深入的做下去,尽可能的不要轻易改行,因为这会让你损失掉很多的积累,但行业不是不可以改,如果一定要改行的话我的一个建议就是行业发展要有一定的内在的连续性。所谓内在连续性就是你以前积累的资源如经验、技能、人脉等等能够不断地得到延续和强化,有一条清晰的连续的轨迹,而不是天马行空的跳跃式发展。比如一直在一个行业作,或者沿着行业的价值链条在不同的企业工作,原来作建筑施工的到房地产公司做了工程管理,原来在国际物流企业去做贸易,原来做教师的改做培训师,原来做建筑的改到房地产,等等基本上都是比较可行的转换。
    
    内在连续性的道理其实很简单,就是保持你的职业资源的不断升值增值,而不是把精力浪费在不同的行业,这个道理也适用于我在后面谈的职业的选择。其实职业发展的很多道理和作企业管理是相通的,比如管理中的SWOT分析、销售中的4P、战略制定的步骤等等很多的管理工具都可以拿过来指导我们的职业发展。我一向反对企业作不相关多元化,企业应该聚焦在自己最擅长的领域。同样我们个人也是如此。有的聪明人拥有的能量是10,分散在多个领域,每个领域都不超过5,而我们大家认为得并不聪明的朋友,或许能量只有8,但聚焦在一个领域反而会有好的发展。我有一位大学同学六年干过十个行业,基本一无所 成,只积累了每个行业不成功的丰富经验。在高科技高速发展的现代社会,往往一个专业足够一个人奋斗一生,在这种分工很细的空间里我们自己的特长在哪里?我们立志在哪个行业干一辈子?你对行业的透彻见解和有所作为令人敬佩和追崇,那你的收入和你的生活才能跟一般人不一样。
    
    我刚开始工作的时候,大家都喜欢往热门的行业里去,其实现在也存在这个情况。但是冷和热要辩证地去看,每个行业都有其发展的周期。如果是特别热,也就意味着到了波峰了,说不定就要开始衰退了,而冷门意味着衰退到底了,彻底没有希望了,或者处于低谷,开始积蓄力量,要上升了。任何行业本身也会经历高潮与低潮。行业判断要看大的趋势即可,如同投资股票,中间自然会有震荡调整,但真正投资成功的都是坚定的价值投资者,在行业的选择上我们也要做坚定的价值投资者。一个行业,只要大的趋势有前景而我们又喜欢,就应该坚定的在这个行业耕耘。互联网出现的时间这么短就已经经历了2-3个来回,今天成功的绝大多数都是在低潮的时候依然在坚持的企业和个人,那些因为低潮而震荡出局的人固然很难在这个新兴的行业里挖不到金恐怕也很难在其他的行业里成功,原因无它,就是频繁的转换行业而影响了积累。尽管中国的股市已经进入了牛市,但身边那些频繁操作的朋友挣到大钱的不多,反而是那些坚持投资原则不轻易跟风的人在获得越来越大的收益。

    但是很多的人并没有给与足够的重视。有一个很出名的笑话,说一个喝得醉熏熏的人在路灯下拼命地找着什么东西。一个过路人恰巧经过,问他在找什么。那个醉鬼说在找钥匙。过路人就帮助他一起找。可是什么都没有找到。过路人问道:“我什么都找不到。您大概是在哪儿丢的钥匙?”醉鬼指向了街道旁边的黑暗处。过路人吃了一惊:“天哪,那您为什么不到那边去找?”醉鬼愤怒得看着他说道:“为什么?因为这里比那边亮。”其实很多的人在接受第一份工作的时候往往就是这样,比如企业就是位于他读大学的地方或者是这家公司有父母的朋友等等。这样解决职业的问题很方便,却往往将打开自己未来职业发展的钥匙给遗忘掉了。我最初工作的时候就没有任何的考虑。大多数人在开始跳槽后会开始重视企业和自己职业发展的问题。
    
    美国人一辈子在不同的企业作相同的职业,日本人一辈子在相同的企业作不同的职业,唯有中国人不同,没有改革开放的时候,和日本人差不多,一辈子在相同的企业作不同的职业,改革开放了,人才流动了,不少人却又有点矫枉过正,变成了在不同的企业作不同的职业。当然随着大家职业意识的提高,这种状况会有所好转。
    
    不同的选择导致不同的生活方式,选择企业更是如此。粗略来说,国内的企业大致可以分为外企、国企和民企,政府部门可以归到国企中去,我个人没有到政府部门发展的想法,但从和政府打交道的过程中,也发现了一些素质不错的人,只是要适应他们的工作习惯太难了,但我个人认为,如果把去政府也作为一个职业的话,这也是一个不错的选择。首选当然是各大部委,比去什么外企都要好,因为占有的资源多,其次是省、市,再下面的就没有什么意思了。企业里面有很多的隐形冠军,就是企业知名度不高,但是获利能力很好,又很好的行业地位,各大部委包括中央的一些企业有不少这样的隐形冠军,名气虽然没有500强大,但那待遇让500强的所谓白领都要羡慕,但他们不属于你我穷孩子做职业规划要考虑的范畴,基本可以排除,但是如果你万一遇到这样的机会,可别千万错过。
    
    稍微有点跑题,接着刚才的话题来谈,其实外企、国企和民企他们各有各的风格,关键是什么样的企业适合不同阶段的你。有的人在国企作的很不好,到了外企反而成了一条龙;别看你在外企很牛,给你个民营企业你却不一定能玩得转。我在上海招聘我们下属工厂的销售总监的时候有比较深的体会。当时销售总监有在500强外企的工作经历,业绩也还不错,整体素质也很好,但到了民营企业就不知道怎么干了。他在外企的时候,有大把的钱花,预算批准了就可以去干,相对比较规范,下属人员的素质也都比较高;但我们上海工厂刚开业的时候比较节省,要用一分钱办两分钱的事,下属人员的素质和知名外企比也要差一些,有的流程也不是很清晰,总之需要他自己去完善的东西比较多。我就发现他很长时间不适应。外企的财务总监到了民营企业也会面临很多新的课题,要想着怎么去避税甚至要逃税,要想着如何运用非常的手段去融资,这些课题以前他们可能都没有接触过。所以单纯的说外企的能力强我是不认同的,大家的强项在不同的地方,要互相去学习。
    
    我在这三种的企业都呆过,总的体会是外企讲能力,国企讲本事,民营企业既要讲能力,还要有本事。本事是中国人特有的词汇,也只有我们中国人才能明白其中的内涵。我们说政府部门或者国企某某人升迁了,我们的评价往往是这个人很有本事,所以我们遇到的国企领导大多都是比较有本事的人,但是能力怎样就不好说了。因此我的建议是有本事的朋友要去国企,有能力的朋友要去外企,两方面能兼顾的朋友要去民企呵呵。当然,这个事情不是绝对的,现在国企也讲能力,应该是国企本事的比例要大一些,外企对能力的要求要大一些,至于具体的比例,不同的企业不同。你要选择适合你自己的企业。
    
    就具体的福利待遇而言,也要看最终的结果。外企总体的福利很好,但也很难让你有意外的收入;民企总体福利不好,但一不小心公司蓬勃发展,你就成了小富翁。外企压力大一些,培训比较系统,进步比较快;国营企业压力小,可以兼顾很多家庭的事情。我觉得本身无所谓好坏,就像我前面谈到的价值观,关键看你想选择什么。
    
    但是扒开企业一个个看,却是各有各的特点。很难就简单得说外企就比国企或者民企好。要针对每个企业来做决定。同样是国企/民企/外企,也分三六九等。有的外企只是挂羊头卖狗肉而已,其管理和福利等甚至还不如一般的民企,即使是500强的下属公司,有时候待遇和发展空间也会有很大差异。我的一个同学就去了西门子的一家公司,待遇在外企里面也属于一般。刚毕业的同学最容易被这个光环迷惑,也有不少的企业用这个幌子来骗人。一旗在前面的帖子提到“好,继续期待,不过,在做选择的时候,有个问题是很难解决的,就是信息不对称,特别是对于某个企业的了解。”这是很有道理的。但是我们可以通过一定的手段来识别出来。
    
     大工的那个例子是这样的,企划部部长很难成为将来的总经理,而且及时刚开始的薪酬是不错的,但是后来薪酬提升的幅度很有限,就像我文章所言,我们企业的企划没有在主战场,如果将来换工作,这份工作很难为他加分。所以那个小伙后来回到了通讯行业去做销售去了,目前做的很不错,早已经远远超过了我们当初所给的薪酬,更重要的是他的职业具有非常强的可持续性。)
    
    就规模而言,企业还可以分为大企业和中小企业。在大公司,你可以直接学习其思维方式和管理理念,大公司的视野、经验和人脉积累是小公司所不能比拟的;而在小企业你可以和公司一起成长,你甚至会成为左右公司发展的中坚力量,杨元庆和联想一起成长就是最典型的例子,很多成长起来的创业型公司的员工都获得了很好的汇报,这甚至是大企业很难获得的。在大公司,你可能学到很多管理规则和方法,但是很多背后的东西要想领悟则很难,比如沃尔玛的物流系统很先进,大家都知道很厉害,知道为什么并能够将其复制到另一个企业的人很少;大企业给的培训体系比较完善,会给你最基本的职业训练,把你塑造成更职业化的人士;大企业的职责分工清晰,在团队合作过程中能够学到沟通与协调等组织运作能力。缺点是工作相对狭隘,螺丝钉的工作居多。在中小企业你往往是身兼数职,实战经验强,而且中小企业是绝对的业务导向,创业机会多,缺点是培训机会少,经营风险大,说不定哪天公司就关门大吉了。
    
    一般来说,大企业培养的人才大都是标准件,至少在大企业彼此之间是适配的,这是因为大企业的发展基本上是战略导向的,按照公司的战略稳步推进,各种制度比较规范,流程比较清晰,工作的内容比较标准。在这家干人力资源到了另一家同样规模的也马上就能上手,所以基本上没有失业的顾虑,只是如何发展的问题;中小的企业培养的人才以非标件居多,这是因为每家企业都有每家企业的特点,比如同样是做人力资源工作,可能有很大差异,人力资源工作本身的具体内容可能差别非常大,而且这家的人事还兼着行政,那家的人事还兼着法律。非标件再到其他企业契合的时候就稍微有一点麻烦,有时候不一定合适,有时候要多磨合一段时间。
    
    我个人的意见是刚开始不要进一些比较小的企业,尤其是刚刚毕业的同学,除非遇到特别好的老板,当然这种机率非常小。因为你那时的社会经验非常少,很难处理得好很多的关系,非常容易对社会和职业等等方面形成一些错误乃至极端的看法。你从小企业获得的东西太少了,看似学到了一些东西,实际上得不偿失,再去找工作的时候才发现已经处于竞争的劣势。我就遇到过几个在小企业作副总经理的人,个人能力还不错,但是稍微大一点的企业都不愿再给他们机会,因为他们已经长成了一颗歪脖子树,公司宁愿招一些完全没有经验的人来。当你在大公司完成基本的职业训练并且具有了某种专长,已经是学有所成,到了厚积薄发的阶段,就可以到一些成长性很好、迫切需要规范的中小企业去。既可以让自己的所学有一个发挥的平台,从实践的角度进一步提高自己的能力,又可以分享到中小企业快速成长所带来的收益。
    
    谈到这里,又要说题外话。不少人误把经验当作能力,误把学历、知识当作能力,都是不对的。有的人所谓的十年行业经验也只是对行业有点粗浅了解,有的人干了三年已经有了很深的见识。或者有的人让你感觉,虽然他的经验很不够,但他的那种思维方式很好,按照这个趋势发展下去肯定会有不错的发展。小时候老家有句骂人的话“你一把年纪都活到狗身上去了”指责某些人的见识没有随着年龄的增加而增长,话糙理不糙。所以我们人在企业,但不能局限于企业,要有更高的视角。董事会关注产业,总裁关注行业,总经理关注企业,员工关注职业,你要想成长为总裁或董事长,就要去关注他们应该关注的事情。
    
    职业发展中最悲哀的两个状况一是拼命的在贫瘠的土地上耕耘,二是总是在寻找机会却不知道自己就站在肥沃的土地上。在企业里工作这么多年,我的体会是让你100%满意的企业是不存在的。我遇到不少的人整天抱怨企业,福利不好,上司或老板太苛刻等等,这都不是一种职业的素质。如果你觉得企业不满意,我的建议是要么离开他,要么去适应或者改进,抱怨不解决任何问题。我刚刚工作的时候,我们一帮一块进公司的大学生聚会的必修课之一就是一起抱怨公司,每天晚上的卧谈会就是对公司的声讨大会。我后来发现这种状态太危险,很容易把自己给搞成老大姐。去年我又到原来的公司去了一趟,发现抱怨的那些人还在抱怨,而没有抱怨的那些人要么已经在公司有了不错的发展,要么已经重新开辟了自己的职业领域。我并不是说一点都不能抱怨,现在不公平的事情太多,还不让我们说几句发泄一下嘛,但我只主张有限度的抱怨。根据我的观察,其实抱怨很容易形成习惯,结果最后抱怨成了主旋律。尤其是几个喜欢抱怨的人走到了一起,你一言我一语,开完声讨大会,不解决任何问题,反而容易消磨人的意志,所有的抱怨之词都成了你安慰自己的借口。这不是一个积极心态的人的做法。我和不少的私营企业老板打交道,现在社会上太多不公平的现象,尤其是政府部门,太多需要我们抱怨的东西,但我发现他们很少抱怨,他们只是想着如何来利用目前的这种体制。我不是说他们一定是对的,我只是请你相信,机会往往来自于不合理。

    第四个选择是要考虑职业。
    
    我在这里先解释一下,所谓的职业就是你所从事的具体职能比如营销、财务、行政、管理或者业务。我遇到的大部分职业规划不理想的人是在这部分,而在具体职业上的选择出现误差带来的伤害也最为明显、最为严重。
    
    我先结合职业和企业来讲。
    
    我遇到过学管理的同学到很小的企业去做管理,我觉得这个选择欠妥当。不是说小企业不需要管理,而是目前中小企业的现状实际上不重视管理。中小企业是业务和机会导向,还没有发展到战略、管理导向。如果你是做业务的,去中小企业也不一定有什么不妥,因为所有的大企业都是从小企业走过来的,但是学管理的或者说将来希望做管理的,你必须到能够让你理解管理、应用管理的地方去。千万不要以为你是管理专业毕业的你就会管理,这里面的学问太深了。你去了以后,一切全凭自己摸索,真正规范的东西没有学到,积累了一大堆错误的观念和操作办法,真的是把自己给害了。
    
    人事行政部就是不少中小企业的产物。不否认有大的公司会设行政总裁,主管人事和行政,也不否认有的人事行政部经理发展得很好,但就我个人的职业经验而言,这个职位的发展空间小。尤其是行政。前段时间一个重点大学毕业的小女孩很高兴的告诉我她刚工作半年就被提升为办公室主任,后来我给她分析她才明白其中的道理。为什么呢?行政这个职位的发展空间太小,刚开始好像工资不低,但我很少见到在这个职位上拿高薪的,能突破20万年薪算是不错了。因为就绝大多数公司而言,它的进入门槛很低,经常遇到不知道干什么好地说,我来干行政吧,这个岗位提供的价值是基本上一定的,无论谁来做,也不可能做出花来,薪水上升到一定空间就后继乏力。很多有才情的小姑娘稀里糊涂在这个岗位呆了好几年,结果就成了软翅膀的蝴蝶,很难再飞起来了。这样的工作倒是很好找,但是哪怕你做了很多年的行政,薪酬也是在某个位置打晃,很难有突破。所以这个职位可以作为跳板,但不宜久留,那些能力强的,要迅速利用这个职位,成长为副总等等。
    
    其实,不光是行政,不少岗位都存在这样的情况。关于职业这里我的建议就是要尽可能的到企业的主战场耕耘。
    
    什么是主战场?举例来说,实际上就是那些最能够直接提供价值的部门,主要是业务部门,当然,对于一些大的企业而言,我认为财务、人力资源、战略规划部门等等也可以划入主战场的范畴。如果是在军队里面,那就是直接打仗的那一部分,当然也会包括信息和情报等支持部门,但是你如果进了炊事班,那你的职业空间就不是很大。有个笑话说炮兵连炊事班的战士“背黑锅、戴绿帽子”还要看别人打炮,简直是悲惨之极。也很少听说那个将军有多少年的炊事员生涯。所以,你要想当将军,不要去当炊事兵;你要想在职业上有上升空间,最好不要去企业的不是主战场的部门。但是大家可能会说,这些部门的存在对企业是确实必要的,我们都不去,那谁去?我的意见是让没有看到这个帖子的人去看呵呵。不过请大家放心,因为总归有些人喜欢平平淡淡,乐意去那样的部门。
    
    主战场的部门汇集了公司最多的资源,也会拥有公司最多的升迁机会。一般来说,公司的高层大都出身于主战场的部门,偶尔有那么一个负责次要部门的高管,在公司的实际地位都还不如一个主战场部门的负责人。关于这一点,在政府部门工作的人最有体会,主战场部门的处长比那些边缘部门的局长要牛的多,其实无他,就是因为拥有更多的资源,有更好的发展前景而已。当经济不景气或者公司裁员时,往往是从边缘部门开始比如行政、公关等等,而那些公司的核心部门反而是需要加强或者影响不大的部门。
    
    主战场的部门还有一个好处就是这样的部门员工的回报往往是随着公司业务的成长而成长,而且是非常的正相关;再者往往是同类型的公司都肯定要设的部门,往往决定公司的核心竞争力。所以不愁工作不好找。
    
    我们也许选择了一个非常有发展前途的行业,也加入了一个非常优秀的公司,但如果不能进入主战场,在一些无关紧要的辅助性部门工作,即使付出了很多地努力,都很难取得职业上的长足发展。
    
    企业中还有另外一个主战场,那就是权力的主战场,尤其是在大的公司,这点尤为重要。这也意味着要尽可能的在公司的总部工作。在规模较小的公司而言,老板可能就会认识每一个员工,每一个员工的能力和成绩都能够被老板观察到;事实上,也只有你的业绩被人认可你才有发展的机会,否则即使你打破了世界纪录,没有权威的人作证明也是没人相信。在分支机构遍布全国乃至全球的大公司里,在总部以外的地方工作的人,往往会遇到这个问题。他们离那个权威的能够证明他们业绩的人太远了,总部的决策层很难会注意到他们。这个和我在前面讲到地域的时候是一样的,那些县、乡镇就相当于分支机构,拼了老命才能熬个县长,就是因为远离权力的主战场;而在中央部委工作的那些人,稍微有点成绩往下一放就是个地区专员。因此,要想获得外在职业生涯的发展,一开始要尽可能的争取机会在公司总部工作。在公司总部,潜在的升迁机会更多,视野更宽广。接触到不同层面的人,从基层员工,中层经理直到董事会成员。还有不少的领导职位是分公司所不可能有的,尤其是公司总部不仅要安排总部自己的职位,而且当下属机构要为空缺的岗位安排人的时候总部的人员也是进水楼台。从这么多的职位中得到机会的机率,显然要比在分公司大很多倍。当然,如果当下属企业的规模本身足够大,几乎就能够给你的职业生涯很大的发展空间那也是可以接受的。
    
    前两天遇到一个著名大学学计算机的研究生,他去了一家比较大的公司作业务软件的开发和硬件维护,虽然目前待遇也还可以,但我认为他的发展空间很有限,原因就是他没有在企业的主战场,他们公司将来的总经理只能是业务出身,不太可能是他的这种经历。如果将来他们公司计算机方面的业务外包,这非常有可能,他的发展就要受损,因为他和那些在软件公司工作的同学的差距已经在逐步拉大。我遇到好几个学计算机的,都在房地产、生产等等方面的企业,他们的发展空间可想而知。类似这种情况,要去也只能去一些非常大的公司,否则一点意思都没有。
    
    这里想再说点题外话,我们去企业工作的时候,首先应该问一下我们能够替企业创造多大的价值,因为我们的收益实际上来自于我们创造的价值,如果我们的专业技能不能为企业创造价值的话,即使我们能够拿到一时的高薪,也很难有大的发展,关键是有职业素养的人会觉得很难受。我来目前公司的时候,有另外一家企业的老板也希望我过去做管理,给我的薪水是目前企业的1.5倍,但是那家企业只有50、60人的规模,远远不如我目前企业的规模,所以我思虑再三,还是到了目前的这家公司。原因就是我去了那家公司,从管理的角度来说,一是我很难再有提高,二是那样一个规模的公司我很难创造和自己收入相匹配的价值,时间一长,在公司的地位就要下降,再找工作的话这段经历就不能够为我的职业发展增值,而目前的公司空间就比较大,光集团职能部门就有8个,还有下面的产业,在这种体制下,我的管理思想能够创造价值。当然还有其他的原因,但毫无疑问,主战场原则是最主要的因素。从目前的实际工作情况来看,我的这个选择是正确的。
    
    有个朋友问到为什么讲财务也可以划入主战场呢?这是因为在大的企业财务能够创造非常大的价值。一个一定规模的企业财务总监能够拿到几十万甚至上百万的年薪,那时因为在那样的公司通过财务管理比如税务筹划、资金运营、内部控制等等能够创造几百万甚至上千万的价值,某种程度上比业务部门的价值并不小。比如房地产公司而言,财务能力甚至会成为公司的核心竞争力之一。而且随着管理的发展,财务会逐步的介入业务,大家对财务的重视程度会越来越高。将来的高层管理者,谁在说自己不懂财务那就不应该了。公司里的三驾马车,无论如何是应该有财务的一席之地的。但是小的公司就不同,皮包公司老板或者老板娘就相当于财务经理,顶多设个出纳,规模再大一点的公司,如果要设副总,一般也是业务出身,财务就是中层,因为业务有限,财务能够创造的价值本身就有限。
    
    这里我要恭喜学财务的家人,我个人认为财务是非常有前途的一个职业,也是一个很容易规划自己发展路径的职业。我遇到一些学财务的朋友,提起财务来大吐口水,认为财务没有什么意思,其实我觉得是没有从更高的高度来看待这个问题,越来越多的企业会走向以财务控制为核心的企业管理,而且财务和投资、资本运作、金融等等都有千丝万缕的联系,可谓是前途无限。
    
    其他和财务是差不多的职业包括人力资源、内审、管理、战略规划等等,如果不小心没做好职业和企业的结合,只能是埋怨领导不重视你这一部分,其实不是领导不重视,而是你那里创造的价值很有限,如果你是领导,你也这样干。当然我不否认这里面有管理理念的因素,但是这是目前国内企业的现状。
    
    还有一个很好的职业就是销售。销售是最能考验和锻炼一个人能力的职业,而且我个人觉得这是一个对于起点比较低的朋友非常好的一个职业。我就遇到过几个学历并不高但薪水很不错的做销售的朋友,但我还遇到一个东财毕业的哥们,他大学毕业后在国内做了2年,后来竟然跑到新西兰读了个营销的研究生,结果他的同学在国内都做到十几万年薪了,他回到国内找工作都还成问题。为什么?研究生学历去大学教书有点低,人家的门槛现在都提到了博士,用来做销售又有点高,处于一个很尴尬的境地。所以我一向不建议身边的朋友去读营销方面的研究生,除非你想做研究或者工作深造。销售是一个实践性非常强的职业,大家全凭业绩说话,而且业绩也比较容易衡量。当然,从最基层的销售做起,在此过程中你要不断的提升自己,从而到销售经理、销售总监乃至成长为一个公司的总经理。
    
    我前面讲到在行业和职业的选择方面要有内在的连续性,最好的连续性当然是两者都要保持,因为现在的专业化分工越来越明显,尤其是有些职业和业务的结合比较紧密,比如你会做洗发水的销售但不一定能做好化肥的销售,你能担任生产性企业的财务总监但是做地产公司的财务总监你就很吃力。但是如果做不到两者都连续,我建议你最好能保持其中的一个是连续的。比如你一直在地产作但是作不同的职业,这样你将来的发展方向应该就是某个地产公司的总经理或者高管;或者你一直从事某个职业,比如你一直做销售、财务或者人力资源,这样即使在不同的行业作,但你会成为某个职业领域的专家。

    以上所论述的内容应该对大家有所启发,但从更深层次的角度而言,这些内容是远远不够的。有聪明的朋友可能会问:“那我进行选择的依据是什么?”当然,你在实际决策的过程中会找到很多的因素,包括你的价值观、喜好、爱情等等,他们综合后会形成你的职业目标,从职业发展的角度,你最主要的依据就是你的职业目标。
    前两天一个曾经在公司实习过的研究生小姑娘给我打电话向我请教,说自己面临2个机会,“是去华为作sales还是到华润地产去做marketing。”这个小姑娘还是蛮优秀的,我在后面的文章中可能还会引用她的例子。我告诉她其实从职业发展的角度来说,这2个机会的起点都是可以接受的,最关键的是她期望得到什么?她更期望怎样的工作和生活方式?如果她喜欢和人打交道,希望最直接的解决很有挑战性的问题,那就去华为作sales;如果喜欢创意,愿意把自己的想法付诸实践,那就去华润。我告诉她,唯一的解决之道就是叩问自己的内心。当然,我和她一起分析,最终得到了她想要的答案。
    工作这么多年,我有个比较深的体会,大多数人的职业困惑是不知道自己想要的到底是什么?职场中很多这样的朋友,觉得工作很乏味,甚至质疑自己入错了行,如果不是迫于生计的压力,他们说早就不干了,总之他们觉得工作不开心,甚至是一种疼苦,至少他们享受不到工作的乐趣。我们中太多的人跟着生活的惯性去安排职业,包括不少很优秀的人。社会大众舆论说外企好就去外企,媒体讲MBA不错就去读MBA,大学毕业就要求按照自己所学的专业选择工作,茫茫碌碌恰恰忘了问自己一句自己想要的到底是什么?不知道你想要的是什么,往往什么也得不到,或者得到了才发现那并不是你想要的。
    
    如果你只给我5分钟,让我出个注意帮助你获得职业上更大的成功,我会告诉你:“确认你的职业目标,制定实施计划,然后每天依此行事。”职业目标可以是成为行业的专家或者高管,也可以通过自己职业的发展为将来的创业奠定基础。
    
    如果你采纳这条建议,那么它对你的益处将胜过你能学到的其他任何东西。根据我个人的体会,这个简单的行动甚至比四年的学业都更有价值。很多职业成功的人士都是因为有意无意的遵循了这个原则从而获得他们职业上的成功。
    
    翻开众多成功学的书籍,无一例外的都要告诉你明确的目标对于获得成功是多么的重要,我也不能免俗,这是因为它确实很重要。

    以下的这个故事被很多人讲过很多遍,用来说明拥有清晰的目标的重要性。
    有一年,一群意气风发的天之骄子从美国哈佛大学毕业了,他们即将开始他们的职业生涯。他们的智力、学历、环境条件都相差无几。在临出校门前,哈佛对他们进行了一次关于人生目标的调查。结果是这样的:
    27%的人,没有目标;60%的人,目标模糊; 10%的人,有清晰但比较短期的目标; 3%的人,有清晰而长远的目标。
      25年后,哈佛再次对这群学生进行了跟踪调查。结果是这样的:
      3%的人,25年间他们朝着一个方向不懈努力,几乎都成为社会各界的成功人士,其中不乏行业领袖、社会精英;
      10%的人,他们的短期目标不断地实现,成为各个领域中的专业人士,大都生活在社会的中上层;
      60%的人,他们安稳地生活与工作,但都没有什么特别成绩,几乎都生活在社会的中下层;
      剩下27%的人,他们的生活没有目标,过得很不如意,并且常常在抱怨他人、抱怨社会、抱怨这个“不肯给他们机会”的世界。
    其实,他们之间的差别仅仅在于:25年前,他们中的一些人知道他们的目标,而另一些人则不清楚或不很清楚。
    
    很多的人都看到过上面的这个故事,我也在不同的地方看到过这个故事的多个版本,其目的都是告诉大家目标的重要性。相信不少人在第一次看到这个故事的时候都会有所触动,也会尝试着来确立自己的目标,但事实是为数不少得人越想越糊涂,到最后也没能整明白自己的目标到底是什么。我就亲身经历过好几个目标模糊的人大谈目标的重要性。这说明大家大都知道目标对于自身发展的重要性,只是他们不知道如何来确立自己的目标,无论是人生还是职业方面的。
    如果你不知道自己未来的目标,你就永远到不了那里;如果你没有自己的目标,别人就会为你做主;如果你对自己的未来没有计划,你就会成为别人计划里的一枚棋子。这个世界上永远是有希望的人带着没有希望的人飞奔,没目标的人为有目标的任务。

  • memcached for windows 修改端口和最大内存

    2012-10-18 17:07:59

    要想在windows中使用memcached,必须先下载memcached for win32安装。

    下载地址:
    http://jehiah.cz/projects/memcached-win32/

    解压后只要在命令窗口中输入下面命令c:\memcached\memcached.exe -d install  就可以把memcached安装为windows服务了。

    启动该服务后,memcached服务默认占用的端口是11211,占用的最大内存默认是64M。

    在修改这2个配置选项就碰到了一些问题,网上搜索了很多资料,都说使用下面的命令启动服务就可以:

    c:\memcached\memcached.exe -p 12345 -m 1024 -d start  ,  -p 表示要修改的端口, -m表示占用的最大内存(单位为M)。

    但是无论怎么调用这个命令,发现端口一直还是11211。

    打开windows服务控制面板一看,发现memcached.exe 默认安装的服务器启动参数中根本没写-p -m的参数,只有1个 -d runservice参数。
    所以不管用什么命令启动服务都是没用的,见下图:


    于是就想到直接修改windows服务的启动参数,操作如下,打开注册表,找到:
    HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\memcached Server
    其中的ImagePath项的值为:"c:\memcached\memcached.exe" -d runservice
    改成:"c:\memcached\memcached.exe" -p 12345 -m 128 -d runservice

    保存后重新启动memcached服务,然后在命令行中输入netstat -n -a  看看现在端口是不是改啦,^_^。

  • 深入理解HTTP协议(转)

    2012-06-18 13:43:09

    1. 基础概念篇

    1.1 介绍

      HTTPHyper Text Transfer Protocol(超文本传输协议)的缩写。它的发展是万维网协会(World Wide Web Consortium)和Internet工作小组IETFInternet Engineering Task Force)合作的结果,(他们)最终发布了一系列的RFCRFC 1945定义了HTTP/1.0版本。其中最著名的就是RFC 2616RFC 2616定义了今天普遍使用的一个版本——HTTP 1.1

    HTTP协议(HyperText Transfer Protocol,超文本传输协议)是用于从WWW服务器传输超文本到本地浏览器的传送协议。它可以使浏览器更加高效,使网络传输减少。它不仅保证计算机正确快速地传输超文本文档,还确定传输文档中的哪一部分,以及哪部分内容首先显示(如文本先于图形)等。

    HTTP是一个应用层协议,由请求和响应构成,是一个标准的客户端服务器模型。HTTP是一个无状态的协议。

    1.2 TCP/IP协议栈中的位置

    HTTP协议通常承载于TCP协议之上,有时也承载于TLSSSL协议层之上,这个时候,就成了我们常说的HTTPS。如下图所示:
       

    默认HTTP的端口号为80HTTPS的端口号为443

    1.3 HTTP的请求响应模型

    HTTP协议永远都是客户端发起请求,服务器回送响应。见下图:
       

    这样就限制了使用HTTP协议,无法实现在客户端没有发起请求的时候,服务器将消息推送给客户端。

    HTTP协议是一个无状态的协议,同一个客户端的这次请求和上次请求是没有对应关系。

    1.4 工作流程

    一次HTTP操作称为一个事务,其工作过程可分为四步:

    1)首先客户机与服务器需要建立连接。只要单击某个超级链接,HTTP的工作开始。

    2)建立连接后,客户机发送一个请求给服务器,请求方式的格式为:统一资源标识符(URL)、协议版本号,后边是MIME信息包括请求修饰符、客户机信息和可能的内容。

    3)服务器接到请求后,给予相应的响应信息,其格式为一个状态行,包括信息的协议版本号、一个成功或错误的代码,后边是MIME信息包括服务器信息、实体信息和可能的内容。

    4)客户端接收服务器所返回的信息通过浏览器显示在用户的显示屏上,然后客户机与服务器断开连接。

    如果在以上过程中的某一步出现错误,那么产生错误的信息将返回到客户端,有显示屏输出。对于用户来说,这些过程是由HTTP自己完成的,用户只要用鼠标点击,等待信息显示就可以了。

    1.5 使用WiresharkTCPhttp

    打开Wireshark,选择工具栏上的“Capture->Options”,界面选择如图1所示:
                                

    1 设置Capture选项

    一般读者只需要选择最上边的下拉框,选择合适的Device,而后点击“Capture Filter”,此处选择的是“HTTP TCP port80)”,选择后点击上图的“Start”开始抓包。
                                     

    2 选择Capture Filter

    例如在浏览器中打开http://image.baidu.com/,抓包如图3所示:
        http://www.blogjava.net/images/blogjava_net/amigoxie/40799/o_http%e5%8d%8f%e8%ae%ae%e5%ad%a6%e4%b9%a0-%e6%a6%82%e5%bf%b5-3.jpg

    3   抓包

    在上图中,可清晰的看到客户端浏览器(ip192.168.2.33)与服务器的交互过程:

    1No1:浏览器(192.168.2.33)向服务器(220.181.50.118)发出连接请求。此为TCP三次握手第一步,此时从图中可以看出,为SYNseq:X x=0

    2No2:服务器(220.181.50.118)回应了浏览器(192.168.2.33)的请求,并要求确认,此时为:SYNACK,此时seqyy0),ACKx+1(为1)。此为三次握手的第二步;

    3No3:浏览器(192.168.2.33)回应了服务器(220.181.50.118)的确认,连接成功。为:ACK,此时seqx+1(为1),ACKy+1(为1)。此为三次握手的第三步;

    4No4:浏览器(192.168.2.33)发出一个页面HTTP请求;

    5No5:服务器(220.181.50.118)确认;

    6No6:服务器(220.181.50.118)发送数据;

    7No7:客户端浏览器(192.168.2.33)确认;

    8No14:客户端(192.168.2.33)发出一个图片HTTP请求;

    9No15:服务器(220.181.50.118)发送状态响应码200 OK

    ……

    1.6 头域

    每个头域由一个域名,冒号(:)和域值三部分组成。域名是大小写无关的,域值前可以添加任何数量的空格符,头域可以被扩展为多行,在每行开始处,使用至少一个空格或制表符。

    在抓包的图中,No14点开可看到如图4所示:
       http://www.blogjava.net/images/blogjava_net/amigoxie/40799/o_http%e5%8d%8f%e8%ae%ae%e5%ad%a6%e4%b9%a0-%e6%a6%82%e5%bf%b5-4.jpg

    4 http请求消息

           回应的消息如图5所示:
                  

    5 http状态响应信息

    1.6.1 host头域

    Host头域指定请求资源的Intenet主机和端口号,必须表示请求url的原始服务器或网关的位置。HTTP/1.1请求必须包含主机头域,否则系统会以400状态码返回。

    5host那行为:
       

    1.6.2 Referer头域

    Referer头域允许客户端指定请求uri的源资源地址,这可以允许服务器生成回退链表,可用来登陆、优化cache等。他也允许废除的或错误的连接由于维护的目的被追踪。如果请求的uri没有自己的uri地址,Referer不能被发送。如果指定的是部分uri地址,则此地址应该是一个相对地址。

    在图4中,Referer行的内容为:
       

    1.6.3 User-Agent头域

    User-Agent头域的内容包含发出请求的用户信息。

    在图4中,User-Agent行的内容为:
       http://www.blogjava.net/images/blogjava_net/amigoxie/40799/o_http%e5%8d%8f%e8%ae%ae%e5%ad%a6%e4%b9%a0-%e6%a6%82%e5%bf%b5-8.jpg

    1.6.4 Cache-Control头域

    Cache-Control指定请求和响应遵循的缓存机制。在请求消息或响应消息中设置Cache-Control并不会修改另一个消息处理过程中的缓存处理过程。请求时的缓存指令包括no-cacheno-storemax-agemax-stalemin-freshonly-if-cached,响应消息中的指令包括publicprivateno-cacheno-storeno-transformmust-revalidateproxy-revalidatemax-age

    在图5中的该头域为:
       

    1.6.5 Date头域

    Date头域表示消息发送的时间,时间的描述格式由rfc822定义。例如,Date:Mon,31Dec200104:25:57GMTDate描述的时间表示世界标准时,换算成本地时间,需要知道用户所在的时区。

    5中,该头域如下图所示:
      
     

    1.7 HTTP的几个重要概念

    1.7.1连接:Connection

    一个传输层的实际环流,它是建立在两个相互通讯的应用程序之间。

    http1.1requestreponse头中都有可能出现一个connection的头,此header的含义是当clientserver通信时对于长链接如何进行处理。

    http1.1中,clientserver都是默认对方支持长链接的, 如果client使用http1.1协议,但又不希望使用长链接,则需要在header中指明connection的值为close;如果server方也不想支持长链接,则在response中也需要明确说明connection的值为close。不论request还是responseheader中包含了值为closeconnection,都表明当前正在使用的tcp链接在当天请求处理完毕后会被断掉。以后client再进行新的请求时就必须创建新的tcp链接了。

    1.7.2消息:Message

    HTTP通讯的基本单位,包括一个结构化的八元组序列并通过连接传输。

    1.7.3请求:Request

    一个从客户端到服务器的请求信息包括应用于资源的方法、资源的标识符和协议的版本号。

    1.7.4响应:Response

    一个从服务器返回的信息包括HTTP协议的版本号、请求的状态(例如成功没找到”)和文档的MIME类型。

    1.7.5资源:Resource

    URI标识的网络数据对象或服务。

    1.7.6实体:Entity

    数据资源或来自服务资源的回映的一种特殊表示方法,它可能被包围在一个请求或响应信息中。一个实体包括实体头信息和实体的本身内容。

    1.7.7客户机:Client

    一个为发送请求目的而建立连接的应用程序。

    1.7.8用户代理:UserAgent

    初始化一个请求的客户机。它们是浏览器、编辑器或其它用户工具。

    1.7.9服务器:Server

    一个接受连接并对请求返回信息的应用程序。

    1.7.10源服务器:Originserver

    是一个给定资源可以在其上驻留或被创建的服务器。

    1.7.11代理:Proxy

    一个中间程序,它可以充当一个服务器,也可以充当一个客户机,为其它客户机建立请求。请求是通过可能的翻译在内部或经过传递到其它的服务器中。一个代理在发送请求信息之前,必须解释并且如果可能重写它。

    代理经常作为通过防火墙的客户机端的门户,代理还可以作为一个帮助应用来通过协议处理没有被用户代理完成的请求。

    1.7.12网关:Gateway

    一个作为其它服务器中间媒介的服务器。与代理不同的是,网关接受请求就好象对被请求的资源来说它就是源服务器;发出请求的客户机并没有意识到它在同网关打交道。

    网关经常作为通过防火墙的服务器端的门户,网关还可以作为一个协议翻译器以便存取那些存储在非HTTP系统中的资源。

    1.7.13通道:Tunnel

    是作为两个连接中继的中介程序。一旦激活,通道便被认为不属于HTTP通讯,尽管通道可能是被一个HTTP请求初始化的。当被中继的连接两端关闭时,通道便消失。当一个门户(Portal)必须存在或中介(Intermediary)不能解释中继的通讯时通道被经常使用。

    1.7.14缓存:Cache

    反应信息的局域存储。

        附录:参考资料

    http_百度百科》:http://baike.baidu.com/view/9472.htm

    《结果编码和http状态响应码》:http://blog.tieniu1980.cn/archives/377

    《分析TCP的三次握手》:

    http://cache.baidu.com/c?m=9f65cb4a8c8507ed4fece763104c8c711923d030678197027fa3c215cc7905141130a8e5747e0d548d98297a5ae91e03f7f63772315477e3cacdd94cdbbdc42225d82c36734f844315c419d891007a9f34d507a9f916a2e1b065d2f48193864353bb15543897f1fb4d711edd1b86033093b1e94e022e67adec40728e2e605f983431c5508fe4&p=c6769a46c5820efd08e2973b42&user=baidu

    《使用Wireshark来检测一次HTTP连接过程》:

    http://blog.163.com/wangbo_tester/blog/static/12806792120098174162288/

    http协议的几个重要概念》:http://nc.mofcom.gov.cn/news/10819972.html

    http协议中connection头的作用》:

           http://blog.csdn.net/barfoo/archive/2008/06/05/2514667.aspx 

    2. 协议详解篇

    2.1 HTTP/1.0HTTP/1.1的比较

    RFC 1945定义了HTTP/1.0版本,RFC 2616定义了HTTP/1.1版本。

    笔者在blog上提供了这两个RFC中文版的下载地址。

    RFC1945下载地址:

    http://www.blogjava.net/Files/amigoxie/RFC1945HTTP)中文版.rar

    RFC2616下载地址:

    http://www.blogjava.net/Files/amigoxie/RFC2616HTTP)中文版.rar

    2.1.1建立连接方面

    HTTP/1.0 每次请求都需要建立新的TCP连接,连接不能复用。HTTP/1.1 新的请求可以在上次请求建立的TCP连接之上发送,连接可以复用。优点是减少重复进行TCP三次握手的开销,提高效率。

    注意:在同一个TCP连接中,新的请求需要等上次请求收到响应后,才能发送。

    2.1.2 Host

    HTTP1.1Request消息头里头多了一个Host, HTTP1.0则没有这个域。

    Eg

        GET /pub/WWW/TheProject.html HTTP/1.1
        Host: www.w3.org

        可能HTTP1.0的时候认为,建立TCP连接的时候已经指定了IP地址,这个IP地址上只有一个host

    2.1.3日期时间戳

    (接收方向)

    无论是HTTP1.0还是HTTP1.1,都要能解析下面三种date/time stamp

    Sun, 06 Nov 1994 08:49:37 GMT ; RFC 822, updated by RFC 1123
    Sunday, 06-Nov-94 08:49:37 GMT ; RFC 850, obsoleted by RFC 1036
    Sun Nov 6 08:49:37 1994       ; ANSI C's asctime() format

           (发送方向)

    HTTP1.0要求不能生成第三种asctime格式的date/time stamp

    HTTP1.1则要求只生成RFC 1123(第一种)格式的date/time stamp

    2.1.4状态响应码

    状态响应码100 (Continue) 状态代码的使用,允许客户端在发request消息body之前先用request header试探一下server,看server要不要接收request body,再决定要不要发request body

    客户端在Request头部中包含

    Expect: 100-continue

           Server看到之后呢如果回100 (Continue) 这个状态代码,客户端就继续发request body。这个是HTTP1.1才有的。

    另外在HTTP/1.1中还增加了101203205等等性状态响应码

    2.1.5请求方式

    HTTP1.1增加了OPTIONS, PUT, DELETE, TRACE, CONNECT这些Request方法.

           Method         = "OPTIONS"                ; Section 9.2

                          | "GET"                    ; Section 9.3

                          | "HEAD"                   ; Section 9.4

                          | "POST"                   ; Section 9.5

                          | "PUT"                    ; Section 9.6

                          | "DELETE"                 ; Section 9.7

                          | "TRACE"                  ; Section 9.8

                          | "CONNECT"                ; Section 9.9

                          | extension-method

           extension-method = token

    2.2 HTTP请求消息

    2.2.1请求消息格式

    请求消息格式如下所示:

    请求行

    通用信息头|请求头|实体头

    CRLF(回车换行)

    实体内容

    其中“请求行”为:请求行 = 方法 [空格] 请求URI [空格] 版本号 [回车换行]

    请求行实例:

    Eg1

    GET /index.html HTTP/1.1

           Eg2

    POST http://192.168.2.217:8080/index.jsp HTTP/1.1

    HTTP请求消息实例:

    GET /hello.htm HTTP/1.1
    Accept: */*
    Accept-Language: zh-cn
    Accept-Encoding: gzip, deflate
    If-Modified-Since: Wed, 17 Oct 2007 02:15:55 GMT
    If-None-Match: W/"158-1192587355000"
    User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)
    Host: 192.168.2.162:8080
    Connection: Keep-Alive


    2.2.2请求方法

           HTTP的请求方法包括如下几种:

    q      GET

    q      POST

    q      HEAD

    q      PUT

    q      DELETE

    q      OPTIONS

    q      TRACE

    q      CONNECT

    2.3 HTTP响应消息

    2.3.1响应消息格式

    HTTP响应消息的格式如下所示:

    状态行

    通用信息头|响应头|实体头

    CRLF

    实体内容

    其中:状态行 = 版本号 [空格] 状态码 [空格] 原因 [回车换行]

    状态行举例:

    Eg1

    HTTP/1.0 200 OK 

          Eg2

    HTTP/1.1 400 Bad Request

         HTTP响应消息实例如下所示:

    HTTP/1.1 200 OK
    ETag: W/"158-1192590101000"
    Last-Modified: Wed, 17 Oct 2007 03:01:41 GMT
    Content-Type: text/html
    Content-Length: 158
    Date: Wed, 17 Oct 2007 03:01:59 GMT
    Server: Apache-Coyote/1.1

    2.3.2 http的状态响应码

    2.3.2.1  1**:请求收到,继续处理

    100——客户必须继续发出请求

    101——客户要求服务器根据请求转换HTTP协议版本

    2.3.2.2  2**操作成功收到分析、接受

    200——交易成功
    201——提示知道新文件的URL

    202——接受和处理、但处理未完成

    203——返回信息不确定或不完整

    204——请求收到,但返回信息为空

    205——服务器完成了请求,用户代理必须复位当前已经浏览过的文件

    206——服务器已经完成了部分用户的GET请求

    2.3.2.3  3**:完成此请求必须进一步处理

    300——请求的资源可在多处得到

    301——删除请求数据

    302——在其他地址发现了请求数据

    303——建议客户访问其他URL或访问方式

    304——客户端已经执行了GET,但文件未变化

    305——请求的资源必须从服务器指定的地址得到

    306——前一版本HTTP中使用的代码,现行版本中不再使用

    307——申明请求的资源临时性删除

    2.3.2.4  4**:请求包含一个错误语法或不能完成

    400——错误请求,如语法错误

    401——未授权

    HTTP 401.1 - 未授权:登录失败

      HTTP 401.2 - 未授权:服务器配置问题导致登录失败

      HTTP 401.3 - ACL 禁止访问资源

      HTTP 401.4 - 未授权:授权被筛选器拒绝

    HTTP 401.5 - 未授权:ISAPI CGI 授权失败

    402——保留有效ChargeTo头响应

    403——禁止访问

    HTTP 403.1 禁止访问:禁止可执行访问

      HTTP 403.2 - 禁止访问:禁止读访问

      HTTP 403.3 - 禁止访问:禁止写访问

      HTTP 403.4 - 禁止访问:要求 SSL

      HTTP 403.5 - 禁止访问:要求 SSL 128

      HTTP 403.6 - 禁止访问:IP 地址被拒绝

      HTTP 403.7 - 禁止访问:要求客户证书

      HTTP 403.8 - 禁止访问:禁止站点访问

      HTTP 403.9 - 禁止访问:连接的用户过多

      HTTP 403.10 - 禁止访问:配置无效

      HTTP 403.11 - 禁止访问:密码更改

      HTTP 403.12 - 禁止访问:映射器拒绝访问

      HTTP 403.13 - 禁止访问:客户证书已被吊销

      HTTP 403.15 - 禁止访问:客户访问许可过多

      HTTP 403.16 - 禁止访问:客户证书不可信或者无效

    HTTP 403.17 - 禁止访问:客户证书已经到期或者尚未生效

    404——没有发现文件、查询或URl

    405——用户在Request-Line字段定义的方法不允许

    406——根据用户发送的Accept拖,请求资源不可访问

    407——类似401,用户必须首先在代理服务器上得到授权

    408——客户端没有在用户指定的饿时间内完成请求

    409——对当前资源状态,请求不能完成

    410——服务器上不再有此资源且无进一步的参考地址

    411——服务器拒绝用户定义的Content-Length属性请求

    412——一个或多个请求头字段在当前请求中错误

    413——请求的资源大于服务器允许的大小

    414——请求的资源URL长于服务器允许的长度

    415——请求资源不支持请求项目格式

    416——请求中包含Range请求头字段,在当前请求资源范围内没有range

  • sql注入

    2012-06-07 16:01:45

    关于sql注入,作为一个测试人员是必须要关注的,当前关于web的安全性测试中sql注入已经成为了主流的漏洞之一,我们不容忽视。作为开发人员那就更应该了解了,如果没能正确的认识sql注入,就很难做到防患于未然,因为我们大多数程序中之所以出现sql注入是由于程序缺乏很严谨的逻辑设计,还有一方面就是开发人员经验不足所体现出来的。

    通常sql注入是从正常的www端口访问的,从表面来看,跟一般的web访问没有区别,所以目前市场上的防火墙并没有对sql注入给出相关的警报,一般如果管理员没有查看日志的习惯,可能系统被入侵很长时间了都不会被发觉。先来看我做的一个简单的登录系统,看看如何破解进去的,具体如下图:

    这是一个简单的登录系统,包括用户名和密码,正确的用户名和密码都为sa,通过简单的sql语句的构造如下图;

    登录成功页面就是返回并显示登录的用户名和密码,成功页面上显示的用户是sa,而密码是' or 1 = '1,为什么会出现这种情况呢,并不是后台数据库中存在这样的密码,我们来看看这个登录后台是如何验证用户信息的,后台的实现方式是通过这样一个sql语句来实现的,select * from user where username = '' and password = '',当用户名和密码与后台数据库进行匹配的时候,就表示登录验证通过,就可以进入系统并获得操作权限,然后再来看这个语句:select * from user where username = '' and password = '' or 1 = '1',我们可以惊讶的发现当后面跟上一个或语句时,整个判断条件就发生了质的变化,‘或’判断就是只要有一个条件成立就表示整个判断为为true,所以这个简单的sql语句构造就可以绕过登录用户名和密码的验证,直接进入系统,这就是sql注入。

         sql注入的构造手法相当灵活,在注入时会碰到很多意想不到的情况,能不能根据具体的情况来分析,构造更加巧妙的sql语句,获取更多的数据信息,这就是高手与菜鸟的区别。这里我将总结一些常见的sql注入,并进行分类,避免在测试sql注入时太盲目,进行合理的分析后开始进行测试,将会大大提高工作效率。

    首先,在测试sql注入之前,我们需要设置IE浏览器,第一步先把IE菜单=>工具=>Internet选项=>高级=>显示友好 HTTP 错误信息前面的勾去掉。否则,不论服务器返回什么错误,IE都只显示为HTTP 500服务器错误,不能获得更多的提示信息。我们通常在测试过程中,会碰到测试一些页面出现异常的时候,提示一些具体的程序代码,或者是数据库不匹配什么的,这些都是最直观的错误信息,一般是程序开发人员进行相关调试时留下,也有些是本身没有发现的,在测试阶段发现是最好不过,如果等到上线被用户发现,那就是攻击的最好入口。通常我们在地址栏上会见到这样的URL地址,如:http://bbs.xxx.cn/viewthread.php?tid=274932,如果我们在后面加上’,页面会出现如下提示信息

    Microsoft JET Database Engine 错误 '80040e14'
    字符串的语法错误 在查询表达式 'tid=274932'' 中。等等信息,通过以上提示我们可以得出如下信息:

    1.网站使用的是Access数据库,通过JET引擎连接数据库,而不是通过ODBC。
    2.程序没有判断客户端提交的数据是否符合程序要求。
    3.该SQL语句所查询的表中有一名为tid的字段。

    从上面的例子我们可以看出,sql注入的原理就是通过客户端提交一些特殊的代码,从而获取服务器端的信息,从而分析得到我们想要信息。

     

     其次,就是分析页面能否进行sql注入,通常情况下不是每个服务器都会给出错误提示信息,一旦缺乏后台提供的错误信息,我们将如何来进行sql注入呢;而且当前程序员对sql注入有一点的了解,就会做出相应的控制和判断,一般都会过滤单引号之类的,如果这样的话,那前面的方法就不得行了。还是前面的地址http://bbs.xxx.cn/viewthread.php?tid=274932,如果在后面加上and 1=1或者1=2来看看页面给我什么提示,通过验证一般会出现以下几种情况:

    1.1=1时与之前页面显示一样,也就是正常显示

    2.1=2时显示信息记录存在等,或者是找不到记录等等

    以上也是表示可以注入的,关于如何构建这类sql语句,将在下节中讲到。

     

    第三,就是判断数据库类型以及注入方法

    不同的数据库的函数、注入方法都是有差异的,所以在注入之前,我们还要判断一下数据库的类型。一般ASP最常搭配的数据库是Access和SQLServer,网上超过99%的网站都是其中之一。

       怎么让程序告诉你它使用的什么数据库呢?来看看:

       SQLServer有一些系统变量,如果服务器IIS提示没关闭,并且SQLServer返回错误提示的话,那可以直接从出错信息获取,方法如下:

       http://bbs.xxx.cn/viewthread.php?tid=274932 and user>0 这里我们重点关注user>0,通常使用sqlserver比较多的人应该知道,user是sqlserver的内置变量,它的值是当前连接的用户名,类型为nvarchar。拿一个nvarchar的值跟int的数0比较,系统会先试图将nvarchar的值转成int型,当然,转的过程中肯定会出错,SQLServer的出错提示是:将nvarchar值 ”abc” 转换数据类型为 int 的列时发生语法错误,呵呵,abc正是变量user的值,这样,不废吹灰之力就拿到了数据库的用户名。   还有就是众所周知的,SQLServer的用户sa是个等同Adminstrators权限的角色,拿到了sa权限,几乎肯定可以拿到主机的Administrator了。上面的方法可以很方便的测试出是否是用sa登录,要注意的是:如果是sa登录,提示是将”dbo”转换成int的列发生错误,而不是”sa”。

       如果服务器IIS不允许返回错误提示,那怎么判断数据库类型呢?我们可以从Access和SQLServer和区别入手,Access和SQLServer都有自己的系统表,比如存放数据库中所有对象的表,Access是在系统表[msysobjects]中,但在Web环境下读该表会提示“没有权限”,SQLServer是在表[sysobjects]中,在Web环境下可正常读取。

    在确认可以注入的情况下,使用下面的语句:

    http://bbs.xxx.cn/viewthread.php?tid=274932 and (select count(*) from sysobjects)>0

    http://bbs.xxx.cn/viewthread.php?tid=274932 and (select count(*) from msysobjects)>0

    如果数据库是SQLServer,那么第一个网址的页面与原页面http://bbs.xxx.cn/viewthread.php?tid=274932是大致相同的;而第二个网址,由于找不到表msysobjects,会提示出错,就算程序有容错处理,页面也与原页面完全不同。

       如果数据库用的是Access,那么情况就有所不同,第一个网址的页面与原页面完全不同;第二个网址,则视乎数据库设置是否允许读该系统表,一般来说是不允许的,所以与原网址也是完全不同。大多数情况下,用第一个网址就可以得知系统所用的数据库类型,第二个网址只作为开启IIS错误提示时的验证。

     
  • 存储过程的返回值

    2012-06-07 15:37:06

    MSDN关于存储过程,看到比较详细地说明返回值,就转载过来了。
    转载地址:http://msdn2.microsoft.com/zh-cn/library/ms188655.aspx
    存储过程中的返回值的类型(3种)

    使用 OUTPUT 参数返回数据

    说明如何使用 OUTPUT 参数将数据返回调用应用程序。

    使用返回代码返回数据

    说明如何使用返回代码。

    在 OUTPUT 参数中使用 cursor 数据类型

    说明如何使用 OUPUT 参数中的游标数据类型。


    1。使用 OUTPUT 参数返回数据

    如果在过程定义中为参数指定 OUTPUT 关键字,则存储过程在退出时可将该参数的当前值返回至调用程序。若要用变量保存参数值以便在调用程序中使用,则调用程序必须在执行存储过程时使用 OUTPUT 关键字。

  • LoadRunner组成及其工作原理简介

    2012-06-07 11:57:16

    一、 LoadRunner工具组成
    1、虚拟用户脚本生成器:捕获最终用户业务流程和创建自动性能测试脚本,即我们在以后说的产生测试脚本;
    2、压力产生器:通过运行虚拟用户产生实际的负载;
    3、用户代理:协调不同负载机上虚拟用户,产生步调一致的虚拟用户;
    4、压力调度:根据用户对场景的设置,设置不同脚本的虚拟用户数量;
    5、监视系统:监控主要的性能计数器;
    6、压力结果分析工具:本身不能代替分析人员,但是可以辅助测试结果的分析。

    二、 LoadRunner工具原理

    代理(Proxy)是客户端和服务器端之间的中介人,LoadRunner就是通过代理方式截获客户端和服务器之间交互的数据流。

    1、虚拟用户脚本生成器通过代理方式接收客户端发送的数据包,记录并将其转发给服务器端;接收到从服务器端返回的数据流,记录并返回给客户端。

    这样服务器端和客户端都以为在一个真实运行环境中,虚拟脚本生成器能通过这种方式截获数据流;虚拟用户脚本生成器在截获数据流后对其进行了协议层上的处理,最终用脚本函数将数据流交互过程体现为我们容易看懂的脚本语句。

    2、压力生成器则是根据脚本内容,产生实际的负载,扮演产生负载的角色。

    3、用户代理是运行在负载机上的进程,该进程与产生负载压力的进程或是线程协作,接受调度系统的命令,调度产生负载压力的进程或线程。

    4、压力调度是根据用户的场景要求,设置各种不同脚本的虚拟用户数量,设置同步点等。

    5、监控系统则可以对数据库、应用服务器、服务器的主要性能计数器进行监控。

    6、压力结果分析工具是辅助测试结果分析。


    本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/artoksxb/archive/2009/09/21/4576939.aspx

     

    内容来自《LoadRunner性能测试实战》一书。
    LoadRunner由以下部分组成:

  • 虚拟用户发生器: Vuser Generator
  • 压力调度和监控中心: Controller
  • 压力产生器:Load Generator
  • 压力结果分析工具: Analysis

  • Vuser Generator是一个集成开发环境,用于录制回放修改Vuser脚本.Controller是一个框架程序和监控程序,负责讲Vuser脚本以多进程/多线程方式在Load Generator机器上运行.Analysis是一个数据分析工具,可以安装在任何Windows平台机器上.

    Loadrunner进行测试的一般步骤:
    1.用户确定进行测试的业务或者交易,录制并生成脚本
    2.手工修改脚本,确定脚本能回放成功
    3.在Controller中对场景进行配置,启动测试,Controller控制Load Generator对被测系统的加压方式和行为
    4.Controller负责搜集被测系统各个环节的性能数据.各个Load Generator会记录最终用户相应时间和脚本执行的日志
    5.压力测试运行结束以后, Load Generator将数据传送到Controller中,由Controller对测试数据进行汇总
    6.用Analysis对数据进行分析
    7.对系统进行调优,重复进行压力测试,确定性能是否有所提高

  • 【转】做好测试计划和测试用例的工作的关键

    2012-05-04 17:55:37

    51testing每周一问的这个问题很精彩,于是我做了如下回答。51Testing软件测试网K m F_h!S Y

    问题如下:

    1t'Kf8Qkk7a3AE77325

    测试的流程中,测试计划是对整个测试活动的安排,而测试用例则是测试执行的指导,但是,现在仍然有很多的测试人员没有认识到测试计划和测试用例的重要性,在项目时间比较紧张的情况下,计划和用例往往成了形式上的东西,甚至有些测试人员脱离用例,完全凭借自己的经验在执行测试活动,对此,你有什么样的看法?51Testing软件测试网Y{c3k1c bGT@d

    这个问题问的非常好,也确实是很多人有过切肤之痛的问题,对我来说,我也一直在苦苦追寻这个问题的答案,现在我不能说完全找到了,只能说把自己的心得分享一下,希望大家的测试计划和测试用例不再是一个摆设。

    )g!m.s;XU9|Z77325

    (一) 先说测试计划吧51Testing软件测试网2Bp"M^?:A.]

    诚如magic_zhu所言,现在很多测试人员没意识到测试计划的重要性,很多时候测试计划成为一纸空文,其根本原因在于测试计划缺乏可执行性,也正是因为测试计划缺乏可执行性,导致下一次写计划的时候非常草率,甚至不写,就算写了也是一个花架子应付领导,这样形成了一个恶性循环,久而久之,测试计划纯属一个摆设,我们很多从业者不写测试计划,其理由是反正写了也不能按照计划执行,这种理由真的很荒唐可笑,这是典型的因噎废食,因为你的计划执行性差就不写?这样只能使测试更加失去控制,使你的测试过程彻底无计划,无目标,变成一个放任主流的状态,完全没有受控性。这样的产品质量保证显然是空谈。51Testing软件测试网AS2sez.S!b1~/o'z

    我觉得这个问题的解决方案不是不写,而是想办法写得更好,更有实效性,执行性。这个是问题的关键。

    pQ)|T(v77325

    一个好的测试计划是用来计划测试的,指导整个测试过程。所以一个好的测试计划一定是可以指导测试的,就是对整个测试过程中的人力,时间,资源,策略,范围的一个说明。

    ?1k+Wd S77325

    作为一个测试计划来讲,核心的三个要素是时间,资源,范围。(这句话摘自微软软件测试培训材料),时间就是什么时候做以及要花多久做,资源就是你要调用的人力、机器等资源,范围是你要测试的东西以及测试重点。51Testing软件测试网Oj I |:H5\

    除以上提到的3项之外,还有比较重要的项目有策略(具体就是怎么测)、风险控制(一旦有问题采取什么应急措施)等项目。51Testing软件测试网7eC)_(S#U^

    要把一个计划做得很有实用性,按照笔者的经验,要注意以下几个方面:51Testing软件测试网L1o)V F t^[!D

    a. 上面提到的三要素不能少51Testing软件测试网N;gWlA7GI Ad_

    b. 测试策略一定要交待清楚,就是大概怎么测试51Testing软件测试网3k0w:T6SF+d4d

    c. 需要其他人员(部门)协调的,要交待清楚

    ^On"fOs9h77325

    d. 在估计测试所需的时间、人力及其它资源时,尽量做到客观、准确、留有余地,特别是估计开发时间和debug时间,以及要对自己的执行用例速度,回归速度心里有数51Testing软件测试网:_N]N'[7K

    e. 测试计划中每个阶段要明确表明,并且测试阶段的输入、输出文档要清楚

    ,K,@"\i)Z9iPm/Ws77325

    f. 测试计划中的时间段不宜太长(最好以day为单位),太长就比较模糊,不好度量,不好check51Testing软件测试网2iW2o;O'I

    g. 一定要有风险控制,要不然计划缺乏可执行性

    ~*Dx:HY5z ].F77325

    h. 计划写完之后不是装在兜里,要组织PMDev进行评审51Testing软件测试网#C#a3o#x$FN.|7^

    i. 要不断更新计划,记住:每个计划都是动态的,不是一成不变的

    ;W[H:M3du?77325

    (二) 再说测试用例

    *e8z-V&v7n+v-\ }!Y77325

    和测试计划一样,测试用例很多时候也沦为形式,这是软件测试的可悲之处,软件测试的依据就是测试用例,如果用例弃之不用,你凭什么做好测试?这个很可笑。但是实际测试过程中很多时候测试用例并没用到实处,笔者认为还是用例实用性问题,有的时候用例洋洋洒洒数万字,到回归测试的时候根本用不上,至于如何选择回归测试用例,我曾经写过另一篇文章,欢迎查阅。51Testing软件测试网3[u9NQ7u4Gpi.j

    下面我就个人体会谈谈做好测试用例的关键。

    s+L\?"^H%q2Z-h77325

    首先,在做用例之前,要做两件事情。

    x/h;zzOg77325

    第一, 透彻了解程序(需求和架构)。

    TNw'fK77325

    第二, 做一个正式的测试设计(最好文档化)。然后再开始写用例。一般写用例的步骤和建房子一样,先搭框架,然后填材料,填材料的时候,主要根据需求做相关的设计,具体的设计方法就是那几种(郑老的书上写的很清楚)

    !G\H5o0ek#A0r77325

    一般来说,设计一个比较实用的测试用例,注意如下几个方面:

    /pUe$ZwHb-G;B6C77325

    a. 选用好的用例管理工具(这个很重要,千万不要用wordexcel

    0QQV6c6L d?77325

    b. 用例一定要及时更新(补充新的想法,删除过时的需求)

    rS R]j%Hm77325

    c. 做好用例分级51Testing软件测试网)L tH+K1NJ4@

    d. 做好用例评审,写用例之前可以征询相关人员的意见

    4u^A/].]?8LG77325

    e. 可以考虑结对编写,这个是不错的主意51Testing软件测试网4k?rd:y W

    f. 要全面,包括功能、性能、兼容性、安全性、易用性、容错性等等51Testing软件测试网Ub}"RJ"t8@V*Am

    g. 注意把握适当的颗粒度

    #s6w(Xqa&k77325

    OK,以上是我个人总结的一些心得,希望对您有些帮助,谢谢magic_zhu提这个问题,如果对读者您有些帮助,也不浪费我写到凌晨0点的心血,呵呵~~~~~~~~关于这两个话题太大了,欢迎大家展开讨论!!

    lMe%sY b!k0MB77325

    本文是godn_1981原创,如需转载,请注明出处。

  • 【转】面试进行曲之技术面试(项目经验)

    2012-05-04 17:14:29

    在前期已经讲过怎样分析自己,对自己进行一个准确的定位,选择一个合适的求职方向!并结合自己的实际个人情况来写一份针对性很强的个人简历!个人简历就是个人的广告!好的简历可以更受到用人需求单位青睐!好的简历才能让你获得面试的机会!我们还针对面试列出了j2ee方面的知识点!不管是笔试还是面试都是会考到这些非常重要的知识点!面试的技术内容并不会有想象中的那么难,主要注重基础和细节!细节决定一切!所以列罗的那些知识点是需要下功夫去准备的!当然列罗的那些知识点只是一些在面试中经常会出现的问题集!每家企业都可能超出这些知识点的可能(就不要骂我了)!自己去准备吧!

    技术方面的考核通常分为笔试,技术面试;其中技术面试又分为专业知识面试和项目经验考核。应该说来笔试和专业知识面试都是考核你对某方面(j2ee或.net)知识的掌握和熟练程度!而项目经验考核则是看你是不是拥有项目经验,是不是适合企业的用人需要,是不是需要企业为你付出培养的成本,是不是你能够马上投入到工作中去.企业是以你的项目经验作为衡量你的工资标准的!所以就是会出现有些同学可能在学校学习成绩很好而企业给他开的工资并不高,而有些同学的学习成绩一般反而得到高工资的原因!专业知识的考核只是企业了解你具有这方面的专业素养和能力!其实有时笔试成绩差一点或者你感觉在做笔试题的时候有些题目没有做出来或答错了并没有关系的。在技术面试的时候,在回答专业知识方面的题目不够理想,也并不起决定性的作用!总之笔试和专业知识面试的答题达到企业要求的70%就可以了!当然如果你在专业知识方面表现的太差,考官对你也就没有多大的兴趣了!但是最能决定企业下定决心录用你的关键在于你的项目经验(排除企业特别强调英文等其它方面能力外)。说了这么多好像都没有说到正题,这是因为让大家更清楚的了解回答好项目经验方面的问题是多么的重要。而这方面又正好是刚从学校出来的学员十分薄弱的,并且针对这方面介绍也十分少! 下面我们就来谈谈面试中关于项目经验的问题及应该从哪些方面进行回答!

    问题一、请简单的介绍一下你自己吧!

    分析:这是在任何面试中都会遇到一个题目,看起来这个问题是十分简单的,但是往往我们并不知道考官问这个题目是希望从你的回答中获得什么信息!所以我们就很容易走题,跑题,不入正题!不能马上就吸引考官。请记住抓住面试的每一个机会来推销自己。但是往往我们不知道从哪里谈起。所以我们得先了解考官想要获取什么信息呢?

    1. 你的从业时间 你从事相关的工作有多长了

    2. 你的教育背景 你是否受过良好的教育

    3. 你的工作经验 你是否有过具有一定的工作经验

    4. 你的项目经验 你是否有过丰富的项目经验

    5. 你与众不同之处 你是怎么进行项目开发的,有什么特别之处,或者你在哪些项目中

    取得过哪些成功,或者有哪些自己觉得骄傲的地方

    6. 你最擅长的地方 你最擅长的技术是什么?

    7. 你的性格 你是怎么样的一个人

    怎么回答: 我们一一来分析吧,首先从业时间一般回答你进行软件项目专业开发的时间.千万不要把你以前在大街上卖过鱼蛋或到夜市卖烧鸡等乱七八糟的时间计算进来.工作经验也是,你至少有在一家公司呆过吧.不要告诉我你只学过j2ee或.net半年时间,就想来我公司混饭吃.要和你的简历对应起来.一般至少1年半以上.

    教育背景:如果你上的大学及所上的专业比较对口,就说出来,非否就不要提了.总之是要扬长避短

    工作经验:也就是以前在什么公司上过班,与你简历上的一致就可以了.只说与软件开发的工作经验,其它的就不要提了

    项目经验:你曾经做过的自认为比较好的项目,这里特别重要,先用一句话来概括项目,然后把项目的功能及子功能全部叙述出来.

    你与众不同之处:也以说你在项目你以什么独特的方法获得什么不同的效果,主要是能够结果具体的项目或能举例说出来.

    最擅长的地方:主要告诉对方你最擅长哪方面的技术,是需求分析?编码,或数据库或架构

    你的性格:用一两个词来形容你自己,描述你的性格.

    回答实例:

    面试官:请简单的介绍一下你自己吧!

    令狐冲:您好,在下令狐冲.从事j2ee开发工作3年时间.20002年至2005年在大宋桃花岛软件谷皇室软件公司从事j2ee项目开发.其间开发过大宋侠士综合管理平台.大宋侠士综合管理平台能够自动收集大宋各路侠士,英雄好汉,隐居高人信息并对他们的个人信息及所作所为进行跟踪管理,实现侠士信息维护,查询.侠义事件维护,侠士等级管理,侠士奖惩管理,侠义活动发布,抗灾募捐管理等。鄙人在项目中主要负责需求分析,架构设计和框架类代码实现。在项目开发中善于与客户沟通,充分理解客户需求。具有极强自学能力,在大宋藏经阁中通读了大量的软件项目开发秘籍,具有藏文,印度文,金文的读写能力。

    问题之二、谈谈你的XXX项目吧!

    分析:考官通过看你的简历或者你的介绍来了解你所做的项目,那么考官肯定想更详细的了解您的项目,看是不是与你的简历写的项目经验一致。也就是考核你是否具有真实的项目经验。一般来说,在你的简历至少有一个重点项目,放在简历项目经验栏的第一位。把项目的业务功能描述清楚。在这里你就是重点谈一个项目就可以了。从下面几个方面来进行陈述

    1. 用一句话简述项目

    2. 详细的列出项目实现的功能

    3. 说出项目实现的技术和架构,能说出项目的不寻常之处,比如采用了某项新技术,采用了良好的架框等

    4. 能让别人感觉出项目的规模

    5. 说出你在项目中的责任

    通过这些来证明你是的确开发过了这个项目,并且这个项目是一个真实的。还有就是你是真正具有项目经验的。乎合企业的用人需要。

    特别注意要把项目所实现的功能描述得越详细越好。当然用词要简洁,表达要流利。其次要尽可能采用专业术语,显得你的专业。不要犯低级错误。

    请记住,你要描述的是整个项目而不仅仅是你做的那一个模块。有些项目你只参与了其中一个模块,但是你要把整个项目描述出来,不要仅仅描述你参与的那一个模块。

    说出你项目采用的技术及架构,还要能说明你在项目中的责任。

    回答实例:

    面试官:令狐冲,能介绍一下你做的大宋侠士综合管理平台吧!

    令狐冲:好的,大宋侠士综合管理平台是为大宋武林联盟开发的,实现武林联盟管理的自动化。大宋侠士综合管理平台能够自动收集大宋各路侠士,英雄好汉,隐居高人信息并对他们的个人信息及所作所为进行跟踪管理,实现侠士信息维护,查询.侠义事件维护,侠士等级管理,侠士奖惩管理,侠义活动发布,抗灾募捐管理等。

    系统基于B/S三层架构,采用Spring + Hibernate + Spring MVC框架.使用Oracle数据库.

    本项目只投入15个人,开发周期为6个月。本人在项目中进行了前期的需求分析,系统架构实现,数据库建模,及部分编码工作。

    问题之三、谈谈你们是怎么对这个项目进行开发的?(谈谈你们是怎么进行项目开发的?)

    分析:这个问题是考核你是否熟悉软件开发的流程,同时也是考核你的项目经验,你的专业素养,从这里可以判断出你参与过多少项目,可以判断你对软件工程的理解和熟悉程度。这个问题是十分关键的,你需要准备的知识点有:软件项目的生命周期、软件项目的开发模型、面向对象的分析和设计、软件质量保证等。

    软件项目的生命周期:

    项目计划

    需求分析

    设计(概要设计和详细设计)

    编码

    测试

    发布

    维护

    项目计划阶段:走访客户,进行交流沟通,获得客户原始需求。

    对客户的需求和市场等进行调研,分析,编写可行性分析报告。

    通过不断的与客户沟通,找客户不同环节的用户进行交流来获取需求。召开评审会议,报告可行性分析,报告用户原始需求,报告项目远景规化。

    需求分析阶段:

    在客户原始需求的基础上不断与客户沟通,充分的熟悉和深入客户业务,获得充分的业务需求,完善用户需求和功能性需求,了解客户的相关约束而获得非功能性需求。最终编写《需求规格说明书》;召开需求评审会议,客户确定需求,并签定合同;编写项目计划说明书;编写测试计划;召开项目启动会议,项目正式启动。

    概要设计阶段:根据《需求分析说明书》,进行用例分析,获得充分而有效的用例。编写界面原型,编写编码规范和界面风格规范,数据库设计规范。用uml工具画用例图,编写有效的用例规约文档。划分项目功能模块.评审用例及用例规约文档。

    详细设计阶段:根据完整的用例及需求进行分析,获得数据库所需的相关信息,画数据库E-R图,编写数据设计说明书.进行数据库建模。进行详细的分析,用uml工具画类图,确定每个功能模块的子功能,抽取项目的公共部分成为一个公共模块。确定项目的架构基础。确定需要用到的类及类成员和方法。确定一些辅助类及方法。对每一个用例都用uml工具画出顺序图。编写详细设计说明书,评审详细设计说明书, 进行基础框架搭建。列出任务清单,进行任务分配。

    编码阶段:以小组的形式进行代码编写,编写单元测试用例,每完成一个类都要进行单元测试。每完成一个功能点和模块都要进行集成测试。确保每一个功能点和模块完成后都是一个可以看得见、摸得着的产品。而不是等到最后才进行统一的调试和搭配。每天都要对代码进行检查和优化,也就是所谓的重构。

    测试阶段:根据测试计划对项目进行系统测试,以及用户的验收测试

    产品发布:交付完整的产品和设计文档。把产品布署到客户的计算机上,确保产品的正常运行。客户签收。

    维护阶段:为客户提供技术保障,对产品进行相应的维护和升级工作

    软件常见开发模型

    瀑布模型:最经典的过程模型,适用于需求明确,规模较小的项目

    喷泉模型:迭代,无间隙特点,适用于面向对象的软件开发过程

    螺旋模型:

    MSF模型:微软解决方案过程模型

    什么是极限(XP)编程:极限编程是对敏捷软件开发方法的一种实现。它强调测试先行,也就是在编写代码的时候先编写测试用例;循环迭代,每一次迭代都是一个可用的产品;重构,不断的对代码进行优化;结对编程,两个人为一对共同进行代码编写;它强调团队之间的知识传播,让团队的每个人都能熟悉软件开发的各种技术。如:支持熟悉数据库的人去做界面,做界面的人去做数据库等,通过不定期的角色转换来增强团队的能力。要求客户参与到软件开发中来,开发出最适合客户需求的产品。

    单元测试一般是在编码的时候同步进行的,一般是以类为单位进行测试,当一个类完成了编码,并编译正确后才进行的测试,测试这个类是否已经能够实现指定的功能。一个类能够正常的编译成功并不意味着这个类就已经完成了,还要通过测试,设置断言来确定他是否已经达到了预期的效果,实现了特定的功能。调试,编译通过只能证明代码的语法没有错误。

    单元测试由程序员自己来进行,也可以在项目小组内交互进行。单元测试是采用白盒测试

    集成测试一般指实现了一个功能点或一个模块后,为了测试这个模块是否已经实现了需求要求的功能。集成测试可能需要对多个类进行组装,也可能需要与以前已经测试通过的模块进行组装,是对产品组件的系统整合和执行。集成测试可以根据模块的大小分不同的级别,在现行的软件开发中,每完成一个功能模块都必须要进行一次集成测试,使得你完成的模块是一个可以运行的产品。集成测试一般可以由项目小组的负责人(或指定一个小组成员)来完成。集成测试采用白盒式测试和黑盒测试

    系统测试一般指项完代码已经全部完成,交给测试小组来进行测试。进行系统测试的人员独立于开发小组,系统测试人员把完成的产品布署在相应的计算机环境中,按照测试计划进行测试,验证系统是否满足了指定的需求。系统测试除了测试产品应满足基本的功能需求外,还要对产品的性能,用户界面,安全性,压力,可靠性,安装和反安装等几个方面进行测试

    系统测试采用黑盒测试

    验收测试一般指产品交付给客户,负责把产品布署在指定的计算机环境中。由用户根据需求文档,进行的总体测试。验收测试的内容和系统测试一样,只是执行者不同。都是除了测试系统完成基本功能外还要对性能,安全性,可靠性等进行测试。验收测试也是采用黑盒测试

    为什么需要测试?测试是对软件质量的保证,只能通过严格测试的软件才是合格的软件,测试并不是说让软件能够编译通过,测试是让软件产品最大程度的满足客户的需求度。

    回答实例:

    考官:令狐冲,能谈谈你们是怎么样对这个项目开发的吗?

    令狐冲:首先,我们这个项目已经有了一个基本的用户原始需求。但这是不够的,我们都知道需求分析是十分重要的,所以我们在用户原始需求文档的基础上,再次进行了分析,通过不断的与客户沟通,充分的了解和熟悉用户的业务,完善了业务需求和功能需求。还对用户业务需求和功能需求分析完善为实现软件的必须的非功能性需求。得出项目需求规格说明书,经过评审会议确认通过。

    根据需求规格说明书进行用例分析,通过分析和讨论找出充分的有效用例,并用Rose画用例图。对每一个用例进行详细的分析,完成每个用例的用例规约文档,并编写界面原型。划分项目模块。最后对用例及用例规约文档进行评审验证。编写”代码编写规范”及界面风格规范,数据库设计规范,编写概要设计说明书。

    根据需求规格说明书和分析各个用例规约文档,获得数据库的基本信息原型。也可以说是数据库表的草稿,根据数据库表草搞进行分析,进行数据库设计和优化。编写数据库设计说明书。采用PowerDesigner进行数据库建模,并生成SQL脚本。确定项目框架,设计公共模块和辅助类。根据对数据库模型和用例规约文档的分析,列出对象清单和理清对象关系。用Rose来画类图。对每一个用例都用rose画出时序图。编写详细设计说明书。列出任务清单,分组进行代码编写。

    在代码编写阶段,先统一完成所有的实体类。对于非实体类则先完成类的框架,也就是只写方法和注释文字。具体方法的实现暂时为空。然后再进行代码填写。每完成一个类的代码编译通过后都要进行重构和单元测试。每完成一个功能和模块都由会由小组长进行集成测试。使得完成的模块是一个真正可以运行的,可见的功能实现。

    在各个小组都完成自己的模块后就进行模块整合,进行一次大规模的集成测试。然后把产品产给产品测试小组进行系统测试。

    问题之四、你们是怎么保证软件开发的质量的?

    分析:这个问题其实上面的讲解已经给了答案了。软件质量是软件实现对需求的满足度。开发的软件越满足客户的需求,说明软件的质量越高。反之就是质量越低。尽管你开发的软件使用了新的技术,良好的设计,丰富的功能;但是这些功能都不是客户需要的,客户需要的功能没有实现或者是很多没有实现。这样的软件也是失败的软件。为了保证软件质量,也就是让开发的软件最大程度满足客户的需求,只有两个方法。一个是获得充分完整的需求,二是能过测试,以需求为中心编写测试计划。来保证软件合乎需求。

    回答实例:

    考官:你们是怎么来保证软件的质量的呢?

    令狐冲:要保证软件的质量首先就要获得完整的需求,在需求分析阶段做了大量的工作与客户各个环节的代表性用户进行沟通,充分了解和熟悉客户的业务。并且从需求到设计阶段都保持与用户的沟通和交流。让用户的业务专家一直参与我们的需求,分析和设计工作。

    其次我们会在需求分析后就编写测试计划,在开发的每个阶段都进行相应的测试来保证代码是乎合相应需求的。在代码编写过程中,每完成一个类都由程序进行单元测试,每完成一个功能点或模块都要进行集成测试,每一次集成测试都对上一次的已经测试通过的产品进行迭代, 也就是以前测试成功的都会加入到本次测试中来。使得每个完成的功能和模块完成后都是一个可以运行的,可以看得到的产品;同时也欢迎用户来见证我们的集成测试结果。代码编写完成后进行最后一次集成测试,然后交由独立的测试小组对项目进行系统测试。

    问题之五、你为什么离职的?(你为什么离开以前公司的?)

    分析:这个问题几乎在任何场合的面试都会有,有时是在技术面试的时候问,有时是在人事面试的时候问,有时会在技术面试和人事面试的时候都问。其实也比较好回答,回答的抽象一点比好。切记不要说以前公司的坏话,如果你这样做。人家会想,你以后离职后同样也会说这家公司的坏话.一般都是说为了某求更好的发展空间。让人感觉你是经过深思熟虑后才选择他们公司的。

    回答实例:

    考官:你为什么离开以前公司的?

    令狐冲:以前公司对我很好,我在以前公司干得也很愉快。我因为合同到期,为了获得更好的发展空间及谋求对自己能持续发展的环境。并向公司办理了离职手续,完成了工作交结。(后面这句也可以不谈)

    问题之六、谈谈你的职业规化

    分析:企业都希望他所招聘的人是潜力股,看你是不是一个追求上劲的人,还有想看看你能够在企业长期干还是仅把其当着一个跳板。总的说来,回答这个问题要让人觉得你是一个可培养,有潜力人。记住要看是什么样的人来面试你。如果是项目经理来面试你,你就不要说你以后的职业规化是项目经理。你就可以说你的职业规化是成为架构师,或者是技术专家等。否则他可能会认为你是一个对其有威胁的人。就算他内心知道这不算什么,可能心理总会有一点点不爽。如果是老总面试或人事问你这样的问题,你则可以说项目经理也无妨,不过要给人有一种觉稳的感觉。

    回答实例:

    考官:你的职业规化是怎么样的呢?(考官是项目经理)

    令狐冲:我思维能力比较强,擅于逻辑分析。在之前的工作中积累了一定的架构经验,以后就想成为一名架构师和技术专家

    写在最后:上面的这些问题都是面试中十分常见的的问题,比较难以回答的。有些看似简单却不知从何说起。有些看似复杂却又并不复杂。因为很多人都缺少项目经验,对软件开发的过程相对陌生,而老师讲这方面的知识也比较少,如果你没有一定的代码和项目积累就算老师讲你也很难去体会、理解。再说这方面的内容太要求实际经验和日月积累,老师也不好讲。现在我采用把枯燥的概念和实际的项目结合起来进行归纳,从而形成这样一个答题技巧。并且对其中的一些技术结合实际进行分析和总结。希望阅读者能快速的知其然也知其所以然。从而能够提高面试的成功率。当然这仅仅是一个答题技巧,关键还是需要知识的积累。有道是“不积跬步,无以至千里;不聚细流,不以成江河”。这次完成此文也是我自己对知识的一次梳理,我并没有去查阅和考证书本。我想完全通过自己的语言来描述项目开发的过程和一些细节。又因我实在是才疏学浅,真的希望大家能对我的不当及错误之处指出并加以指教,我就涕感泪流了。不管是技术还是人生,我才刚刚上路呢!



  • 【转】常见软件测试面试题

    2012-05-02 14:36:05

    问题一:为什么要在一个团队中开展软件测试工作
    任何软件在开发过程中都会留下缺陷,带有缺陷的软件产品如果提交出去,可能会给公司带来不可估量的损失,我们必须在客户之前发现尽可能多的问题,从而保障客户满意。而发现问题的这个过程称之为测试。

    问题二:简述你在以前的工作中做过哪些事情,比较熟悉什么。
          此问题每个人都不一样。我自己的答案如下。
    我主要的工作是系统测试自动化测试,也曾少量涉及性能测试。在系统测试中,主要是对BOSS系统的业务逻辑功能,以及软交换系统的Class 5特性进行测试。性能测试中,主要是进行的压力测试,在各个不同数量请求的情况下,获取系统响应时间以及系统资源消耗情况。自动化测试主要是通过自己写脚本以及一些第三方工具的结合来测试软交换的特性测试。

    问题三:你所了解的的软件测试类型都有哪些,简单介绍一下。
    1.
    基本功能验证。主要是对发布的版本进行一些最主要功能的测试。英文常见叫法是Smoking Test, Basic Verification Test或者Sanity Check
    2.
    功能测试。主要是依据需求或者需求分析文档,对所发布的版本进行测试,看看是否满足需求,是否出现了不必要的功能。
    3.
    单元测试。是开发人员进行的测试之一,一般是开发人员对很小的模块,比如函数进行测试,一般来说,开发人员还需要开发相应的测试桩来进行此类测试。
    4.
    集成测试。在大型的开发过程中,软件是模块化进行开发的,将不同的模块揉合在一起的话,需要进行的测试就是集成测试。
    5.
    系统测试。当软件提交给测试组后,是对整个系统的所有功能进行测试,一般来说,功能测试是系统测试的一个部分。
    6.
    压力测试。主要是在很大性能的情况下,这个性能已经接近了系统的极限,看看系统运转的情况。
    7.
    负载测试。主要是用各种不同的性能去检测系统,采集各个数据在这些性能情况下的数据。
    8.
    黑盒测试。指系统对你来说是完全不透明的,只给你留下了输入和最终输出,这个是功能测试的方法之一。
    9.
    灰盒测试。指在了解部分系统内部工作机制的情况下,对于系统进行的覆盖性测试。
    10.
    白盒测试。主要是在单元测试和集成测试的情况下,开发人员已知代码,对这一段的代码进行全路径的覆盖测试。
    11.
    界面测试。主要是看用户界面的友好性和易用性,是否有文字或者排版错误,是否有输入限制等等。
    12.
    回归测试。一般是系统发现BUG,开发人员修改后,和BUG直接相关以及可能相关的功能进行的测试。
    13.
    安装和卸载的测试。
    14.
    恢复测试。主要是一个系统在发生了灾难的情况下,从错误中是否容易恢复。
    15.
    兼容性测试。一个系统在不同的语言,操作系统下的系统测试。
    16.
    安全测试。系统在遇到攻击或者类似情况下的表现。
    17.
    Alpha
    测试。系统在给最终用户前,测试人员在实验室中模拟最终用户的测试。
    18.
    Beta
    测试。由部分最终用户通过使用来进行的测试。
    19.
    比较测试。和其他具有相同或者类似功能的系统进行对比的测试。
    20.
    验收测试。一般是最终用户在接受产品前,依据自己所提出的要求进行的测试,很多情况下,验收测试可能委托第三方机构完成。

    问题四:测试计划工作的目的是什么?测试计划文档的内容应该包括什么?其中哪些是最重要的?
    软件测试计划是指导测试过程的纲领性文件。
    包含了产品概述、测试策略、测试方法、测试区域、测试配置、测试周期、测试资源、测试交流、风险分析等内容。借助软件测试计划,参与测试的项目成员,尤其是测试管理人员,可以明确测试任务和测试方法,保持测试实施过程的顺畅沟通,跟踪和控制测试进度,应对测试过程中的各种变更。
    测试计划和测试详细规格、测试用例之间是战略和战术的关系,测试计划主要从宏观上规划测试活动的范围、方法和资源配置,而测试详细规格、测试用例是完成测试任务的具体战术。所以其中最重要的是测试测试策略和测试方法(最好是能先评审)。

    问题五:你认为做好测试计划工作的关键是什么?
    1.
    明确测试的目标,增强测试计划的实用性
    编写软件测试计划得重要目的就是使测试过程能够发现更多的软件缺陷,因此软件测试计划的价值取决于它对帮助管理测试项目,并且找出软件潜在的缺陷。因此,软件测试计划中的测试范围必须高度覆盖功能需求,测试方法必须切实可行,测试工具并且具有较高的实用性,便于使用,生成的测试结果直观、准确
    2.
    坚持“5W”规则,明确内容与过程
    5W”规则指的是“What(做什么)”、“Why(为什么做)”、“When(何时做)”、“Where(在哪里)”、“How(如何做)”。利用“5W”规则创建软件测试计划,可以帮助测试团队理解测试的目的(Why),明确测试的范围和内容(What),确定测试的开始和结束日期(When),指出测试的方法和工具(How),给出测试文档和软件的存放位置(Where)。
    3.
    采用评审和更新机制,保证测试计划满足实际需求
    测试计划写作完成后,如果没有经过评审,直接发送给测试团队,测试计划内容的可能不准确或遗漏测试内容,或者软件需求变更引起测试范围的增减,而测试计划的内容没有及时更新,误导测试执行人员。
    4.
    分别创建测试计划与测试详细规格、测试用例
    应把详细的测试技术指标包含到独立创建的测试详细规格文档,把用于指导测试小组执行测试过程的测试用例放到独立创建的测试用例文档或测试用例管理数据库中。测试计划和测试详细规格、测试用例之间是战略和战术的关系,测试计划主要从宏观上规划测试活动的范围、方法和资源配置,而测试详细规格、测试用例是完成测试任务的具体战术。

    问题六:常见的测试用例设计方法都有哪些?请分别以具体的例子来说明这些方法在测试用例设计工作中的应用。

    1.         等价类划分

    划分等价类: 等价类是指某个输入域的子集合.在该子集合中,各个输入数据对于揭露程序中的错误都是等效的.并合理地假定:测试某等价类的代表值就等于对这一类其它值的测试.因此,可以把全部输入数据合理划分为若干等价类,在每一个等价类中取一个数据作为测试的输入条件,就可以用少量代表性的测试数据.取得较好的测试结果.等价类划分可有两种不同的情况:有效等价类和无效等价类.

    2.         边界值分析法

      边界值分析方法是对等价类划分方法的补充。测试工作经验告诉我,大量的错误是发生在输入或输出范围的边界上,而不是发生在输入输出范围的内部.因此针对各种边界情况设计测试用例,可以查出更多的错误.

      使用边界值分析方法设计测试用例,首先应确定边界情况.通常输入和输出等价类的边界,就是应着重测试的边界情况.应当选取正好等于,刚刚大于或刚刚小于边界的值作为测试数据,而不是选取等价类中的典型值或任意值作为测试数据.

    3.         错误推测法

      基于经验和直觉推测程序中所有可能存在的各种错误, 从而有针对性的设计测试用例的方法.

      错误推测方法的基本思想: 列举出程序中所有可能有的错误和容易发生错误的特殊情况,根据他们选择测试用例. 例如, 在单元测试时曾列出的许多在模块中常见的错误. 以前产品测试中曾经发现的错误等, 这些就是经验的总结. 还有, 输入数据和输出数据为0的情况. 输入表格为空格或输入表格只有一行. 这些都是容易发生错误的情况. 可选择这些情况下的例子作为测试用例.

    4.         因果图方法

    前面介绍的等价类划分方法和边界值分析方法,都是着重考虑输入条件,但未考虑输入条件之间的联系, 相互组合等. 考虑输入条件之间的相互组合,可能会产生一些新的情况. 但要检查输入条件的组合不是一件容易的事情, 即使把所有输入条件划分成等价类,他们之间的组合情况也相当多. 因此必须考虑采用一种适合于描述对于多种条件的组合,相应产生多个动作的形式来考虑设计测试用例. 这就需要利用因果图(逻辑模型). 因果图方法最终生成的就是判定表. 它适合于检查程序输入条件的各种组合情况.

    5.         正交表分析法

    有时候,可能因为大量的参数的组合而引起测试用例数量上的激增,同时,这些测试用例并没有明显的优先级上的差距,而测试人员又无法完成这么多数量的测试,就可以通过正交表来进行缩减一些用例,从而达到尽量少的用例覆盖尽量大的范围的可能性。

    6.         场景分析方法

    指根据用户场景来模拟用户的操作步骤,这个比较类似因果图,但是可能执行的深度和可行性更好。


    问题七:您认为做好测试用例设计工作的关键是什么?

    白盒测试用例设计的关键是以较少的用例覆盖尽可能多的内部程序逻辑结果

    黑盒法用例设计的关键同样也是以较少的用例覆盖模块输出和输入接口。不可能做到完全测试,以最少的用例在合理的时间内发现最多的问题


    问题八:详细的描述一个测试活动完整的过程。

    1.         项目经理通过和客户的交流,完成需求文档,由开发人员和测试人员共同完成需求文档的评审,评审的内容包括:需求描述不清楚的地方和可能有明显冲突或者无法实现的功能的地方。项目经理通过综合开发人员,测试人员以及客户的意见,完成项目计划。然后SQA进入项目,开始进行统计和跟踪

    2.         开发人员根据需求文档完成需求分析文档,测试人员进行评审,评审的主要内容包括是否有遗漏或者双方理解不同的地方。测试人员完成测试计划文档,测试计划包括的内容上面有描述。

    3.         测试人员根据修改好的需求分析文档开始写测试用例,同时开发人员完成概要设计文档,详细设计文档。此两份文档成为测试人员撰写测试用例的补充材料。

    4.         测试用例完成后,测试和开发需要进行评审。

    5.         测试人员搭建环境

    6.         开发人员提交第一个版本,可能存在未完成功能,需要说明。测试人员进行测试,发现BUG后提交给BugZilla。

    7.         开发提交第二个版本,包括Bug Fix以及增加了部分功能,测试人员进行测试。

    8.         重复上面的工作,一般是3-4个版本后BUG数量减少,达到出货的要求。

    9.         如果有客户反馈的问题,需要测试人员协助重现以及回归测试。


    问题九:以往是否曾经从事过性能测试工作?请尽可能的详细描述您以往的性能测试工作的完整过程。

           曾经做过一套网管系统的性能测试,主要测试该软件在同时管理大量终端的情况下,在响应时间,CPU/磁盘/内存等参数是否满足要求。

           也曾经做过软交换系统的呼叫性能测试,主要是测试软交换系统在有大量呼叫的情况下,响应时间,呼叫成功率,CPU/磁盘/内存等参数是否满足设计要求。


    问题十:您在从事性能测试工作时,是否使用过一些测试工具?如果有,请试述该工具的工作原理,并以一个具体的工作中的例子描述该工具是如何在实际工作中应用的。

           测试网管系统中,使用的Mimic来模拟终端,能够大量的节省成本。

           测试软交换系统的时候,使用的Prolab来模拟终端并发送呼叫软交换,他完成了同时数百人才能完成的摘机拨号工作,主要工作原理是产生一些符合要求的IP包并发送给软交换系统,同时对软交换系统的回应进行处理,决定下一步动作。


    问题十一:您认为性能测试工作的目的是什么?做好性能测试工作的关键是什么?

    主要是保障在大量用户的情况下,服务能正常使用。

    补充:

    性能测试目的:1、检验系统性能是否达到了预期目标;2、对系统性能进行进一步改进提高
    性能测试关键:1、做好性能需求分析和测试计划的制定
    2、合理的场景分析
    3、准确的瓶颈定位


    问题十二:在您以往的工作中,一条软件缺陷(或者叫Bug)记录都包含了哪些内容?如何提交高质量的软件缺陷(Bug)记录?

    1.         在传统的BugZilla中,BUG描述应该包括以下的信息

    2.         和BUG产生对应的软件版本

    3.         开发的接口人员

    4.         BUG的优先级

    5.         BUG的严重程度

    6.         BUG可能属于的模块,如果不能确认,可以用开发人员来判断

    7.         BUG标题,需要清晰的描述现象

    8.         BUG描述,需要尽量给出重新Bug的步骤

    9.         BUG附件中能给出相关的日志和截图。

           高质量的BUG记录就是指很容易理解的BUG记录,所以,对于描述的要求高,能提供的信息多且准确,很好的帮助开发人员定位。

    问题十二:BUG管理工具的跟踪过程

           用BugZilla为例子      

    测试人员发现了BUG,提交到Bugzilla中,状态为new,BUG的接受者为开发接口人员

    开发接口将BUG分配给相关的模块的开发人员,状态修改为已分配

    开发人员和测试确认BUG,如果是本人的BUG,则设置为接收;如果是别的开发人员的问题,则转发出去,由下一个开发人员来进行此行为;如果认为不是问题,则需要大家讨论并确认后,拒绝这个BUG,然后测试人员关闭此问题。

    如果开发人员接受了BUG,并修改好以后,将BUG状态修改为已修复,并告知测试在哪个版本中可以测试。

    测试人员在新版本中测试,如果发现问题依然存在,则拒绝修改;如果已经修复,则关闭BUG。


    问题十二:您认为在测试人员同开发人员的沟通过程中,如何提高沟通的效率和改善沟通的效果?维持测试人员同开发团队中其他成员良好的人际关系的关键是什么?

           尽量能有面对面的沟通,如果做不到,那么尽量能直接通过电话沟通,如果只能通过Email等非及时沟通工具的话,强调必须对特性的理解深刻以及能表达清楚。

           一是真诚,二是团队精神,三是在专业上有共同语言,当然也可以通过直接指出一些小问题,而不是进入BUG Tracking System来增加对方的好感。


    问题十三:在您以往的测试工作中,最让您感到不满意或者不堪回首的事情是什么?您是如何来对待这些事情的?

           某次性能测试覆盖不足,造成系统崩溃。


    问题十四:你对测试最大的兴趣在哪里?为什么?

    最大的兴趣就是测试有难度,有挑战性!做测试越久越能感觉到做好测试有多难。曾经在无忧测试网上看到一篇文章,是关于如何做好一名测试工程师。一共罗列了11,12点,有部分是和人的性格有关,有部分需要后天的努力。但除了性格有关的1,2点我没有把握,其他点我都很有信心做好它。

    刚开始进入测试行业时,对测试的认识是从无忧测试网上了解到的一些资料,当时是冲着做测试需要很多技能才能做的好,虽然入门容易,但做好很难,比开发更难,虽然当时我很想做开发(学校专业课我基本上不缺席,因为我喜欢我的专业),但看到测试比开发更难更有挑战性,想做好测试的意志就更坚定了。

    我觉得做测试整个过程中有2点让我觉得很有难度(对我来说,有难度的东西我就非常感兴趣),第一是测试用例的设计,因为测试的精华就在测试用例的设计上了,要在版本出来之前,把用例写好,用什么测试方法写?(也就是测试计划或测试策略),如果你刚测试一个新任务时,你得花一定的时间去消化业务需求和技术基础,业务需求很好理解(多和产品经理和开发人员沟通就能达到目的),而技术基础可就没那么简单了,这需要你自觉的学习能力,比如说网站吧,最基本的技术知识你要知道网站内部是怎么运作的的,后台是怎么响应用户请求的?测试环境如何搭建?这些都需要最早的学好。至少在开始测试之前能做好基本的准备,可能会遇到什么难题?需求细节是不是没有确定好?这些问题都能在设计用例的时候发现。

    第二是发现BUG的时候了,这应该是测试人员最基本的任务了,一般按测试用例开始测试就能发现大部分的bug,还有一部分bug需要测试的过程中更了解所测版本的情况获得更多信息,补充测试用例,测试出bug。还有如何发现bug?这就需要在测试用例有效的情况下,通过细心和耐心去发现bug了,每个用例都有可能发现bug,每个地方都有可能出错,所以测试过程中思维要清晰(测试过程数据流及结果都得看仔细了,bug都在里面发现的)。如何描述bug也很有讲究,bug在什么情况下会产生,如果条件变化一点点,就不会有这个bug,以哪些最少的操作步骤就能重现这个bug,这个bug产生的规律是什么?如果你够厉害的话,可以帮开发人员初步定位问题。


    问题十五:你的测试职业发展目标是什么?

    测试经验越多,测试能力越高。所以我的职业发展是需要时间累积的,一步步向着高级测试工程师奔去。而且我也有初步的职业规划,前3年累积测试经验,按如何做好测试工程师的11,12点要求自己,不断的更新自己改正自己,做好测试任务。


    问题十六:你自认为测试的优势在哪里?

    有韧性

    有能力面对挑战

    有信心做好每一件事情

    有比较好的教育背景

    从以前的经理处都得到了很好的评价表明我做的很好


    问题十七:当开发人员说不是BUG时,你如何应付?

    如果确实是自己理解错误,则承认错误,没什么大不了

    如果是需求不明,请项目经理补充清楚

    如果双方理解不一致,且都不能互相说服,则请项目经理判断。


    问题十八:你为什么想离开目前的职务?


    问题十九:你对我们公司了解有多少?


    问题二十:你找工作时,最重要的考虑因素为何?

    工作的性质和内容是否能让我发挥所长,并不断成长。


    问题二十一:为什么我们应该录取你?

    您可以由我过去的工作表现所呈现的客观数据,明显地看出我全力以赴的工作态度。


    问题二十二:请谈谈你个人的最大特色。

    我的坚持度很高,事情没有做到一个令人满意的结果,绝不罢手。


    问题二十三:一个测试工程师应具备那些素质和技能?


    问题二十四:集成测试通常都有那些策略?

           自上而下,自下而上,平面集成


    问题二十五:测试结束的标准是什么?

           从微观上来说,在测试计划中定义,比如系统在一定性能下平稳运行72小时,目前Bug Tracking System中,本版本中没有一般严重的BUG,普通BUG的数量在3以下,BUG修复率90%以上等等参数,然后由开发经理,测试经理,项目经理共同签字认同版本Release。

           如果说宏观的,则是当这个软件彻底的消失以后,测试就结束了。


    问题二十六:软件验收测试除了alpha,beta测试以外,还有哪一种?

    第三方验收测试


    问题二十七:为什么选择测试这行?

    最开始么,公司安排的,然后么,干一行爱一行,发现测试中间还是有很多东西需要学习的,再就是测试中有很多东西值得改进和研究。


    问题二十六:为什么值得他们公司雇用?

          用自己的经验和其他同事一起发现更多的问题,同时不同行业的观点可以互相借鉴。


    问题二十七:如果我雇用你,你能给部门带来什么贡献?

          分享我的测试经验和测试技能,提高测试部门技术水平

  • 【转】在做性能测试之后需要知道些什么

    2012-03-14 17:55:23

     
    之前写过一篇《在做性能测试之前应该知道什么》有博文,自我感觉讲的不好,举了两个例子,和做性能测试之前需要知道的一些要点。离我的题目有差距。二则觉得讲的不全。其实,要做性能测试需要知道的东西太多了。岂是一篇博文都能说全的。在这里表示一下愧疚之情。

      好多测试新手,在做完性能测试之后,不知如何对测试数据进行分析。在这里我想谈谈一些性能测试参数的相关知识。当然,也不是一篇博文就能说清道明的。只希望在你的测试道路上能给你一丝帮助。

      不怕啰嗦的再次忠告,那想成为测试高手的新人,多学学基础知识。别把过多的时间放在研究新工具的使用上。工具何其多,原理差不多。不要本末倒置了。也算是自我提醒吧!

      性能测试常见指标

      性能测试说白了就是通过工具模拟多个用户对被测系统进行访问。然后查看系统对于多个用户发来请求的处理能力。

      左边的两个小人表示两个用户,向右边服务器发送请求,然后得到服务器的响应信息。

      首先,我们要保证向服务器发送的请求的正确性,当然用户向服务器发送错误的请求,服务器也会个客户端响应信息,但响应的是报错信息;所以,为了保证测试数据的有效性,我们的要保证发送请求的正确性。

      为什么一般的性能测试要在局域进行?

      一般我们的性能测试都是在局域网中进行的。为什么一定要在局域网中进行呢?因为局域网中不受网络限制。这个说法不能绝对。但是一般测试工具的用户并发量是不会受到局域网带宽的限制,除非你做的是十万,百万级别的用户并发。相信懂一点网络知识的人都知道,当你上网很慢的时候,比如打开某某网站很慢,你肯定会骂电信的网络不给力,而不会骂这个网站响应速度不给力。因为,请求信息的耗时大部耗在传输过程中。

      所以,刚做测试时,我们群里热议论,如果我们每个人都开一个压力工具对百度网站进行加压。百度,服务器会不会挂掉。有测友说这样是不道德人。呵呵!其实,完全不必有这个担心。就一般人家用的带宽,我确保,你向百度服务器发送的请求大部分都死在半路上,就算不死到了百度服务器已经不能叫并发了。何况百度服务器的集群技术以及其他各种分压技术。所以,做性能测试不了解被测系统的架构,以及各种技术的性能。很难做出有效的测试报告。

      下面我们看看性能测试的一些技术指标。

      Work Load = Virtual Users

      工作负荷 = 虚拟用户数

      对服务器产生多大压力,可以由多少用户同时对服务器发送请求来衡量。也就是服务器的性能可以看它同时处理多少用户发送来的请求来衡量。

      虚拟用户数可以用进程或线程的方式进行模拟。

      response time  响应时间

      从客户端将数据包发出,到接收到服务器端发来的请求。这个过程的总体时间叫response time

      这个时间用来衡量的处理请求的速度(抛出网速限制的前提下)

      throughput ~Ti & To

      这个表示,吞吐量,吞吐量越大表示系统性能越强。1个用户跑100天和10个用户跑1分钟。当然是1个用户跑100天的吞吐量大。所以,我们要想看系统的性能应该用“吞吐率”,就是单位时间的吞吐量,比如吞吐量/秒。

      站在服务器端,T-in表示“吞”;T-out表求“吐”

      Ti:T-in 主要衡量客户端的能力,看客户端往服务器发送的请求数据包的吞吐率。

      To: T-out 主要衡量的服务器端的能力,看服务器处理返回请求数据包的吞吐率。

    Hits/Request

      网页点击数/请求

      Response/Successful Response

      响应/成功的响应

      Request与Response是对应,一个请求对应一个响应。但当客户端对服务器的压力达到一直程度后,不是每一请求都能得到响应的。去年末火了个最牛B的“电子商务”网站。12306(铁路网上订票系统),虽然有很差的用户体验,但每天还是大把的人拼命的登录(过年回家的人伤不起),甚至用外挂登录。见有网友云云点击(请求)了几十几百次才订票(响应)成功。所以,成功响应率也是很重要的一个指标。客户端发送一千个请求的成功得到响应的几率。

      Hits Per Second

      每秒中点击次数

      和吞吐量一样,单单用点击数(hits)来衡量系统也是不合理的。所以,用每秒钟的点击数才能衡量出服务器的处理能力。

      响应时间图分析

      横坐标表示用户数

      纵坐标表示时间

      红色虚线,表求的是一种系统的理想状态。

      当服务器处理10个用户请求时所用的时间是2秒(假设),当服务器处理200用户请求时所用的时间也是2秒。所以说这种状态是一种理想的状态。现实中,不管是如何超级强的服务器当用户数达到一定数量时,响应时间必会变慢。

      蓝色斜线,是服务器常见的一种曲线状态。

      服务器的响应时间虽然用户数量的增加逐渐变慢。

      当系统出现这种斜线,应该说系统性能是相当健壮的。随着用户的增长响应时间逐渐变长。

      黑色曲线,个人觉得是服务器处理能力的真实曲线状态。

      为什么说黑线才是真实服务器处理能力的曲线呢?当用户处理一个用户请求是2秒(假设),当处两个用户请求是马上变成3秒(假设),当处理3个用户请求时变成4秒(假设)。再差的服务器也有个处理范围,比如是,100用户同时并发,服务器可以轻松应对,不管是10个用户还是80个用户同时请求,服务器都可以即可响应(请参考理发店模式)。只有当用户数量达到某个数量点后,服务器性能急剧下降。如上图黑色十字星处就是系统的拐角点。

      我们假设有一个门,在一个时间点上可同时过10个人,不管你是同时来3个还是10个都可以在同一时间点过门,假如来了11个人,必然有一个人要等10个人过门之后才能过。那么当超过10人来过门时,过门的速度就开始变慢。那么10就是服务器性能的拐角点。我们通常做压力测试找服务器的拐角点是很重要的任务之一。

      关蓝色曲线与黑色区线只是我们常见两种曲线。现实的测试中可能出现各种样式的曲线。当然还要看你做测试的细度,比如,10个用户是系统的拐点,如果你做完5个用户的一轮测试后,就是20用户的测试。那么画出来的曲线就变成斜线,拐点将被护忽略掉。

    吞吐率图分析

      横坐标虚拟用户数

      纵坐标有吞吐率(服务器端)

      红色虚线,表示一种理想的状态。

      随着用户数量的增加吞吐率也在持续增加。

      黑色曲线,表示现实系统的吞吐率状态。

      刚开始吞吐率随着用户数量的增加逐渐变大,当大到一定程度时,逐渐平缓直到变成一条平线。

      如果用户还在持续增加中,那么吞吐率有可能下降,直到系统挂掉。

      为什么会是这样呢?我们通过另一个例子来说,大家都在城市生活,相信上下班高峰期都会遇到堵车。在比较重要的红绿灯路口常会见到堵车现象。假如每个绿灯可以通过10辆,前期来三五辆车,遇到绿灯,一次都过去了。到了下班高峰期,车子变多,一下来了20辆,但这个路口的绿灯每天只能通过10辆,所以,这个时候,路口的通过率不会根据车辆的增加而继续增加。

      好的系统好像好有个好的交警在位置秩序,虽然车辆还在增加,但每个车辆都有条不紊等待通过路口。

      不好的系统如路口赶上交警拉肚子,车辆在增加,后面车辆等得不耐烦就往前挤,结果稿得互不相让。好嘛!之后还每个绿灯可通过10辆,现在只能有一辆车从夹缝中脱离苦海了。

      响应时间图与吞吐率图并不是我们一轮性能测试下来就能得到结果。需要经过多轮测试才能得到。设置不同的用户数量,得到每次的测试数据,将每次数据连接,从而得到最终系统性能曲线。关于用户数量每次增加的数量自己把握。如果,想精确,可以每次增加1个用户的方式来做,不过这样势必加大工作量,也没必要。这个需要每做完一轮测试后对数据进行分析,然后确定下轮测试所要设置的虚拟用户数。

      关于,性能指标的分析,就先谈到这里。关于内容,我反复经过思考,但难免有理解有误之处。还望高手点拨。共同进步。

  • 手把手教你如何使用Xenu处理网站死链

    2012-03-14 17:40:35

    今天教大家如何使用Xenu查链接工具对网站死链接进行处理,有图有真相,轻松四步教你熟练使用Xenu工具对网站死链进行彻底处理,保持网站内部链接的畅通,让网站排名更“给力”。

    第一,打开软件,点击“文件”,选择“检查网址”。

    第二,输入网址,点“确定”。

    第三,选择描红的错误链接,右击选择“属性”。

    第四,根据死链的网址以及锚文本,对所链网页进行查找,修改(这里,说下具体意思:页面网址就是死链网址,标题或链接文本就是锚文本,页面链接到这里是指链接到死链页面的其它网站页面)。

    Xenu工具的使用就说完了,小熊在这里结合自己的一些经验给大家提供以下几个修改方面的思路:1)如果“页面链接到这里”选项中的网址不多,可以选择删除死链网址或者页面;2)如果“页面链接到这里”中的网址较少,可以具体根据“页面网址”“标题或链接文本”两个选项到其页面源代码中进行查找并修改。

  • Linux下使用rsync最快速删除海量文件的方法

    2012-03-14 17:19:09

    昨天遇到了要在Linux下删除海量文件的情况,需要删除数十万个文件。这个是之前的程序写的日志,增长很快,而且没什么用。这个时候,我们常用的删除命令rm -fr * 就不好用了,因为要等待的时间太长。所以必须要采取一些非常手段。我们可以使用rsync来实现快速删除大量文件。

    1、先安装rsync:

    1 yum install rsync

    2、建立一个空的文件夹:

    1 mkdir /tmp/test

    3、用rsync删除目标目录:

     
    1 rsync --delete-before -a -H -v --progress --stats /tmp/test log

    这样我们要删除的log目录就会被清空了,删除的速度会非常快。

     

    转自:http://www.centos.bz/2011/09/linux-rsync-remove-files/

  • rsync服务器架设(数据同步|文件增量备份)-2

    2012-03-14 17:03:25

    注:指定文件目录所在位置,这是必须指定的;

     
    1 auth users = linuxsir

    注:认证用户是linuxsir ,是必须在 服务器上存在的用户;

     
    1 list=yes

    注:list 意思是把rsync 服务器上提供同步数据的目录在服务器上模块是否显示列出来。默认是yes 。如果你不想列出来,就no ;如果是no是比较安全的,至少别人不知道你的服务器上提供了哪些目录。你自己知道就行了;

     
    1 ignore errors

    注:忽略IO错误,详细的请查文档;

    1 secrets file = /etc/rsyncd/rsyncd.secrets

    注:密码存在哪个文件;

     
    1 comment = linuxsir home  data

    注:注释可以自己定义,写什么都行,写点相关的内容就行;

    1 exclude =   beinan/   samba/

    注:exclude 是排除的意思,也就是说,要把/home目录下的beinan和samba 排除在外; beinan/和samba/目录之间有空格分开 ;

    启动rsync 服务器及防火墙的设置

    启动rsync服务器
    启动rsync 服务器相当简单,–daemon 是让rsync 以服务器模式运行;

    1 /usr/bin/rsync --daemon  --config=/etc/rsyncd/rsyncd.conf

    rsync服务器和防火墙
    Linux 防火墙是用iptables,所以我们至少在服务器端要让你所定义的rsync 服务器端口通过,客户端上也应该让通过。

    1 iptables -A INPUT -p tcp -m state --state NEW  -m tcp --dport 873 -j ACCEPT

    查看一下防火墙是不是打开了 873端口;

    1 iptables -L

    通过rsync客户端来同步数据

    1 rsync -avzP linuxsir@linuxsir.org::linuxsirhome   linuxsirhome

    Password: 这里要输入linuxsir的密码,是服务器端提供的,在前面的例子中,我们用的是 222222,输入的密码并不显示出来;输好后就回车;
    注: 这个命令的意思就是说,用linuxsir 用户登录到服务器上,把linuxsirhome数据,同步到本地目录linuxsirhome上。当然本地的目录是可以你自己定义的,比如 linuxsir也是可以的;当你在客户端上,当前操作的目录下没有linuxsirhome这个目录时,系统会自动为你创建一个;当存在linuxsirhome这个目录中,你要注意它的写权限。
    说明:
    -a 参数,相当于-rlptgoD,-r 是递归 -l 是链接文件,意思是拷贝链接文件;-p 表示保持文件原有权限;-t 保持文件原有时间;-g 保持文件原有用户组;-o 保持文件原有属主;-D 相当于块设备文件;
    -z 传输时压缩;
    -P 传输进度;
    -v 传输时的进度等信息,和-P有点关系,自己试试。可以看文档;

    1 rsync -avzP  --delete linuxsir@linuxsir.org::linuxsirhome   linuxsirhome

    这回我们引入一个 –delete 选项,表示客户端上的数据要与服务器端完全一致,如果 linuxsirhome目录中有服务器上不存在的文件,则删除。最终目的是让linuxsirhome目录上的数据完全与服务器上保持一致;用的时候要小心点,最好不要把已经有重要数所据的目录,当做本地更新目录,否则会把你的数据全部删除;

    1 rsync -avzP  --delete  --password-file=rsync.password  linuxsir@linuxsir.org::linuxsirhome   linuxsirhome

    这次我们加了一个选项 –password-file=rsync.password ,这是当我们以linuxsir用户登录rsync服务器同步数据时,密码将读取 rsync.password 这个文件。这个文件内容只是linuxsir用户的密码。我们要如下做;

    1 touch rsync.password
    2 chmod 600 rsync.password
    3 echo "222222"> rsync.password
    4 rsync -avzP  --delete  --password-file=rsync.password  linuxsir@linuxsir.org::linuxsirhome   linuxsirhome

    注: 这样就不需要密码了;其实这是比较重要的,因为服务器通过crond 计划任务还是有必要的;

    让rsync 客户端自动与服务器同步数据

    编辑crontab
    crontab -e
    加入如下代码:

    1 10 0 * * * rsync -avzP  --delete  --password-file=rsync.password  linuxsir@linuxsir.org::linuxsirhome   linuxsirhome

    表示每天0点10分执行后面的命令。更多crontab用法请参考
    http://www.centos.bz/2011/03/auto-run-task-crontab/
    参考文章:http://www.linuxsir.org/main/?q=node/256

  • rsync服务器架设(数据同步|文件增量备份)-1

    2012-03-14 16:52:48

    转自:http://www.centos.bz/2011/06/rsync-server-setup/
     
    文章目录
  • 什么是rsync
  • rsync的安装
  • rsync服务器的配置文件rsyncd.conf
  • rsyncd.conf文件代码说明
  • 启动rsync 服务器及防火墙的设置
  • 通过rsync客户端来同步数据
  • 让rsync 客户端自动与服务器同步数据
    • 我们在使用服务器发布我们的网站的时候,通常要考虑到文件的备份,而文件的备份比较高效的备份是增加备份,rsync软件就是这样的一个工具。为了实现多个服务器负载均衡,我们需要这几个服务器之间进行数据同步,而rsync软件也能胜任,下面我们来介绍如何架设rsync服务器来达到文件增量备份和数据同步的功能。

      什么是rsync

      rsync 是一个快速增量文件传输工具,它可以用于在同一主机备份内部的备分,我们还可以把它作为不同主机网络备份工具之用。本文主要讲述的是如何自架rsync服务器,以实现文件传输、备份和镜像。相对tar和wget来说,rsync 也有其自身的优点,比如速度快、安全、高效。

      rsync的安装

      CentOS服务器,我们可以执行以下命令安装

       
      1 yum install rsync

      对于debian、ubuntu服务器,则是以下命令

       
      1 sudo apt-get  install  rsync

      rsync服务器的配置文件rsyncd.conf

      下面我们将涉及到三个文件 rsyncd.conf,rsyncd.secrets 和rsyncd.motd。
      rsyncd.conf 是rsync服务器主要配置文件。
      rsyncd.secrets是登录rsync服务器的密码文件。
      rsyncd.motd是定义rysnc 服务器信息的,也就是用户登录信息。
      下面我们分别建立这三个文件。

      1 mkdir /etc/rsyncd

      注:在/etc目录下创建一个rsyncd的目录,我们用来存放rsyncd.conf 和rsyncd.secrets文件;

       
      1 touch /etc/rsyncd/rsyncd.conf

      注:创建rsyncd.conf ,这是rsync服务器的配置文件;

       
      1 touch /etc/rsyncd/rsyncd.secrets

      注:创建rsyncd.secrets ,这是用户密码文件;

      1 chmod 600 /etc/rsyncd/rsyncd.secrets

      注:为了密码的安全性,我们把权限设为600;

       
      1 touch /etc/rsyncd/rsyncd.motd

      注:创建rsyncd.motd文件,这是定义服务器信息的文件。
      下一就是我们修改 rsyncd.conf 和rsyncd.secrets 和rsyncd.motd 文件的时候了。
      rsyncd.conf文件内容:

       
      01 # Minimal configuration file for rsync daemon
      02 # See rsync(1) and rsyncd.conf(5) man pages for help
      03   
      04 # This line is required by the /etc/init.d/rsyncd script.
      05 pid file = /var/run/rsyncd.pid
      06 port = 873
      07 address = 192.168.1.171
      08 #uid = nobody
      09 #gid = nobody
      10 uid = root
      11 gid = root   
      12   
      13 use chroot = yes
      14 read only = no  
      15   
      16 #limit access to private LANs
      17 hosts allow=192.168.1.0/255.255.255.0 10.0.1.0/255.255.255.0
      18 hosts deny=*
      19   
      20 max connections = 5
      21 motd file = /etc/rsyncd/rsyncd.motd
      22   
      23 #This will give you a separate log file
      24 #log file = /var/log/rsync.log
      25   
      26 #This will log every file transferred - up to 85,000+ per user, per sync
      27 #transfer logging = yes
      28   
      29 log format = %t %a %m %f %b
      30 syslog facility = local3
      31 timeout = 300
      32   
      33 [linuxsirhome]
      34 path = /home
      35 list=yes
      36 ignore errors
      37 auth users = linuxsir
      38 secrets file = /etc/rsyncd/rsyncd.secrets
      39 comment = linuxsir home
      40 exclude =   beinan/  samba/      
      41   
      42 [beinan]
      43 path = /opt
      44 list=no
      45 ignore errors
      46 comment = optdir
      47 auth users = beinan
      48 secrets file = /etc/rsyncd/rsyncd.secrets

      密码文件:/etc/rsyncd/rsyncd.secrets的内容格式;

      1 用户名:密码
      2 linuxsir:222222
      3 beinan:333333

      注: 这里的密码值得注意,为了安全,你不能把系统用户的密码写在这里。比如你的系统用户 linuxsir 密码是 abcdefg ,为了安全,你可以让rsync 中的linuxsir 为 222222 。这和samba的用户认证的密码原理是差不多的;
      rsyncd.motd 文件;
      它是定义rysnc 服务器信息的,也就是用户登录信息。比如让用户知道这个服务器是谁提供的等;类似ftp服务器登录时,我们所看到的 linuxsir.org ftp ……。 当然这在全局定义变量时,并不是必须的,你可以用#号注掉,或删除;我在这里写了一个 rsyncd.motd的内容为:

       
      1 +++++++++++++++++++++++++++
      2 + linuxsir.org  rsync  2002-2007 +
      3 +++++++++++++++++++++++++++

      rsyncd.conf文件代码说明

      1 pid file = /var/run/rsyncd.pid

      注:告诉进程写到 /var/run/rsyncd.pid 文件中;

       
      1 port = 873

      注:指定运行端口,默认是873,您可以自己指定;

       
      1 address = 192.168.1.171

      注:指定服务器IP地址;

       
      1 uid = nobody
      2 gid = nobdoy

      注:服务器端传输文件时,要发哪个用户和用户组来执行,默认是nobody。 如果用nobody 用户和用户组,可能遇到权限问题,有些文件从服务器上拉不下来。所以我就偷懒,为了方便,用了root 。不过您可以在定义要同步的目录时定义的模块中指定用户来解决权限的问题。

       
      1 use chroot = yes

      用chroot,在传输文件之前,服务器守护程序在将chroot 到文件系统中的目录中,这样做的好处是可能保护系统被安装漏洞侵袭的可能。缺点是需要超级用户权限。另外对符号链接文件,将会排除在外。也就是说,你在rsync服务器上,如果有符号链接,你在备份服务器上运行客户端的同步数据时,只会把符号链接名同步下来,并不会同步符号链接的内容;这个需要自己来尝试;

      1 read only = yes

      注:read only 是只读选择,也就是说,不让客户端上传文件到服务器上。还有一个 write only选项,自己尝试是做什么用的吧;

       
      1 #limit access to private LANs
      2 hosts allow=192.168.1.0/255.255.255.0 10.0.1.0/255.255.255.0

      注:在您可以指定单个IP,也可以指定整个网段,能提高安全性。格式是ip 与ip 之间、ip和网段之间、网段和网段之间要用空格隔开;

       
      1 max connections = 5

      注:客户端最多连接数;

      1 motd file = /etc/rsyncd/rsyncd.motd

      注:motd file 是定义服务器信息的,要自己写 rsyncd.motd 文件内容。当用户登录时会看到这个信息。

      1 log file = /var/log/rsync.log

      注:rsync 服务器的日志;

       
      1 transfer logging = yes

      注:这是传输文件的日志;

       
      1 [linuxsirhome]

      注:模块,它为我们提供了一个链接的名字,链接到哪呢,在本模块中,链接到了/home目录;要用[name] 形式;

      1 path = /home

      注:指定文件目录所在位置,这是必须指定的;

    • linux可执行文件bad interpreter解决方法

      2012-03-14 08:55:03

      转自:http://doc.chinaunix.net/linux/201009/869759.shtml
       
      经常会遇到这种情况,在windows下写的脚本,代码会在linux下无法执行,错误就是:

        : bad interpreter: No such file or directory

        以前一直不知怎么解决,今天终于找到方法了。

        1 原因

        这通常都是由于windows下对文本文件的保存格式与unix下不同造成的,windows下回车的字符是’\r\n’,而linux下是’\n’。

        2 解决方法

        vi file

        在命令模式下,输入 :set ff?

        查看文件格式为dos或者unix

        :set ff=unix

        :wq

        保存退出,即可。

    • 【转】《零基础学习软件测试》之LoadRunner从入门到精通*(视频)

      2012-02-05 16:15:12

      转自:http://www.51testing.com/?uid-116228-action-viewspace-itemid-249236

      文章来源
      • 文章来源:【转载】
      2.3 lr界面分析
      http://www.boobooke.com/v/bbk1737
      3 lr常用术语
      http://www.boobooke.com/v/bbk1620
      4 hp web tours 分析
      5 lr录制测试脚本
      http://www.boobooke.com/v/bbk1763
      6 lr回放测试脚本
      http://www.boobooke.com/v/bbk1764
      7 HTML和URL比较
      http://www.boobooke.com/v/bbk1771
      8 lr自动关联
      http://www.boobooke.com/v/bbk1778
      9 lr测试脚本的增强方法
      http://www.boobooke.com/v/bbk1772
      10 run time settings
      http://www.boobooke.com/v/bbk1782
      11 lr脚本编写实践过程
      17 创建负载测试场景
      http://www.boobooke.com/v/bbk2145
      18 面向目标的场景
      http://www.boobooke.com/v/bbk2168
      19 分析场景
      http://www.boobooke.com/v/bbk2144
      22 性能分析基础知识
      http://www.boobooke.com/v/bbk2162
      23 Load Runner 8.0 Student Workbook介绍
      http://www.boobooke.com/v/bbk2991
      24 性能测试与调优概览
      http://www.boobooke.com/v/bbk3511
      25 Loadrunner再谈
      http://www.boobooke.com/v/bbk3510
      26 LR使用指南-第一部分基础知识完结篇
      http://www.boobooke.com/v/bbk2201
       
      小布老师视频:
      测试工具概述,兼LoadRunner介绍 -1-4
      http://www.boobooke.com/v/bbk1046
      http://www.boobooke.com/v/bbk1046.zip
      http://www.boobooke.com/v/bbk1047
      http://www.boobooke.com/v/bbk1047.zip
      http://www.boobooke.com/v/bbk1048
      http://www.boobooke.com/v/bbk1048.zip
      http://www.boobooke.com/v/bbk1055
      http://www.boobooke.com/v/bbk1055.zip
      LR系列培训视频 - LoadRunner概述(上下)
      http://www.boobooke.com/v/bbk1059
      http://www.boobooke.com/v/bbk1059.zip
      http://www.boobooke.com/v/bbk1060
      http://www.boobooke.com/v/bbk1060.zip
      LR系列培训视频 - LoadRunner安装
      http://www.boobooke.com/v/bbk1061
      http://www.boobooke.com/v/bbk1061.zip
      LR系列培训视频 - 录制和回放测试脚本(1-3)
      http://www.boobooke.com/v/bbk1063
      http://www.boobooke.com/v/bbk1063.zip
      http://www.boobooke.com/v/bbk1064
      http://www.boobooke.com/v/bbk1064.zip
      http://www.boobooke.com/v/bbk1065
      http://www.boobooke.com/v/bbk1065.zip
      LR系列培训视频 - LoadRunner测试Tuxedo应用系统 1-4
      http://www.boobooke.com/v/bbk1067
      http://www.boobooke.com/v/bbk1067.zip
      http://www.boobooke.com/v/bbk1068
      http://www.boobooke.com/v/bbk1068.zip
      http://www.boobooke.com/v/bbk1071
      http://www.boobooke.com/v/bbk1071.zip
      http://www.boobooke.com/v/bbk1072
      http://www.boobooke.com/v/bbk1072.zip
      开源性能测试工具Curl-Loader快速实战 - 1
      http://www.boobooke.com/v/bbk1808
      http://www.boobooke.com/v/bbk1808.zip
      开源性能测试工具Curl-Loader快速实战 - 2
      http://www.boobooke.com/v/bbk1809
      http://www.boobooke.com/v/bbk1809.zip
      开源性能测试工具Curl-Loader快速实战 - 3
      http://www.boobooke.com/v/bbk1835
      http://www.boobooke.com/v/bbk1835.zip
      开源性能测试工具Curl-Loader快速实战 - 4
      http://www.boobooke.com/v/bbk1836
      http://www.boobooke.com/v/bbk1836.zip
      使用LoadRunner测试Oracle实例研究 - 1
      http://www.boobooke.com/v/bbk2159
      http://www.boobooke.com/v/bbk2159.zip
      使用LoadRunner测试Oracle实例研究 - 2
      http://www.boobooke.com/v/bbk2170
      http://www.boobooke.com/v/bbk2170.zip
      使用LoadRunner测试Oracle实例研究 - 3
      http://www.boobooke.com/v/bbk2171
      http://www.boobooke.com/v/bbk2171.zip
    • 脚本-合并多个文件

      2012-01-10 15:31:23

         最近有一个项目--需要整理数据,有2万多个源文件--无后缀、可用记事本打开编辑,在网上搜到的一个脚本很有用,可以快速的合并所有文件的内容到一个总的新文件中:
       for %f in (*) do type %f>>d:\temp.txt
    • 【转】优秀系统分析师必读——需求分析20条原则

      2012-01-07 13:01:34

      对商业用户来说,他们后面是成百上千个供应商,前面是成千上万个消费顾客。怎样利用软件管理错综复杂的供应商和消费顾客,如何做好精细到一个小小调料包的进、销、调、存的商品流通工作,这些都是商业企业需要信息管理系统的理由。软件开发的意义也就在于此。而弄清商业用户如此复杂需求的真面目,正是软件开发成功的关键所在。

      经理:“我们要建立一套完整的商业管理软件系统,包括商品的进、销、调、存管理,是总部-门店的连锁经营模式。通过通信手段门店自动订货,供应商自动结算,卖场通过扫条码实现销售,管理人员能够随时查询门店商品销售和库存情况。另外,我们也得为政府部门提供关于商品营运的报告。”

      分析员:“我已经明白这个项目的大体结构框架,这非常重要,但在制定计划之前,我们必须收集一些需求。”

      经理觉得奇怪:“我不是刚告诉你我的需求了吗?”

      分析员:“实际上,您只说明了整个项目的概念和目标。这些高层次的业务需求不足以提供开发的内容和时间。我需要与实际将要使用系统的业务人员进行讨论,然后才能真正明白达到业务目标所需功能和用户要求,了解清楚后,才可以发现哪些是现有组件即可实现的,哪些是需要开发的,这样可节省很多时间。”

      经理:“业务人员都在招商。他们非常忙,没有时间与你们详细讨论各种细节。你能不能说明一下你们现有的系统?”

      分析员尽量解释从用户处收集需求的合理性:“如果我们只是凭空猜想用户的要求,结果不会令人满意。我们只是软件开发人员,而不是采购专家、营运专家或是财务专家,我们并不真正明白您这个企业内部运营需要做些什么。我曾经尝试过,未真正明白这些问题就开始编码,结果没有人对产品满意。”

      经理坚持道:“行了,行了,我们没有那么多的时间。让我来告诉您我们的需求。实际上我也很忙。请马上开始开发,并随时将你们的进展情况告诉我。”

      风险躲在需求的迷雾之后

      以上我们看到的是某客户项目经理与系统开发小组的分析人员讨论业务需求。在项目开发中,所有的项目风险承担者都对需求分析阶段备感兴趣。这里所指的风险承担者包括客户方面的项目负责人和用户,开发方面的需求分析人员和项目管理者。这部分工作做得到位,能开发出很优秀的软件产品,同时也会令客户满意。若处理不好,则会导致误解、挫折、障碍以及潜在的质量和业务价值上的威胁。因此可见——需求分析奠定了软件工程和项目管理的基础。

      拨开需求分析的迷雾

      像这样的对话经常出现在软件开发的过程中。客户项目经理的需求对分析人员来讲,像“雾里看花”般模糊并令开发者感到困惑。那么,我们就拨开雾影,分析一下需求的具体内容:

      ·业务需求——反映了组织机构或客户对系统、产品高层次的目标要求,通常在项目定义与范围文档中予以说明。

      ·用户需求——描述了用户使用产品必须要完成的任务,这在使用实例或方案脚本中予以说明。

      ·功能需求——定义了开发人员必须实现的软件功能,使用户利用系统能够完成他们的任务,从而满足了业务需求。

      ·非功能性的需求——描述了系统展现给用户的行为和执行的操作等,它包括产品必须遵从的标准、规范和约束,操作界面的具体细节和构造上的限制。

      ·需求分析报告——报告所说明的功能需求充分描述了软件系统所应具有的外部行为。“需求分析报告”在开发、测试、质量保证、项目管理以及相关项目功能中起着重要作用。

      前面提到的客户项目经理通常阐明产品的高层次概念和主要业务内容,为后继工作建立了一个指导性的框架。其他任何说明都应遵循“业务需求”的规定,然而“业务需求”并不能为开发人员提供开发所需的许多细节说明。

      下一层次需求——用户需求,必须从使用产品的用户处收集。因此,这些用户构成了另一种软件客户,他们清楚要使用该产品完成什么任务和一些非功能性的特性需求。例如:程序的易用性、健壮性和可靠性,而这些特性将会使用户很好地接受具有该特点的软件产品。

      经理层有时试图代替实际用户说话,但通常他们无法准确说明“用户需求”。用户需求来自产品的真正使用者,必须让实际用户参与到收集需求的过程中。如果不这样做,产品很可能会因缺乏足够的信息而遗留不少隐患。

      在实际需求分析过程中,以上两种客户可能都觉得没有时间与需求分析人员讨论,有时客户还希望分析人员无须讨论和编写需求说明就能说出用户的需求。除非遇到的需求极为简单;否则不能这样做。如果您的组织希望软件成功,那么必须要花上数天时间来消除需求中模糊不清的地方和一些使开发者感到困惑的方面。

      优秀的软件产品建立在优秀的需求基础之上,而优秀的需求源于客户与开发人员之间有效的交流和合作。只有双方参与者都明白自己需要什么、成功的合作需要什么时,才能建立起一种良好的合作关系。

      由于项目的压力与日俱增,所有项目风险承担者有着一个共同目标,那就是大家都想开发出一个既能实现商业价值又能满足用户要求,还能使开发者感到满足的优秀软件产品。

      客户的需求观

      客户与开发人员交流需要好的方法。下面建议20条法则,客户和开发人员可以通过评审以下内容并达成共识。如果遇到分歧,将通过协商达成对各自义务的相互理解,以便减少以后的磨擦(如一方要求而另一方不愿意或不能够满足要求)。

      1、 分析人员要使用符合客户语言习惯的表达

      需求讨论集中于业务需求和任务,因此要使用术语。客户应将有关术语(例如:采价、印花商品等采购术语)教给分析人员,而客户不一定要懂得计算机行业的术语。

      2、分析人员要了解客户的业务及目标

      只有分析人员更好地了解客户的业务,才能使产品更好地满足需要。这将有助于开发人员设计出真正满足客户需要并达到期望的优秀软件。为帮助开发和分析人员,客户可以考虑邀请他们观察自己的工作流程。如果是切换新系统,那么开发和分析人员应使用一下目前的旧系统,有利于他们明白目前系统是怎样工作的,其流程情况以及可供改进之处。s

      3、 分析人员必须编写软件需求报告

      分析人员应将从客户那里获得的所有信息进行整理,以区分业务需求及规范、功能需求、质量目标、解决方法和其他信息。通过这些分析,客户就能得到一份“需求分析报告”,此份报告使开发人员和客户之间针对要开发的产品内容达成协议。报告应以一种客户认为易于翻阅和理解的方式组织编写。客户要评审此报告,以确保报告内容准确完整地表达其需求。一份高质量的“需求分析报告”有助于开发人员开发出真正需要的产品。

      4、 要求得到需求工作结果的解释说明

      分析人员可能采用了多种图表作为文字性“需求分析报告”的补充说明,因为工作图表能很清晰地描述出系统行为的某些方面,所以报告中各种图表有着极高的价值;虽然它们不太难于理解,但是客户可能对此并不熟悉,因此客户可以要求分析人员解释说明每个图表的作用、符号的意义和需求开发工作的结果,以及怎样检查图表有无错误及不一致等。

      5、 开发人员要尊重客户的意见

      如果用户与开发人员之间不能相互理解,那关于需求的讨论将会有障碍。共同合作能使大家“兼听则明”。参与需求开发过程的客户有权要求开发人员尊重他们并珍惜他们为项目成功所付出的时间,同样,客户也应对开发人员为项目成功这一共同目标所做出的努力表示尊重。

      6、 开发人员要对需求及产品实施提出建议和解决方案

      通常客户所说的“需求”已经是一种实际可行的实施方案,分析人员应尽力从这些解决方法中了解真正的业务需求,同时还应找出已有系统与当前业务不符之处,以确保产品不会无效或低效;在彻底弄清业务领域内的事情后,分析人员就能提出相当好的改进方法,有经验且有创造力的分析人员还能提出增加一些用户没有发现的很有价值的系统特性。

      7、 描述产品使用特性

      客户可以要求分析人员在实现功能需求的同时还注意软件的易用性,因为这些易用特性或质量属性能使客户更准确、高效地完成任务。例如:客户有时要求产品要“界面友好”或“健壮”或“高效率”,但对于开发人员来讲,太主观了并无实用价值。正确的做法是,分析人员通过询问和调查了解客户所要的“友好、健壮、高效所包含的具体特性,具体分析哪些特性对哪些特性有负面影响,在性能代价和所提出解决方案的预期利益之间做出权衡,以确保做出合理的取舍。

      8、 允许重用已有的软件组件

      需求通常有一定灵活性,分析人员可能发现已有的某个软件组件与客户描述的需求很相符,在这种情况下,分析人员应提供一些修改需求的选择以便开发人员能够降低新系统的开发成本和节省时间,而不必严格按原有的需求说明开发。所以说,如果想在产品中使用一些已有的商业常用组件,而它们并不完全适合您所需的特性,这时一定程度上的需求灵活性就显得极为重要了。

      9、 要求对变更的代价提供真实可靠的评估

      有时,人们面临更好、也更昂贵的方案时,会做出不同的选择。而这时,对需求变更的影响进行评估从而对业务决策提供帮助,是十分必要的。所以,客户有权利要求开发人员通过分析给出一个真实可信的评估,包括影响、成本和得失等。开发人员不能由于不想实施变更而随意夸大评估成本。

      10、 获得满足客户功能和质量要求的系统

      每个人都希望项目成功,但这不仅要求客户要清晰地告知开发人员关于系统“做什么”所需的所有信息,而且还要求开发人员能通过交流了解清楚取舍与限制,一定要明确说明您的假设和潜在的期望,否则,开发人员开发出的产品很可能无法让您满意。

      11、 给分析人员讲解您的业务

      分析人员要依靠客户讲解业务概念及术语,但客户不能指望分析人员会成为该领域的专家,而只能让他们明白您的问题和目标;不要期望分析人员能把握客户业务的细微潜在之处,他们可能不知道那些对于客户来说理所当然的“常识”。

      12、 抽出时间清楚地说明并完善需求

      客户很忙,但无论如何客户有必要抽出时间参与“头脑高峰会议”的讨论,接受采访或其他获取需求的活动。有些分析人员可能先明白了您的观点,而过后发现还需要您的讲解,这时请耐心对待一些需求和需求的精化工作过程中的反复,因为它是人们交流中很自然的现象,何况这对软件产品的成功极为重要。

      13、 准确而详细地说明需求

      编写一份清晰、准确的需求文档是很困难的。由于处理细节问题不但烦人而且耗时,因此很容易留下模糊不清的需求。但是在开发过程中,必须解决这种模糊性和不准确性,而客户恰恰是为解决这些问题作出决定的最佳人选,否则,就只好靠开发人员去正确猜测了。

      在需求分析中暂时加上“待定”标志是个方法。用该标志可指明哪些是需要进一步讨论、分析或增加信息的地方,有时也可能因为某个特殊需求难以解决或没有人愿意处理它而标注上“待定”。客户要尽量将每项需求的内容都阐述清楚,以便分析人员能准确地将它们写进“软件需求报告”中去。如果客户一时不能准确表达,通常就要求用原型技术,通过原型开发,客户可以同开发人员一起反复修改,不断完善需求定义。

      14、 及时作出决定

      分析人员会要求客户作出一些选择和决定,这些决定包括来自多个用户提出的处理方法或在质量特性冲突和信息准确度中选择折衷方案等。有权作出决定的客户必须积极地对待这一切,尽快做处理,做决定,因为开发人员通常只有等客户做出决定才能行动,而这种等待会延误项目的进展。

      15、 尊重开发人员的需求可行性及成本评估

      所有的软件功能都有其成本。客户所希望的某些产品特性可能在技术上行不通,或者实现它要付出极高的代价,而某些需求试图达到在操作环境中不可能达到的性能,或试图得到一些根本得不到的数据。开发人员会对此作出负面的评价,客户应该尊重他们的意见。

      16、 划分需求的优先级

      绝大多数项目没有足够的时间或资源实现功能性的每个细节。决定哪些特性是必要的,哪些是重要的,是需求开发的主要部分,这只能由客户负责设定需求优先级,因为开发者不可能按照客户的观点决定需求优先级;开发人员将为您确定优先级提供有关每个需求的花费和风险的信息。

      在时间和资源限制下,关于所需特性能否完成或完成多少应尊重开发人员的意见。尽管没有人愿意看到自己所希望的需求在项目中未被实现,但毕竟是要面对现实,业务决策有时不得不依据优先级来缩小项目范围或延长工期,或增加资源,或在质量上寻找折衷。

      17、 评审需求文档和原型

      客户评审需求文档,是给分析人员带来反馈信息的一个机会。如果客户认为编写的“需求分析报告”不够准确,就有必要尽早告知分析人员并为改进提供建议。

      更好的办法是先为产品开发一个原型。这样客户就能提供更有价值的反馈信息给开发人员,使他们更好地理解您的需求;原型并非是一个实际应用产品,但开发人员能将其转化、扩充成功能齐全的系统。

      18、 需求变更要立即联系

      不断的需求变更,会给在预定计划内完成的质量产品带来严重的不利影响。变更是不可避免的,但在开发周期中,变更越在晚期出现,其影响越大;变更不仅会导致代价极高的返工,而且工期将被延误,特别是在大体结构已完成后又需要增加新特性时。所以,一旦客户发现需要变更需求时,请立即通知分析人员。

      19、 遵照开发小组处理需求变更的过程

      为将变更带来的负面影响减少到最低限度,所有参与者必须遵照项目变更控制过程。这要求不放弃所有提出的变更,对每项要求的变更进行分析、综合考虑,最后做出合适的决策,以确定应将哪些变更引入项目中。

      20、 尊重开发人员采用的需求分析过程

      软件开发中最具挑战性的莫过于收集需求并确定其正确性,分析人员采用的方法有其合理性。也许客户认为收集需求的过程不太划算,但请相信花在需求开发上的时间是非常有价值的;如果您理解并支持分析人员为收集、编写需求文档和确保其质量所采用的技术,那么整个过程将会更为顺利。

      “需求确认”意味着什么

      在“需求分析报告”上签字确认,通常被认为是客户同意需求分析的标志行为,然而实际操作中,客户往往把“签字”看作是毫无意义的事情。“他们要我在需求文档的最后一行下面签名,于是我就签了,否则这些开发人员不开始编码。”

      这种态度将带来麻烦,譬如客户想更改需求或对产品不满时就会说:“不错,我是在需求分析报告上签了字,但我并没有时间去读完所有的内容,我是相信你们的,是你们非让我签字的。”

      同样问题也会发生在仅把“签字确认”看作是完成任务的分析人员身上,一旦有需求变更出现,他便指着“需求分析报告”说:“您已经在需求上签字了,所以这些就是我们所开发的,如果您想要别的什么,您应早些告诉我们。”

      这两种态度都是不对的。因为不可能在项目的早期就了解所有的需求,而且毫无疑问地需求将会出现变更,在“需求分析报告”上签字确认是终止需求分析过程的正确方法,所以我们必须明白签字意味着什么。

      对“需求分析报告”的签名是建立在一个需求协议的基线上,因此我们对签名应该这样理解:“我同意这份需求文档表述了我们对项目软件需求的了解,进一步的变更可在此基线上通过项目定义的变更过程来进行。我知道变更可能会使我们重新协商成本、资源和项目阶段任务等事宜。”对需求分析达成一定的共识会使双方易于忍受将来的摩擦,这些摩擦来源于项目的改进和需求的误差或市场和业务的新要求等。

      需求确认将迷雾拨散,显现需求的真面目,给初步的需求开发工作画上了双方都明确的句号,并有助于形成一个持续良好的客户与开发人员的关系,为项目的成功奠定了坚实的基础。

    • 【转】软件需求分析基础

      2012-01-07 12:51:05

      转自:http://expert.blog.51cto.com/339473/67016

      软件始于需求。

           软件开发,能否获得成功,最重要的是需求分析的工作。因此,软件需求分析师的能力和水平,对软件项目至关重要。
              多年以来,我接触过非常多软件从业人员,很多人说自己参加过多个项目,在项目组中做过需求分析,仔细聊起来却发现他们根本没有接受过软件需求分析的培训,对软件需求根本没有清晰的概念,甚至很多人认为把业务流程图画出来,把数据表做出来,就叫需求分析完成了。
              我是做软件实践的,侧重基本概念。因此,本文中,我给大家讲解一下软件需求分析的基本概念。
               软件需求,只有三个要素:Actor、系统边界、输入输出。如下图:
              
              Actor:软件需求分析整个阶段,要构建的系统作为一个黑盒子。Actor 与这个软件系统有直接交互关系。Actor 可以是人,也可以是其他软件系统。
             系统边界:要构建的软件系统是个黑盒子,看不见这个黑盒子里面的任何子系统、模块,只能看到系统的边界。Actor 与系统的交互,都发生在系统边界上。
             输入输出:Actor 与软件系统在边界上进行的所有交互。这些交互,无非是Actor给系统怎样的输入,然后系统给Actor怎样的输出,或者反之,系统给Actor怎样的输入,Actor给系统怎样的输出。用户在键盘的输入,鼠标的输入,对接系统向要构建系统发起的连接,发送的消息,接口的调用......,都是输入;用户看到的软件界面,系统的错误提示,系统回应的消息、接口调用的返回值、错误码等等,都是输出。
              所有软件的需求分析,都是由这三个要素构成。首先要确定是系统边界和Actor,然后才是仔细分析Actor和系统边界之间的各种输出输出。
    • 2311/1212345678910>>|

      用户菜单

      我的栏目

      我的存档

      数据统计

      RSS订阅

      Open Toolbar