2008年9月2日星期二

[转载]什么是文件描述符

当某个程序打开文件时,操作系统返回相应的文件描述符,程序为了处理该文件必须引用此描述符。所谓的文件描述符是一个低级的正整数。最前面的三个文件描述符(0,1,2)分别与标准输入(stdin),标准输出(stdout)和标准错误(stderr)对应。因此,函数 scanf() 使用 stdin,而函数 printf() 使用 stdout。你可以用不同的文件描述符改写默认的设置并重定向进程的 I/O 到不同的文件。

1、首先说什么是文件描述符,它有什么作用?
文件描述符是一个简单的整数,用以标明每一个被进程所打开的文件和socket。第一个打开的文件是0,第二个是1,依此类推。Unix 操作系统通常给每个进程能打开的文件数量强加一个限制。更甚的是,unix 通常有一个系统级的限制。因为squid 的工作方式,文件描述符的限制可能会极大的影响性能。当squid 用完所有的文件描述符后,它不能接收用户新的连接。也就是说,用完文件描述符导致拒绝服务。直到一部分当前请求完成,相应的文件和socket 被关闭,squid 不能接收新请求。当squid发现文件描述符短缺时,它会发布警告。在运行./configure 之前,检查你的系统的文件描述符限制是否合适,能给你避免一些麻烦。大多数情况下,1024 个文件描述符足够了。非常忙的cache可能需要4096或更多。在配置文件描述符限制时,我推荐设置系统级限制的数量为每个进程限制的2 倍。
2、怎么突破,具体方法?
先查看LINUX默认的文件描述符:
# ulimit -n1024我们用命令
ulimit -HSn 65536
来增大文件描述符,然后编译安装squid,
把ulimit -HSn 65536放到/etc/rc.d/rc.local让启动时加载。
以下为转载:
Linux在Linux 上配置文件描述符有点复杂。在编译squid 之前,你必须编辑系统include 文件中的一个,然后执行一些shell 命令。请首先编辑/usr/include/bits/types.h 文件,改变__FD_SETSIZE 的值:#define _ _FD_SETSIZE 8192下一步,使用这个命令增加内核文件描述符的限制:# echo 8192 >; /proc/sys/fs/file-max最后,增加进程文件描述符的限制,在你即将编译squid 的同一个shell 里执行:sh# ulimit -Hn 8192该命令必须以root 运行,仅仅运行在bash shell。不必重启机器。使用这个技术,你必须在每一次系统启动后执行上述echo 和ulimit 命令,或者至少在squid 启动之前。假如你使用某个rc.d 脚本来启动squid,那是一个放置这些命令的好地方。

让Web站点崩溃最常见的七大原因

磁盘已满 
  导致系统无法正常运行的最可能的原因是磁盘已满。一个好的网络管理员会密切关注磁盘的使用情况,隔一定的时间,就需要将磁盘上的一些负载转存到备份存储介质中(例如磁带)。
  日志文件会很快用光所有的磁盘空间。Web服务器的日志文件、SQL*Net的日志文件、JDBC日志文件,以及应用程序服务器日志文件均与内存泄漏有同等的危害。可以采取措施将日志文件保存在与操作系统不同的文件系统中。日志文件系统空间已满时Web服务器也会被挂起,但机器自身被挂起的几率已大大减低。

C指针错误
  用C或C++编写的程序,如Web服务器API模块,有可能导致系统的崩溃,因为只要间接引用指针(即,访问指向的内存)中出现一个错误,就会导致操作系统终止所有程序。另外,使用了糟糕的C指针的Java模拟量(analog)将访问一个空的对象引用。Java中的空引用通常不会导致立刻退出JVM,但是前提是程序员能够使用异常处理方法恰当地处理错误。在这方面,Java无需过多的关注,但使用 Java对可靠性进行额外的度量则会对性能产生一些负面影响。
  
内存泄漏
  C/C++程序还可能产生另一个指针问题:丢失对已分配内存的引用。当内存是在子程序中被分配时,通常会出现这种问题,其结果是程序从子程序中返回时不会释放内存。如此一来,对已分配的内存的引用就会丢失,只要操作系统还在运行中,则进程就会一直使用该内存。这样的结果是,曾占用更多的内存的程序会降低系统性能,直到机器完全停止工作,才会完全清空内存。
  解决方案之一是使用代码分析工具(如Purify)对代码进行仔细分析,以找出可能出现的泄漏问题。但这种方法无法找到由其他原因引起的库中的泄漏,因为库的源代码是不可用的。另一种方法是每隔一段时间,就清除并重启进程。Apache的Web服务器就会因这个原因创建和清除子进程。
  虽然Java本身并无指针,但总的说来,与C程序相比, Java程序使用内存的情况更加糟糕。在Java中,对象被频繁创建,而直到所有到对象的引用都消失时,垃圾回收程序才会释放内存。即使运行了垃圾回收程序,也只会将内存还给虚拟机VM,而不是还给操作系统。结果是:Java程序会用光给它们的所有堆,从不释放。由于要保存实时(Just In Time,JIT)编译器产生的代码,Java程序的大小有时可能会膨胀为最大堆的数倍之巨。
  还有一个问题,情况与此类似。从连接池分配一个数据库连接,而无法将已分配的连接还回给连接池。一些连接池有活动计时器,在维持一段时间的静止状态之后,计时器会释放掉数据库连接,但这不足以缓解糟糕的代码快速泄漏数据库连接所造成的资源浪费。
  进程缺乏文件描述符
  如果已为一台Web服务器或其他关键进程分配了文件描述符,但它却需要更多的文件描述符,则服务器或进程会被挂起或报错,直至得到了所需的文件描述符为止。文件描述符用来保持对开放文件和开放套接字的跟踪记录,开放文件和开放套接字是Web服务器很关键的组成部分,其任务是将文件复制到网络连接。默认时,大多数shell有64个文件描述符,这意味着每个从shell启动的进程可以同时打开64个文件和网络连接。大多数shell都有一个内嵌的 ulimit命令可以增加文件描述符的数目。
  
