标签: correctness

关键系统中是否有任何软件保障?

是否有系统或是否有软件开发,并提供正确的证据来支持它?或者所有关键系统都是仅通过积极的代码审查和测试周期开发的?

algorithm correctness mission-critical

3
推荐指数
1
解决办法
409
查看次数

证明单元测试的正确性

我正在创建一个用于学习目的的图形框架.我正在使用TDD方法,因此我正在编写大量的单元测试.但是,我仍然在弄清楚如何证明我的单元测试的正确性

例如,我有这个类(不包括实现,我已经简化了)

public class SimpleGraph(){
 //Returns true on success
 public boolean addEdge(Vertex v1, Vertex v2) { ... }

 //Returns true on sucess
 public boolean addVertex(Vertex v1) { ... }
}
Run Code Online (Sandbox Code Playgroud)

我也创建了这个单元测试

@Test
public void SimpleGraph_addVertex_noSelfLoopsAllowed(){
 SimpleGraph g = new SimpleGraph();
 Vertex v1 = new Vertex('Vertex 1');
 actual = g.addVertex(v1);
 boolean expected = false;
 boolean actual = g.addEdge(v1,v1);
 Assert.assertEquals(expected,actual);
}
Run Code Online (Sandbox Code Playgroud)

好的,真棒它有效.这里只有一个关键,我已经证明这些函数只适用于这种情况.然而,在我的图论课程中,我所做的只是在数学上证明定理(归纳,矛盾等等).

所以我想知道有没有办法证明我的单元测试在数学上是正确的?那么这是一个很好的做法.因此,我们正在测试单元的正确性,而不是针对某个特定结果对其进行测试.

unit-testing correctness proof

3
推荐指数
1
解决办法
1928
查看次数

从一组N中随机选择n条记录

我需要n从一组N(where 0 < n < N)中随机选择记录.

一种可能的算法是:

遍历列表并为每个元素,使选择的概率= (number needed) / (number left)

因此,如果您有40个项目,则第一个项目有5/40可能被选中.

如果是,下一个有4/39机会,否则它有5/39机会.当你到达目的地时,你会得到5件物品,而且在此之前你通常会拥有所有物品.

假设一个好的伪随机数发生器,这个算法是否正确?


注意

