Questions tagged «testing»

根据软件系统的预期行为来验证该软件系统的行为。

11
发布用于系统测试的软件时,在不添加新功能的情况下修复错误是否正确?
这个问题是给有经验的测试人员或测试主管的。这是来自软件项目的场景: 假设开发团队已完成10个功能的第一次迭代,并将其发布到系统测试中。测试团队为这10个功能创建了测试用例,并估计需要5天的测试时间。开发团队当然不能闲置5天,他们开始为下一次迭代创建10个新功能。在这段时间内,测试团队发现了缺陷并提出了一些错误。这些bug的优先级很高,其中一些必须在下一次迭代之前修复。问题是,在修复所有这些错误之前,他们不会接受具有任何新功能或对现有功能进行更改的新版本。测试团队说,如果我们还引入了新功能以及错误修复,这就是我们如何保证测试的稳定版本。他们也不能在每次迭代中对所有测试用例进行回归测试。 这意味着开发团队必须创建一个代码分支专门用于错误修复,并创建另一个分支以继续开发。特别是在重构和体系结构更改方面,存在更多的合并开销。 如果这是通用的测试原理,您是否可以同意。测试团队的关注是否有效?您在项目中实践中遇到过此问题吗?

5
是否可以以编程方式评估任意代码的安全性?
最近我一直在考虑安全代码。线程安全的。内存安全。不会在带有段故障保险柜的情况下爆炸。但是为了清楚起见,让我们使用Rust的安全模型作为我们的定义。 通常,确保安全性是网络的一个大问题,因为正如Rust的需求所证明unsafe,存在一些非常合理的编程思想(例如并发性),如果不使用关键字就无法在Rust中实现unsafe。尽管并发可以由具有锁,互斥,渠道和内存隔离或者你有什么绝对安全的,这需要工作以外的铁锈的安全模式unsafe,然后手动确保编译器,“是的,我知道我在做什么看起来不安全,但是我已经从数学上证明了它是绝对安全的。” 但这通常归结为手动为这些事物建模并通过定理证明者证明它们是安全的。从计算机科学的角度(可能)和实用性的角度(是否要占用宇宙的生命),可以想象一个程序以任意语言使用任意代码并评估它是否是“防锈”? 注意事项: 一个简单的提示就是指出程序可能正在停止,因此停止问题使我们无法正常工作。假设提供给阅读器的任何程序都可以停止 虽然“以任意语言编写任意代码”是目标,但我当然知道,这取决于程序对所选语言的熟悉程度,我们将以此为前提

7
对于非关键任务而言,端到端和集成测试值得吗?
众所周知,端到端和集成测试成本很高。当然,如果我们开发应用程序,如果出现问题,人们可能会因此丧命,这是值得的投资。但是,在错误不是世界末日的应用程序中,完全跳过E2E测试和集成测试并在出现问题时制定备份计划会不会更便宜?像手动测试用户故事+单元测试+使用静态类型的语言是否足够? 例如,如果某个网上商店丢失了订单,他们可以改为免费发送该商品+道歉。最终用户可能会更开心,这样公司总体上可以节省金钱。 我想我的问题是,总体而言,集成测试和E2E测试的成本是多少?节省多少钱?有没有办法对此进行风险/成本计算?
9 testing  qa  pricing  risk 

4
重构-只要所有测试都通过,简单地重写代码是否合适?
我最近看了RailsConf 2014的“ All Little Little”。在这次演讲中,Sandi Metz重构了一个包含大型嵌套if语句的函数: def tick if @name != 'Aged Brie' && @name != 'Backstage passes to a TAFKAL80ETC concert' if @quality > 0 if @name != 'Sulfuras, Hand of Ragnaros' @quality -= 1 end end else ... end ... end 第一步是将函数分解为几个较小的函数: def tick case name when 'Aged …

