博文

程序的风格--输入输出风格(2007-05-12 22:09:00)

摘要:1、提高输入操作的坚固性,以适当方式对输入数据进行检验,以确认每个输入数据的有效性;对无效数据,也能给出必要的提示,而不导致死机;
2、输入格式简单、单一、统一,容易核对;
3、输入格式与用户水平相适应;
4、输入时能给用户提示,指明可使用的选择和边值;
5、输出格式应满足用户要求,符合使用意图;
6、对输出操作有必要的提示;
7、简化用户操作,减少用户出错处理。......

阅读全文(2688) | 评论:0

程序的风格--正文风格(2007-05-12 20:43:00)

摘要:一、使用足够的注释
 1、一个文件的文件名;
 2、程序或函数的功能;
 3、变量的用途;
 4、特殊技巧;
 5、特殊数据结构的特点和实现方法;
 6、任何容易误解或别人不容易看得懂的地方。
二、语句括号风格
 1、Kernighan和Ritchie风格(也称贝尔实验室工业编程风格)
    while(bCondition){
.  .........
  if(...){
   ......
  }
  else{
   ......
  }
}
2、Allman风格(也称学生风格)
while(bCondition)
{
 ..........
 if(...)
 {
  ......
 }
 else
 {
  ......
 }
}
3、Whitesmitions风格
while(bCondition)
 {
  ..........
  if(...)
   {
    ......
   }
  else
   {
    ......
   }
 }
三、标识符风格
 1、按“见名知义”的原则和较长的描述性名字命名对象(变量、函数等)名,同时采用驼峰式命名法或下划线命名法,如:
  PrintEmoloyee
  print_employee
 2、最好能在名字中指出变量的类型
 3、匈牙利命名法
 4、函数的命名最好采用动宾结构。
四、语句和表达式风格
 1、使用冗余的圆括号使表达式易读;
 2、在条件或循环结构中尽是避免采用“非”条件测试;
 3、尽量避免复杂条件测试;
 4、语句和表达式要清晰、易读。
 ......

阅读全文(2563) | 评论:0

程序的风格--逻辑风格(2007-05-12 15:18:00)

摘要:一、程序的局部化和模块化
  局部化包括了数据的局部化和处理的局部化。数据的局部化主要指变量使用在程序的局部,即在一个程序的一部分可以自由地命名变量,而不影响其他部分。
  局部化的最好方法是使程序的局部显式地独立,这就称为程序的模块化。一个模块与其它模块只用参数和返回值进行通信,并且只在调用和返回时才起作用。各个模块可以分别设计、分别编译、分别调试,大大缩小了问题的规模,并且在一定程度上实现了程序的复用和构件化,提高了程序设计的效率和可靠性。
二、程序模块的层次结构
  层次结构要求与之适应的自顶向下、逐步细化的程序设计方法。
三、数据风格
  1、数据类型和数据结构的使用要,如要有限制地使用指针等。
  2、采用必要的符号常量。
四、算法风格
  1、算法要简洁、明了,少使用技巧。
  2、尽是避免使用多重循环嵌套或条件嵌套结构。
  3、充分利用库函数。
  4、要注意浮点运算的误差。......

阅读全文(2422) | 评论:0

当卡巴被秒杀之后(2007-05-11 23:52:00)

摘要:就在刚才,卡巴弹出了几个提示说我中毒了,按提示操作了一下就没声音了,等到要关机时,却发现卡巴没运行,一看显示过期了,可是明明到2008年4月才到期呀,一看桌面上的日历,时间回到了2005年5月11日,原来卡巴因为时间不对自动关闭了(嘿嘿,刚在第8期的《电脑爱好者》中看到这个漏洞),把时间改过来,哈哈,卡巴又叫了,执接着重启了,然后又叫了,然后又重启了,然后我进入安全模式,把病毒删了,于是电脑好了,所以我写了这篇日志。......

阅读全文(2649) | 评论:1

程序测试--调试(2007-04-30 16:54:00)

摘要:一、语法错误及调试
    (1)、编译器报告的错误位置,有时会有偏离。
    (2)、编译器常常会针对某个错误,发出一系列的错误信息报告。
    常见的语法错误:
  1、语句末尾漏写分号;
  2、使用未经定义的变量;
  3、括号不匹配;
  4、字符串没有结束符;
  5、赋值号左面不是变量;
  6、非void类型的函数缺少return语句;
  7、没有在printf中指定输出项对应的输出格式;
  8、在scanf函数中要么在格式串中使用了非格式字符,要么在格式串中没有使用格式符,要么在输入项的变量前没有使用地址运算符。
