暑期课题:用java编写一个测试程序,可以测试c程序
我现在主要通过在c程序中插入足够的断言作为标准输出,传递信息给java程序
现在假设要测试一个快速排序,该怎么测试呢????

解决方案 »

  1.   

    重点应该是快速排序
    所以我在c程序里插入了断言输出语句,将每次对序列的划分情况传给java程序
    然后判断是否符合划分逻辑
    测试时,让java创建进程给c程序,并用iostream来进行数据的交换不过c程序的path得预先作为句柄写到代码里面
    能不能在程序运行时手动更改啊???
      

  2.   

    我想你并没有理解我的意思,测试的目的是为了验证一段需求的有效性
        “快速排序”中的排序是动作,完成一项任务;“快速”是手段,存在着多种不同的排序方法,而这里我们恰好期望使用“快速”排序方法来完成这项排序任务。
        那么,我们测试的目的是为了验证我们排序的正确性,还是验证我们确实是使用了“快速”排序法呢?对于不同的目的我们的测试框架也会是不同的,如果我们期望测试的是排序的正确性,那么我们不必要在排序中间进行验证,我们需要的是在排序结束之后,给出合理的期望结果,并进行相应的验证,以确定我们排序后的结果与期望结果完全符合。
        如果我们的目的是验证我们编写的代码是否是一种“快速”排序法,则情况又所不同。每一种排序方法虽然目的和结果相同,但内部实现机理不同,在排序过程中产生的行为也不尽相同,这时我们可以依据快速排序法在排序过程中的行为准则进行判断,判断的内容可能是,每一次排序过后(一次快速排序过程由多次排序组成)所产生出的结果是否与期望(exptected)的结果相同,如果不同可能是采取了不同的排序方法导致,也可能是排序方法本身就有问题。    至于具体实现,为什么不能自己写一个C程序的测试框架呢?这样就可以避免JAVA和C之间交互的麻烦,当然在C中,通过调用原生函数接口,也可以直接调用C的方法,或者可以将每次运行的结果集放入某一个存储空间,并使得JAVA读取及验证。    另外,关于关于是否是“白盒”或“黑盒”的问题,是依据你的测试用例来判断的,而不是你的测试框架,如果你的测试用例仅仅包含假设的外部输入脚本或假设的输出脚本,那么属于黑盒测试(功能测试)。如果你测试的用例设计针对内部编码,则属于白盒测试。    最后关于,“不过c程序的path得预先作为句柄写到代码里面能不能在程序运行时手动更改啊???”,不清楚什么意思?期望在程序运行期间手动设置C程序的PATH,那么做一段设置被测程序路径的功能不就OK了?当然希望也能进行测试,呵呵@.@||~