1
如何管理项目中的非单元测试?
我在我的项目中亲自调用tests了一些不是单元测试的代码。它们旨在运行,并且结果必须由人工评估。我这样做是因为我正在制造物理引擎,并且在开发过程中,我需要查看自己在做什么。所以我simulation在测试模块中做了一个包装。从技术上讲,这是单元测试,因为模拟使用的是单元测试库,但我并不是要像实际的单元测试一样运行它们。 我想做的是将那些特殊测试与单元测试区分开来,因为我想轻松地运行所有单元测试。我认为这有点像功能测试。您是否遇到过必须为功能测试准备应用程序的情况?功能测试准备(基本上是我的模拟测试)应该放在项目中的什么位置,以及如何将它们与单元测试区分开来? 我在Java中,因此我可以将所有方法签名从更改为@Test public void myNamedTest(),public static void main(String[] args)但是使用仿真对我来说既费力又不实用。 我junit在一个gradle项目中使用。gradle欢迎使用创建特殊测试文件夹的任何解决方案。

6
我们应该开始进行敏捷测试的哪个阶段(SCRUM)?
我的一些背景知识-在敏捷环境中,我使用SCRUM(1-2周冲刺)是手动测试人员将近2年。因此,我想在使用Selenium WebDriver(带有Java)的工作中引入自动化测试。 我的问题是在什么时候应该手动测试功能以及什么时候应该转换它们以进行自动化测试? 我一直在阅读并获得不同的方法,例如: 当开始新的Sprint时,将用户故事转换为上一个Sprint的自动化脚本,或者; 在相同的Sprint中转换用户故事。 任何建议将不胜感激。先感谢您。

3
有时私有功能只是功能的内部单元,尚待提取。那么为什么不测试它们呢?
有时,模块或类的私有函数仅仅是功能的内部单元,尚待提取,可能值得对其进行测试。那么为什么不测试它们呢?如果提取它们,我们将在稍后为它们编写测试。那么,当它们仍属于同一文件时,为什么不立即编写测试呢? 展示: 首先,我写道module_a。现在,我要为此编写测试。我想测试“私有”功能_private_func。我不明白为什么我不为它编写测试,如果以后我仍然可以将其重构为它自己的内部模块,然后为它编写测试。 假设我有一个具有以下功能的模块(它也可以是一个类): def public_func(a): b = _do_stuff(a) return _do_more_stuff(b) _do_stuff并且_do_more_stuff是模块的“私有”功能。 我理解我们只应该测试公共接口,而不是实现细节的想法。但是,这是事情: _do_stuff并_do_more_stuff包含该模块的大部分功能。它们中的每个都可以是不同“内部”模块的公共功能。但是它们尚未进化,并且足够大以至于可以提取为单独的文件。 因此,测试这些功能是正确的,因为它们是功能的重要单元。如果它们作为公共功能位于不同的模块中,我们将对其进行测试。那么,为什么还没有(或曾经)将它们提取到另一个文件时不对其进行测试呢?
9 python  testing 

2
我可以在单元测试中检查注释的存在吗?
我有一个由抽象类及其N个扩展组成的Java类层次结构。在抽象类中,我有一个使用@Remove注释进行注释的方法。尽管删除该批注不会导致任何异常,但不会很快失败,但是我们可能会遇到内存异常,因此,我想确保如果此批注在某些重构中消失,我们会尽快注意到。 我正在尝试创建GUTS(好的单元测试),因此我认为我可以在测试中记录该“技术要求”,并附带说明其的测试用例。 但这不是功能,它是实现的详细信息,并且没有与方法的行为链接(该方法可以为空,但是必须存在并且必须进行注释)。 是否可以为此创建测试,还是有其他方法可以检查此批注的存在?

3
我应该在哪里存储测试数据?
我有一些较小的单元测试,它们使用真实数据集中的小片段。由于多种原因,我还想针对完整的数据集测试我的程序。唯一的问题是单个真实数据集约为5GB。我还没有找到关于Git存储库可以存储的任何硬数字,但这似乎太多了。 根据该程序员的帖子,我应该将测试项目所需的所有数据保留在存储库中。 我的团队采用的解决方案是该项目具有一个文件,该文件包含指向包含我们的测试数据的网络连接文件系统的路径。该文件被Git忽略。 我觉得这是一个不完善的解决方案,原因有两个。当NAS无法正常工作,运行缓慢或出现故障时,我们将无法进行全面测试。第二个原因是,当某人第一次克隆存储库时,单元测试失败,因此他们必须弄清楚如何使用特定名称挂载事物以及用于构建测试路径文件的语法。 所以我的问题有两个。多少数据就是太多数据无法存储在修订控制中? 什么是处理大量测试数据的更好方法?
9 testing 