二、语义及逻辑错误及其调试
 (1)、语义错误指程序对程序中的语义的理解与编译器理解的不同;
 (2)、逻辑错误指程序在算法上出现错误。
 常见的语义错误:
  1、赋值号与等号用错;
  2、无限循环;
  3、在if、where或for结构后面使用多余的分号;
  4、错误地使用了关系运算符;
  5、计算或将一个大类型的数转换成小类型时,数据的值超出了表示范围;
  6、运算符优先顺序错;
  7、else搭配不当;
  8、off-by-one(偏一)错误,通常指for循环的次数多或少一次;
  9、将无关代码放到循环体中;
  10、使用整数除法。
三、语义错误的发现与调试:
 语义调试的方法:手工跟踪法和工具法。
 手工跟踪法:
  1、在if-else语句的前后显示关键变量的值;
  2、循环开始的前后和循环结构的前后显示,如关键变量的值和循环变量的值;
  3、每次进入函数前后所有参数的变化,每次退出函数前后所有参数的变化。......

阅读全文(2752) | 评论:0

程序测试--边值分析法(2007-04-25 18:23:00)

摘要:边值分析法
(1)、边值分析法
边值分析法是对某些边界条件进行测试。所谓边界条件,是指输入等价类和输出等价类边缘上的数据。运用边值分析法应特别注意它与等价类的差别:
  一、边值分析不是从等价类中随便选一个例子作为代表,而是着眼于使该等价类的边界情况成为测试的主要目标来选择例子。这种例子可能是一个,也可能是几个。一般说来可以考虑下面几种情况:
   A、如果某个输入条件说明了值的范围,则可选择一些恰好取得边界值的例子,另外再给出一些恰好越过边界值属于无效等价的例子。
   B、如果一个输入条件指出了输入数据的个数,则可取最小个数、最大个数、比最小个数少1、比最大个数多1 ,来分别设计测试用例。
若输入是有序集,则应把注意力放在第一和最后一个元素上。
  二、边值分析不仅要注意输入条件,还要注意输出情况,按输出等价类设计测试用例。通常应先考虑以下几点:
   A、对每个输出条件,如果指出了输出值的范围或输出数据的个数,则应按设计输入等价类的方法,为它们设计测试用例。
   B、若输出是个有序集,则应把测试注意力放在第一和最后一个元素上。
(2)循环结构的边值分析法测试
循环结构可以看作是一种特殊的判定结构。一般来说,仅考虑循环结构的设定是否正确,可以采用边值分析法。
  一、单计数循环结构的边值分析法测试。
   A、初始边值条件:
     a、零次循环,即不执行循环体;
     b、一次循环,以便测试初始化方面的问题;
     c、二次循环,进一步揭露初始化方面的问题。
   B、终止边值条件:
     a、第n - 1次循环;
     b、第n次循环;
     c、第n + 1或n - 1次循环,以便测试循环次数有无错误。
   C、特殊循环次数:
    a、属于给定循环次数之内的典型循环次数;
     b、属于非正常情况下的典型循环次数。
  二、嵌套循环的边值分析法测试。嵌套循环可以看作循环的组合。但为了减少测试用例的组合数,可以使用以下策略:
   A、除指定层的循环要遍历单循环的全部情况外,其他各层取典型循环次数,再把各层分......

阅读全文(3064) | 评论:0

程序测试--等价分类法(2007-04-21 10:26:00)

摘要:等价分类法简介
一个程序结构的所有输入中,总可以找到一些有代表性的数据。这些有代表性的测试数据应包括对程序有效的输入,以及极端的、正常的和特殊的数据元素。
如果能把程序输入数据的可能值划分成若干“等价类”,在每一类中选定一组有代表性的数据,等价于其他数据,使这组数据能发现的错误,该类中的其他数据也可以发现;该组数据发现不了的错误,该类中其他数据也发现不了(除非该类例子中的某些数据也属于其他类)。这种测试用例设计方法就称为等价分类法。
用等价分类法设计测试用例可分两步进行:划分等价类和选定测试用例。
(1)、划分等价类
划分等价类的基本方法是:从程序的功能说明中找出各个输入条件,然后为每个输入条件划分等价类。
等价类分为两种:有效等价类和无效等价类。有效等价类是指属于程序的合理输入范围的那些数据,无效等价类是指非法的输入数据。等价类的划分取决于程序的功能要求和定义域,也取决于测试人员对问题的理解力和创造力,带有很大的试探性。下面几条可以作为划分等价类的参考准则:
一、如果某个输入条件规定了值的范围,即可为它确定一个有效等价类和两个无效等价类。
二、如果一个输入条件规定了输入的一组可能值,而且认为程序是用不同的方式处理每一种值的,则可为每一种值确定一个有效等价类,同时可以为它划分一个无效等价类。
三、如果一个输入条件说明了一个“必须”的情况,则可为它确定一个有效等价类和一个无效等价类。
四、如果某一等价类别中的元素有不同的处理方式,就应该把这个等价类划分成更小的等价类。
(2)、选定测试用例
一、给每个等价类规定一个编号。
二、设计一个测试用例,使其尽可能多地覆盖未被覆盖的有效等价类。重复这一步直到所有的有效等价类都被覆盖为止。
三、为每个无效等价类设计一个测试用例。......

