Perl:测试的定义是什么?

Perl:测试的定义是什么?,perl,testing,Perl,Testing,我有点不好意思问这个问题,但我很好奇。我最近写了一个脚本(没有在模块中组织代码),它读取存储的日志文件并将信息保存到数据库中 例如,我写了这样的东西(通过Richard Huxton): 等等等等 但有人指出,我写的不是测试。这是一个确认脚本。一个好的测试包括编写带有模块的代码,编写一个脚本来启动模块中的方法,并为模块编写一个测试 这让我想到了在软件工程中最广泛使用的测试的定义是什么。也许你们中一些已经测试过Perl核心函数的人可以帮我一把。脚本(未模块化)无法正确测试 关于不涉及验证与确认等,

我有点不好意思问这个问题,但我很好奇。我最近写了一个脚本(没有在模块中组织代码),它读取存储的日志文件并将信息保存到数据库中

例如,我写了这样的东西(通过Richard Huxton):

等等等等

但有人指出,我写的不是测试。这是一个确认脚本。一个好的测试包括编写带有模块的代码,编写一个脚本来启动模块中的方法,并为模块编写一个测试

这让我想到了在软件工程中最广泛使用的测试的定义是什么。也许你们中一些已经测试过Perl核心函数的人可以帮我一把。脚本(未模块化)无法正确测试


关于

不涉及验证与确认等,测试是验证其他行为、行为符合要求以及某些不良行为不会发生的任何活动。测试的范围可以是有限的(仅验证少数期望的行为),也可以是全面的(验证大多数或所有必需的或期望的行为),可能需要大量的步骤或组件来实现。在我看来,在您的上下文中,“确认”一词是“有限范围测试”的另一种说法。当然,它不能完全验证您的测试的行为,但是它做了一些事情。直接回答眼前的问题:我认为将您所做的称为“确认”只是一个语义问题。

一个重要的区别是:如果有人编辑(错误修复或新功能)您的“script.pl”文件,在当前状态下运行“script.t”文件是否会提供有关新“script.pl”状态的有用信息?在这种情况下,您必须
包含
使用.pl文件,而不是选择性地复制/粘贴摘录


在最好的情况下,您可以模块化地设计软件并计划测试。如果你想在事后测试一个单片脚本,我想你可以编写一个测试脚本,在退出()之后包含你的主程序,并且至少有子例程来测试…

如果你将程序设置为modulino,你可以像模块一样测试它。我在各地都写过这方面的文章,但最著名的是在。你现在可以,因为我正在公开制作第二版。:)

我会告诉我的同龄人,如果他们继续问我的问题,我会说我正在引用布莱恩·d·福伊的话。正如我们从您的书中了解到的:)一个(好的)测试可以为一些利益相关者提供有价值的信息。完全不同的问题是如何为perl脚本编写单元测试。:-)
while (<$infile>) {
    if (/item_id:(\d+)\s*,\s*sold/) {
        my $item_id = $1;
        $item_id_sold_times{$item_id}++;
    }
}
my @matched_items_ids = keys %item_id_sold_times;
my $owner_ids =
  Store::Model::Map::ItemOwnerMap->fetch_by_keys( \@matched_item_ids )
  ->entry();
for my $owner_id (@$owner_ids) {
    $item_id_owner_map{$owner_id}++;
}
is( $item_id_sold_times{1}, 1, "Number of sold items of item 1" );
is( $item_id_owner_map{3},  8, "Number of sold items for owner 3" );