线程死锁
  由多线程带来的性能改善是以可靠性为代价的,主要是因为这样有可能产生线程死锁。线程死锁时,第一个线程等待第二个线程释放资源,而同时第二个线程又在等待第一个线程释放资源。我们来想像这样一种情形:在人行道上两个人迎面相遇,为了给对方让道,两人同时向一侧迈出一步,双方无法通过,又同时向另一侧迈出一步,这样还是无法通过。双方都以同样的迈步方式堵住了对方的去路。假设这种情况一直持续下去,这样就不难理解为何会发生死锁现象了。
  解决死锁没有简单的方法,这是因为使线程产生这种问题是很具体的情况,而且往往有很高的负载。大多数软件测试产生不了足够多的负载,所以不可能暴露所有的线程错误。在每一种使用线程的语言中都存在线程死锁问题。由于使用Java进行线程编程比使用C容易,所以 Java程序员中使用线程的人数更多,线程死锁也就越来越普遍了。可以在Java代码中增加同步关键字的使用,这样可以减少死锁,但这样做也会影响性能。如果负载过重,数据库内部也有可能发生死锁。
  如果程序使用了永久锁,比如锁文件,而且程序结束时没有解除锁状态,则其他进程可能无法使用这种类型的锁,既不能上锁,也不能解除锁。这会进一步导致系统不能正常工作。这时必须手动地解锁。
  
服务器超载
  Netscape Web服务器的每个连接都使用一个线程。Netscape Enterprise Web服务器会在线程用完后挂起,而不为已存在的连接提供任何服务。如果有一种负载分布机制可以检测到服务器没有响应,则该服务器上的负载就可以分布到其它的 Web服务器上,这可能会致使这些服务器一个接一个地用光所有的线程。这样一来,整个服务器组都会被挂起。操作系统级别可能还在不断地接收新的连接,而应用程序(Web服务器)却无法为这些连接提供服务。用户可以在浏览器状态行上看到connected(已连接)的提示消息,但这以后什么也不会发生。
  解决问题的一种方法是将obj.conf参数RqThrottle的值设置为线程数目之下的某个数值,这样如果越过 RqThrottle的值,就不会接收新的连接。那些不能连接的服务器将会停止工作,而连接上的服务器的响应速度则会变慢,但至少已连接的服务器不会被挂起。这时,文件描述符至少应当被设置为与线程的数目相同的数值,否则,文件描述符将成为一个瓶颈。
  数据库中的临时表不够用
  许多数据库的临时表(cursor)数目都是固定的,临时表即保留查询结果的内存区域。在临时表中的数据都被读取后,临时表便会被释放,但大量同时进行的查询可能耗尽数目固定的所有临时表。这时,其他的查询就需要列队等候,直到有临时表被释放时才能再继续运行。
  这是一个不容易被程序员发觉的问题,但会在负载测试时显露出来。但可能对于数据库管理员(DataBase Administrator,DBA)来说,这个问题十分明显。
  此外,还存在一些其他问题:设置的表空间不够用、序号限制太低,这些都会导致表溢出错误。这些问题表明了一个好的DBA对用于生产的数据库设置和性能进行定期检查的重要性。而且,大多数数据库厂商也提供了监控和建模工具以帮助解决这些问题。
  另外,还有许多因素也极有可能导致Web站点无法工作。如:相关性、子网流量超载、糟糕的设备驱动程序、硬件故障、包括错误文件的通配符、无意间锁住了关键的表。

2008年7月28日星期一

界面测试

