C/C++学习ing。还是想要测试。

发布新日志

  • 接口测试

    2012-07-26 18:04:24

  • Doxygen 把c++注解生成文档

    2011-11-15 11:08:52

    Doxygen  简介

    Doxygen 是一种开源跨平台的,以类似JavaDoc风格描述的文档系统,完全支持C、C++、Java、Objective-C和IDL语言,部分支持PHP、 C#。注释的语法与Qt-Doc、KDoc和JavaDoc兼容。Doxgen可以从一套归档源文件开始,生成HTML格式的在线类浏览器,或离线的 LATEX、RTF参考手册。

    Doxygen是一个程序的文件产生工具,可将程序中的特定批注转换成为说 明文件。通常我们在写程序时,或多或少都会写上批注,但是对于其它人而言,要直接探索程序里的批注,与打捞铁达尼号同样的辛苦。大部分有用的批注都是属于 针对函式,类别等等的说明。所以,如果能依据程序本身的结构,将批注经过处理重新整理成为一个纯粹的参考手册,对于后面利用您的程序代码的人而言将会减少 许多的负担。不过,反过来说,整理文件的工作对于您来说,就是沉重的负担。

      对于未归档的源文件,也可以通过配置Doxygen来提取代 码结构。或者借助自动生成的包含依赖图(includedependencygraphs)、继承图(inheritancediagram)以及协作图 (collaborationdiagram)来可视化文档之间的关系。Doxygen生成的帮助文档的格式可以是CHM、RTF、 PostScript、PDF、HTML和Unixmanpage等。

      一个好的程序设计师,在写程序时,都会在适当的地方加上合适的批注。如果,能够在撰写批注时,稍微符合某种格式,接着就可以透过一个工具程序依据程序结构及您的批注产生出漂亮的文件。这将令许多工作繁重的程序设计师有时间多喝几杯咖啡。

      Doxygen就是这样的一个工具。在您写批注时,稍微按照一些它所制订的规则。接着,他就可以帮您产生出漂亮的文件了。因此,Doxygen的使用可分为两大部分。首先是特定格式的批注撰写,第二便是利用Doxygen的工具来产生文件。

     安装下载 自己在网上找找怎么搞,不过在我国的局域网上访问不了它的主页的,您可以委托国外的朋友帮您下载,然后给您传回来.

    下来 我就给大家介绍一下这个东西倒底是怎么个使用法:

    它的功能大概就是把代码上的注解 生成一个html 或者 chm 或者 pdf  文档

    ,哪还等什么赶紧把我的代码生成一个文档吧等等.. 其实它还没那么智能

    常用指令介绍

    @file

    档案的批注说明。

    @author

    作者的信息

    @brief

    用于class 或function的简易说明

    eg:

    @brief 本函数负责打印错误信息串

    @param

    主要用于函数说明中,后面接参数的名字,然后再接关于该参数的说明

    @return

    描述该函数的返回值情况

    eg:

    @return 本函数返回执行结果,若成功则返回TRUE,否则返回FLASE

    @retval

    描述返回值类型

    eg:

    @retval NULL 空字符串。

    @retval !NULL 非空字符串。

    @note

    注解

    @attention

    注意

    @warning

    警告信息

    @enum

    引用了某个枚举,Doxygen会在该枚举处产生一个链接

    eg:

    @enum CTest::MyEnum

    @var

    引用了某个变量,Doxygen会在该枚举处产生一个链接

    eg:

    @var CTest::m_FileKey

    @class

    引用某个类,

    格式:@class <name> [<header-file>] [<header-name>]

    eg:

    @class CTest "inc/class.h"

    @exception

    可能产生的异常描述

    eg:

    @exception 本函数执行可能会产生超出范围的异常

    @todo

    对将要做的事情进行注释

    @see

    一段包含其他部分引用的注释,中间包含对其他代码项的名称,自动产生对其的引用链接。

    @relates <name>

    通常用做把非成员函数的注释文档包含在类的说明文档中。

    @since

    通常用来说明从什么版本、时间写此部分代码。

    @code

    在注释中开始说明一段代码,直到@endcode命令。

    @endcode

    注释中代码段的结束。

    @pre

    用来说明代码项的前提条件。

    @post

    用来说明代码项之后的使用条件。

     @deprecated

    这个函数可能会在将来的版本中取消。

    @defgroup

     模块名

    @class

     声明一个类

    @fn

     声明一个函数

  • easyphp+mantis搭建

    2011-02-16 16:24:53

    http://www.cnblogs.com/TerryFeng/archive/2009/04/09/1432520.html
  • 测试相关文章链接

    2010-09-20 10:04:52

    微软软件测试的可借鉴之处


    http://www.51testing.com/html/59/n-220359.html

    软件测试技术学习笔记


    http://www.51testing.com/html/82/n-219182.html
  • 架构的概念

    2010-04-01 16:08:46

    如何设计软件架构
    1.明白需求
      目的:做一个战场图编辑软件,主要功能是编辑图形,图形的连接关系。
    2.完成主要功能需要添加哪些额外功能
      额外功能:画图,编辑,添加,删除
    3.所做的战成图编辑软件
      绘制是被动的,要通过topo类获得数据,然后再发送Invalidate消息,调用ondraw是绘制。
    4.搞清这个类之间的关系
  • 测试任务

    2010-03-19 09:37:45

                                表一 测试任务类型分类

    任务类型

    适用范围

    测试计划

    • 编写项目总测试计划
    • 编写里程碑测试计划
    • 编写每一轮测试的测试计划

    测试需求

    • 了解系统需求
    • 编写/修改测试需求

    测试设计

    • 了解系统设计
    • 编写/修改测试用例
    • 测试数据准备

    测试执行

    • 编写/修改/录制测试脚本
    • 测试执行
    • 编写测试执行结果及缺陷登记

    测试报告

    • 编写项目里程碑测试报告
    • 测试执行情况分析
    • 编写项目各轮测试的测试报告

    测试管理

    • 测试组阶段工作安排
    • 测试组内、外协调
    • 测试组人员管理(如人员思想波动等)

    测试环境准备

    • 获取测试环境要求
    • 测试环境搭建

    缺陷处理

    • 缺陷修改、缺陷验证等与缺陷处理有关的工作(缺陷登记不包括在内)

    沟通

    • 所有项目组内部或项目组外部的沟通

    会议

    • 项目组内/外会议
    • 项目组内/外培训

    其他

    • 所有无法归类的任务

    表四 某项目测试工作量统计表

    任务类型

    工作量(单位:人时)

    A

    B

    C

    D

    小计

    了解系统需求

    24.1

    34

    33.5

    23

    114.6

    测试计划

    70

    8.5

    138.5

     

    217

    测试需求

    36

    225.7

    14.5

    26.1

    302.3

    测试设计

    30

    124.5

    16

    23.1

    193.6

    测试脚本

     

    193.7

      

    118.7

    193.7

    测试执行

    78.8

    644.5

    284.5

    160.8

    1168.6

    测试报告

     

    3.5

    20

     

    23.5

    沟通

    5

    11.1

    96

    7.8

    116.7

    会议

    4

     

    35

     

    39

    测试管理

     

    11.1

    14.5

     

    25.6

    测试环境搭建

     

    3.5

      

     

    3.5

    缺陷处理

     

    4.5

      

     

    4.5

    性能测试准备

     

     

    19

     

    19

    测试工具学习

     

    32.5

    37

    9.9

    69.5

    性能测试计划

    4.4

     

    13

     

    17.4

    性能测试用例

     

     

    1

     

    1

    性能测试脚本

     

    1

    19

    11.1

    20

    性能测试执行

     

     

    0.8

    2

    0.8

    性能测试总结

     

     

     

     

    0

    其他

     

    19.5

    6

    2.5

    21.5

    合计

    252.3

    1317.6

    748.3

    385

    2551.2

     

  • PICT组合测试用例利器

    2010-01-03 19:33:12

    E:\>pict.exe my1.txt >output.xls //E为my1.txt所在的盘符
                                    //my1.txt为要生成组合测试用例的所需的参数和值
  • perl 学习笔记二——systemp

    2009-04-09 15:02:44

    SystemP打印命令并执行它的常规系统Perl命令。它返回执行命令的退出代码。
  • perl 学习笔记一

    2009-03-27 09:19:55

    PERL用@和$来区分数组变量和简单变量
    在PERL中,当一个自定义函数接收参数时,它都放在数组@_中,$_[0],$_[1]就是从该数组中去取参数。@_就是一个普通数组
     
    1.联接且赋值(类似+=): .=
    例子:
    $a = "be";
    $a .= "witched"; # $a is now "bewitched"
     
    2.数组变量以字符"@"打头,第一个元素下标为0
    例子 @array = (1, 2, 3)
     
    3./def/即模式def
     
    4.匹配指定数目的字符
       字符对{}指定所匹配字符的出现次数。如:/de{1,3}f/匹配def,deef和deeef;/de{3}f/匹配deeef;/de{3,}f/匹配不少于3个e在d和f之间;/de{0,3}f/匹配不多于3个e在d和f之间。
     
    5.foreach $word (@words) {
        if ($word eq "the") {
          print ("found the word 'the'\n");
        }
      }
    注:
    (1)此处的循环变量localvar是个局部变量,如果在此之前它已有值,则循环后仍恢复该值。
    (2)在循环中改变局部变量,相应的数组变量也会改变,如:
      @list = (1, 2, 3, 4, 5);
      foreach $temp (@list) {
        if ($temp == 2) {
          $temp = 20;
        }
      }
    此时@list已变成了(1, 20, 3, 4, 5)。
     
    6.子程序即执行一个特殊任务的一段分离的代码,它可以使减少重复代码且使程序易读。PERL中,子程序可以出现在程序的任何地方。定义方法为:
      sub subroutine{
        statements;
      }
     
    7.my和local。其区别是:my定义的变量只在该子程序中存在;而local定义的变量不存在于主程序中,但存在于该子程序和该子程序调用的子程序中(在PERL4中没有my)。定义时可以给其赋值,如:
      my($scalar) = 43;
      local(@array) = (1, 2, 3);
     
    8.五、子程序参数传递
    1、形式
      &sub1(&number1, $number2, $nubmer3);
      ...
      sub sub1{
        my($number1, $number2, $number3) = @_;
        ...
      }
    参数为数组时,子程序只将它赋给一个数组变量。如
      sub twolists {
        my (@list1, @list2) = @_;
      }
     
    第四章和第三章(http://man.ddvip.com/web/perl/perl4.htm
  • PC-lint与VS2005进行集成

    2009-01-13 23:49:27

    现以PC-lint与VS2005进行集成来说明:

    将PC-lint释放到某一目录下,如:D:\pclint.将新建一std.lnt文件在主目录中,并将添加上以下的内容


    au-sm.lnt
    co-msc80.lnt
    lib-mfc.lnt
    lib-stl.lnt
    lib-w32.lnt
    lib-wnt.lnt
    lib-atl.lnt
    options.lnt -si4 -sp4

    -i "C:\Program Files\Microsoft Visual Studio 8\VC\include"
    -i "C:\Program Files\Microsoft Visual Studio 8\VC\atlmfc\include"
    -i "C:\Program Files\Microsoft Visual Studio 8\VC\PlatformSDK\include"
    -i "C:\Program Files\Microsoft Visual Studio 8\SDK\v2.0\include"

    注意:-i后面为相应的vc头文件目录路径,而一系列xxx.lnt是语法配置规则,决定了按什么规则进行检查,以后可以根据 需要进行增减. 写在配置文件中相应的的xxx.lnt从lnt子目录中,拷贝到主目录中.(这一步很重要) 在vs2005中的工具->外部工具中,点击"添加",新建一个外部工具.标题可以任意,可取(pc_lint);命令为:D:\Program Files\pclint\LINT-NT.EXE;参数为:-i"D:\Program Files\pclint" std.lnt "$(ItemFileName)$(ItemExt)";初始目录为:$(ItemDir),并将下面的"使用输出窗口"勾选上. 接下来,就可以写一段程序,在工具菜单中选择pc_lint 来进行检查了.如果你编写的程序有不符合定义的规范,则会在输出窗口中出现相关的信息.

  • 如何屏蔽pclint的头文件检查报警------------疑惑??——结果待续

    2009-01-13 23:11:57

    第一种说法:
    lint.bat如下:
    @echo off
    "C:\Lint\Lint-nt" -i"C:\Lint;E:\TestProjects\CommonLib" std.lnt env-vc7.lnt -os(C:\Lint\_LINT.TMP) %1 %2 %3 %4 %5 %6 %7 %8 %9
    type C:\Lint\_LINT.TMP | more
    找头文件,你可以在我写的那个.bat文件中看到这么一行-i"C:\Lint;E:\TestProjects\CommonLib"
    这就是指明包含路径的.

    第二种说法:
    找不到头文件
    比如说头文件在 C:\test\header\inc\test.h
    源文件中是 #include <inc\test.h>
    那么在你的std.lnt里面加上一行
    -IC:\test\header

    “不能找到头文件stdio.h

    当然PCLINT不可能也不应该知道到哪里去找stdio.hstdio.h所在的路径需要我们告诉它。

    如何告诉呢?

    通常的做法是在xxx.lnt文件中指定,然后指定使用这个xxx.lnt文件。

    最简单的是使用 c:\pclint\std.lnt 这个文件。

     

    2.2. std.lnt的配置:

    2.2.1.    std.lnt的默认内容

    C:\PCLint\std.lnt默认内容为:

    //NOTES: DON'T delete the comment string

    //author+++

    //au-sm.lnt au-ds.lnt au-misra.lnt

    //author---

     

    //compiler+++

    co-gnu3.lnt

    //compiler---

     

    //library+++

    lib-stl.lnt lib-w32.lnt lib-wnt.lnt

    //library---

     

    //alignment+++

    -si4 -sp4

    //alignment---

     

    3gTdrnc.lnt

     

    2.2.2.    修改std.lnt

    运行C:\PCLint\CONFIG.EXE(或者直接手工修改std.lnt

    最后生成的std.lnt内容为:

    //  Microsoft C and Visual C++ 6.x, -si4 -sp4,

    //  Standard lint options

     

     

    co-msc60.lnt

     

    // options.lnt  -si4 -sp4

    -i"E:\Program Files\Microsoft Visual Studio\VC98\Include"

    -i"E:\Program Files\Microsoft Visual Studio\VC98\MFC\INCLUDE"

    -i"E:\Program Files\Microsoft Visual Studio\VC98\ATL\INCLUDE"

     

    暂时将options.lnt 这行注释掉。


    待定..............
  • 关于std.int和option.int文件的说明

    2009-01-13 22:50:21

    一、lint.bat和std.lnt文件.
    lint.bat如下:
    @echo off
    "C:\Lint\Lint-nt" -i"C:\Lint;E:\TestProjects\CommonLib" std.lnt env-vc7.lnt -os(C:\Lint\_LINT.TMP) %1 %2 %3 %4 %5 %6 %7 %8 %9
    type C:\Lint\_LINT.TMP | more

    std.lnt如下:
    //C++编程提出过重要建议的作者,选择某作者后,他提出的编程建议方面的选项将被打开
    D:\pclint\lnt\au-sm.lnt
    D:\pclint\lnt\au-ds.lnt
    D:\PC-Lint\co-msc60.lnt
    D:\PC-Lint\lib-w32.lnt
    D:\Sources\PC-Lint\options.lnt -si4 -sp4
    -i"D:\Program Files;D:\Program Files\Microsoft Visual Studio\VC98\ATL\Include;D:\Program Files\Microsoft Visual Studio\VC98\Include;D:\Program Files\Microsoft Visual Studio\VC98\MFC\Include" //(这是我的VC6.0路径)

    -wlib(0)//最后的-wlib(0)是取消对编译器库文件的审查,这个是相当重要的一个参数。如果
    你只是想审查自己的代码的话,请加上这个参数。不然,就会对编译器的库函数也
    进行审查
    ......
    ......
    ......

    二、这个options.lnt是用户自定义的参数,你可以自己写也可以没有.至于它的内容你还是看看PCLint的帮助吧.PCLint有太多的参数了.我这里的内容是:
    -e720 // allow direct test of assignment
    -e502 -e713 -e737 -eau // don't report on signed/unsigned mismatches
    -e734 // allow sub-integer loss of information
    -e701 -e703 // shifting int left is OK
    -e718 // allow calls to undeclared C functions
    -e746 // allow calls w/o prototypes in C.


  • pclit的配置与使用

    2009-01-13 00:03:54

    终于把单文件编译和多文件(工程)编译时如何配置和使用pclint搞定了。真的被这个pclint搞的快崩溃了,试了无数种方法,终于可以编译测试啦,庆祝一个,明天就要好好整整这可恶的的工具啦
    一、单文件编译测试:
    1.将pclint.rar解压至c:\, 这样lint文件就位与c:\pclint(安装目录)下了。
     2.将c:\pclint\lnt 下的3个文件lib-w32.lnt,env-vc6.lnt,co-msc60.lnt拷贝至c:\pclint下, 再在安装目录下创建std.lnt和options.lnt两个文件,其中std.lnt的内容如下 D:\pclint\co-msc60.lnt D:\pclint\lib-w32.lnt D:\pclint\options.lnt -si4 -sp4 -i"D:\ProgramFiles\MicrosoftVisualStudio\Common\MSDev98\Bin;D:\ProgramFiles\MicrosoftVisualStudio\VC98\ATL\Include;D:\ProgramFiles\MicrosoftVisualStudio\VC98\Include;D:\ProgramFiles\MicrosoftVisualStudio\VC98\MFC\Include"   options.lnt 内容空    
    3.打开VC6,tools--->customize-->tools 新建一个名为pclint的项,在下面填入  
     command: D:\pclint\lint-nt.exe  
     arguments: -u D:\pclint\std.lnt   "$(FilePath)"  
     Use Output Window 打上勾   close 完成。 VC窗口tools菜单下应该多了一个pclint选项 
    二、 工程(多文件)编译测试
    1.用利用PCLINT对整个工程进行编译需要用到unix中的find等命令来查找当前目录下的C和C++文件。下载 UnxUtils.zip(http://www.weihenstephan.de/~syring/win32/UnxUtils.zip)。将这个压缩文件解压到工作目录下,可以看到在D:\pclint\UnxUtils\usr\local\wbin目录下有很多命令。
    2.在vc6.0的工具->定制窗口中添加一个"PCLint_Project"项,命令和变量如下: command: D:\pclint\UnxUtils\usr\local\wbin\find.exe arguments: "$(FileDir)" -name *.c  -o -name *.cpp | D:\pclint\UnxUtils\usr\local\wbin\xargs D:\pclint\lint-nt -i"D:\pclint\UnxUtils\usr\local" -u D:\pclint\std.lnt D:\pclint\env-vc6.lnt
     在该窗口底部把“使用输出窗口”这一单选框选上,点击“关闭”退出定制窗口。这样,在VC的工具菜单下多了一个"PCLint_Project"工具,对VC工程进行编译的时候直接用这个工具即可。
    注:在D:\pclint中创建一个文件夹用以存放各个工程的文件,好了,现在动手测试一下你自己的工程吧。
  • c语言学习1

    2008-12-26 22:04:12

    语句和语句块
        和Pascal一样,C语言的每条语句以分号结尾。
        和Pascal一样,单词和语句间的空格、回车符对编译没有影响。
        C语言的语句块用花括号标识,也就是说字符 { 相当于Pascal的begin,字符 } 相当于Pascal的end; 。语句块中最后一条语句末尾的分号不能省略。

        如果语句块里只有一条语句,语句块的标识可以省略。这就好像Pascal代码:
    for i:=1 to n do
    begin
        writeln('I Love You');
    end;

        里面的begin和end可以省略一样。


    注释的写法
        两种情形被认为是注释。符号// 的后面(只限一行),以及符号 /* 和 */ 之间(可以跨行)。例如:
    /*  =====================
        = THIS IS A COMMENT =
        =====================   */

    //  This is a comment.



    常用数据类型
    C                  |  Pascal
    -------------------+------------
    short              |  shortint
    int                |  integer
    long               |  longint
    long long          |  int64
    unsigned short     |  byte
    unsigned int       |  word
    unsigned long      |  dword
    unsigned long long |  qword
    float              |  real
    double             |  double
    char               |  char


    定义变量
        定义变量使用这样的格式:
    类型名 变量名1, 变量名2, ... , 变量名n;

        变量名的命名规则与Pascal相同:只能用大小写字母、数字或下划线,第一个字符不用数字。所不同的是,C语言中定义的名称要区分大小写。
        例如,下面的两条语句定义了三个整型变量和一个字符变量。
    int a,b,c;
    char ch;

        和Pascal不同,变量的声明不一定要在整个代码前。你可以在程序中任意一个地方定义一个新的变量。定义的变量只能在当前函数(中的当前语句块)后面的代码中使用。也就是说,不同函数之间的变量不能混用,在某循环里定义的变量在循环外面是无效的。定义在函数外的变量将作为全局变量供后面的函数使用。

    定义常量
        为了告诉编译器某个变量不会改变,你可以在变量定义前加一个const。例如,下面的语句定义了一个常数:
    const int maxn=2000;


    基本数学运算
      作用   |  C  | Pascal
    ---------+-----+-----------
       加    | +   |  +
       减    | -   |  -
       乘    | *   |  *
       除    | /   |  / 或 div
      取余   | %   |  mod
        除法的结果是整数还是小数取决于参与运算的数是整数还是小数。10 / 4等于2,但写成 10.0 / 4 或 10 / 4.0 就得2.5了。


    关于字符类型
        C语言中的字符用一对单引号' '标注。例如,'A'表示字符A。
        无法打印或可能产生冲突的字符用反斜杠加一个字符来表示,这叫做转义符。常用转义符如下:
    \n  换行
    \t  Tab
    \a  响铃
    \"  双引号
    \'  单引号
    \?  问号
    \\  反斜杠
        因此,'\''表示一个单引号,虽然它看上去像是两个字符。

        字符类型可以依照ASCII码进行数学运算。例如,字符变量ch可能被赋值为'A'+2(这样ch就等于'C'),而'0'+'1'则等于'a'。


    C语言中的赋值
        和Pascal不一样,C语言的赋值只用一个等号,等号前没有冒号。
        声明变量时后面可以跟一个等号赋初始值。
        下面的语句都是合法的:
    int a=3, b=106, c=a+b, d;
    char ch = c - '0';
    d = a * b;


    类型转换与“名词动用”
        C语言中,不同类型的变量可以相互赋值,程序将自动转换类型(即使是数字与字符之间)。
        C语言中也存在“使动”用法(类似于Pascal中使用int64(a)扩展变量长度的用法)。假如a是整型,(double)a表示“实数版的a”;假如ch是一个字符,(int)ch就相当于Pascal中的ord(ch)。
        考虑下面的代码:
    int a;
    int b;
    char c;
    double d,e;

    a = 'z';
    b = 20.736;
    c = b + 28;
    d = a / b;
    e = (double) a / b;

        这段代码中,a最终被赋值为122,b得到的值是20,而c的值则为字符'0';d获得的值为6.0,而e的值是6.1 。


    标准输出
        输出使用printf函数。printf函数的使用方法如下:
    printf (字符串, 待输出表达式1, 待输出表达式2, ... , 待输出表达式n );

        C语言的字符串用一对双引号"  "注明,里面允许有转义符。printf将把字符串输出到屏幕上。字符串中可以有若干个标识,这些标识帮后面待输出的内容“占一个位置”。常用的标识格式为%[x][.y](c|d|f|e),其中x表示输出占的宽度,y表示保留位数;c,d,e,f四个字母表示输出类型,你需要选择一个。c表示输出字符,d(也可以用 i )表示输出整数,f表示输出小数,e用科学计数法表示小数。printf后面的参数依次“填入”这些标识。注意d和e,f不能混用,也就是说,你不能把一个小数输出成整数格式,或把整数输出成小数格式(除非事先转了类型)。
        特别地,%%表示输出一个百分号。

        观察下列代码片段
    printf ("Welcome to Matrix67.com \n");
    printf ( "4 + 5 = %d\nand 4 - 5 = %d\n\n", 4 + 5 , 4 - 5 );

    int a = 102;
    printf ( "2 * a = %.5d\n" , 2 * a );
    printf ( "2 * a = %f\n", (double) 2 * a );
    printf ( "2 * a = %8d\n"  , 2 * a );
    printf ( "2 * a = %8.5d\n", 2 * a );
    printf ( "a = \'%c\'\n\n", a );

    double b = 7;
    printf ( "a / b = %f\n", a / b );
    printf ( "a / b = %e\n", a / b );
    printf ( "a / b = %.9f\n", a / b );
    printf ( "a / b = %.3f\n", a / b );
    printf ( "a / b = %8.3f\n", a / b );
    printf ( "b / a = %.3f%%\n\n", b / a * 100 );

    char c = 'A';
    printf ( "c = %c\n", c );
    printf ( "c = %3c\n", c );
    printf ( "c = %d\n", c );
    printf ( "%c%c%c%c%c%c%d.com\n",c+12,c+32,c+51,c+49,c+40,c+55,a-35);


        程序输出的结果为:
    Welcome to Matrix67.com
    4 + 5 = 9
    and 4 - 5 = -1

    2 * a = 00204
    2 * a = 204.000000
    2 * a =      204
    2 * a =    00204
    a = 'f'

    a / b = 14.571429
    a / b = 1.457143e+001
    a / b = 14.571428571
    a / b = 14.571
    a / b =   14.571
    b / a = 6.863%

    c = A
    c =   A
    c = 65
    Matrix67.com



    函数的定义、返回和调用
        定义一个函数的格式如下:
    函数返回类型 函数名( 参数类型1 参数名1, 参数类型2 参数名2, ... , 参数类型n 参数名n )
    {
        函数内容
    }

        如果某个函数不返回任何数据(相当于Pascal中的“过程”),函数返回类型要写成void。如果不写返回类型,函数默认返回类型为int。
        如果某个函数不带任何参数,参数表一般留空(也可以用一个void代替)。
        为了强调某个参数在整个函数中始终不变,类型前可以标明const。

        函数的返回使用下面的语句:
    return 表达式;

        执行这条语句将立即终止该函数的运行。

        下面定义的一个函数可以返回三个数的平均值:
    double average (double a , double b , double c)
    {
      double sum=a+b+c;
      return sum/3;
    }


        C语言也支持函数的内联,方法是在函数返回类型前加inline。例如:
    inline double average (double a , double b , double c)
    {
      double sum=a+b+c;
      return sum/3;
    }


        函数的调用方法和Pascal一样。如果调用函数所带的参数类型和定义的不一样,程序会自动转换类型。下面的语句合法地调用了刚才定义的函数:
    num = average( 2, 6.5, 4.23 );

        有一点不同的是,当所调用的函数不带参数时仍然要写括号,例如:
    void writeMessage()
    {
       printf("Welcome to Matrix67.com");
    }

    void output()
    {
       writeMessage();
    }


        C语言同样支持递归调用。由于C语言也只能调用前面定义过的函数,因此C同样需要类似于向前引用的方法。具体方法是把需要提前引用的函数的第一行复制一份提到前面去。下面的两种做法都是正确的,其中第一种方法允许在output函数里调用后面的average,第二种则允许在这句话后面的所有函数中调用它。
    void output()
    {
       double average (double a , double b , double c);
       printf( "%f",average( 2, 6.5, 4.23 ) );
    }
    double average (double a , double b , double c)
    {
      double sum=a+b+c;
      return sum/3;
    }

    double average (double a , double b , double c);
    void output()
    {
       printf( "%f",average( 2, 6.5, 4.23 ) );
    }
    double average (double a , double b , double c)
    {
      double sum=a+b+c;
      return sum/3;
    }

        事实上,向前引用时参数名已经没有意义,因此参数名可以省略,直接写成这样:
    double average (double , double , double );


        C语言中也允许在函数中定义子函数(函数的嵌套)。标准的C语言不支持在函数中定义子函数(函数的嵌套),虽然某些编译器可能支持。


    一个完整的程序代码的构成
        代码前几行用于包含头文件,每行包含一个,格式如下:
    #include <头文件名>

        常用的头文件有stdlib.h, stdio.h, string.h, math.h等等,分别提供一些常用函数、输入输出函数、字符串函数和数学相关函数。注意我们之前用的printf函数是属于stdio.h里的,因此要使用该函数必须在代码最开头加入#include <stdio.h>。
        接下来是若干个函数。这些函数里必须有一个名为main的函数,它返回的值是一个int类型,代表程序的退出代码(0=正常退出)。程序会自动寻找这个函数作为主函数执行。

        下面的代码是一个完整的C程序代码,这是我们的第一个完整的程序代码:
    #include <stdio.h>

    double average (double a , double b , double c)
    {
      double sum=a+b+c;
      return sum/3;
    }

    int main()
    {
       double a=24;
       double b=102;
       double c=77;
       printf("Matrix%d.com原创\n转贴请注明出处", (int)average(a,b,c));

       return 0;
    }
  • 测试要发现程序深层次的bug

    2008-10-07 23:40:32

    是否会内存泄露、死锁,是否有不良的sql、是否满足性能需求和安全需求以及扩展性需求和容灾需求
  • 搜索引擎测试点

    2008-09-03 22:14:47

    包括关键字搜索.完全匹配.有效字符.无效字符等

    1,空内容点击搜索,看其有没有LINK
    2,输入过长查询数据,看其有没判断,报错
    3,输入各种符号,特别是空格,看其能否正确判断
    4,输入各种字符,譬如输入范围是0~9,A~Z的看输入中文是什么效果
    5,输入正确数据,看其的查询后数据的完整性
    6,注意在光标停留的地方输入信息时,光标和所输入的信息会否跳到别的地方
    7,在输入结束后直接按回车键,看系统处理如何,会否报错
    8,反复输入相同的数据(5次以上)看是否报错
    9,各国文字/字符的输入/粘贴能正确显示 退格键等操作显示正常 超过支持的最大长度有相应的提示 混合的多种语言也能正确显示
    10,显示&接收;能进行下一步处理
    11,其他的 包括能删除  能剪切等(我也不确定要不要包括 有点奇怪 显示语言是字符库支持的问题 而且如果是面向对象程序设计语言做的文本框 删除什么的功能也不用测了吧sdlkfj1 )
    12, 另外注意分析搜索结果.如:搜索结果的正确性,排序等..
  • 搜索引擎测试技术问题

    2008-09-03 22:09:48

    基于如上复杂的系统架构,尤其是4)模式,我们在测试当中也碰到相当多棘手的技术问题

    1)      海量数据是否都按预期的分词算法建立索引了呢?

    2)      机器分词的效果与手工分词相差有多大呢?

    3)      海量查询的返回结果是否多查了

    4)      海量查询的返回结果是否漏查了

    5)      海量查询的返回结果的加亮、标注如期加了?

    6)      海量查询的返回结果中相关性分数计算是否正确?

    7)      海量查询的返回结果积分计算是否正确了呢

    8)      海量查询的返回结果积分相同时,排序的先后依据唯一么?

    9)      加入即时更新模块后,每次查询结果都不同,新建的索引内容是否都反馈到查询结果里面了呢

    10)  海量数据时CACHE是否预期CACHEcache的内容?

    11)  海量数据时CACHE是否依照一定的过时算法令cache的内容失效呢?

    12)  应用程序在32LINUX 操作系统64位的LINUX的索引、查询结果是否依然一样?

    13)  应用程序在不同的OS 上索引、查询结果是否依然一样?

  • 搜索引擎测试

    2008-09-03 22:06:42

    任何软件测试无外呼上面的两个主要步骤。一定要了解被测试对象的需求,否则,测试无从谈起。

    1、找你们的开发人员,索要相关的技术文档,比如需求规格。如果没有此类文档,建议开发人员对测试人员做一个有针对性的培训,培训的内容集中在搜索引擎的设计思路上面。
    2、通过与开发人员的交流,测试人员整理出相应的需求项,然后,根据需求项有针对性的设计测试用例。

    1.搜索的全面性;
    2.搜索结果的准确性;
    3.搜索的响应时间;
    4.搜索结果的显示方式;
    5.搜索结果中可以使用的有效连接比例,也就是有时候可能搜索出来的连接在实际使用的时候连接不到;
    6.搜索内容的日期排名方面;



  • 上传文件测试点

    2008-08-25 23:04:29

    上传文件测试点
    1 上传文件名测试,检查不符合文件名规范
    2 上传文件名类型测试,检查不同文件类型是否支持如:.rar,.mp3,avi等
    3 上传文件大小测试,检查不同文件规格大小如:0字节文件, 1kb, 200kb, 2mb, 20mb,2g等
    4 上传文件容错性测试:如检查覆盖同文件操作;
    5 上传文件异常情况测试:如硬盘空间不足
    6  上传文件速率性能测试:检查上传不同的文件在不同的网络环境响应速度,及系统资源占用
    7 上传文件安全性测试:如上传常见木马
    8 上传文件易用性测试:检查上传文件操作是否让用户易于学习和理解使用等
    9 上传文件特性测试:如果支持如断点续传等一些特性
    10 上传文件后,检查是否与源文件一致,包含目录设置等
    11 上传文件,是否能打开等
  • 用例编写步骤

    2008-07-27 23:28:16

    1。接到任务不急于作而在于多思考,首先在纸上构造好业务流图

    2。业务流程图构造好,快速挑选出公用的测试用例

    3。构造测试用例,先写符合主路径的三种“PASS”、“ERROR”、“FAIL”

    4。精化测试用例,努力为ERROR多构造1-7种假设

    5。执行测试用例,增加FAIL的标准化失败的测试,但是对应减少PASS测试用例

    6。进一步精化测试用例,使“PASS”、“ERROR”、“FAIL”所占的比例分别为%20、%70、%10
271/212>
Open Toolbar