阅读全文(5562) | 评论:0

分支程序的覆盖测试(2007-04-18 21:55:00)

摘要:(1)语句覆盖法
  语句覆盖是企图用足够多的测试用例,使程序中的每个语句都执行一遍,以尽可能多的发现程序中的错误。这里,言外之意是,即使第个语句都执行一遍,也还不一定能够发现全部的错误。
(2)分支覆盖法
  分支覆盖也称为判定覆盖,它要求通过足够的测试用例使每个判定的每个分支至少通过一次。分支覆盖准则比语句覆盖准则严密了一些,但仍然不够充分。因为一个判定中往往包含多个条件,而用分支覆盖并不一定能将每个条件都测试一次。
(3)条件覆盖法
  条件覆盖是通过执行充足的测试用例,使每个判定中的每个条件都至少使用一次。
例如:
{
if(a > 1 && b == 0) x /= a;
if(a == 2 || x > 1) x += 1;
}
对于上面的语句有以下四个条件:
1、a > 1   2、b == 0  3、a == 0  4、x > 1
如果设计下面两组测试用例,就可将每个条件都使用一次:
A:a = 2, b = 1, x = 1
B:a = 1, b = 0, x = 3
(4)组合条件覆盖法
  条件覆盖似乎比判定覆盖更好,但实际上未必这样。因为它有时候不能满足组合条件,也就是说,条件覆盖有可能连分支覆盖准则也满足不了。为此,人们又提出了一种更强的准则--组合条件覆盖准则:执行充足的测试用例,使判定中条件的各种可能组合至少出现一次。对于上面的例子:
第一个判定有以下4种条件组合:
1、a > 1 && b == 0
2、a > 1 && b <> 0
3、a <= 1 &&b == 0
4、a <= 1 && b <> 0
第二个判定也有以下4种条件组合:
5、a == 2 && x > 1
6、a <> 2 && x > 1
7、a == 2 && x <= 1
8、a <> 2 && x <= 1
下面的4个用例就可以覆盖......

阅读全文(4772) | 评论:0

测试简述(2007-04-18 21:33:00)

摘要:关于测试的三句话:
  一、测试是程序的执行过程,目的在于发现错误;
  二、一个好测试实例在于能发现至今未发现的错误;
  三、一个成功的测试是发现了至今未发现的错误。
  测试是以程序通过编译中,没有语法和连接上的错误为前提的。在此基础上,通过让程序试运行一组数据,来检测程序的逻辑以及程序中的各语句有无错误。这一组测试数据应以“任何程序都是有错误的”为前提精心设计出来的,而不是随心所欲地乱凑而成的。它不仅应含被测程序的输入数据,而且还应包括程序执行后预期的结果;每次测试都要把实际的结果与预期的结果相比较,以观察程序是否出错。......

阅读全文(2363) | 评论:0

有了拼音输入法,还用写字吗(2007-04-06 22:18:00)

摘要:  从以前到现在我一直在用五笔,但最近也试用了一下拼音,用了搜狗和google的拼音输入法,不禁产生了这样一个疑问:输入法越来越智能,词库更新越来越快,用户在用的时候根本不用想字是怎么写的,只要把拼音打上,就能输出想要的字词,久而久之,形成了习惯,那么,用户还能知道想要的这个字或这个词是怎么写的吗?这样下去的话,或许能写汉字就只有书法家和不会用电脑的人的吧,而随着社会的发展,不会用电脑的人将会越来越少,真有点担忧呀。相比之下,用五笔就要好的多,但现在的五笔用着也不太舒服,我还是一直在用“智能五笔”,但词库更新的是相当的慢,其它的五笔输入法试过几个,不好用,要是也有个大公司开发个五笔输入法就行,天天更新词库。......

阅读全文(3479) | 评论:0