我以前有过一些单元测试的经验,我称之为(不是贬义的)经典的软件工程项目: MVC,带有用户GUI,数据库,中间层的业务逻辑等等。现在我正在用C#编写一个科学的计算库(是的,我知道C#太慢,使用C,不要重新发明轮子,所有这些,但是我们有很多人在我的C#教职员工中做科学计算,我们有点需要它)。就软件开发行业而言,这是一个很小的项目,因为我主要是自己编写的,有时还会得到几位同事的帮助。而且,我没有得到报酬,最重要的是,这是一个学术项目。我的意思是,我希望有一天它会有专业的质量,因为我计划开放源码,希望有足够的时间,它将成长为一个社区的开发人员。
不管怎么说,这个项目正在变得越来越大(大约18,000行代码,我认为这对于一个人的项目来说是很大的),而且它已经超出了我的控制范围。我正在使用git进行源代码管理,我认为我做得很好,但我的测试就像老派一样,我的意思是,编写完整的控制台应用程序来测试系统的很大一部分,主要是因为我不知道如何在这个场景中进行单元测试,尽管我觉得这是我应该做的。问题是,库中包含的大多数算法,例如图算法、分类器、数值求解器、随机分布等等。我只是不知道如何为每种算法指定微小的测试用例,而且由于其中许多算法都是随机的,所以我不知道如何验证正确性。例如,在分类方面,有一些度量标准,如精确性和召回性,但是这些度量更适合于比较两种算法,而不是用于判断单个算法。那么,我如何在这里定义正确性呢?
最后,还存在性能问题。我知道这是一组完全不同的测试,但性能是科学工具的重要特性之一,而不是用户满意度或其他软件工程度量标准。
我最大的问题之一是数据结构。我对kd树的唯一测试是压力测试:插入大量随机向量,然后执行大量随机查询,并与简单的线性搜索进行比较。表演也是一样。对于数值优化器,我有一个基准函数,我可以测试,但是,这是一个压力测试。我不认为这些测试可以归类为单元测试,最重要的是,持续运行,因为大多数测试都相当繁重。但是我也认为这些测试需要完成,我不能只插入两个元素,弹出根,是的,它适用于0-1-n的情况。
那么,如果有的话,这种软件的(单元)测试方法是什么?以及如何围绕代码构建-提交-集成周期组织单元测试和重测试?
发布于 2013-02-26 14:07:30
我想说的是,科学计算实际上非常适合单元测试。您有明确的输入和输出,明确定义的预置和后置条件,很可能不会根据某些设计师的想法每隔一周改变一次,也没有难以测试的UI要求。
您可以列出一些可能造成麻烦的元素;下面是如何处理它们的方法:
https://softwareengineering.stackexchange.com/questions/188442
复制相似问题