Questions tagged «testing»

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

4
每个单元测试是否应该能够独立于其他测试运行?
假设您有针对类的两种方法的测试。第一种方法从另一层收集数据,并将其放入独立于运行时的某种存储中(例如SQL表),因此,此测试处理的所有数据都被硬编码到测试中。第二种方法负责从第一种方法保留的位置获取数据并以某种方式进行转换(计算,将某些零件移动到其他位置等)。 现在,第二种方法可以像第一种方法那样对输入进行硬编码,或者可以假设这两个测试将按顺序运行,并且可以从第一个测试中断的位置开始,获取第一个测试真正存储的数据。 如果您选择了第二个选项,那么您确实会很好地认为这两种方法可以很好地协同工作,但是,如果第一个测试失败了,则所有测试都将失败,从而失去了帮助更快地隔离错误的测试优势。 如果选择第一种方法,则每种方法都将被隔离和独立测试,但是您永远不会真正知道它们是否可以真正正常地协同工作。 这里哪个更好?是否存在某种替代方法,例如对每个隔离的方法都使用硬编码进行一次测试,然后将两个方法合而为一的更大的测试?

2
集成测试是否使用模拟?
我目前在软件测试课程中,对于我们的学期项目,我们必须对其执行多种类型的测试,例如单元测试和集成测试。教授说,对于集成测试,在我们的集成测试中使用了模拟和模拟库(例如EasyMock和Mockito)。不过我有点困惑。集成测试是在类,模块,服务等外部进行测试。如果要测试多个类和服务,为什么在集成测试中应适当使用模拟和存根?


11
为什么需要在实际的iPhone设备上测试我的iPhone应用程序
我为iPhone开发了一个应用程序,现在我希望在App Store上使用它。我的许多iOS极客朋友告诉我要在实际设备(例如iPhone)上对其进行测试。 因此,我想知道为什么尽管他们(苹果公司)提供了与我的设备几乎相同的“模拟器”,但为什么有必要在实际的iPhone设备上测试我的iPhone应用程序吗?
23 testing  iphone  ios 

11
是否可以编写不需要不断修改的软件?
我已经用许多不同的语言编写了许多软件,并且还“编写”了与使用Verilog和VHDL的FPGA一起使用的硬件。 我倾向于更喜欢编写硬件而不是编写软件,我认为主要原因之一是可以编写“完成”并且不需要修改的硬件:定义接口和功能,编写测试平台,实施硬件模块,然后使用模拟器测试其功能。然后,您可以依靠该硬件模块作为构建块来创建更大更好的产品:如果需要向该模块添加功能,则可以创建第二个模块并在其中添加功能。您永远不会丢掉原始模块,因为它可以正常工作并且仍然有用。 我对软件的主要不满之一是它永远不会“完成”。总有另一个功能要添加。通常,添加功能时会在以前正常工作的其他地方引入错误。只要不违反接口,在硬件中就不会发生这种情况。 明确地说,我并不是在建议使用某些功能列表来构建某个版本,而仅此而已:永远是这样:我赞成随着时间的推移进行迭代和发行多个版本以添加新功能。我只是不想在左侧戳代码而在右侧找到错误,而这似乎是在添加新功能之后发生的。 是否可以通过类似于“编写”硬件的方式来编写软件?有没有一种好的软件开发方法,可以始终取得向前的进展,并允许添加新功能而无需重写现有代码和引入新的错误?

14
自动化的用户界面测试解决了什么问题?
我们目前正在研究自动化的用户界面测试(我们目前正在进行自动化的单元和集成测试)。 我们已经研究了Selenium和Telerik,并且由于后者的记录器更加灵活,因此选择了后者作为首选工具-我们真的不希望测试人员编写太多的代码。 但是,我试图了解整体利益。人们的看法是什么,什么样的事情行之有效,什么行不通? 我们的系统正在不断开发中,我们会定期发布(基于Web的)平台的新版本。 到目前为止,我们可以看到的主要好处是进行回归测试,尤其是在我们平台的多个客户端部署之间。 真正在寻找别人的意见。我们“认为”这是对的,但是在已经很忙的日程中,我们正在寻找更多的见解。

12
如何知道何时停止测试?
我知道这是一个非常非常基本的问题。对于某些软件应用程序,一个应用程序有大量几乎无限数量的测试用例。测试所有这些测试用例是不切实际的。我们如何决定何时停止测试?(除了“钱用完时”)。