stackoverflow上有很多这类问题(其中很多都被标记为C#中List <T>中选择N个随机元素的重复).

上面的算法经常被提出(例如Kyle Cronin的答案)并且总是受到质疑(例如,见 这里,这里,这里,这里 ......).

我可以对此事做最后的决定吗?

algorithm correctness random-sample

3
推荐指数
1
解决办法
1035
查看次数

随机数生成器:类级别还是方法级别?

使用随机数生成器时,这是使用它来获得新值的更大随机性的更好方法:

  1. 有一个方法每次都实例化一个新的RNG实例,然后返回一个值吗?

  2. 在类级别有一个RNG实例,它在构造函数中实例化一次,然后使用现有实例调用新的随机值吗?

问题在于可能存在许多对随机数的调用,通常在不相互连接的不同范围内.

这不是性能问题,因此每个调用可能实例化一个新实例的事实没有区别.这完全是关于返回值的随机性.

random correctness

2
推荐指数
1
解决办法
442
查看次数

如何在不使用本地安装的工件的情况下构建

有没有办法强制Maven使用远程工件而不是机器上安装的工件?因为我担心运行时错误而不是编译错误构建服务器无效选项.

PS我知道我可以删除或重命名.m2文件夹,但我敢打赌,有一些更聪明的方法可以做到这一点.也许一些插件或特殊命令参数?

java maven-2 correctness artifacts

2
推荐指数
1
解决办法
1870
查看次数

如何在第一时间编写正确的代码?

在第一次尝试完成某些编程任务时,我经常犯很多错误(逻辑错误,语法错误).我必须编写单元测试来检测这些错误.当我在接受采访时,这尤其成问题.在那种情况下,我处于压力之下,我无法使用编译器和单元测试来测试我的代码.

我的问题是,我怎样才能首先编写正确的代码?我知道这很难.是否有任何务实的方法来首次减少错误?

我被要求编写一个函数,它接收一个指向int数组的指针和数组的大小.用素数填充该数组.这根本不是一个难题.但是我第一次犯了很多错误,不断发现新的错误.由于这是一次电话采访,我被要求输入答案并发送邮件.

我的第一次尝试

    void prim(int * array, int size) 
{ bool isPrime = true; 
for (int i=0;i<size;i++) 
{  
for (int j = 2;j<i/2;j++)  
{    if (i%j==0){
        isPrime = ture;
        *array = i;
        array++;

      }  } } }
Run Code Online (Sandbox Code Playgroud)

在gmail中编写代码是一个非常糟糕的主意.我永远不会再这样做了.我知道程序需要两个for循环.但是代码中存在一些大问题

  1. 'i'不应该在第一个循环结束时增加.
  2. 如果i%j == 0,则isPrime应为false
  3. 当我们找到一个素数时,数组操作应该放在循环的末尾

我的第二次尝试,我添加了isPrime测试,修复了一些错误并重新提交.

    void prim(int * array, int size)
    {
    bool isPrime = true;

    for (int i=0;i<size;i++)
    {

     isPrime = true;
 for (int j = 2;j<i/2;j++)
 {
   if (i%j==0){
    isPrime = false;
  } …
Run Code Online (Sandbox Code Playgroud)

correctness

2
推荐指数
2
解决办法
1898
查看次数

这个Python语句的含义是什么?

更具体地说,我不确定彼此之后的"%"和"\"符号应该是什么意思:

return 'guitar { id: %d, relevant_properties: (%.02f, %.02f, %.02f), irrelevant_properties: (%.02f, %.02f, %.02f) }' % \
    (self.id, a, b, c, d, e, f)
Run Code Online (Sandbox Code Playgroud)

难道这return语句看作是一个行代码?因为我最初认为"\"是为了提高可读性和避免环绕而将那些看似过长的线分成两部分.

另外,我这里的列表反映了我的代码中的内容.表示'(self.id,a,b,c,d,e,f)'的部分确实比return语句的开头更加标签.

基本上,该陈述相当于:

return 'guitar { id: %d, relevant_properties: (%.02f, %.02f, %.02f), irrelevant_properties: (%.02f, %.02f, %.02f) }' % (self.id, a, b, c, d, e, f)
Run Code Online (Sandbox Code Playgroud)

在这一个没有"\"涉及....

python string formatting correctness line-endings

1
推荐指数
1
解决办法
4126
查看次数

我如何使用System.Net.ConnectStream?

我试图了解一些前任代码,他们帮助我们使用'var'来声明一切.

我有一个使用声明如下:

using (var postStream = request.GetRequestStream())
{
    postStream.Write(byteData, 0, byteData.Length);
}
Run Code Online (Sandbox Code Playgroud)

当我在这里放置断点时,postStream在Autos窗口中显示为System.Net.ConnectStream.而不是'var'我想使用'ConnectStream',但编译器不喜欢这样.

我错过了什么,为什么我不能这样写我的代码:

using (ConnectStream postStream = request.GetRequestStream())
{
    postStream.Write(byteData, 0, byteData.Length);
}
Run Code Online (Sandbox Code Playgroud)

我知道这是微不足道的,但我总是被告知不要使用"变种",除非你有特别的理由这样做(如使用LINQ打交道时).我错了吗?

c# correctness

1
推荐指数
1
解决办法
1万
查看次数

C++ 运算符重载、表达式中空格的规则

我想学习有关使用空格来编写正确的运算符重载的规则(如果有)。

我见过不同的形式:

T operator+(T t1, T t2)   /* etc. */
T operator+ (T t1, T t2)  /* etc. */
T operator +(T t1, T t2)  /* etc. */
T operator + (T t1, T t2) /* etc. */
Run Code Online (Sandbox Code Playgroud)

我说的是关键字、运算符字符和第一个括号之间的空格operator

哪一个是正确的?与其他相比,什么是首选?其中有些是错误的,还是有些在某些情况下是正确的,而在其他情况下是错误的(反之亦然)?

简而言之:空格在这里有什么特殊含义吗(在这个特定主题中(我不询问代码中一般使用空格的情况)?

如果是这样,何时以及为什么?如果不是,什么被认为是最佳实践?

c++ correctness spaces rules operator-overloading

1
推荐指数
1
解决办法
336
查看次数