界面是软件与用户交互的最直接的层,界面的好坏决定用户对软件的第一印象。而且设计良好的界面能够引导用户自己完成相应的操作,起到向导的作用。同时界面如同人的面孔,具有吸引用户的直接优势。设计合理的界面能给用户带来轻松愉悦的感受和成功的感觉,相反由于界面设计的失败,让用户有挫败感,再实用强大的功能都可能在用户的畏惧与放弃中付诸东流。
目前界面的设计引起软件设计人员的重视的程度还远远不够,直到最近网页制作的兴起,才受到专家的青睐。而且设计良好的界面由于需要具有艺术美的天赋而遭拒绝。  
目前流行的界面风格有三种方式:多窗体、单窗体以及资源管理器风格,无论那种风格,以下规则是应该被重视的。
1:易用性:  
按钮名称应该易懂,用词准确,屏弃没楞两可的字眼,要与同一界面上的其他按钮易于区分,能望文知意最好。理想的情况是用户不用查阅帮助就能知道该界面的功能并进行相关的正确操作。易用性细则:
1):完成相同或相近功能的按钮用Frame框起来,常用按钮要支持快捷方式。
2):完成同一功能或任务的元素放在集中位置,减少鼠标移动的距离。
3):按功能将界面划分区域块,用Frame框括起来,并要有功能说明或标题。
4):界面要支持键盘自动浏览按钮功能,即按Tab键、回車鍵的自动切换功能。
5):界面上首先要输入的和重要信息的控件在Tab顺序中应当靠前,位置也应放在窗口上较醒目的位置。
6):同一界面上的控件数最好不要超过10个,多于10个时可以考虑使用分页界面显示。
7):分页界面要支持在页面间的快捷切换,常用组合快捷键Ctrl+Tab
8):默认按钮要支持Enter及选操作,即按Enter后自动执行默认按钮对应操作。
9):可寫控制項檢測到非法輸入後應給出說明並能自動獲得焦點。
10):Tab键的顺序与控件排列顺序要一致,目前流行总体从上到下,同时行间从左到右的方式。11):核取方塊和選項框按選擇幾率的高底而先後排列。
12):核取方塊和選項框要有默認選項,並支援Tab選擇。
13):選項數相同時多用選項框而不用下拉清單框。
14):界面空间较小时使用下拉框而不用选项框。
15):选项数較少时使用选项框,相反使用下拉列表框。
16):专业性强的软件要使用相关的专业术语,通用性界面则提倡使用通用性词语。
2: 规范性:
通常界面设计都按Windows界面的规范来设计,可以说:界面遵循规范化的程度越高,则易用性相应的就越好。小型软件一般不提供工具厢。
规范性细则:
1):常用菜单要有命令快捷方式。
2):完成相同或相近功能的菜单用横线隔开放在同一位置。
3):菜单前的图标能直观的代表要完成的操作。
4):菜单深度一般要求最多控制在三层以内。
5):工具栏要求可以根据用户的要求自己选择定制。
6):相同或相近功能的工具栏放在一起。
7):工具栏中的每一个按钮要有及时提示信息。
8):一条工具栏的长度最长不能超出屏幕宽度。
9): 工具栏的图标能直观的代表要完成的操作。
10):系统常用的工具栏设置默认放置位置。
11):工具栏太多时可以考虑使用工具箱。
12):工具箱要具有可增减性,由用户自己根据需求定制。
13):工具箱的默认总宽度不要超过屏幕宽度的1/5。
14): 状态条要能显示用户切实需要的信息,常用的有:目前的操作、系统状态、用户位置、用户信息、提示信息、错误信息等,如果某一操作需要的时间较长,还应该显示进度条和进程提示。15):滚动条的长度要根据显示信息的长度或宽度能及时变换,以利于用户了解显示信息的位置和百分比。
16):状态条的高度以放置五好字为宜,滚动条的宽度比状态条的略窄。
17):菜单和工具条要有清楚的界限;菜单要求凸出显示,这样在移走工具条时仍有立体感。
18):菜单和状态条中通常使用5号字体。工具条一般比菜单要宽,但不要宽的太多,否则看起来很不协调。
19): 右键快捷菜单采用与菜单相同的准则。
3:帮助设施:
系统应该提供详尽而可靠的帮助文档,在用户使用产生迷惑时可以自己寻求解决方法。帮助设施细则:
1):帮助文档中的性能介绍与说明要与系统性能配套一致。(我们的系统帮助文档都是系统的祖先时期的说明,让人困惑)。
2):打包新系统时,对作了修改的地方在帮助文档中要做相应的修改。
3):操作时要提供及时调用系统帮助的功能。常用F1。
4):在界面上调用帮助时应该能够及时定位到与该操作相对的帮助位置。也就是说帮助要有即时针对性。
5):最好提供目前流行的联机帮助格式或HTML帮助格式。
6):用户可以用关键词在帮助索引中搜索所要的帮助,当然也应该提供帮助主题词。
7):如果没有提供书面的帮助文档的话,最好有打印帮助的功能。
8):在帮助中应该提供我们的技术支持方式,一旦用户难以自己解决可以方便的寻求新的帮助方式。
4:合理性:
屏幕对角线相交的位置是用户直视的地方,正上方四分之一处为易吸引用户注意力的位置,在放置窗体时要注意利用这两个位置。
合理性细则:
1):父窗体或主窗体的中心位置应该在对角线焦点附近。
2):子窗体位置应该在主窗体的左上角或正中。
3):多个子窗体弹出时应该依次向右下方偏移,以显示窗体出标题为宜。
4):重要的命令按钮与使用较频繁的按钮要放在界面上注目的位置。
5):错误使用容易引起界面退出或关闭的按钮不应该放在易点击的位置。横排开头或最后与竖排最后为易点位置。
6):与正在进行的操作无关的按钮应该加以屏蔽(Windows中用灰色显示,没法使用该按钮)。
7):对可能造成数据无法恢复的操作必须提供确认信息,给用户放弃选择的机会。
8):非法的输入或操作应有足够的提示说明。
9): 对运行过程中出现问题而引起错误的地方要有提示,让用户明白错误出处,避免形成无限期的等待。
10): 提示、警告、或错误说明应该清楚、明了、恰当。
5:美观与协调性:
界面应该大小适合美学观点,感觉协调舒适,能在有效的范围内吸引用户的注意力。
美观与协调性细则:
1): 长宽接近黄金点比例,切忌长宽比例失调、或宽度超过长度。
2): 布局要合理,不宜过于密集,也不能过于空旷,合理的利用空间。
3): 按钮大小基本相近,忌用太长的名称,免得占用过多的界面位置。
4): 按钮的大小要与界面的大小和空间要协调。
5): 避免空旷的界面上放置很大的按钮。
6):放置完控件后界面不应有很大的空缺位置。
7): 字体的大小要与界面的大小比例协调, 通常使用的字体中宋体9-12较为美观,很少使用超过12号的字体。
8): 前景与背景色搭配合理协调,反差不宜太大,最好少用深色,如大红、大绿等。常用色考虑使用Windows界面色调。
9): 如果使用其他颜色,主色调要柔和,具有亲和力与磁力,坚决杜绝刺目的颜色。
10): 大型系统常用的主色有"#E1E1E1"、"#EFEFEF"、"#C0C0C0"等。
11): 界面风格要保持一致,字的大小、颜色、字体要相同,除非是需要艺术处理或有特殊要求的地方。
12): 如果窗体支持最小化和最大化或放大时,窗体上的控件也要随着窗体而缩放;切忌只放大窗体而忽略控件的缩放。
13):对于含有按钮的界面一般不应该支持缩放,即右上角只有关闭功能。
14): 通常父窗体支持缩放时,子窗体没有必要缩放。
15):如果能给用户提供自定义界面风格则更好,由用户自己选择颜色、字体等。
6:菜单位置:
菜单是界面上最重要的元素,菜单位置按照按功能来组织。
菜单测试细则:
1): 菜单通常采用“常用--主要--次要--工具--帮助”的位置排列,符合流行的Windows风格。
2): 常用的有“文件”、“編輯”,“查看”等,幾乎每個系統都有這些選項,當然要根據不同的系統有所取捨。
3): 下拉菜单要根据菜单选项的含义进行分组,並且按照一定的规则进行排列,用横线隔开。
4): 一组菜单的使用有先后要求或有向导作用时,应该按先后次序排列。
5): 没有顺序要求的菜单项按使用频率和重要性排列,常用的放在开头, 不常用的靠后放置;重要的放在开头,次要的放在后边。
6): 如果菜单选项较多,应该采用加长菜单的长度而减少深度的原则排列。
7): 菜单深度一般要求最多控制在三层以内。
8): 对常用的菜单要有快捷命令方式,组合原则见8。
9): 对与进行的操作无关的菜单要用屏蔽的方式加以处理,如果采用动态加载方式——即只有需要的菜单才显示——最好。
10): 菜单前的图标不宜太大,与字高保持一直最好。
11): 主菜单的宽度要接近,字数不应多于四个,每个菜单的字数能相同最好。
12): 主菜单数目不应太多,最好为单排布置。
13):菜单条是否显示在合适的语境中?
14):应用程序的菜单条是否显示系统相关的特性(如时钟显示)?
15):下拉式操作能正确工作吗?
16):菜单、调色板和工具条是否工作正确?
17):是否适当地列出了所有的菜单功能和下拉式子功能?
18):是否可能通过鼠标访问所有的菜单功能?
19):相同功能按钮的图标和文字是否一致?
20):是否能够用其他的文本命令激活每个菜单功能?
21):菜单功能是否随当前的窗口操作加亮或变灰?
22):菜单功能是否正确执行?
23):菜单功能的名字是否具有自解释性?
24):菜单项是否有帮助,是否语境相关?
25):在整个交互式语境中,是否可以识别鼠标操作?
26):如果要求多次点击鼠标,是否能够在语境正确识别?
27):如果鼠标有多个按钮,是否能够在语境中正确识别?
28):光标、处理指示器和识别指针是否随操作恰当地改变?
7:独特性:
如果一味的遵循业界的界面标准,则会丧失自己的个性.在框架符合以上规范的情况下,设计具有自己独特风格的界面尤为重要。尤其在商业软件流通中有着很好的迁移默化的广告效用。
测试细则:
1): 安装界面上应有单位介绍或产品介绍,并有自己的图标。
2): 主界面,最好是大多数界面上要有公司图标。
3): 登录界面上要有本产品的标志,同时包含公司图标。
4): 帮助菜单的“关于”中应有版权和产品信息。
5): 公司的系列产品要保持一直的界面风格,如背景色、字体、菜单排列方式、图标、安装过程、按钮用语等应该大体一致。
8:快捷方式的组合
在菜单及按钮中使用快捷键可以让喜欢使用键盘的用户操作得更快一些 在西文Windows及其应用软件中快捷键的使用大多是一致的。
菜单中:
1):面向事务的组合有: Ctrl-D 删除 ;Ctrl-F 寻找 ;Ctrl –H替换;Ctrl-I 插入 ;Ctrl-N 新记录 ;Ctrl-S 保存 Ctrl-O 打开。
2):列表: Ctrl-R ,Ctrl-G定位;Ctrl-Tab下一分页窗口或反序浏览同一页面控件;。
3):编辑:Ctrl-A全选;Ctrl-C 拷贝;Ctrl-V 粘贴;Ctrl-X 剪切;Ctrl-Z撤消操作;Ctrl-Y恢复操作。
4)文件操作:Ctrl-P 打印;Ctrl-W 关闭。
5):系统菜单Alt-A文件;Alt-E编辑;Alt-T工具;Alt-W窗口;Alt-H帮助。
6):MS Windows保留键:Ctrl-Esc 任务列表 ;Ctrl-F4 关闭窗口; Alt-F4 结束应用;Alt-Tab 下一应用 ;Enter 缺省按钮/确认操作 ;Esc 取消按钮/取消操作;Shift-F1 上下文相关帮助。按钮中:可以根据系统需要而调节,以下只是常用的组合。Alt-Y确定(是);Alt-C取消;Alt-N 否;Alt-D删除;Alt-Q退出;Alt-A添加;Alt-E编辑;Alt-B浏览;Alt-R读;Alt-W写。这些快捷键也可以作为开发中文应用软件的标准,但亦可使用汉语拼音的开头字母。
9:安全性考虑:
在界面上通过下列方式来控制出错几率,会大大减少系统因用户人为的错误引起的破坏。开发者应当尽量周全地考虑到各种可能发生的问题,使出错的可能降至最小。如应用出现保护性错误而退出系统,这种错误最容易使用户对软件失去信心。因为这意味着用户要中断思路,并费时费力地重新登录,而且已进行的操作也会因没有存盘而全部丢失。
安全性细则:
1):最重要的是排除可能会使应用非正常中止的错误。
2):应当注意尽可能避免用户无意录入无效的数据。
3):采用相关控件限制用户输入值的种类。
4):当用户作出选择的可能性只有两个时,可以采用单选框。
5):当选择的可能再多一些时,可以采用复选框,每一种选择都是有效的,用户不可能输入任何一种无效的选择。
6):当选项特别多时,可以采用列表框,下拉式列表框。
7):在一个应用系统中,开发者应当避免用户作出未经授权或没有意义的操作。
8):对可能引起致命错误或系统出错的输入字符或动作要加限制或屏蔽。
9):对可能发生严重后果的操作要有补救措施。通过补救措施用户可以回到原来的正确状态。
10):对一些特殊符号的输入、与系统使用的符号相冲突的字符等进行判断并阻止用户输入该字符。
11):对错误操作最好支持可逆性处理,如取消系列操作。
12):在输入有效性字符之前应该阻止用户进行只有输入之后才可进行的操作。
13):对可能造成等待时间较长的操作应该提供取消功能。
14):特殊字符常有;;’”><,`‘:“[”{、\}]+=)-(_*&&^%$#@!,.。?/还有空格。
15):与系统采用的保留字符冲突的要加以限制。
16):在读入用户所输入的信息时,根据需要选择是否去掉前后空格。
17):有些读入数据库的字段不支持中间有空格,但用户切实需要输入中间空格,这时要在程序中加以处理。
10:多窗口的应用与系统资源:
设计良好的软件不仅要有完备的功能,而且要尽可能的占用最底限度的资源。
1):在多窗口系统中,有些界面要求必须保持在最顶层,避免用户在打开多个窗口时,不停的切换甚至最小化其他窗口来显示该窗口。
2):在主界面载入完毕后自动卸出内存,让出所占用的WINDOWS系统资源。
3):关闭所有窗体,系统退出后要释放所占的所有系统资源 ,除非是需要后台运行的系统。
4):尽量防止对系统的独占使用。
5):窗口能否基于相关的输入或菜单命令适当地打开?
6):窗口能否改变大小、移动和滚动?
7):窗口中的数据内容能否使用鼠标、功能键、方向箭头和键盘访问?
8):当被覆盖并重调用后,窗口能否正确地再生?
9):需要时能否使用所有窗口相关的功能?
10):所有窗口相关的功能是可操作的吗?
11):是否有相关的下拉式菜单、工具条、滚动条、对话框、按钮、图标和其他控制可为窗口可用,并适当地显示?
12):显示多个窗口时,窗口的名称是否被适当地表示?
13):活动窗口是否被适当地加亮?
14):如果使用多任务,是否所有的窗口被实时更新?
15):多次或不正确按鼠标是否会导致无法预料的副作用?
16):窗口的声音和颜色提示和窗口的操作顺序是否符合需求?17):窗口是否正确地关闭

2008年7月25日星期五

测试人员绩效评价方法

1编写目的
本文档是对独立测试人员的绩效考核从测试能力方面进行考核的依据,其它考核的标准参照支持服务中心的部门考核大纲,该标准仅作为整体考核标准中的综合考核的一部分。
2适用范围
本标准适用于软件测试人员的考核。
3 评价标准与原则
3.1提交BUG的数量和执行测试用例的数量
测试中发现的BUG数量:
1)同一个项目组内,提交bug数
2)每人日提交的bug数
3.2测试人员发现的问题的本身价值
1)Bug的严重程度是衡量bug的质量的一个重要因素,好的bug应该是极端严重的,对系统造成极大危害的。
2)Bug的双方面评判,对于bug的价值开发人员在另外一个角度上进行评判。
3.3、测试文档的质量
测试文档的质量往往是测试人员的测试水平的反映,只有对系统进行了充分的、深入测试的测试人员才能写出高质量测试报告,说明测试的全面性和测试过程的质量
3.4 测试技能水平
1)测试用例设计水平
2)测试工具掌握使用水平
3)测试结果分析判断水平
3.5测试技能以外的综合能力
考察一个测试人员的责任心,如果一个测试人员工作不符责任,随意敷衍,即使提交的问题单数量多,也不能证明他测试的质量高。其次积极的工作态度是提高测试质量,和整体团队风气的关键,沟通能力直接影响测试的工作效率与不同部门间的合作分工。
1)工作态度
2)沟通能力
3)钻研能力
4)团队合作能力
4考核办法一览表
类型
评价参数
参数值
说明








缺陷单
总分:70
提交缺陷总数(5)
单位(个)
基本考核指标

提交非缺陷数量(5)

单位(个)
要测试人员意识到处理非问题影响测试,开发的工作效率
提交有效缺陷数(20)
单位(个)
基本考核指标


提交缺陷分类数(20)
A (重大)
加权系数 0.3
B(较重)
加权系数 0.2
C(较小)
加权系数 0.2
D(一般)
加权系数 0.1
E(建议)
加权系数 0
回归缺陷数(5)
单位(个)
基本考核指标



争议缺陷数(5)



单位(个)
是否存在对需求理解,系统构架设计,系统设计等方面引起争议的问题,体现出测试人员发现问题的深入层次,反过来也反映测试人员对业务的理解能力。 基本考核指标



非独立测试发现的缺陷数(5)

单位(个)
非独立测试人员(如:开发人员,用户等)发现的问题数 。基本考核指标
严重缺陷所占比例(5)
A/(A+B+C+D+E)=%
基本考核指标


技能
总分:10
设计执行用例数 (5)
单位(个)
基本考核指标
用例难度(5)
困难 普通 容易
加分考核指标


工具掌握能力(+5)
了解理论
简单运用
复杂操作
熟练精通



加分考核指标




文档
总分:10

缺陷描述(5)
A( 优秀)
B (良好)
C (普通)
D (不合格)
问题描述是否清晰
问题定位的附件是否完整
问题描述语言是否规范

测试报告的质量(5)
A( 优秀)
B (良好)
C (普通)
D (不合格)
报告描述是否清晰
报告分析是否到位
报告描述语言是否规范

综合
素质
总分:10
工作态度(6)
积极、情绪变化大
基本考核指标
沟通能力(2)
良好、一般
基本考核指标
自学、钻研能力(+3)
强、普通、差
加分考核指标
团队协作能力(2)
合作性强、 差
基本考核指标

注:缺陷分类算法:
A*(1+加权系统)/(A+B+C+D+E)*20
B*(1+加权系统)/(A+B+C+D+E)*20
C*(1+加权系统)/(A+B+C+D+E)*20
D*(1+加权系统)/(A+B+C+D+E)*20
E*(1+加权系统)/(A+B+C+D+E)*20

压力测试实例

利用现代的设计技术和正式的技术复审可以减少代码中存在的初始错误,但是错误总是存在的,如果开发者找不到错误,那么,客户就会找到它们。越来越多的软件组织认识到软件测试是软件质量保证的重要元素之一,很多软件开发组织将30%—40%甚至更多的项目资源用在测试上,软件测试技术和软件测试策略受到了高度的重视和广泛的应用。
本文不想就软件测试技术和软件测试策略作深入的理论分析,而是列举一个在软件系统测试阶段进行的压力测试实例,希望能通过这个实例与从事软件测试相关工作的朋友进行交流。
首先介绍一下实例中软件的项目背景,该软件是一个典型的三层C/S架构的MIS系统(客户端/应用服务器/数据库管),中间层是业务逻辑层,应用服务器处理所有的业务逻辑,但应用服务器本身不提供负载均衡的能力,而是利用开发工具提供的ORB(对象请求代理)软件保证多个应用服务器间的负载均衡。本次测试的目的是:进行单个应用服务器的压力测试,找出单个应用服务器能够支持的最大客户端数。测试压力估算的依据是:假定在实际环中,用户只启用一个应用服务器进行所有的业务处理。方法是:按照正常业务压力估算值的1~10倍进行测试,考察应用服务器的运行情况。
压力测试的详细计划如下:
压力测试计划
1、测试计划名称
XX交通管理信息系统压力测试计划。
2、测试内容
2.1背景
本次测试中的压力测试是指模拟实际应用的软硬件环境及用户使用过程的系统负荷,长时 间运行测试软件来测试被测系统的可靠性,同时还要测试被测系统的响应时间。
用户的实际使用环境:
◇由两台IBM XSeries250 PC Server组成的Microsoft Cluster;
◇数据库管理系统采用Oracle8.1.6;
◇应用服务器程序和数据库管理系统同时运行在Microsoft Cluster上。
◇有200个用户使用客户端软件进行业务处理,每年通过软件进行处理的总业务量为:150万笔业务/年。
2.2测试项
应用服务器的压力测试;
2.3不被测试的特性
◇系统的客户端应用程序的内部功能;
◇数据库中的数据量对程序性能的影响。
3、测试计划
3.1测试强度估算
测试压力估算时采用如下原则:
◇全年的业务量集中在8个月完成,每个月20个工作日,每个工作日8个小时;
◇采用80—20原理,每个工作日中80%的业务在20%的时间内完成,即每天80%的业务在1.6小时内完成;
测试压力的估算结果:
去年全年处理业务约100万笔,其中15%的业务处理每笔业务需对应用服务器提交7次请求;70%的业务处理每笔业务需对应用服务器提交5次请求;其余15%的业务每笔业务向应用服务器提交3次请求。根据以往统计结果,每年的业务增量为15%,考虑到今后三年业务发展的需 要,测试需按现有业务量的2倍进行。
每年总的请求数量为:(100*15%*7+100*70%*5+100*15%*3)*2=300万次/年。
每天的请求数量为:300/160=1.875万次/天。
每秒的请求数量为:(18750*80%)/(8*20%*3600)=2.60次/秒。
正常情况下,应用服务器处理请求的能力应达到:3次/秒。
3.2测试环境准备
3.2.1基本硬件及软件环境的准备
1)网络环境:公司内部的以太网,与服务器的连接速率为100M,与客户端的连接速率为10/100M自适应。
2)使用两台IBM XSeries250(1G内存)PC Server作Microsoft Cluster,安装系统软件 Windows 2000 Advance Server及Microsoft Cluster Server(MSCS)。
3)数据库管理系统的安装及配置:在测试用的IBM XSeries服务器上安装Oracle8.1.6,数据 库采用Oracle Fail Safe(ofs)的Active/Passive配置。 安装数据库管理系统及支撑软件(包括VisiBroker和BDE Administrator)。
4)安装被测的应用服务器程序。
5)客户端的PC机:10台(PⅢ600/128M RAM)。
3.2.2系统客户端测试程序的编写系统客户端测试程序使用Delphi编写,要求测试程序实现如下功能:
1)模拟一个主要的向应用服务器发送请求并接收响应信息的功能。要求交替模拟两种情况:第一种,发送的请求至少包括10个参数,参数类型涵盖字符、日期、数字种类型;接收的 响应信息不少于1个参数;第二种,发送的请求不少于1个参数;接收的响应信息至少包括10个参数,参数类型涵盖字符、日期、数字种类型。
2)必须能够通过参数设定在每台PC机上运行的客户端测试程序个数、请求的时间间隔(单位:毫秒)、运行时间(单位:小时)。
3)在数据库中建立测试记录表,生成测试记录,向数据库写入测试记录的功能不通过被测的应用服务器实现。日志内容包括:发送测试请求的机器名、客户端测试程序序号、发出请求时间、收到响应时间、处理是否成功。表名:TEST_LOG,字段名:MACHINE、ID、START_TIME、END_TIME、FLAG。
3.2.3系统本底数据的准备
为考察系统运行一段时间后系统的响应性能,参照实际运行情况及发展进行系统的本底数据准备。业务处理中涉及到的业务表中都要求按设计规模进行本底数据的准备。要求准备的数据记录的有效性符合系统要求,数据有效性的具体要求参见数据库设计及系统设计文档
3.3破坏性测试
按照设计连接的客户端连接数量进行测试,把应用服务器处理请求的设计频度增加1-10倍,分别测试出现错误的状态和和出现错误的比率,考察是否出现不可恢复错误,系统设计要考 虑出现严重错误情况下负荷减轻错误自动恢复的实现方法。
计划时间:2天;这个时间包括破坏性的修复和自动恢复的实现需要的时间。
在测试过程中每10分钟记录一次IBM Xseries PC Server的内存及CPU使用情况,包括被测程序的内存占用百分比、数据库管理系统的内存占用百分比、操作系统的内存占用百分比。
3.4强度稳定性测试
选择一种负荷比设计负荷重的情况(应用服务器处理请求的频度为应用服务器处理请求的 设计频度的1.5倍),进行24小时稳定性测试。
3.5测试方法和工具
黑盒测试
测试工具:无外购的测试工具,自己编制的测试工具。
3.6测试时间计划
3.6.1环境准备:2天。
其中:基本硬件、软件环境及系统本底数据的准备:1天,
系统客户端测试程序的编写及测试:1天。
3.6.2破环性测试:2天。
3.6.3强度稳定性测试:1天。
3.7测试中的问题及处理
3.7.1暂停标准和再启动要求
暂停标准:被测试软件在强度稳定性测试中频繁出现异常(每小时出现1次以上)时。用户或公司要求暂停测试时。
再启动要求:通过调试后,预计被测试软件的可靠性有所提高时,可再次启动测试。
3.7.2不可预见问题
不可预见问题包括:
◇测试环境被破坏而导致测试无法进行;
◇当出现上述不可预见问题时,测试终止,就已完成的测试内容编制测试总结报告,并在报告中说明测试终止的原因。
3.8测试报告 2002.06.21
测试总结报告提交日期:2002.06.21。
3.8.1应生成的测试文件
测试记录(测试负责人和参与测试的人员签字);
测试总结报告。
3.8.2测试总结报告中必须包含的内容
被测试软件名称、测试项、测试环境;
被测试软件的压力测试结论:响应时间、最大/最小并发数、失败的次数、正常连续运行的最长/最短时间,并发数与失败的关系。
4、人员和职责
4.1职责
测试工程师:负责编写测试计划,组织测试,对测试过程进行记录,收集、整理测试记录数据,对测试结果进行分析,编写测试总结报告。
软件工程师:负责编写、调试客户端测试软件;数据库管理系统的安装、ofs配置及系统的本底数据准备。
系统工程师:负责测试用的硬件维护及操作系统安装、MSCS配置。
总工程师:负责对测试计划及测试总结报告进行批准。
用户:必要时可参加测试,并提出具体的测试要求;可要求暂停测试。
4.2人员和训练要求
本次测试无特别的人员及培训要求。
5、批准
本测试计划必须经过总工程师批准后才能开始实施。

2008年7月11日星期五

软件测试人员所要涉猎的知识

1.计算机系统基础知识  
1.1 计算机系统构成及硬件基础知识   
●计算机系统的构成 
●处理机
●基本输入输出设备
●存储系统   
1.2 操作系统基础知识    
●操作系统的中断控制、进程管理、线程管理   
●处理机管理、存储管理、设备管理、文件管理、作业管理    
●网络操作系统和嵌入式操作系统基础知识    
●操作系统的配置   
1.3 数据库基础知识    
●数据库基本原理    
●数据库管理系统的功能和特征    
●数据库语言与编程   
1.4 中间件基础知识   
1.5 计算机网络基础知识    
●网络分类、体系结构与网络协议    
●常用网络设备    
●Internet基础知识及其应用    
●网络管理   
1.6 程序设计语言知识    
●汇编、编译、解释系统的基础知识    
●程序设计语言的基本成分(数据、运算、控制和传输、过程(函数)调用)    
●面向对象程序设计    
●C语言以及C++(或Java)语言程序设计基础知识2.标准化基础知识    
●标准化的概念(标准化的意义、标准化的发展、标准化机构)    
●标准的层次(国际标准、国家标准、行业标准、企业标准)    
●标准的类别及生命周期3.信息安全知识    
●信息安全基本概念    
●计算机病毒及防范    
●网络入侵手段及防范    
●加密与解密机制4.信息化基础知识    
●信息化相关概念    
●与知识产权相关的法律、法规    
●信息网络系统、信息应用系统、信息资源系统基础知识
5.软件工程知识   
5.1 软件工程基础    
●软件工程概念    
●需求分析    
●软件系统设计    
●软件组件设计    
●软件编码    
●软件测试    
●软件维护   
5.2 软件开发方法及过程    
●结构化开发方法    
●面向对象开发方法    
●瀑布模型    
●快速原型模型    
●螺旋模型   
5.3 软件质量管理    
●软件质量及软件质量管理概念    
●软件质量管理体系    
●软件质量管理的目标、内容、方法和技术   
5.4 软件过程管理    
●软件过程管理概念    
●软件过程改进    
●软件能力成熟度模型   
5.5 软件配置管理    
●软件配置管理的意义    
●软件配置管理的过程、方法和技术   
5.6 软件开发风险基础知识    
●风险管理    
●风险防范及应对   
5.7 软件工程有关的标准    
●软件工程术语    
●计算机软件开发规范    
●计算机软件产品开发文件编制指南    
●计算机软件需求规范说明编制指南    
●计算机软件测试文件编制规范    
●计算机软件配置管理计划规范    
●计算机软件质量保证计划规范    
●数据流图、程序流程图、系统流程图、程序网络图和系统资源图的文件编制符号及约定6.软件测试知识   
6.1 软件测试基本概念    
●软件质量与软件测试    
●软件测试定义    
●软件测试目的    
●软件测试原则    
●软件测试对象   
6.2 软件测试过程模型    
●V模型    
●W模型    
●H模型    
●测试模型的使用   
6.3 软件测试类型    
单元测试、集成测试、系统测试    
●确认测试、验收测试    
●开发方测试、用户测试、第三方测试    
●动态测试、静态测试    
白盒测试、黑盒测试、灰盒测试   
6.4 软件问题分类    
●软件错误    
●软件缺陷    
●软件故障    
●软件失效   
6.5 测试标准    
6.5.1 GB/T 16260.1—2003 软件工程 产品质量 第1部分:质量模型    
6.5.2 GB/T 18905.1—2002 软件工程 产品评价 第1部分:概述    
6.5.3 GB/T 18905.5—2002 软件工程 产品评价 第5部分:评价者用的过程

从一则笑话分析需求的陷阱(转贴)

某日,老师在课堂上想考考学生们的智商,就问一个男孩:“树上有十只鸟,开枪打死一只,还剩几只?”
男孩反问:“是无声枪么?”
“不是。”
“枪声有多大?”
“80~100分贝。”
“那就是说会震的耳朵疼?”
“是。”
“在这个城市里打鸟犯不犯法?”
‘不犯。”
“您确定那只鸟真的被打死啦?”
“确定。”
老师已经不耐烦了,”拜托,你告诉我还剩几只就行了,OK?”
“OK。鸟里有没有聋子?”
“没有。”
“有没有关在笼子里的?”
“没有。”
“边上还有没有其他的树,树上还有没有其他鸟?”
“没有。”
“方圆十里呢?”
“就这么一棵树!”
“有没有残疾或饿的飞不动的鸟?”
“没有,都身体倍棒。”
“算不算怀孕肚子里的小鸟?”
“都是公的。”
“都不可能怀孕?”
“………,决不可能。”
“打鸟的人眼里有没有花?保证是十只?”
“没有花,就十只。”
老师脑门上的汗已经流下来了,下课铃响起,但男孩仍继续问:“有没有傻的不怕死的?”
“都怕死。”
“有没有因为情侣被打中,自己留下来的?”
“笨蛋,之前不是说都是公的嘛!”
“同志可不可以啊!”
“…………,性取向都很正常!”
“会不会一枪打死两只?”
“不会。”
“一枪打死三只呢?”
“不会。”
“四只呢?”
“更不会!”
“五只呢?”
“绝对不会!!!”
“那六只总有可能吧?”
“除非你他妈的是猪生的才有可能!”
“…好吧,那么所有的鸟都可以自由活动么?”
“完全可以。”
“它们受到惊吓起飞时会不会惊慌失措而互相撞上?”
“不会,每只鸟都装有卫星导航系统,而且可以自动飞行。”
“恩,如果您的回答没有骗人,”学生满怀信心的回答,“打死的鸟要是挂在树上没掉下来,那么就剩一只,如果掉下来,就一只不剩。”
老师当即倒!
用这篇笑话故事来做开头,笑过之后可能不少能会认为这个小朋友是需求调研的最佳人选。回顾软件开发上的许多案例,软件开发失败率一直居高不下,特别在外包开发这个领域中,这个值可能会更高一筹。
在分析项目失败的原因的时候,需求的因素可能是失败的关键原因、需求不明确,客户对需求的变更频频等等。
1.需求的调研 需求调研是为需要说明书做前期工作,可以说需要说明书是从需求调研表中得到或抽取而出。需求调研是要了解客户希望所要开发的系统能够解决他们的问题,以及了解他们对系统的期望等等。需求调研是整个开发的基础,经过需求调研的结果整理出需求说明书作为后续开发使用。 如果做的项目是一个陌生的一个行业(专业),这是往往需要专家或者顾问等角色的协助,但是作为调研人员最少要想办法了解个专业,或许你需要成为这个行业的专家,但最少要了解一定的专业知识(最少专业词汇你要知道)。这样客户的沟通才能达到顺畅,不会出现牛头不对马嘴的现象。 在某些难度不是很大的行业或者项目,做需求调研的时候可以通过自学的方式了解行业的特点,这些项目往往因为规模比较小,也不会有专家的影子出现。
但是作为调研的时候我们最需要了解的一些问题如: 1):客户目前的问题与苦难 2):客户现在的工作模式 3):客户对系统的期望 4):客户哪些要求是自己能做到的,那些是依靠系统来做 5):还有客户对系统开发方式以及时间的要求等等 其实做需求调研的时候最重要的目的在于资料收集,或许小孩的那种打破砂锅的方式会引起客户的反感,但是实际项目中往往需要的就是这些比较周全的调研方式,能够考虑到的问题点都需要和客户确认,尽量避免想当然的做法,只是采用的方式可能需要优化一下,采用良好的方式,尽量得到客户的最大配合。