16
测试驱动开发是谁?
已锁定。该问题及其答案被锁定,因为该问题是题外话,但具有历史意义。它目前不接受新的答案或互动。 在过去的4.5年中,我一直在企业领域中工作,并且注意到,一般而言,企业对于测试优先的开发风格不是一个有利的环境。项目通常是固定成本,固定时间表和瀑布式的。任何单元测试(如果有的话)通常都在QA阶段开发后由另一个团队完成。 在为企业工作之前,我曾为许多中小型公司提供咨询服务,但没有一家公司愿意为测试优先的开发项目付费。他们通常希望开发立即开始,或者经过短暂的设计工作:即,类似于敏捷的东西,尽管有些客户希望将所有东西都映射为类似于瀑布的东西。 在哪种类型的商店,公司和客户中,测试驱动的开发最有效?哪些类型的项目倾向于有利于TDD?

3
质量检查团队应该在哪里进行Gitflow分支模型的测试
我们是一个庞大的团队(10-12个开发人员和4个质量保证团队),他们使用同一个git存储库处理多个项目。它是一个基于Spring Boot的后端Web服务。我们正在寻找一个好的git分支和部署策略。我们还有一个质量保证团队,可以确保我们的功能能够按预期运行(一定程度上没有错误)。 看了几篇文章后,我感到Gitflow模型对我们来说很好用。我的问题来了。 我们的质量检查团队应该在哪里测试我们的功能? 如果他们在功能分支上进行测试,他们将在这里提出错误,开发人员将对其进行修复,一旦通过质量检查,我们将合并以进行开发。然后质量检查人员将再次在开发分支中进行整数测试。 我们是否应该合并所有功能(在经过单元测试和开发人员的基本测试之后)以开发分支,然后从那里进行质量检查。修复和测试也将在开发中进行。 我很想知道哪种方法对其他人有效。
23 testing  git  branching  qa  gitflow 

6
持续集成科学软件
我不是软件工程师。我是地球科学领域的博士生。 大约两年前,我开始编写科学软件。我从未使用过持续集成(CI),主要是因为起初我不知道它的存在,而且我是唯一使用此软件的人。 现在,由于该软件的基础正在运行,因此其他人开始对它产生兴趣并希望为该软件做出贡献。计划是其他大学的其他人正在实施核心软件的添加。(我担心他们会引入错误)。此外,该软件变得非常复杂,并且变得越来越难以测试,我也计划继续进行开发。 由于这两个原因,我现在越来越多地考虑使用CI。因为我从未接受过软件工程师的培训,而且周围的人都没有听说过CI(我们是科学家,所以没有程序员),所以我很难开始我的项目。 我有几个问题想向我寻求建议: 首先简要说明该软件的工作方式: 该软件由一个包含所有必需设置的.xml文件控制。您只需通过将路径传递到.xml文件作为输入参数来启动软件,它就会运行并创建带有结果的几个文件。一次运行可能需要30秒钟。 这是一个科学软件。几乎所有的函数都有多个输入参数,它们的类型主要是非常复杂的类。我有多个具有大型目录的.txt文件,用于创建这些类的实例。 现在让我们来问我的问题: 单元测试,集成测试,端到端测试?:我的软件现在大约有30.000行代码,具有数百个功能和约80个类。开始为数百种已经实现的功能编写单元测试对我来说有点奇怪。因此,我考虑过简单地创建一些测试用例。准备10-20个不同的.xml文件,然后运行该软件。我猜这就是所谓的端到端测试?我经常读到您不应该这样做,但是如果您已经拥有可以运行的软件,那么也许可以开始吗?还是尝试将CI添加到已经运行的软件中只是愚蠢的想法。 如果功能参数难以创建,如何编写单元测试? 假设我有一个函数double fun(vector<Class_A> a, vector<Class_B>),通常,我需要首先读取多个文本文件来创建类型为Class_A和的对象Class_B。我考虑过要创建一些虚拟功能,例如Class_A create_dummy_object()不读取文本文件。我还考虑过实现某种序列化。(我不打算测试类对象的创建,因为它们仅依赖于多个文本文件) 如果结果变化很大,如何编写测试?我的软件利用了大型蒙特卡洛模拟并可以迭代地工作。通常,您需要进行约1000次迭代,并且每次迭代都基于Monte Carlo模拟创建约500-20.000个对象实例。如果一次迭代的一个结果只有一点点不同,则整个即将到来的迭代将完全不同。您如何处理这种情况?我认为这对端到端测试来说很重要,因为最终结果变化很大? 对于CI的其他建议,我们深表感谢。

