我是一支君子兰,离开生我养我的土壤,就会慢慢枯萎!

发布新日志

  • 我对职场的若干看法

    2012-02-18 22:21:09

        时光匆匆,离开校园步入社会将近四年,我有过委屈,也有过成就。而今,我对我自己所在的岗位,及职场拼搏中的心得与体会记录下来,作为日后发展的一个新起点。

      一、思考职场规划:
        这点考虑“你喜欢什么”、“你想要什么”、
    “你是什么样性格的人”、“你喜欢的行业及对应岗位需要什么样的职场素质”、“你的性格与这个行业具备的基本素质有什么差异”、“这个行业过去三年的发展,及网上日后大致发展方向”等等。这些要有取舍。一般来说,大城市要比小城市选择
    余地多,在一些行业中,信息也来的快些,也就是说大城市发展空间更大,更有利于职业目标的实现
        当你锁定大致的行业和岗位后,就需要主动去
    熟悉行业动态和职场素质、职场技能等。先考个有行业权威的认证吧。在此,申明一点,不是为“证”而“考”,是为你专业知识而考,为你日后步入这个行业做铺垫;一个有专业知识体系的人,日后对职场的领悟能力都要强。此外,就是为你找工作多个敲门砖。一般而言,在行业中有名的认证都吃香,当然也都难考。

        二、注意职场中的几点

        1、请将你的专业知识拿出来,运用到工作中。这样你在工作同时,能够体会到你所学知识带来的“智慧”。同时你的专业知识体系,才能体现真正的意义。如果没有,建议你挑选你当前最需要补充的知识,为“用而学”。这是你的工作能力的一个锻炼。
        注意,不能生搬硬套。每个公司文化不同,项
    目组文化不同,就算你的公司与你知道到规范操作差十万八千里。因为任何一个体系发展都有个“时间沉淀”的过程。请你将书中所提到的知识(规范)按照公司相关制度管理来,有选择、有目的、分阶段去引进书中所提规范操作。这点是个“艺术活”,呵呵。。。

        2、做好你的本职工作同时,关注市场行业动态。你所在单位,归属行业的发展动态,你从事岗位所在行业的发展动态;你目前所做的事,本职工作做完做好后,还能做哪些相关的事。除此之外,对于技术岗位需要关注你想学习、当前需要掌握而你未掌握的技术、项目组当前技术发展方向等,关注当公司、项目发展到什么时候能够引进这些新技术(包括新的理念)等等。比如,我在电商公司从事软件测试,我在日常工作中,除了关注电商行业发展和测试行业动态,还有就是所在项目组研发的产品在市场上的发展,在研发阶段是否能考虑借鉴其他公司相似产品的亮点,还有本身产品的改进工作。虽然后面这些“产品改进”的工作貌似不是我本职工作,耗我自己的工时,但事实证明,我们的产品质量有了改进。产品发布时,项目组的成员对产品质量都有信心,我也有种成就感。而且我也一直将这点作为“本职外的分享”来操作。
        注意:这是在培养你的职场素质,一种提升能
    力的素质。

        3、请在你相关的行业多认识几个人,当然是牛人。往往与他们交流,对某些问题的看法(职场领悟)也会有个高层次见识见识、更全面了解。这些对你后续的发展,是非常有帮助的。

        三、不要贸然辞职与跳槽

         1、考虑分析一下:现在服务的企业属于哪种类型,混日子养老型、创业激进型、轻松分享型。。。。说白了,企业工作文化氛围是什么样的。企业目前存在的问题,包括管理侧面、企业未来的规划,企业发展趋势等等。基于这种情况,你属于哪种,能否适应这种环境;不适应的化能否改进或做调整。说白了,你是否认同现有公司这种工作氛围文化。当然,除此之外,项目组文化、领导风格都可以作为附加去考虑,说白了,这点是考虑你是否能接受现有身边项目管理和企业管理所表现出来的企业文化。
        为什么会让你有辞职的想法,仅仅为了钱?我
    个人不赞成为区区一点薪水就跳槽。当然,在你权衡所有利弊之后,你可以去新公司,领更高一点的薪水。

        2、考虑分析一下:你目前的职业规划是否有偏差,能否通过某种努力来消除偏差。而现在遇到的问题本质是否是由于职业偏差带来的,以及怎么解决,就算你铁定心要离开这家公司,那也要想想怎么去处理解决,下一个阶段,怎么避免类似问题。这是关键,如果你不明确这点,到了其他公司,会遇到类似或比这更严重的问题,到时候,会遇到职场的瓶颈问题,更郁闷,更麻烦。

        3、当上述两点都考虑,但由于企业管理机制或在未来一年内没有发展机遇的情况下,可以去考虑更换工作,当然你此时需要做利益的权衡,主要是你辞职的风险,以及你挑选新公司的企业文化(工作氛围、企业管理、福利待遇等等)是否是你喜欢的,最起码是你能接受的。说白了,这点是你基于前两点考虑之后下决定的时候。

        4、当你有辞职意向时,就考虑一下:你是否需要转行转岗,新转行转岗要求的职业素质和行业规则以及现有状况是什么样的,你是否能符合这个要求,你下一家公司应该是什么样的企业文化,你可以按照这种条件在网上或向这个行业里的人了解。这个是你职业规划的调整或说是个补充。
        建议:你抽空多上上招聘网站,多投简历,而
    不是贸然辞职,找到工作后,只要达到你的目标,就跳。一般来说,招聘高峰期和大企业统一扩招不是每个月都有的,需要你平时的关注。
        在此,要提醒那些“裸辞”的人,尽量不要让
    自己的简历出现空白,职场有不衔接的地方。招聘的HR们往往会考虑这点,而且虽说五险一金不连贯也可以,但当你退休之后,还是有差距的。说到这,也要说明一点,考虑的多,不是要“想辞职、准备辞职的人”左顾右盼、前瞻后仰,而想陈述一个观点“对日后谁都没把握说会怎么样,但一定要打点”,就像“虚拟内存尽管是虚的,但在计算机运行过程中发挥了巨大的作用”。

        5、制作简历的时候,要突出你的优点,要做一份有“专业感”的简历。有技术的突出技术;感觉技术和对方招聘有差距,就突出你的经验;感觉自己的那点经验HR不会太喜欢,就想办法在简历中让别人知道你能很好完成这份工作,实在不行,就突出你的人品,当然是往好的方面说。。。。。如果还不行,回家祈求上帝保佑吧

        6、面试之前,把那家公司历史、产品、市场学习一下,考虑一下面试官常问的问题该怎么回答,以及这家公司外在文化是否符合你的口味

        四、其他心得
        1、大学里学的专业关键是要培养你的“思
    考问题、发现问题、解决问题”的思维方式,为你日后独立做准备的。
        2、工作只是生活的一个点缀,没有必
    要为福利待遇、为大小公司归属感而纠结。
        3、在考虑职业规划的同时,也需要考虑生活规划。说白了,你想要什么样的生活。
        4、现在这个社会哪个行业,只要不懒惰不怕苦,都有碗饭吃,关键是你吃的这碗饭的感觉。从事一个能养活家人并能从中体会到快乐的职业,应该是人生一个不错的选择。

  • python 3.2 调用随机函数生成10个数,冒泡排序

    2011-08-12 10:42:16

    下面这个脚本只是学习并练习用的,请不要“鸡蛋里挑骨头”,呵呵

    import random

    print("randrange:append ten numbers from 0 to 100 to list1 array:")
    list1 = []
    for i in range(11):
        a = random.randrange(0,100)
        list1.append(a)

    for i in range(11):
        print("list1[%d] = %3d" % (i,list1[i]))

    print("randint:append ten numbers from 101 to 200 to list2 array:")
    list2 = []
    for i in range(11):
        b = random.randint(101,200)
        list2.append(b)

    for i in range(11):
        print("list2[%d] = %4d" % (i,list2[i]))

    print("uniform.:append ten numbers from 201 to 300 to list array:")
    list3 = []
    for i in range(11):
        c = random.uniform(201,300)
        list3.append(c)

    for i in range(11):
        print("list3[%d] = %10.4f" % (i,list3[i]))

    print("random:append ten numbers from () to list array:")
    list4 = []
    for i in range(11):
        d = random.random()
        list4.append(d)

    for i in range(11):
        print("list4[%d] = %20.18f" % (i,list4[i]))

    print("choice:append ten numbers from list1 to list array:")
    list5 = []
    for i in range(11):
        c = random.choice(list1)
        list5.append(c)

    for i in range(11):
        print("list5[%d] = %3d" % (i,list5[i]))

    for i in range(11):
        for j in range(11):
            if list1[i] < list1[j]:
                list1[i],list1[j] = list1[j],list1[i]

            if list2[i] < list2[j]:
                list2[i],list2[j] = list2[j],list2[i]

            if list3[i] < list3[j]:
                list3[i],list3[j] = list3[j],list3[i]

            if list4[i] < list4[j]:
                list4[i],list4[j] = list4[j],list4[i]

            if list5[i] < list5[j]:
                list5[i],list5[j] = list5[j],list5[i]

    for i in range(11):
        print("list1[%d] = %3d" % (i,list1[i]))

    for i in range(11):
        print("list2[%d] = %4d" % (i,list2[i]))

    for i in range(11):
        print("list3[%d] = %10.4f" % (i,list3[i]))

    for i in range(11):
        print("list4[%d] = %20.18f" % (i,list4[i]))

    for i in range(11):
        print("list5[%d] = %3d" % (i,list5[i]))

    print("done5")

  • python 3.2 调用自定义函数,输入三条边,判断是否能组成三角形

    2011-08-10 19:10:28

    下述脚本是个简单的脚本,是学习python 3.2函数时编写的。拿出来,希望大家提些建议,以便改进。

    #-*- encoding: utf-8 -*-
    '''
    Created on 2011-7-26
    Modified on 2011-7-27
    Debug on 2011-7-28

    @author: songwenjun
    '''

    def istrigon(x,y,z):
        if (x == 0) or (y == 0) or (z == 0):
            print("The game is over")
            exit()

        if x < 0 :
            x = input("The number of side inefficacy,so enter the first of side again, please:")
            x = float(x)

        if y < 0 :
            y = input("The number of side inefficacy,so enter the second of side again, please:")
            y = float(y)       
       
        if z < 0 :
            z = input("The number of side inefficacy,so enter the third of side again, please:")
            z = float(z)
       
        if (x >= (y + z)) or (y >= (x + z)) or (z >= (x + y)):
            return False

        if (x <= (abs(y - z))) or (y <= (abs(x - z))) or (z <= (abs(x - y))):
            return False
       
        return True

    iswhile = True

    print("The game is order to checking three sides for trigon")

    while iswhile :
        print("Enter three number for side of trigon please:")
        a = input("Enter the first of side, please:")
        a = float(a)
     
        b = input("Enter the seconde of side, please:")
        b = float(b)

        c = input("Enter the third of side, please:")
        c = float(c)
        
        if istrigon(a,b,c) :
            print("it's ok!")
        else :
            print("Sorry,it isn't trigon")

        isgoon = input("Do you want to go on? 1 is again; 0 is exit programme:")
        isgoon = int(isgoon)

        if isgoon == 1 :
            continue
        else :
            iswhile = False

    print("Done1")

  • Python 3.2版本下实现简单的个人理财计算器(存款)脚本

    2011-08-09 18:35:38

    最近看着物价飞涨,才想起来有好多的天没查看财务状态了,正好公司在进行python 3.2脚本调研,就用这个机会,动手写了一个个人理财计算器。不是很好,但放个这里做纪念,日后改进。O(∩_∩)O~

    print ("Welcome to Financing System")

    Amounte = 0.0                          # 本金初始化

    DepositCurrent = 0.005                 # 活期利率

    TypeDeposit = input("choice the kinds of deposit, current deposit is 1, fixed deposit is 2 and lump deposit is 3") # 获取存款类型
    TypeDeposit = int(TypeDeposit)

    if (TypeDeposit != 1) and (TypeDeposit != 2) and (TypeDeposit != 3):
        print("the kind of deposit is error, it's over")
    elif TypeDeposit == 1 :
        Amounte = input("Enter the number of money, please:")                       # 录入存款金额
        Amounte = int(Amounte)
        Amounte = Amounte * (1 + DepositCurrent)                                    # 计算本金和利息
        print("you choice current deposit and the Effective Annual Rate is %f. One year later, you will get %10.2f" % (DepositCurrent,Amounte))

    elif TypeDeposit == 2 :
        Amounte = input("Enter the number of money, please:")                       # 录入存款金额
        Amounte = int(Amounte)
        RateFixed = input("Enter the Effective Annual Rate(0.0000), please:")
        RateFixed = float (RateFixed)
        Depositmonth = input("how long(months):")
        Depositmonth = int(Depositmonth)
        Amounte += Amounte * RateFixed / 12 * Depositmonth
        print("you choice fixed deposit and the rate is %6.4f. %4d months later, you will get %10.2f" % (RateFixed,Depositmonth,Amounte))

    else :
        NumTerminally = input("Enter the number of money for terminallly:")
        NumTerminally = int(NumTerminally)
        Month = input("How long time for you (month)")
        Month = int(Month)
        RateFixed = input("Enter the Effective Annual Rate(0.0000), please:")
        RateFixed = float (RateFixed)
        TempTerminally = NumTerminally * RateFixed / 12
        TempSum = 0.0
        for i in range(1,Month + 1) :
           TempSum += TempTerminally * i
       
        NumTerminally = TempSum + NumTerminally * Month
        print("you choice lump deposit and the Effective Annual Rate is %6.4f. Three years later, you will get %10.2f" % (RateFixed,NumTerminally))
       
    print("done")

     

     

  • QTP 11.0 下载及安装序列号

    2011-08-03 10:07:52

    1HP官方下载QTP 11.0安装软件

    http://www.genilogix.com/downloads/unified-functional-testing/quicktest-professional-11.iso

       补充:需要使用迅雷   总计3.61G

     

     安装事项
       1、需要使用虚拟光驱
       2、按照提示就可以了

    2、安装许可证QTP 11.0

    1)运行注册机mgn-mqt82.exe

    如果运行mgn-mqt82.exe 没有反应-,请注意关掉暂时关掉杀毒软件。

    注意:路径“C:\Program Files\Common Files\Mercury Interactive\License Manager\lservrc

    找不到请到C:\Documents and Settings\All Users\Application Data\HP\Functional testing\License”目录下查看,这个是11.0版本自身的

    2)启动QTP 11.0,安装License

    启动QTP 11.0之后弹出的对话框中提示“License Error”,如下图所示:

    选择“Install Licenseà Seat license”(单机版)

    下一步

    请将破注册破解机获取的lservrc用记事本打开,并将其中的License(从开头至#号结束,如“A8YNONI53ECRFCH6TZ2E8YRLWA2D2U07MB27LRJLJKVIPHBFTPQB4BIWI7A3UWM#)拷贝至上图空白栏中.”下一步,如下图:

    接下来,按照提示“下一步”à“下一步”,就会看到成功了

         至此,许可证安装结束。但也提示只有1414天之后,你再次安装这个许可证吧,目前没找到永久破解法。
  • UltraEdit 配置 python 环境(语法高亮)

    2011-07-26 14:34:11

    在UltraEdit的wordfile中添加python的语法支持

    发现UltraEdit有对Perl的语法高亮支持,但是打开Python文件的时候却没有,网上找到一些方法

    方法一:

    1、到UltraEdit安装目录下,进入wordfiles目录,新建文件:python.uew

    把如下内容粘贴到该文件里,保存:


    /L30"Python" Line Comment = # Block Comment ne = """ Block Comment ff = """ Escape Char = / File Extensions

    = PY PYW
    /Indent Strings = ":"
    /Function String 1 = "%[ ,^t]++def[ ]+^([a-zA-Z0-9_]+*^):"
    /Function String 2 = "%[ ,^t]++^(##[ a-zA-Z0-9_]+*^)##"
    /Function String 3 = "%[ ,^t]++^(class[ ]+[a-zA-Z0-9_]+*^):"
    /Delimiters = []{}()<>="''.,:+
    /C1"Reserved Words"
    and assert
    break
    class continue
    def del
    elif else except exec
    finally for from
    global
    if import in is
    lambda
    map
    not
    None
    or
    pass print
    raise range return
    try
    while
    /C2"Built-in Functions"
    abs apply
    callable chr cmp coerce compile complex
    delattr dir divmod
    eval execfile
    filter float
    getattr globals
    hasattr hash hex
    id input int intern isinstance issubclass
    joinfields
    len list local long
    max min match
    oct open ord
    pow
    raw_input reduce reload repr round
    search setattr setdefault slice str splitfields
    unichr unicode
    tuple type
    vars
    xrange
    zip
    __import__
    /C3"__Methods__"
    __abs__ __add__ __and__
    __call__ __cmp__ __coerce__
    __del__ __delattr__ __delitem__ __delslice__ __div__ __divmod__
    __float__
    __getattr__ __getitem__ __getslice__
    __hash__ __hex__
    __iadd__ __isub__ __imod__ __idiv__ __ipow__ __iand__ __ior__ __ixor__
    __ilshift__ __irshift__
    __invert__ __int__ __init__
    __len__ __long__ __lshift__
    __mod__ __mul__
    __neg__ __nonzero__
    __oct__ __or__
    __pos__ __pow__
    __radd__ __rdiv__ __rdivmod__ __rmod__ __rpow__ __rlshift__ __rrshift__
    __rshift__ __rsub__ __rmul__ __repr__
    __rand__ __rxor__ __ror__
    __setattr__ __setitem__ __setslice__ __str__ __sub__
    __xor__
    /C4"__Attributes__"
    __bases__
    __class__
    __dict__ __doc__
    __methods__ __members__
    __name__
    __version__
    /C5"Exceptions"
    ArithmeticError AssertionError AttributeError
    EOFError Exception
    FloatingPointError
    IOError ImportError IndentationError IndexError
    KeyError KeyboardInterrupt
    LookupError
    MemoryError
    NameError
    OverflowError
    RuntimeError
    StandardError SyntaxError SystemError SystemExit
    TabError TypeError
    ValueError
    ZeroDivisionError
    /C6"Operators"
    +=
    -=
    %=
    /=
    **=
    &=
    |=
    ^=
    >>=
    <<=
    /C7"Common Libs"
    AST atexit
    BaseHTTPServer Bastion
    cmd codecs commands compileall copy
    CGIHTTPServer Complex
    dbhash dircmp dis dospath dumbdbm
    emacs
    find fmt fnmatch ftplib
    getopt glob gopherlib grep
    htmllib httplib
    ihooks imghdr imputil
    linecache lockfile
    macpath macurl2path mailbox mailcap
    mimetools mimify mutex math
    Mimewriter
    newdir ni nntplib ntpath nturl2path
    os ospath
    pdb pickle pipes poly popen2 posixfile posixpath profile pstats pyclbr
    pyexpat
    Para
    quopri
    Queue
    rand random regex regsub rfc822
    sched sgmllib shelve site sndhdr string sys snmp
    SimpleHTTPServer StringIO SocketServer
    tb tempfile toaiff token tokenize traceback tty types tzparse
    Tkinter
    unicodedata urllib urlparse util uu
    UserDict UserList
    wave webbrowser whatsound whichdb whrandom
    xdrlib xml xmlpackage
    zmod
    /C8"Others"
    array
    AzIM
    Desc
    fnmatch
    Info
    Run
    struct self
    StartKey StopKey

     2,打开 高级 -> 配置 -> 编辑器显示 -> 语法着色

    找到其中的目录:例如

    C:/Documents and Settings/user/Application Data/IDMComp/UltraEdit/wordfiles

    复制刚才我们创建的文件到该目录下

    重启UE,就会发现.py文件也有语法高亮了 

    方法二:未试验,网上找的,备份 

    为了让UE支持python语言,google了很多,结果都不行,最后看了下面的博客才知道错哪了,总结下以免忘记。
    http://wangtao.name/2009/12/20/ultraedit_python.html
    在官网上找到python的扩展下载点:http://www.ultraedit.com/downloads/extras.html
    有各种语言的扩展,便可以支持语法高亮。
    python 2.5:http://www.ultraedit.com/files/wf/python25.uew
    python 2.6&3.0:http://www.ultraedit.com/files/wf/python26.uew
    下载后安装方法如下:
    将下载的uew文件复制在“文档的完整目录名称:”中的文件夹里。如下图: //这句很重要,以前我一直都是放到安装目录下

    ,结果都不对
    如果这样做了,但在“语言选择”却没有找到新加的语言。就可能是新下载的uew文件的问题了。
    我们用UltraEdit打开uew文件。如“python25.uew”,在第一行你会看到这一句:
    /L14″Python” PYTHON_LANG Line Comment = # Escape Char = / String Literal Prefix = r File Extensions = PY PYW
    其中开头的”/L14″就是语言在UltraEdit的语言列表号,可能被其它语言占用了,打开

    C:/Users/Administrator/AppData/Roaming/IDMComp/UltraEdit/wordfiles(windows 7下),查看其中文件是否也使用了14


    我里面刚好有14个uew文件,所以改成了15。如果改了还是不行,可能要一个一个打开查看了。。。。

  • cmd窗口中运行ipconfig显示不是内部或外部命令

    2011-07-19 14:51:27

    一.现象
    打开cmd,运行ping或者ipconfig等命令时,弹出提示“不是内部或外部命令,也不是可运行的程序或批处理文件”。

    二.诊断
    用命令"c:\windows\system32\ping.exe xxx.xxx.xxx.xxx",则可以正常使用,或者进入到目录c:\windows\system32用ping或ipconfig命令则一切正常,需要修改系统环境变量。

    三.解决办法
    点出我的电脑->属性->高级,选择环境变量,找到系统变量"Path",编辑,在Path变量值中加上【%SystemRoot%\system32;%SystemRoot%;%SystemRoot%\System32\Wbem】,注意路径之间用分号";"分隔。确定后重启使新的环境变量生效。再次打开cmd运行ping或者ipconfig等命令时就成功了。

  • Web财务软件测试项目总结

    2010-08-15 20:31:36

       总算做完这个财务项目了。现在随手来做个小结,仅仅是为自己日后回忆做个影子,不算是一篇总结文档。

       这个项目是为一家全球业务的企业做的财务软件。

       1、功能测试:这是最主要的,一般按需求来就行了。

       我想说的是,要侧重业务,技术只是锦上添花。技术方面的:比如页面记录查询,第一次搜索有N页结果,在处于第N页时进行第二次搜索,有M页(M<N),检查是否更新结果及页面显示(后台是否刷新查询记录);再如页面可以增删记录,当前有多页,删除第一条,添加一条,检查记录数(后台处理增删是否正确);又比如搜索记录,再次搜索记录,点击工具栏“后退”是否出现黄页情况(是否更新Cookies或缓存);录入数据(金额)是否有溢出;Axtive等各种插件干扰等等;

       当然需要关注组合性用例:比如当前页面的删除记录能够满足单条测试用例,但删除后的记录是否对其他页面有影响?其他页面是否做了处理等等。当然,当前页面输入金额没问题,但对于财务软件,往往需要几处金额相加,那这个“和”是否会溢出,就需要你考虑了。

       另外,对于财务软件需要把握两点:金额和流程。这里的我所提的金额不仅仅是“数值溢出”了,还包括计算,业务上要求根据金额判断,导出的表格(财务是要做月报、年报的)等等。流程方面就需要根据业务来跳转了。

       在此啰嗦我做这个项目的心得:在软件中,任何情况都有可能的,程序对了,但设需求描述可能不对;需求描述正确了,业务逻辑设计可能有遗漏或缺陷;业务逻辑合理了,但用户拿到手可能觉得这个不是想要的。O(∩_∩)O~

       2、页面布局等次之的页面测试。这个很简单,主要是图片、提示语、各种控件的位置、页面颜色……说白了,就是看着是否好看。如果需求明确了,那就好办;如果需求没描述,我一般先找需求确认,再来告诉开发。或者对于明显不舒服的,直接作为建议性缺陷来提。当然是要看当时具体情况的

       3、链接:做Web网页,自然会有链接,这个直接到网上下载一个链接工具,让它来帮你测试。当然,也要多说一句:链接测试工具只是工具,它只能从技术层面判断,不是“智能”工具;

       4、性能测试:离不开性能测试工具。一般在项目前期时就根据项目的情况来选择,到功能测试差不多时根据前期测试计划中指定的工具来运行脚本就行了;

       5、权限问题:这个也要根据相关文档或约定来;

       6、UI测试:主要是界面,不仅是界面布局了,还有……

       7、浏览器兼容性测试:不同浏览器展现出来的效果不同,甚至会出现不同的结果。就算是都用xp系统自带的IE 6.0或IE 7.0或IE 8.0乃至IE 9.0,各浏览器的特性不同,结果就难说了。这点让不同的组员在做日常的功能测试时就行了;

       8、还有其他很多,要看项目。说白了,要看项目特点,要有针对性设计测试策略、定测试范围和测试重点……

       我所做的测试都是先从最小粒度的测试用例(单条)来执行,当产品基本实现这个模块多数或全部功能后,再加大粒度(可能是多条关联用例一起执行);当达到较为稳定时或上一个台阶后,再加大粒度。这种“旋罗式”一步一步最终执行完模块用例或系统用例。其实执行完系统用例后,也就执行场景用例。但是否有必要再次测试那就要“具体情况具体对待”了。

       在做整个项目中,尤其是那些项目前期工作没做好,中后期需求经常变动,就需要从项目管理上来操作了,比如研发模式,要灵活;开发、测试每个阶段重点,每个人的任务等等。这个时候,我想无论是做测试,还是做需求,这些较“程序员”后出现的“新”岗位的人员,就需要有更高层次的见解了,比如做事时要融入做人的艺术了。呵呵,啰嗦了

  • Araxis Merge代码比较工具简要使用说明

    2010-04-13 14:45:30

    Araxis Merge代码比较工具简要使用说明

    一、概述

    文档内容:仅涉及比较差异使用。
                 
    对于该工具的合并等其他功能不做说明。

    读者对象:研发管理人员、开发人员、其他相关人员

    本文档对该工具操作说明的部分功能:

    ² 能够实现代码文件比较,能得出统计数据,能够定位到修改、删除、新增行;

    ² 能够实现多个文件或多级文件夹比较,能统计出删除、修改、新增文件个数,同时能定位到哪个文件做了修改;
    说明:使用该工具比较文件夹时,不能直接得出该文件夹内文件代码行比较情况

    ² 能够方便的被软件工程师和web站点开发者使用快速精确地比较、了解和联合不同版本的源文件,从而进行版本和质量控制;

    ² 能够将上述比较统计的结果导出到HTML 或是XML 报告;

    ² 管理人员能从以上统计的数据中,得到修改代码工作量等。

    二、工具其他简介

    1.    Merge能比较和使用不同的文本文件版本,比如程序源代码等文本文件、图片、二进制文件等。支持带有ASCII, MBCS Unicode字符编码。利用带颜色的side-by-side comparison很容易比较出类似或不同的文档,并在两文件之间画出Linking lines表明它们的关系;是一个可视化的文件比较、合并和同步的软件;

    2.    支持打印;

    3.    能够支持导出HTMLHTML slideshowXML UNIX diff 格式;

    4.    支持操作系统: Windows Vista (32-bit and 64-bit)Windows XP Professional SP2Windows Server 2003Windows 2000 Professional SP4

    三、操作步骤

    解压文件后,按照安装步骤成功安装Araxis.Merge-BEAN_setup.exe后,打开该工具:

    1.选择比较类型

           打开工具后,选择File,请根据实际需要,选择前四项中一种。

    图一

           补充:下文将是在选项“New Text Comparison”举例说明。

    比较对象类型不同,但操作相同。以下不在单独说明。

    2.选择比较对象

    Text Comparison界面,可以通过“ ”按钮选择比较对象路径。

    图二

    默认情况下,是两个文件比较,而不是文件夹,且以左侧窗口为基准。想要比较三个文件(文件夹)比较,点击工具栏中“ ”,再选择源文件即可。

           一般情况下,选择目标文件后即可自动比较了。当你重新选择目标对象后,按F5键也可比较。或者选择FileàRecompare即可。

    3.比较结果查看

    图三:三个文件(源代码)比较示意图

    图四:文件夹比较示意图

    在窗口底部状态栏偏右有“X removal  Y insertions  Z changes”,代表比较文件统计数据,即“删除X行代码/删除X个文件,新增Y行代码/新增Y个文件,修改Z行代码/修改Z个文件”;

    在在窗口底部状态栏最右侧有“Ln X  of  Y  Col  Z”,代表当前光标所在窗口的行列统计数据,即“当前光标在X/Y行,光标在Z列”;(该项是比较文件时才有)

    所统计的数据用左侧窗口文件作为基准,当有三个文件(文件夹)类推。

    在整个工具最左侧和最右侧都有蓝色或绿色的小框条,代表修改在整个文件中的大致比例。双击,则直接跳转到所修改的文件部分。

           比较窗口中不同颜色说明:

    Ø 绿底红字:表明另外窗口种没有该段编码,工具已经用线表示对应另外一段代码的位置。
             
    即添加删除代码部分;

    Ø 蓝底红字:修改部分。即代码修改部分;

    Ø 白底黑字:与其他窗口中的代码相同。

    以上是从窗口中查看,还有一种方法可以调出比较统计窗口,如图五所示。

    选择ViewàComparison Statistics…,即可;

    点击工具栏中“ ”按钮也可得到。

    图五

    补充:当比较文件夹时双击不同之处颜色,即可得到该份文件比较结果.

    四、编辑文件

           当鼠标点击比较文件窗口内部,可以直接编辑了。

    补充:如果工具默认情况下是不能编辑代码的,请选择EditàReplace Left file/Replace Right file.

           选择之后就可以在对应窗口编辑了。

           编辑完结束后,可以选择FileàSaveà子选项,即可保存编辑的文件。

    五、有关标记

           将光标移至想要添加标记的位置,选择EditàMarkersàToggle Bookmark选项。请见图六。

    图六

           执行上述操作后,在光标所在的行会自动出现一个蓝色方块的标记。请见图七。

    图七:标记示意图

           操作到这了,我想你也就明白EditàMark下其他子选项的作用了。

    设置完标记后,对查看文件会更方便。

    六、导出报告

           当你想将文件比较结果导出时,可以选择FileàReport来导出到其他文档中。请见图十。

    图八:导出报告示意图

           选择你需要导出的文件类型后(有些需要设置),点击“Save”,就行了。

    七、其他功能罗列

           看完上述描述,我想你已经对这款工具有了一个比较操作上了解。现在将该款工具的其他功能做个罗列,方便各位查找。

    1)    File菜单:交换各窗口文件、打印设置等;

    2)    Edit菜单:撤销、剪贴、复制、粘贴、查找&替换、光标定位行、合并功能等;

    3)    View菜单:比较统计、视图工具(也就是调用各工具栏的一个操作)、各种选项设置等;

    4)    Windows菜单:窗口显示(排列)

    七、与DiffCount工具相比较

           1.功能方面

    Ø Araxis Merge不仅支持文件比较,而且还支持文件合并导出等功能,DiffCount仅支持文件比较;

    Ø Araxis Merge比较文件仅仅能得到删除、新增、修改数据,而DiffCount比较文件还能得到空白行、注释行、标准C的折算比例等;

    Ø Araxis Merge比较文件支持导出,而DiffCount仅仅将比较结果显示在命令行内。

    2.比较对象

    Ø Araxis Merge能够对文件夹及其子文件夹和子文件比较,但不能直接得出该文件夹内文件所有代码比较情况

    Ø DiffCount可以得出文件夹内所有代码文件的比较情况,对文件夹不做比较统计;

    3.操作风格

    Ø Araxis Merge通过窗口支持可视化操作,DiffCount仅支持命令行操作,并需要进入指定目录下输入命令

    八、补充说明

    1)    该工具的其他详细情况请从官方网站上获取;

    2)    最新版本可从http://www.araxis.com/网站上下载。

     

  • 接口测试工具SOAPTest操作步骤学习

    2010-03-25 16:23:22

       附件是使用SOAPTest接口测试工具的操作步骤截图,每个图片中有操作说明,仅供各位测试同行参考。
  • 手机测试技术经验总结

    2010-03-25 16:17:24

    手机测试技术经验总结

    1.测试技术方面

           在日常测试过程中,可以从以下方面关注一些测试功能点。

    与手机平台有关

    Mobile

    1.    大屏幕花屏问题:
    HTC钻石2、三星i908机,多数花屏是出现在界面跳转、接听电话、第三方事件打断。越是屏幕越大越容易出现花屏

    2.    对部分手机新采用的设备接口的检测,如在HTC 6700(CDMA定制机)上耳机检测,目前无法判断;

    3.    同时运行软件的某个功能,比如搜歌软件可以同时进行语音搜索和播放歌曲,两者都是需要访问网络,占用系统资源;取个极端情况,再来个电话。别小瞧这点,很多的问题都是在组合某两个用例中发现的;

    SymbianS60V3

    1.    Nokia系列手机录音与播放功能不能同时启动:该问题在部分手机上出现,如三星i458机只能录音但无法播放,Nokia N系列手机佩戴耳机无此问题;

    2.    不佩戴耳机时,调节音量会自动变成听筒模式,但使用耳机时,无此问题;

    3.    对于S60不同机型,无法判断耳机检测;

    4.    使用搜狗输入法1.0版本时会出现无法输入情况,但采用4.1版本无此问题

     

    SymbianS60V5

           暂略

     

    与手机平台无关

    1.       设计文档:体现的业务逻辑、界面展现等;

    2.       需要考虑第三方事件的干扰,尤其是初始化、加载资源、启动软件某个线程时的时机。第三方事件干扰具体罗列如下:

    Ø 来电提示;

    Ø 来短信提示;

    Ø 手机磁盘空间不足提示;

    Ø 手机没电提示;

    Ø 第三方手机软件弹出提示,如截图软件;

    Ø 用户定的闹铃/定时器提示;

    Ø 非产品设计文档中有效按键处理:如拍照/摄影键、功能键、解锁键、其他具体手机特有按键等等;

    Ø 蓝牙连接提示;

    Ø 连接数据线提示;

    Ø 充电提示;

    3.       内存占用问题:

    可采用免安装测试工具 TaskMgr.exe”。

    这个是手机终端软件测试除功能之外首要关注的,一般是在手机进行连续操作一段时间后出现的,比如连续播放、进行哼唱搜索等等。通常情况下内存不足必然会导致CPU占用很大。我们在测试前期,会发现CPU占用情况非常严重,启动时就已经是70%左右,使用一个小时不到,CPU会高达90%以上,甚至是100%。这个时候按关机键都不能关机,只好拔电池。呵呵……;

                  因内存占用问题所引发的问题,多数是在“内存较下”,如Nokia N71N61等;

    4.       当软件需要访问网络时,还需要考虑网络访问:

    Ø 网速:手机网络明显慢于PC机,由此所引发的“超时”、“网络异常”等,尤其是在网速特慢时,需要关注软件对这些的超时或容错处理。对于模拟网速慢的情况,可以通过LR压服务器或者往数据库中写大量垃圾数据,最直接的编写脚本来处理访问;

    Ø 接入点和信号:这个是手机终端设备所具有的,一般手机上的设置都有,可以通过手机自带的系统设置来调试。但一定要测试。

    按键处理

           手机按键基本包括如下:

    PowerKey(开关机键), 左右软键,导航键(/,/右方向键),功能键,照相键,中间键,清除键©, 数字键,音量键,接听键,挂机键。

    一般按“有效键”时用户能看到软件所做的处理;“无效键”不做任何响应,但绝对不能出异常。

    PowerKey(开关键)

    无论软件在何种状态下,进行此键操作时都是有效操作。需要考虑的是:按时间长,关机;按时间短,屏幕锁机。软件的处理,比如播放在“锁机”情况下是做暂停还是继续播放等等;

    左右软键

    不同页面,处理不同。请根据设计文档中描述来定义。

     

    导航键(向上、向下、向左、向右)

    不同页面,处理不同。请根据设计文档中描述来定义。

    补充:一般考虑翻页、焦点移动等情况

       

    功能键

           “功能键”不是所有手机都有,Mobile系列的手机没有,但SymbianS60系列的手机一般都有该按键。

           SymbianS60系列的手机上,按此键都是软件退转到后台,但没有退出软件。当然“设计文档中明确按此键做退出处理的除外”。

     

    照相键

    一般情况下软件在任何页面,进行此键操作时都是有效操作。但需要注意的是“关闭照相”功能时,返回软件页面,做什么处理,某个功能暂停?某个功能到后台运行返回后显示结果?

     

    中间键

    作为有效键时,一般当“确认”处理。至于是否作为有效键,是否当“确认”处理,就需要看设计文档的定义了。

       

    清除键©

    当软件处于的页面有输入框并且焦点处于输入框内,进行字符输入时,此时清除键(C)为有效键。

    其它状态下,此时清除键©为无效键。

       

    数字键

    不同页面,处理不同。请根据设计文档中描述来定义。需要考虑的是“软件某个页面的数字键是快捷键”。

     

    音量键

    当软件所处页面的功能涉及到音量,用户是可以调整音量的,就是音量键此时为有效键。

    其它状态下,就需要看手机平台以及设计定义了。

    补充:请考虑插拔耳机前后音量的变化,还有就是连接蓝牙耳机时的音量调整。

       

    接听键

    无容置疑,无论软件处于何种状态,当有电话呼入,接听键都是有效键,而且要支持能接电话。

    当软件退至后台,此时按接听键可以是各手机平台所做特有响应。Mobile系列手机此时是弹出拨打电话界面;SymbianS60是弹出拨打电话的历史记录页面。

       

    挂机键

    无论软件处于何种状态,当有电话呼入,此时挂机键为能够挂掉电话。

    当软件处于任何页面,此时按挂机键,软件退至后台。但需要注意各手机处理机制不同,可能结果就不同。

  • 我从编程中悟出八个字

    2008-05-26 12:32:39

    我从编程中悟出八个字:1专 2静 3谦 4筹 5悟 6慎 7透 8恒

      1"忽如一夜春风来,千树万树梨花开."现在的技术百花齐放,切忌不可贪.
    不要盲目的追求新技术,唯有算法才是灵魂.
     
      2"非淡泊无以明志,非宁静无以致远."要想达到高的境界,必须能够心静.
    年轻的程序员都很浮躁,这一点对于他们来说尤为的重要.

      3谦不仅指技术,而且还指人.一门实用的技术,无论多么容易掌握.只要你
    深入的研究,都会挖掘出很多新东西来.对于人来讲,你可能会就某些方面向
    其他人请教.如果你不谦虚,请教的结果肯定会不很理想.

      4"凡事预则利,不预则废."在编程的过程中,如果你没有做好事前的分析工
    作.你会发现自己慢慢就会陷入思维混乱中,最终导致失败.当你把一切都筹划
    好,那种"运筹帷幄决胜于千里之外"的感觉多爽啊!

      5程序中蕴含着很多的道理,唯有大彻大悟者方能体会其中的奥妙.

      6内存无论在怎么发展,它都会有一个容量的限制.因此你应该堤防着它.
    你的程序如果导致内存泄漏,是程序员很可耻的事情.

      7对于问题的理解,一定要透彻.这样你才能实质的解决问题.

      8做技术一定要一颗恒心,这样才不会半途而废. 
  • 破解microsoft office enterprise 2007激活

    2008-05-24 11:36:29

    我的机器是新装的系统,装完Office Enterprise 2007后,看WORD,提示我要激活,我在网上搜索到可以不用激活。叙述如下,愿和大家共享。

    1.使用序列码安装完毕(可以是盗版的,只要能过验证。)
    2.关闭所有Office程序
    开始,运行regedit,打开注册表
    找到HKEY_LOCAL_MACHINE\Software\Microsoft\Office\12.0\Registration
    删除子键ProductName、DigitalProductID 及 ProductID关闭注册表
    注意:是三个子项目的三个子建,共计九个。

    找到C:\ProgramFiles\CommonFiles\MicrosoftShared\OFFICE12\OfficeSetup Controller\Proof.en\Proof.XML 文件
    修改<OptionRef Id="AlwaysInstalled"/>为 <OptionRef Id="NeverInstalled"/>保存关闭

  • MFC、Windows API 、VC之间的关系

    2008-05-22 17:07:49

    VC是一个编程工具软件,它集成了C++编译器和编辑环境,全称叫做:Virtual C++,即“可视化的C++编程工具”。

    MFC是一个微软提供的基础类库,它封装了WINDOWS里的API,对于开发者来说,用MFC会比直接用Windows的API来得容易一些。(所有Windows应用程序都得通过使用Windows API来实现)MFC中还提供了很好的应用程序框架,最突出的就是"文档-视"结构。

    C++语言与操作系统环境是没有关系的,由于Windows操作系统太过普及,所以一般大家都在开发基于Windows操作系统的应用程序。

    目前用于开发Windows应用程序的编程语言、编程环境很多,而用C++开发程序的编程环境中,VC是比较好用的,尤其是开发Windows应用程序,再加上VC对MFC应用开发支持的最好(都是微软的产品),所以,现在相当多数的人在VC上用MFC来开发Windows应用程序。

    你提到的“windows编程和windows API编程”还是有一点不同,前者比较泛指开发Windows应用程序,而后者比较强调直接调用Windows API进行编程,前者包括后者,现在直接用Windows API编程的比较少,而是用封装了API的类库来开发的比较多,比如MFC。

    总之,VC,C++,MFC之间是没有什么直接关系,要说有的话,就是:
    1。VC支持C++编程语言,也支持用MFC开发Windows应用程序
    2。MFC本身就是C++类库

    另外:
    1。VC也可以开发C程序,可以完全不用到MFC
    2。VC可以用C或者C++开发非Windows程序,比如Dos程序等

    如果你想用C++编Windows程序的话,建议你先把C++学好,然后试着在VC环境中学习用MFC框架开发Windows程序,可以参考《Virtual C++技术内幕》(现在已经搞不清到多少版了),当然,你手上还得必备一本MFC参考手册,随时可以查找类以及类成员函数的说明(有MSDN也可以)。

    刚开始学不要太紧张,也不要太急于求成,循序渐进,最好先把一些概念搞清楚,还有就是操作系统的消息机制一定要多下功夫去理解,有了这些基础,再实践起来就会容易和轻松的多。

    好了,先写这些,希望能够对你有所帮助。

    ***********************************************************

    补充回答:

    如果你现在想学windows API 编程的话,用VC也是合适的,创建工程的时候选择Win32 App,并且不使用MFC。

    Windows API编程肯定需要使用一种编程语言的,选择C或者C++都是不错的选择,只要在程序里不使用MFC,而是直接调用Windows 提供的最基本的API,都可以叫做Window API编程的。

    至于选择开发环境,VC还是相当不错的(虽然稍微复杂一点),可以利用VC为你生成应用程序框架,可以大大提高开发效率,也可以自己从WinMain()开始一点一点地写(即应用程序的唯一入口点,相对而言,非Windows程序是以main()开始的),就跟写DOS程序一样。

    总之,Windows API编程并不复杂,你可以看看几个简单的例子,然后慢慢的增加代码和应用的复杂度。如果你用VC,就让VC帮你生成一个最简单的应用程序框架,你一句代码也不用写,就可以运行了,然后你再仔细看看VC帮你生成的源代码,你就可以开始在这个基础上慢慢的加些新的代码进去了。

    编程的时候,在VC缺省的情况下是默认为C++的,至于你用C还是C++就随你了,一般人都是混着用的,C++完全包含了C,现在一般区分C和C++,无非就是简单的看看是否使用了类,是否使用了引用(&)等等。。。建议你就直接用C++,先掌握基本的C语法和概念。

  • 所有HTTP状态代码及其定义

    2008-05-19 14:22:20

     状态行包含HTTP版本、状态代码、与状态代码对应的简短说明信息。在大多数情况下,除了Content-Type之外的所有应答头都是可选的。但Content-Type是必需的,它描述的是后面文档的MIME类型。虽然大多数应答都包含一个文档,但也有一些不包含,例如对HEAD请求的应答永远不会附带文档。有许多状态代码实际上用来标识一次失败的请求,这些应答也不包含文档(或只包含一个简短的错误信息说明)。
      当用户试图通过 HTTP 访问一台正在运行 Internet 信息服务 (IIS) 的服务器上的内容时,IIS 返回一个表示该请求的状态的数字代码。状态代码可以指明具体请求是否已成功,还可以揭示请求失败的确切原因。  

      1xx - 信息提示
      这些状态代码表示临时的响应。客户端在收到常规响应之前,应准备接收一个或多个 1xx 响应。
       100 - 继续。
      101 - 切换协议。 

      2xx - 成功
      这类状态代码表明服务器成功地接受了客户端请求。

      200 - 确定。客户端请求已成功。
      201 - 已创建。
      202 - 已接受。
      203 - 非权威性信息。
      204 - 无内容。
      205 - 重置内容。
      206 - 部分内容。  

      3xx - 重定向
      客户端浏览器必须采取更多操作来实现请求。例如,浏览器可能不得不请求服务器上的不同的页面,或通过代理服务器重复该请求。

      302 - 对象已移动。
      304 - 未修改。
      307 - 临时重定向。  

      4xx - 客户端错误
      发生错误,客户端似乎有问题。例如,客户端请求不存在的页面,客户端未提供有效的身份验证信息。

      400 - 错误的请求。
      401 - 访问被拒绝。IIS 定义了许多不同的 401 错误,它们指明更为具体的错误原因。这些具体的错误代码在浏览器中显示,但不在 IIS 日志中显示:
      401.1 - 登录失败。
      401.2 - 服务器配置导致登录失败。
      401.3 - 由于 ACL 对资源的限制而未获得授权。
      401.4 - 筛选器授权失败。
      401.5 - ISAPI/CGI 应用程序授权失败。
      401.7 ? 访问被 Web 服务器上的 URL 授权策略拒绝。这个错误代码为 IIS 6.0 所专用。
      403 - 禁止访问:IIS 定义了许多不同的 403 错误,它们指明更为具体的错误原因:
      403.1 - 执行访问被禁止。
      403.2 - 读访问被禁止。
      403.3 - 写访问被禁止。
      403.4 - 要求 SSL.
      403.5 - 要求 SSL 128.
      403.6 - IP 地址被拒绝。
      403.7 - 要求客户端证书。
      403.8 - 站点访问被拒绝。
      403.9 - 用户数过多。
      403.10 - 配置无效。
      403.11 - 密码更改。
      403.12 - 拒绝访问映射表。
      403.13 - 客户端证书被吊销。
      403.14 - 拒绝目录列表。
      403.15 - 超出客户端访问许可。
      403.16 - 客户端证书不受信任或无效。
      403.17 - 客户端证书已过期或尚未生效。
      403.18 - 在当前的应用程序池中不能执行所请求的 URL.这个错误代码为 IIS 6.0 所专用。
      403.19 - 不能为这个应用程序池中的客户端执行 CGI.这个错误代码为 IIS 6.0 所专用。
      403.20 - Passport 登录失败。这个错误代码为 IIS 6.0 所专用。
      404 - 未找到。
      404.0 -(无) ? 没有找到文件或目录。
      404.1 - 无法在所请求的端口上访问 Web 站点。
      404.2 - Web 服务扩展锁定策略阻止本请求。
      404.3 - MIME 映射策略阻止本请求。
      405 - 用来访问本页面的 HTTP 谓词不被允许(方法不被允许)
      406 - 客户端浏览器不接受所请求页面的 MIME 类型。
      407 - 要求进行代理身份验证。
      412 - 前提条件失败。
      413 ? 请求实体太大。
      414 - 请求 URI 太长。
      415 ? 不支持的媒体类型。
      416 ? 所请求的范围无法满足。
      417 ? 执行失败。
      423 ? 锁定的错误。  

      5xx - 服务器错误
      服务器由于遇到错误而不能完成该请求。

      500 - 内部服务器错误。
      500.12 - 应用程序正忙于在 Web 服务器上重新启动。
      500.13 - Web 服务器太忙。
      500.15 - 不允许直接请求 Global.asa.
      500.16 ? UNC 授权凭据不正确。这个错误代码为 IIS 6.0 所专用。
      500.18 ? URL 授权存储不能打开。这个错误代码为 IIS 6.0 所专用。
      500.100 - 内部 ASP 错误。
      501 - 页眉值指定了未实现的配置。
      502 - Web 服务器用作网关或代理服务器时收到了无效响应。502.1 - CGI 应用程序超时。
      502.2 - CGI 应用程序出错。
      503 - 服务不可用。这个错误代码为 IIS 6.0 所专用。
      504 - 网关超时。
      505 - HTTP 版本不受支持。

      常见的 HTTP 状态代码及其原因

      200 - 成功。 此状态代码表示 IIS 已成功处理请求。

      304 - 未修改。 客户端请求的文档已在其缓存中,文档自缓存以来尚未被修改过。客户端使用文档的缓存副本,而不从服务器下载文档。

      401.1 - 登录失败。 登录尝试不成功,可能因为用户名或密码无效。

      401.3 - 由于 ACL 对资源的限制而未获得授权。 这表示存在 NTFS 权限问题。即使您对试图访问的文件具备相应的权限,也可能发生此错误。

      403.1 - 执行访问被禁止。

      下面是导致此错误信息的两个常见原因:

      您没有足够的执行许可。例如,如果试图访问的 ASP 页所在的目录权限设为“无”,或者,试图执行的 CGI 脚本所在的目录权限为“只允许脚本”,将出现此错误信息。若要修改执行权限,请在 Microsoft 管理控制台 (MMC) 中右击目录,然后依次单击属性和目录选项卡,确保为试图访问的内容设置适当的执行权限。
      您没有将试图执行的文件类型的脚本映射设置为识别所使用的谓词(例如,GET 或 POST)。若要验证这一点,请在 MMC 中右击目录,依次单击属性、目录选项卡和配置,然后验证相应文件类型的脚本映射是否设置为允许所使用的谓词。

      403.2 - 读访问被禁止。验证是否已将 IIS 设置为允许对目录进行读访问。另外,如果您正在使用默认文件,请验证该文件是否存在。
      403.3 - 写访问被禁止。 验证 IIS 权限和 NTFS 权限是否已设置以便向该目录授予写访问权。
      403.4 - 要求 SSL.禁用要求安全通道选项,或使用 HTTPS 代替 HTTP 来访问该页面。
      403.5 - 要求 SSL 128.禁用要求 128 位加密选项,或使用支持 128 位加密的浏览器以查看该页面。
      403.6 - IP 地址被拒绝。您已把您的服务器配置为拒绝访问您目前的 IP 地址。
      403.7 - 要求客户端证书。您已把您的服务器配置为要求客户端身份验证证书,但您未安装有效的客户端证书。
      403.8 - 站点访问被拒绝。您已为您用来访问服务器的域设置了域名限制。
      403.9 - 用户数过多。与该服务器连接的用户数量超过了您设置的连接限制。

      注意:Microsoft Windows 2000 Professional 和 Microsoft Windows XP Professional 自动设置了在 IIS 上最多 10 个连接的限制。您无法更改此限制。

      403.12 - 拒绝访问映射表。 您要访问的页面要求提供客户端证书,但映射到您的客户端证书的用户 ID 已被拒绝访问该文件。
      404 - 未找到。 发生此错误的原因是您试图访问的文件已被移走或删除。如果在安装 URLScan 工具之后,试图访问带有有限扩展名的文件,也会发生此错误。这种情况下,该请求的日志文件项中将出现“Rejected by URLScan”的字样。
      500 - 内部服务器错误。 很多服务器端的错误都可能导致该错误信息。事件查看器日志包含更详细的错误原因。此外,您可以禁用友好 HTTP 错误信息以便收到详细的错误说明。
      500.12 - 应用程序正在重新启动。 这表示您在 IIS 重新启动应用程序的过程中试图加载 ASP 页。刷新页面后,此信息即会消失。如果刷新页面后,此信息再次出现,可能是防病毒软件正在扫描 Global.asa 文件。

      500-100.ASP - ASP 错误。 如果试图加载的 ASP 页中含有错误代码,将出现此错误信息。若要获得更确切的错误信息,请禁用友好 HTTP 错误信息。默认情况下,只会在默认 Web 站点上启用此错误信息。
      502 - 网关错误。 如果试图运行的 CGI 脚本不返回有效的 HTTP 标头集,将出现此错误信息。
      

      “IIS配置401错误”完美解决方案

      “IIS配置401错误”完美解决方案(54powerman)  

      1、错误号401.1
      症状:HTTP 错误 401.1 - 未经授权:访问由于凭据无效被拒绝。

      分析:
      由于用户匿名访问使用的账号(默认是IUSR_机器名)被禁用,或者没有权限访问计算机,将造成用户无法访问。

      解决方案:
      (1)查看IIS管理器中站点安全设置的匿名帐户是否被禁用,如果是,请尝试用以下办法启用:
      控制面板->管理工具->计算机管理->本地用户和组,将IUSR_机器名账号启用。如果还没有解决,请继续下一步。
      (2)查看本地安全策略中,IIS管理器中站点的默认匿名访问帐号或者其所属的组是否有通过网络访问服务器的权限,如果没有尝试用以下步骤赋予权限:
      开始->程序->管理工具->本地安全策略->安全策略->本地策略->用户权限分配,双击“从网络访问此计算机”,添加IIS默认用户或者其所属的组。
      注意:一般自定义 IIS默认匿名访问帐号都属于组,为了安全,没有特殊需要,请遵循此规则。

      2、错误号401.2
      症状:HTTP 错误 401.2 - 未经授权:访问由于服务器配置被拒绝。

      原因:关闭了匿名身份验证

      解决方案:
      运行inetmgr,打开站点属性->目录安全性->身份验证和访问控制->选中“启用匿名访问”,输入用户名,或者点击“浏览”选择合法的用户,并两次输入密码后确定。  

      3、错误号:401.3
      症状:HTTP 错误 401.3 - 未经授权:访问由于 ACL 对所请求资源的设置被拒绝。

      原因:IIS匿名用户一般属于Guests组,而我们一般把存放网站的硬盘的权限只分配给administrators组,这时候按照继承原则,网站文件夹也只有administrators组的成员才能访问,导致IIS匿名用户访问该文件的NTFS权限不足,从而导致页面无法访问。  

      解决方案:
      给IIS匿名用户访问网站文件夹的权限,方法:进入该文件夹的安全选项,添加IIS匿名用户,并赋予相应权限,一般是读、写。

  • 文件夹打不开二

    2008-05-17 13:14:57

    双击打不开硬盘的建议首先用杀毒软件扫描系统,排除病毒影响。这个问题主要是因为该光盘在你的电脑的最后一个分区里放置了一个名为“Autorun”的INF文件以及一个“.ico”或“.bmp”的小图标所导致的。你可以在该分区里找到Autorun.inf文件,用记事本将它打开,查看“icon=图标名称”这一行,找到那个图标将它和Autorun.inf文件一起删除并重新启动系统就可以解决问题。如果你喜欢该分区的图标,但又想恢复分区原来的打开形式,只要把Autorun.inf文件里的“open=程序名称.exe”这一行删除,保存并退出即可。

      支招:Autorun.inf不是病毒,它原本应用在光盘上。很多朋友用过那种会自动运行的光盘吧?比如电脑报合订本光盘,该光盘会自动运行全是Autorun.inf文件的功劳。

      Autorun.inf是一个文本形式的配置文件,我们可以用文本编辑软件(如记事本)进行编辑,然后将它放置到驱动器的根目录下。这个文件包含了需要自动运行的命令,如改变的驱动器图标、运行的程序文件、可选快捷菜单等内容。Autorun.inf里的“open=程序名称.exe”这一行就是要自动运行的程序名称,比如你放进光盘后,光盘就会运行指定的程序;而“icon=图标名称.ico”则是盘符图标的内容。

      一般来说,如果碰上磁盘分区双击打不开时,只能使用右键菜单的“打开”命令来打开,多数是磁盘根目录下有一个Autorun.inf文件在“捣鬼”,你可以将该文件删除;也可以编辑该文件,将“open=程序名称.exe”这一行删除。如果连磁盘分区的图标也改变了,则可以肯定是Autorun.inf文件在捣鬼。

      要注意的是,如果分区的打开形式没有改变,只是单纯的图标改变了,但磁盘分区下没有Autorun.inf文件,则问题出在注册表。单击“开始→运行”,在“运行”对话框中输入“Regedit”并回车启动注册表编辑器,进入HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer,查看Explorer下面有没有 “DriveIcons”子项,如果有,则将它删除。


    看看是不是PWSteal.Wowcraft.b病毒
    它一般修改注册表启动项,加入(在MSCONFIG中可查到)c:\windows\services.exe,
    修改.exe关联文件(assoc.exe看到为winfiles,正常应该为exefile),并同时生成几个固定的病毒文件,作为关联调用

    你看看C盘里有没有c:\windows\services.exe
    C:\WINDOWS\ExERoute.exeEXE
    C:\WINDOWS\1.com启动时执行
    C:\WINDOWS\finder.com
    C:\WINDOWS\explorer.com
    ━━━━━━━━━━━━━━━━━━━━━━━━
    drwtsn32.exe(Dr. Watson)是一个Windows系统内置的程序错误调试器。默认状态下,出现程序错误时,Dr. Watson 将自动启动,除非系统上安装了VC等其他具有调试功能的软件更改了默认值。注册表项: 
    [HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\AeDebug] 下的Debugger 项的值指定了调试器及使用的命令;Auto 项决定是否自动诊断错误,并记录相应的诊断信息。 
    [HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\AeDebug] 
    在Windows 2000中drwtsn32.exe默认会将故障转储文件user.dmp存放在目录“\Documents and Settings\All Users\Documents\DrWatson”下。权限为Everyone完全控制。在Windows NT中被存储在“\WINNT\”中,everyone组至少有读取权限。由于user.dmp中存储的内容是当前用户的部分内存镜像,所以可能导致各种敏感信息泄漏,例如帐号、口令、邮件、浏览过的网页、正在编辑的文件等等,具体取决于崩溃的应用程序和在此之前用户进行了那些操作。

    因为Windows程序是如此易于崩溃,所以不能排除恶意用户利用此弱点获取非授权信息的可能。例如:利用IE5.0以上的畸形注释漏洞就可以使浏览包含恶意代码的iexplore.exe和查看包含恶意代码的邮件程序崩溃。(关于IE的畸形注释漏洞请参见拙作《包含畸形注释的HTML文件可使IE 5.0以上版本崩溃》) 

    测试:

    ---〉在administrator帐号下操作: 
    如果目前的默认调试器不是 Dr. Watson,请在命令提示符后键入命令:drwtsn32 -i 将 Dr. Watson 设为默认调试器。 
    先启动一个需要使用密码的程序,这里我们选择Foxmail。 
    用任务管理器察看Foxmail的PID,假设是“886”。在命令提示符后键入命令:drwtsn32 -p 886 

    ---〉在guest帐号下操作: 
    在\Documents and Settings\All Users\Documents\DrWatson\目录下键入命令: 
    type user.dmp|find "youEmailPasswd" 
    就会发现你的邮件密码在user.dmp中,而且完全可以被guest用户读取。 

    解决方案: 
    微软尚未对此做出反应。 
    在可用的补丁出来之前,采取以下任一措施皆可解决此问题, 
    1、键入不带参数的drwtsn32,更改故障转储文件到一个特权路径,如: 
    \Documents and Settings\Administrator\DrWatson 或取消“建立故障转储文件”选项。 
    2、删除注册表项 
    [HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\AeDebug] 
    下的相关键值。 
    3、使用其它调试工具。并在注册表中正确设置。 
    附录:drwtsn32 参数 
    drwtsn32 [-i] [-g] [-p pid] [-e event] [-?] 
    -i 将 DrWtsn32 当作默认应用程序错误调试程序 
    -g 被忽略,但作为 WINDBG 和 NTSD 的兼容而被提供 
    -p pid 要调试的进程 id 
    -e event 表示进程附加完成的事件 
    -? 这个屏幕

    解决打不开文件夹的问题

    昨天刚装完系统,原本在C盘复制的东西到其他分区去备份。可是系统刚做好,却发现备份的文件夹却无法打开,显示“文件夹无法打开”,并且查看属性竟然是“0”k的大小。这下可郁闷了,先前备份的东西还有用呢,我反复的查看都没有发现问题,后来在网上发现ghost的系统如果不是一个管理员做的权限会不同,就是说不是一张盘,那么用户肯定不一样,那么文件夹就没法使用,我按照权限的方式改了一下,结果仍然是不尽人意……

    后来我发现文件夹属性应该有“安全”选项卡,可是打不开的文件夹却没有这一项,如何将他添加进去呢?
    文件夹上单击右键选属性,没有发现“安全”选项,可在“控制面板”-“管理”-“本地安全策略”-“本地策略”-“审核策略”-“审核策略更改”双击后选“成功”,然后在“工具”中选择“文件夹选项”-“查看”-勾掉“使用简单文件夹共享”这下就ok了。然后就可在NTFS磁盘中对没有加密但又打不开的文件夹,单击右键选属性选安全选项卡,添加自己上去,选择“完全控制”,并选上应用到子对象。进一步的“审查”,找到原有的用户名,然后使此用户继承权限,这下在打开文件夹一切都搞定了。
    希望我的经历能给你带来方便!

  • 文件夹打不开

    2008-05-17 12:45:56

    我的机器上有个文件夹,是我在装系统后两天自己建的,右击空白处选TXT,是空白,后改名为AutoRun.inf。奇怪的是才建时,可以双击打开。一个星期后,双击不能打开,提示“F:\AutoRun.inf”参数不对。右击它选择打开方式,如果选择文本文件,则打不开;如果选择记事本打开,则可以看见其中的内容。我打开看时,里面有四行。我删后保存,属性改为“只读”。在双击打不开时,我的机器没有任何奇怪的事,杀毒软件也没发现什么。
    这种情况令我百思不得其解。我在网上搜索到以下资料,拿过来,供大家参考。有什么好办法,也欢迎大家跟帖。

    其解决方法:
    1、如果各分区下带autorun.inf一类的隐藏文件,删除之,重新启动电脑。

    2、在文件类型中重新设置打开方式(以XP为例)
    打开我的电脑,选择"工具"->"文件夹选项"->"文件类型",找到“驱动器”或“文件夹”(具体选哪个根据你所遇问题若属于双击打不开驱动器则选择“驱动器” 打不开文件夹则选择“文件夹”),点下方的“高级”->点选“编辑文件类型”->“新建”->操作里填写“open”(这个可随意填写)》》用于执行操作的应用程序里填写explorer.exe->确定(具体见图示)。随后返回到“编辑文件类型”窗口,选中open->设为默认值->"确定"。
    现在再打开分区或文件夹看下,是不是已恢复正常?

    3、注册表法:

    a 对于分区不能双击打开
    开始-》运行,输入regedit 找到[HKEY_CLASSES_ROOTDriveshell]将shell下的全部删除 然后关闭注册表 按键盘F5刷新 双击分区再看

    b 对于文件夹不能双击打开

    开始-》运行,输入regedit 找到[HKEY_CLASSES_ROOTDirectoryshell]将shell下的全部删除 然后关闭注册表 按键盘F5刷新 双击分区再看

    4、小程序解决
    将=号内复制到记事本内(不包括=),保存为open.vbs,双击运行即可,若杀毒软件弹出警告,姑且放行之。
  • 学习C++开发常见问题

    2008-05-09 22:59:17

    C++开发中常见问题的答案

    1,简述VC6下如何进行程序的调试。

        在主菜单"Build"中,有一个Start Build的子菜单,它下面包含了Go菜单(快捷键为F5),选择后,程序将从当前语句进入调试运行,直到遇到断点或程序结束。

        将鼠标移动到要调试的代码行,单击鼠标右键选择“Insert/Remove Breakpoint”,或者按下F9,可以在该行上添加断点,此时断点代码行前面出现一个棕色的圈,再次选择将清除断点。进入调试状态后,Debug菜单将取代Build菜单出现在菜单栏中,它下面包含常用的调试操作,如Step Over,单步运行并不跟踪到调用的函数内部;其他还包括Step Into,Step Out, Stop Debugging等调试方法。

    2, 简述在VC6建立的工程中后缀为.cpp,.h,.rc,.dsp,.dsw的文件的作用是什么?

    .cpp是源程序代码C++文件
    .h是包含函数声明和变量定义的头文件
    .rc是定义资源的资源脚本文件
    .dsp是工程文件,记录当前工程的有关信息
    .dsw是工作区文件,一个工作区可能包含一个或多个工程

    3, 已知一个对话框上有一个编辑框控件,ID为IDC_EDIT1,为其关联了CEdit类型的变量m_edit1,使用两种方法,说明如何改变编辑框内部的文本为"Hello",写出程序代码的片断。

    第一种方法:m_edit1.SetSel(0,-1); 
                m_edit1.ReplaceSel("Hello");    

    第二种方法:SetWindowText("Hello");      

    4.简述使用Windows API编写的一个基本的Windows应用程序框架的结构。

         Windows API编写的基本应用程序框架至少应该包含程序入口函数WinMain和窗口函数WndProc。在主函数WinMain里面包含窗口类的定义和注册,窗口的创建和显示以及消息循环。

    5, 消息在Windows中的数据类型是什么,它有哪些成员变量,各有什么含义

        消息的数据类型是MSG,它是一个结构体,其成员变量主要包括hwnd,表示消息的窗口句柄;message代表消息的类型;wParam和lParam包含消息的附加信息,随不同的消息有所不同。

    6, Windows的鼠标消息的长参数lParam与字参数wParam的含义是什么

        鼠标消息的长参数lParam的低字节包含了鼠标光标位置的x坐标值,lParam的高字节包含了鼠标光标位置的y坐标值;字参数wParam内包含了指示当前按下的各种虚键状态的值。

    7, 说明使用一个非模态对话框的注意问题和用到的Windows API函数

        使用一个非模态对话框应该注意一定要在样式中包含WS_VISIBLE才能正常显示;创建对话框使用CreateDialog函数;消息循环部分应该使用IsDialogMessage过滤消息;关闭对话框使用函数DestroyWindow。

    8.简述在MFC应用程序中UpdateData函数的作用及其参数含义与使用场合。

        UpdateData只有一个BOOL类型的参数,UpdateData(FALSE)一般用于对话框控件连接的变量值刷新屏幕显示;UpdateData(TRUE)用于获取屏幕数据到对话框控件连接的变量中。

    9, 列举列表框控件能够接受的三个消息类型,并说明其作用

    LB_ADDSTRING用于在列表框中加入一项字符串;LB_DIR用于在列表框中列出指定文件;LB_GETTEXT用于获取指定项的文本。

    10, 在一个对话框上添加了三个单选按钮,要使它们之间自动实现互斥,应该注意什么问题,在VC环境下如何操作?

        要实现一组单选按钮的自动互斥,应该让它们的控件ID值连续,并设置第一个单选按钮的Group属性,其他的不设。

    11, 简述由一个文档类派生自己的文档类,并实现文档的存取需要哪些步骤。

    首先为每一个文档类型从CDocument派生一个相应的文档类;然后为该文档类添加成员变量以保存数据;最后重载Serialize成员函数以实现文档数据的串行化。

    12, 列举视图类(CView)的三个子类,并简要说明其作用。

        CScrollView类提供视图的滚动显示;CEditView类支持在视图中的文本编辑操作;CHtmlView类支持在视图中显示和操作html文件。

    13, Visual C++ 6.0如何进入调试状态,在调试状态下能够显示哪些调试窗口,列举三个,其作用分别是什么?

        启动调试后,在View菜单的Debug Window子菜单下可以打开一些辅助调试的窗口
    Watch:显示察看当前语句和前面语句中变量值的窗口
    Call Stack:显示察看调用堆栈的窗口
    Memory:显示察看内存中内容的窗口

    14, 说明位图资源的创建及显示过程的步骤,并给出相应的Windows API函数名。

        首先定义位图句柄HBITMAP hBitmap;第二步使用LoadBitMap加载位图;第三步,调用CreateCompatibleDC向系统申请内存设备环境句柄,并调用函数SelectObject把位图选入内存设备环境;第四步,调用BitBlt函数将位图从内存设备环境输出到指定的窗口设备环境中,从而实现显示位图。

    15, 如何获取字体句柄从而实现字体的输出,并给出相应的Windows API函数名。

        首先定义字体句柄变量HFONT hF;然后调用函数GetStockObject获取系统的字体句柄,或者调用CreateFont得到自定义的字体句柄;最后调用SelectObject把字体句柄选入设备环境。

    16, 列举三种按钮的类型,并说明其作用和创建方法之间的不同之处。

        常用的按钮有普通按钮、单选按钮、复选框,和组框。普通按钮作用是帮助用户触发指定动作;单选按钮一般各选项之间存在互斥性;复选框用来显示一组选项供用户选择,各选项之间不存在互斥;组框主要用于把控件分成不同的组并加以说明.

    17, 要使一个静态控件显示一个位图并能接受用户输入,应该注意什么问题。

        要使静态控件显示位图,必须设定其风格包含SS_BITMAP,并在创建静态控件窗口,即调用CreateWindow时指定并加载位图;要使静态控件能够接收用户输入,必须设定其风格包含SS_NOTIFY。

  • 到底是用手工测试还是自动化测试?

    2008-04-28 13:35:23

       我是一名刚工作不久的测试员,今天看着流程图突然脑海里冒出一个念头:到底是用手工测试还是自动化测试的好?

       测试工作无论是手工测试还是自动化测试都是软件质量保障的一个途径。如何更好的使两者相互结合也是我们现在所要讨论的话题。我们何时应用手工测试又何时应用自动化测试呢?我在网上搜索了一下,看了一些资料,觉得对于一些基本的、逻辑性不强的操作,可以使用自动化测试工具。应该说,现在在性能测试、压力测试等方面,自动化测试有其不可替代的优势。它可以用简单的脚本,实现大量的重复的操作。从而通过对测试结果的分析,得出结论,这样不仅节省了大量的人力和物力,而且使测试的结果更准确。对于一些逻辑性很强的操作,如果自动化测试不是很健全的话,不建议使用。因为这需要比较复杂的脚本语言,不可避免的增加了由于测试脚本的缺陷所造成测试结果错误的误差。这时就需要手动测试了。手工测试也存在这一些缺陷,手工测试者最常做的就是重复的手工回归测试,不但代价昂贵,而且容易出错。自动化测试可以减少但不能消除这种工作的工作量。测试者可以有更多的时间去从事更有趣的测试,例如在应用程序在复杂的场景下的不同处理等,尽管测试就是要花费更长的时间找到错误,但比不意味着因此而要付出更高的代价。所以选择正确的测试方法是尤为重要的。具体叙述如下:
       1、自动化测试对程序的回归测试更方便。这可能是自动化测试最主要的任务,特别是在程序修改比较频繁时,效果是非常明显的。由于回归测试的动作和用例是完全设计好的,测试期望的结果也是完全可以预料的,将回归测试自动运行,可以极大提高测试效率,缩短回归测试时间。
       2、可以运行更多更繁琐的测试。自动化的一个明显的好处是可以在较少的时间内运行更多的测试。
       3、可以执行一些手工测试困难或不可能进行的测试。比如,对于大量用户的测试,不可能同时让足够多的测试人员同时进行测试,但是却可以通过自动化测试模拟同时有许多用户,从而达到测试的目的。
       4、更好地利用资源。将繁琐的任务自动化,可以提高准确性和测试人员的积极性,将测试技术人员解脱出来投入更多精力设计更好的测试用例。有些测试不适合于自动测试,仅适合于手工测试,将可自动测试的测试自动化后,可以让测试人员专注于手工测试部分,提高手工测试的效率。
       5、测试具有一致性和可重复性。由于测试是自动执行的,每次测试的结果和执行的内容的一致性是可以得到保障的,从而达到测试的可重复的效果。
       6、测试的复用性。由于自动测试通常采用脚本技术,这样就有可能只需要做少量的甚至不做修改,实现在不同的测试过程中使用相同的用例。
       7、增加软件信任度。由于测试是自动执行的,所以不存在执行过程中的疏忽和错误,完全取决于测试的设计质量。一旦软件通过了强有力的自动测试后,软件的信任度自然会增加。
       但是我也要在这里说明一下自动化测试也有其局限性:
        1、不能取代手工测试;
        2、往往手工测试比自动测试发现的缺陷更多;
        3、对测试质量的依赖性极大;
        4、测试自动化不能提高有效性;
        5、测试自动化可能会制约软件开发。由于自动测试比手动测试更脆弱,所以维护会受到限制,从而制约软件的开发;
        6、工具本身并无想像力。
        综上所述,可以归结自动化完成不了的,手工测试都能弥补,两者有效的结合是测试质量保证的关键。但这个临界点就需要你来把握了,不知各位高手是否愿意说下:你是怎么把握这个临界点的?愿与你共享测试经验!

  • 如何有效地报告Bug

    2008-04-19 13:07:48

    引言

    为公众写过软件的人,大概都收到过很拙劣的bug(计算机程序代码中的错误或程序运行时的瑕疵——译者注)报告,例如:

      在报告中说不好用

      所报告内容毫无意义;

      在报告中用户没有提供足够的信息;

      在报告中提供了错误信息;

      所报告的问题是由于用户的过失而产生的;

      所报告的问题是由于其他程序的错误而产生的;

      所报告的问题是由于网络错误而产生的;

        这便是为什么技术支持被认为是一件可怕的工作,因为有拙劣的bug报告需要处理。然而并不是所有的bug报告都令人生厌:我在业余时间维护自由软件,有时我会收到非常清晰、有帮助并且有内容bug报告。

        在这里我会尽力阐明如何写一个好的bug报告。我非常希望每一个人在报告bug之前都读一下这篇短文,当然我也希望用户在给报告bug之前已经读过这篇文章。

        简单地说,报告bug的目的是为了让程序员看到程序的错误。您可以亲自示范,也可以给出能导致程序出错的、详尽的操作步骤。如果程序出错了,程序员会收集额外的信息直到找到错误的原因;如果程序没有出错,那么他们会请您继续关注这个问题,收集相关的信息。bug报告里,要设法搞清什么是事实(例如:我在电脑旁“XX出现了)什么是推测(例如:问题可能是出在……”)。如果愿意的话,您可以省去推测,但是千万别省略事实。

        当您报告bug的时候(既然您已经这么做了),一定是希望bug得到及时修正。所以此时针对程序员的任何过激或亵渎的言语(甚至谩骂)都是与事无补的——因为这可能是程序员的错误,也有可能是您的错误,也许您有权对他们发火,但是如果您能多提供一些有用的信息(而不是激愤之词)或许bug会被更快的修正。除此以外,请记住:如果是免费软件,作者提供给我们已经是出于好心,所以要是太多的人对他们无礼,他们可能就要收起这份好心了。

     

    程序不好用

        程序员不是弱智:如果程序一点都不好用,他们不可能不知道。他们不知道一定是因为程序在他们看来工作得很正常。所以,或者是您作过一些与他们不同的操作,或者是您的环境与他们不同。他们需要信息,报告bug也是为了提供信息。信息总是越多越好。许多程序,特别是自由软件,会公布一个已知bug列表。如果您找到的bug在列表里已经有了,那就不必再报告了,但是如果您认为自己掌握的信息比列表中的丰富,那无论如何也要与程序员联系。您提供的信息可能会使他们更简单地修复bug

        本文中提到的都是一些指导方针,没有哪一条是必须恪守的准则。不同的程序员会喜欢不同形式的bug报告。如果程序附带了一套报告bug的准则,一定要读。如果它与本文中提到的规则相抵触,那么请以它为准。

        如果您不是报告bug,而是寻求帮助,您应该说明您曾经到哪里找过答案,(例如:我看了第四章和第五章的第二节,但我找不到解决的办法。)这会使程序员了解用户喜欢到哪里去找答案,从而使程序员把帮助文档做得更容易使用。

     

    演示给我看

        报告bug的最好的方法之一是演示给程序员看。让程序员站在电脑前,运行他们的程序,指出程序的错误。让他们看着您启动电脑、运行程序、如何进行操作以及程序对您的输入有何反应。他们对自己写的软件了如指掌,他们知道哪些地方不会出问题,而哪些地方最可能出问题。他们本能地知道应该注意什么。在程序真的出错之前,他们可能已经注意到某些地方不对劲,这些都会给他们一些线索。他们会观察程序测试中的每一个细节,并且选出他们认为有用的信息。

        这些可能还不够。也许他们觉得还需要更多的信息,会请您重复刚才的操作。他们可能在这期间需要与您交流一下,以便在他们需要的时候让bug重新出现。他们可能会改变一些操作,看看这个错误的产生是个别问题还是相关的一类问题。如果您不走运,他们可能需要坐下来,拿出一堆开发工具,花上几个小时来好好地研究一下。但是最重要的是在程序出错的时候让程序员在电脑旁。一旦他们看到了问题,他们通常会找到原因并开始试着修改。

     

    告诉我该怎么做

        如今是网络时代,是信息交流的时代。我可以点一下鼠标把自己的程序送到俄罗斯的某个朋友那里,当然他也可以用同样简单的方法给我一些建议。但是如果我的程序出了什么问题,我不可能在他旁边。演示是很好的办法,但是常常做不到。

    如果您必须报告bug,而此时程序员又不在您身边,那么您就要想办法让bug重现在他们面前。当他们亲眼看到错误时,就能够进行处理了。

        确切地告诉程序员您做了些什么。如果是一个图形界面程序,告诉他们您按了哪个按钮,依照什么顺序按的。如果是一个命令行程序,精确的告诉他们您键入了什么命令。您应该尽可能详细地提供您所键入的命令和程序的反应。把您能想到的所有的输入方式都告诉程序员,如果程序要读取一个文件,您可能需要发一个文件的拷贝给他们。如果程序需要通过网络与另一台电脑通讯,您或许不能把那台电脑复制过去,但至少可以说一下电脑的类型和安装了哪些软件(如果可以的话)。

     

    哪儿出错了?在我看来一切正常哦!

        如果您给了程序员一长串输入和指令,他们执行以后没有出现错误,那是因为您没有给他们足够的信息,可能错误不是在每台计算机上都出现,您的系统可能和他们的在某些地方不一样。有时候程序的行为可能和您预想的不一样,这也许是误会,但是您会认为程序出错了,程序员却认为这是对的。同样也要描述发生了什么。精确的描述您看到了什么。告诉他们为什么您觉得自己所看到的是错误的,最好再告诉他们,您认为自己应该看到什么。如果您只是说:程序出错了,那您很可能漏掉了非常重要的信息。

        如果您看到了错误消息,一定要仔细、准确的告诉程序员,这确实很重要。在这种情况下,程序员只要修正错误,而不用去找错误。他们需要知道是什么出问题了,系统所报的错误消息正好帮助了他们。如果您没有更好的方法记住这些消息,就把它们写下来。只报告程序出了一个错是毫无意义的,除非您把错误消息一块报上来。

        特殊情况下,如果有错误消息号,一定要把这些号码告诉程序员。不要以为您看不出任何意义,它就没有意义。错误消息号包含了能被程序员读懂的各种信息,并且很有可能包含重要的线索。给错误消息编号是因为用语言描述计算机错误常常令人费解。用这种方式告诉您错误的所在是一个最好的办法。

        在这种情形下,程序员的排错工作会十分高效。他们不知道发生了什么,也不可能到现场去观察,所以他们一直在搜寻有价值的线索。错误消息、错误消息号以及一些莫名其妙的延迟,都是很重要的线索,就像办案时的指纹一样重要,保存好。

        如果您使用UNIX系统,程序可能会产生一个内核输出(coredump)。内核输出是特别有用的线索来源,别扔了它们。另一方面,大多数程序员不喜欢收到含有大量内核输出文件的EMAIL,所以在发邮件之前最好先问一下。还有一点要注意:内核输出文件记录了完整的程序状态,也就是说任何秘密(可能当时程序正在处理一些私人信息或秘密数据)都可能包含在内核输出文件里。

     

    出了问题之后,我做了……”

        当一个错误或bug发生的时候,您可能会做许多事情。但是大多数人会使事情变的更糟。我的一个朋友在学校里误删了她所有的Word文件,在找人帮忙之前她重装了Word,又运行了一遍碎片整理程序,这些操作对于恢复文件是毫无益处的,因为这些操作搞乱了磁盘的文件区块。恐怕在这个世界上没有一种反删除软件能恢复她的文件了。如果她不做任何操作,或许还有一线希望。

        这种用户仿佛一只被逼到墙角的鼬(黄鼠狼、紫貂一类的动物——译者注):背靠墙壁,面对死亡的降临奋起反扑,疯狂攻击。他们认为做点什么总比什么都不做强。然而这些在处理计算机软件问题时并不适用。不要做鼬,做一只羚羊。当一只羚羊面对料想不到的情况或受到惊吓时,它会一动不动,是为了不吸引任何注意,与此同时也在思考解决问题的最好办法(如果羚羊有一条技术支持热线,此时占线。)。然后,一旦它找到了最安全的行动方案,它便去做。

        当程序出毛病的时候,立刻停止正在做的任何操作。不要按任何健。仔细地看一下屏幕,注意那些不正常的地方,记住它或者写下来。然后慎重地点击确定取消,选择一个最安全的。学着养成一种条件反射——一旦电脑出了问题,先不要动。要想摆脱这个问题,关掉受影响的程序或者重新启动计算机都不好,一个解决问题的好办法是让问题再次产生。程序员们喜欢可以被重现的问题,快乐的程序员可以更快而且更有效率的修复bug

     

    我想粒子的跃迁与错误的极化有关

        并不只是非专业的用户才会写出拙劣的bug报告,我见过一些非常差的bug报告出自程序员之手,有些还是非常优秀的程序员。

        有一次我与另一个程序员一起工作,他一直在找代码中的bug,他常常遇到一个bug,但是不会解决,于是就叫我帮忙。出什么毛病了?我问。而他的回答却总是一些关于bug的意见。如果他的观点正确,那的确是一件好事。这意味着他已经完成了工作的一半,并且我们可以一起完成另一半工作。这是有效率并有用的。但事实上他常常是错的。这就会使我们花上半个小时在原本正确的代码里来回寻找错误,而实际上问题出在别的地方。我敢肯定他不会对医生这么做。大夫,我得了Hydroyoyodyne(真是怪病——译者),给我开个方子,人们知道不该对一位医生说这些。您描述一下症状,哪个地方不舒服,哪里疼、起皮疹、发烧……让医生诊断您得了什么病,应该怎样治疗。否则医生会把您当做疑心病或精神病患者打发了,这似乎没什么不对。

        做程序员也是一样。即便您自己的诊断有时真的有帮助,也要只说症状诊断 查看(403) 评论(0) 收藏 分享 管理

581/3123>
Open Toolbar