我想学习TDD在科学编程(量子化学)中线性代数(或基本与矩阵)的工作。然而,由于中间体是未知的,而且有时唯一知道的是最终结果,我不知道该怎么做。
你能告诉我在上面的例子中你会怎么做TDD吗?
for i,j = start1:end1, k,l = start2:end2
A[i,j] = B[i,k] * C[k,l] * D[l,j]
end其中A是在函数中计算的新矩阵。
其中B、C、D是预定义矩阵。
其中start1、start2、end1、end2是预定义的整数。
在通常的程序中,我有大约20个这样的块。所以我想我对新的A一无所知。
我遇到的大多数bug都是简单的输入错误,比如
B[k,i]而不是上面的。
如果最终结果是错误的,我能做的唯一的调试方案是将所有内容写两次,然后检查A和希望我没有做过两次相同的输入错误。
发布于 2018-10-31 19:58:49
你能告诉我在上面的例子中你会怎么做测试开发吗?
好消息是,您从根本上处理的是一个函数。
A = function(B,C,D,start1,end1,start2,end2)我看到有两种引入测试的一般方法
1)从简单的问题开始-一个接一个的矩阵,单位矩阵;每次你计算出答案应该是什么,并检查函数是否产生了正确的答案
2)从简单的验证开始-您可以从确保答案具有正确的行数和列数开始,确保其中一个输入加倍输出,依此类推。Nat Pryce对Diamond Kata的演示应该会让您对它的工作原理有所了解。
发布于 2018-11-10 22:00:47
我用来测试矩阵乘法例程的一种技术是使用只有一个1的矩阵,其他的都是零。设E(i,j)为矩阵
E(i,j)[k,l] = delta(i,k)*delta(j,l)(例如,在i,j处有1,在其他地方有零)一点代数表明
E(i,j)*E(i',j') = delta(j,i')*E(i,j')测试是检查乘法例程是否获得具有n×n矩阵的所有幂(n,4)元组i,j,i',j‘的写入应答。
发布于 2018-11-26 20:55:12
我的一个朋友向我展示了如何测试这些函数。
这是通过模拟矩阵来完成的。
你可以想象
B[i,k] 作为
function B(i,k):
return B[i,k] 现在,您可以通过创建一个跟踪输入的列表来测试它们。
这将提供以下函数。
function B(i,k):
list.append(i,k)
return B[i,k]然后,可以根据哪个索引更快来测试该列表。这取决于首先是列还是行,以及您如何定义循环,但您将得到如下内容:
1 1
1 2
1 3
2 1
2 2
2 3
3 1
3 2
3 3或
1 1
2 1
3 1
1 2
2 2
3 2
1 3
2 3
3 3现在,问题函数中的B[i,k]和B[k,i]将生成不同的列表,因此您可以检测错误,因此可以对它们进行测试。
https://stackoverflow.com/questions/53079296
复制相似问题