7
在同一冲刺中进行编码和测试
如果直到冲刺结束才完成全部或大部分编码,如何在与编码相同的冲刺中处理测试?(我指的是冲刺中单个PBI的“汤对坚果”开发和测试。) 我在网上看到的大多数答案都涉及QA自动化,但这实际上是不可能的,因为您通常需要功能性UI来记录或创建自动化测试。我只有故事板随着我开发功能和发现新需求而不断发展。 就我而言,我正在开发一个新的桌面应用程序。桌面应用程序通常无法很好地进行自动化测试。我有一些自动化的单元测试,但它们不是QA专业人员执行的手动功能/集成测试。 因此,我现在的状态是明天的sprint结束,我仍然需要完成编码,而且我的质量检查人员还没有要测试的东西,也不知道如何测试如果不握住我的手给我的东西。 我确定我不是第一个遇到这种困境的人。 过去,我做过一个管道:在当前的sprint中,测试团队测试在上一个sprint中已实现的功能。在我目前的工作中,PM将这种方法称为“瀑布”,因此是不可接受的。

2
如何创建将修复测试视为优先事项的环境?
我是一家中型公司的软件工程师。我们在TeamCity上运行着一个相当强大的测试平台。它会在每次签入时进行单元测试,并每天运行单元测试/ BVT。 问题是-我们有很多损坏的单元测试。 通常,如果单元测试经常中断且无法维护,我会提出毫无意义的建议。无法查看更改是否引起了回归,从而消除了单元测试平台的大部分价值。 我想种下一种会养成良好习惯文化的种子-破坏测试时将其修复,将其视为有价值的东西,将测试的固定与其他工作一起放在优先位置。 我已经尝试过贿赂(烘焙食品!),只是简单地询问,并与团队负责人交谈。每个人都说这是一个好主意,但我认为这是唯一对此做任何事情的人。 鼓励他人修复测试并在冲刺中优先考虑修复的最佳方法是什么? 如果有比较主观的方式提出这个问题,我很乐意接受任何提示。

6
我应该如何测试我的测试代码?
大多数软件开发人员都同意的几件事之一是,除非您对其进行测试,否则您不应依赖于代码才能正常工作。如果您不对其进行测试,则可能包含隐藏的错误,这些错误只会导致您日后要做更多的工作。 我知道如何测试我的普通代码,但是我应该如何测试我的测试代码,以确保它们可以有效地发现并报告出现的错误?我个人非常愚蠢,无法编写本应通过的错误测试用例,因此一开始就破坏了我编写测试的目的。幸运的是,我及时发现并修复了错误,但是根据测试的口头禅,如果没有一套自己的测试来确保它能够正常工作,似乎没有一套完整的测试套件。 在我看来,执行此操作的最佳方法是确保错误代码的测试失败。*如果我花2分钟的时间交替向代码中添加错误并确保失败,那么我应该有一个可以接受的信心,即测试“工作”。这使我想到第二个问题:有什么好的方法可以引入bug以确保它们被测试用例捕获?我是否应该随机注释掉语句,if-else否定条件来确保运行错误的分支,并更改带有副作用的代码的执行顺序等,直到我满意我的测试将抓住大多数常见的错误?专业开发人员如何验证他们的测试确实按照他们的预期去做?他们只是假设测试有效,还是花时间测试它们?如果是这样,他们如何测试测试? 我并不是在建议人们花太多时间测试他们的测试,然后再测试他们的测试,以至于他们从来没有真正编写过真正的代码,但是我做的愚蠢的事情让我觉得我可以从中受益进行“元测试”,并且对实现此目标的最佳方法感到好奇。:D *我可以检查在测试“无错误”代码时测试是否通过,但是使用代码作为测试规范似乎倒退了……

10
如何处理无法复制的错误?
我有一个测试人员,在测试时会发生错误(到目前为止,还可以),但随后他经常立即报告该错误。然后,我们(开发人员)后来发现测试人员没有尝试重现该问题,并且(当被问到)找不到找到使该问题再次发生的方法。 现在这些仍然是错误,我不想忽略它们。但是如果没有复制步骤,我会陷入困境。有时会有堆栈跟踪(尽管通常它没有用,因为它是紧凑的框架,没有行号)。但是,如果有一个,我可以跟踪堆栈并破解代码并开始猜测,但这不会导致可测试的“修复”。 在这种情况下您会做什么?
22 bug  testing 

4
用自动化测试改造遗留代码的最佳实践
我将承担在相对较大和较旧的代码库中重新实现已经定义的接口(一组C ++头文件)的任务。在执行此操作之前,我希望具有尽可能完整的测试范围,以便我可以尽早,轻松地检测到重新实现错误。问题在于,已经存在的代码库没有被设计为易于测试的,具有(非常大的)类和函数,高度的耦合,具有(很多)副作用的函数等。 听说以前有类似任务的经验,以及如何将自动测试(单元,集成,回归等)改造为旧代码的一些好的具体建议,将是很高兴的。
22 testing  legacy 

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.