2
对有状态的框架(例如Phaser)进行单元测试?
TL; DR在确定有状态的框架中工作时,我需要帮助您确定简化自动化单元测试的技术。 背景: 我目前正在用TypeScript和Phaser框架编写游戏。Phaser将自己描述为一个HTML5游戏框架,该框架试图尽可能少地限制代码的结构。这需要进行一些权衡,即存在一个上帝对象的Phaser.Game,它可以让您访问所有内容:缓存,物理,游戏状态等。 这种状态性使得很难测试很多功能,例如我的Tilemap。让我们来看一个例子: 在这里,我正在测试我的瓷砖图层是否正确,并且可以在我的Tilemap中识别墙壁和生物: export class TilemapTest extends tsUnit.TestClass { constructor() { super(); this.map = this.mapLoader.load("maze", this.manifest, this.mazeMapDefinition); this.parameterizeUnitTest(this.isWall, [ [{ x: 0, y: 0 }, true], [{ x: 1, y: 1 }, false], [{ x: 1, y: 0 }, true], [{ x: 0, y: 1 }, true], …

1
测试单元与集成之间的差距:小型,组件,单元集成测试中的集成
在过去的几周中,我一直在研究和研究如何填补我们的测试方法中的空白。简而言之,单元测试太小,而传统的集成测试太大。 经常出现的情况是A,B两者都使用component C。但是A,B对的要求略有不同,并且对做出略有不同的假设C。如果我是A如何以及在哪里测试我的假设的开发人员C? 显然,A带有模拟假设的单元测试C可以很好地进行A隔离测试,但是它不能测试假设本身。 另一种可能性是为添加单元测试C。但是,这不是理想的,因为A在开发过程中,C根据不断变化的假设更改测试A将非常笨拙。确实,A开发人员甚至可能没有足够的权限访问C(例如,外部库)的单元测试。 用一个更具体的例子来说明这一点:假设这是一个节点应用程序。 A,并B依赖于C读取文件(以及其他内容)并将文件内容存储在传递给的对象中C。最初,所有C处理的文件都很小,可以同步读取而不会产生明显的阻塞。但是,的开发人员B意识到他的文件越来越大,需要切换C到异步读取。这会导致中出现零星的同步错误A,该错误仍假定C是正在同步读取文件。 众所周知,这种错误很难从完整的集成测试中找到,并且根本不会在集成测试中发现。它也不受As单元测试的影响,因为As的假设是模拟的。但是,可以通过“ just” A和“ C。”行使的“迷你”集成测试轻松抓住它。 我只找到了关于这种测试的一些参考。小型集成,组件集成测试,单元集成测试。它还与BDD测试的方向有关,而不是正式的TDD单元测试。 如何填补这个测试空白?具体来说-我应该在哪里进行此类测试?如何嘲笑的投入A,并C为“迷你型”集成测试?在分离这些测试和单元测试之间的测试关注点上应该付出多少努力?还是有更好的方法来填补测试空白?

5
没有“专用”测试人员角色的开发团队的生存能力
已关闭。这个问题是基于观点的。它当前不接受答案。 想改善这个问题吗?更新问题,以便通过编辑此帖子以事实和引用的形式回答。 6年前关闭。 最近我一直在思考如何建立精益开发团队。最终,我想与少数志同道合的人一起开设自己的小软件商店。目标不是致富,而是拥有一个健康的工作环境。 到目前为止,我将精益团队定义为: 小; 自组织; 所有成员都必须牢记质量保证; 成员必须能够执行多个角色 最后一点是我有点担心,因为随着口头禅的发展…… 开发人员会成为糟糕的测试人员。 虽然我知道开发人员通常与他们的代码或同事的代码“过于接近”,无法对质量进行更高级别的评估,但我并不认为他们实际上是糟糕的测试人员。相反,我认为优秀的开发人员的素质与优秀的测试人员的素质有很大的重叠。 假设这是正确的,我一直在思考解决开发人员/测试人员问题的不同方法,我相信我已经提出了一个可行的模型。 我的模型要求: 一个带有2个以上项目的小型软件公司 开发和交付的敏捷(迭代)方法 每个项目1个团队 所有团队成员均为软件开发人员 他们的工作描述将清楚地说明开发,质量保证,测试和交付为职责 如果满足所有这些先决条件,那么可以按以下方式组织项目(此示例将引用两个项目A和B): 每个团队成员将在开发人员角色和测试人员角色之间交替 如果团队成员是项目A的开发人员,那么他们将是项目B的测试人员 会员将在时间上只有1个项目上工作,因此预计将充当无论是一个开发或测试员。 甲角色周期由3次迭代作为开发和2次迭代作为测试仪(再次,在两个不同的项目) 项目团队将始终具有3个开发人员和2个测试人员。 成员角色周期应相差1次迭代。 这样可以最大程度地减少团队变更的突然性。对于每个迭代,2个Devs和1个Tester将与上一个迭代相同。 鉴于以上所述,我看到以下优点和缺点: 优点 在整个公司范围内分配项目知识。 确保团队成员没有测试他们帮助编写的代码。 角色周期异相意味着没有项目拥有100%的成员切换。 交替角色打破了无聊项目的单调性。 缺点 两个项目的迭代紧密耦合。如果一个项目要在中途取消迭代并重新开始,则这两个项目将不同步。这将使角色周期难以管理。 聘请开发人员的铰链也开始充当测试人员的角色。 与朋友和同事讨论这种方法时,我收到了好坏参半的评价。有些人认为很少有开发人员会愿意像这样的角色,而另一些人则告诉我,他们个人愿意尝试。 所以我的问题是: 这样的模型可以在实践中起作用吗?如果没有,是否可以将其调整为可行的模型? 注意: 为了简洁起见,我仅关注Dev和Tester角色。如果需要,我将继续介绍其他角色。

1
关系代数/演算证明可以用于测试/验证SQL吗?
使用证明形式的关系代数和/或关系演算来测试/验证SQL语句,函数和存储过程的正确性,是否可行甚至可能? 在我看来,至少应该有这种可能,但是我不知道是否缺少细节,使证明与代码之间的1:1映射不正确。 你们有没有尝试过这样的方法?奏效了吗?您的经历如何?

5
解决哪些错误将带来最大的成本收益[关闭]
关闭。这个问题是题外话。它当前不接受答案。 想改善这个问题吗? 更新问题,使它成为软件工程堆栈交换的主题。 4年前关闭。 我想根据解决的难易程度以及它将给我带来多少好处来对错误进行分类。例如,如果有一个错误需要一个小时(双文件关闭等)来解决,而另一个错误则需要一天(分段错误)。但是,如果解决第一个错误不是很重要,那么我可能会研究第二个错误。 是否有任何研究论文根据成本效益或类似指标对错误进行分类? 假设可以根据漏洞特征(例如安全漏洞,内存错误,逻辑错误等)对漏洞进行分类。在另一个维度上,可能会存在诸如难度(容易,中等,困难)之类的参数。我应该寻找其他尺寸吗?为简化起见,我可以假设两件事: 团队中的每个程序员都具有解决任何错误的能力 没有截止日期

7
测试时间长时如何保持行李箱稳定?
我们提供三套测试套件: 一个“小型”套件,只需几个小时即可运行 耗时数小时的“中型”套件,通常每晚(每晚) 一个“大型”套件需要一周以上的时间才能运行 我们也有很多较短的测试套件,但在这里我不关注它们。 当前的方法是在每次提交到干线之前运行小型套件。然后,中型套件每天晚上运行,如果早晨发现它失败了,我们将尝试找出应归咎于昨天提交中的哪个,回滚该提交,然后重试测试。对于大型套房,只执行每周一次而不是每晚一次的类似过程。 不幸的是,中型套件确实经常失败。这意味着后备箱通常是不稳定的,当您要进行修改和测试时,这非常烦人。这很烦人,因为当我从后备箱中退房时,我无法确定它是否稳定,并且如果测试失败,我也无法确定它是否是我的错。 我的问题是,是否存在一些已知的方法来处理此类情况,以使行李箱始终处于最佳状态?例如:“提交到一个特殊的预提交分支,该分支将在每夜经过时定期更新中继”。 它是像SVN这样的集中式源代码控制系统还是像git这样的分布式源代码控制系统有关系吗? 顺便说一下,我是一名初级开发人员,但更改功能的能力有限,我只是想了解是否有办法解决我遇到的这种痛苦。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.