完全测试程序是可能的吗?

2021-10-25 14:23发布

9条回答
夏虫语冰
2楼 · 2021-10-26 10:17

不是的。因为不能完全模拟程序的实际运行时的环境。

上来打杂的
3楼 · 2021-10-26 11:27

有些软件的功能非常简单,比如简单的数学运算,或者统计用户输入字符的数量;有些软件的功能非常复杂,比如操作系统,或者汽车的自动驾驶算法等等。

对于复杂的软件,因为它们极高的复杂度,我们很容易理解它们为什么很难“完美”,所以,强如微软,也会发生比尔·盖茨演示Windows 98时蓝屏的尴尬;强如特斯拉,也会发生自动驾驶状态的汽车径直撞向大货车的悲剧。

那么,对于特别简单的软件,我们是不是可以进行"彻底"的测试,保证它们是完美的呢?

这是不可能的!即使拥有无限的预算,我们也无法做到这一点。

如果把问题简化,限定用户最多只能输入10个字符,超过10个字符的情况就告知用户无法处理,这种情况下,我们能否进行"彻底"的测试?

这也是不可能的!

在用户输入超过10个字符的情况下,程序真的会告知用户无法处理吗?为了确认这一点,我们需要把所有超过10个字符的输入都覆盖到,确保程序会告知无法处理,而不是意外地返回一个错误的统计值。大于10的自然数仍然是无穷多的,我们还是无法把所有的情况都覆盖到。

如果我们把问题再度简化,只测试字符数量在10以内的"有效"输入呢?

世界上有许许多多的语言和文字,unicode编码可以涵盖世界上所有语言的字符,它包含的字符的数量级大概是一百万。粗略地估算下来,用户输入字符数量为1的情况,我们有100万个测试要验证;用户输入字符数量为10的情况,我们有100万的10次方个测试要验证,只要有一个测试没有被覆盖到,我们就不能打包票说在那种情况下程序可以正常工作,也就不敢打包票说程序是没有bug的。

就像发财“捷径”买彩票一样,每一组号码要买都是要钱的,买下的号码很可能都打了水票,但是你总觉得你没买的号码里可能有”惊喜”。

在现实世界中,绝大部分的软件程序比这个字符统计的程序要复杂得多,它们一定或多或少有bug没有被发现,或者有bug被发现了却没有被修复,它们肯定称不上完美,却仍然达到了较高的软件质量,这当然不是因为它们把测试做得非常彻底,而是因为放弃追求不切实际的"完美",在预算范围内采用了合适的测试策略,得到较高的投资回报率。

其中的一个策略,是关注核心功能。

我们在买新车的时候,会对车进行非常细心的检查,刹车灯不亮,雨刮器有异响,或者轮毂有轻微刮擦,都可能导致我们拒绝收车。

在买二手车的时候,情况就不一样了,因为我们会有充足的心理准备来接受不完美。面对一辆标价5万的二手轿车,我们在验车的时候一定会重点验证发动机、变速箱、车架、转向机;至于空调是不是能制冷,我们可能会关注,但是不会过多影响我们的决定;至于车门上的车漆是否有色差,我们根本就不会花时间去看!

其实,我们还是挑剔的,只是,因为预算有限,我们深知无法买到完美的车,所以我们会做妥协。软件测试的思路也是这样的。我们无法保证软件产品的"完美",在预算和资源有限的情况下,我们需要专注于软件的核心功能,尽量保证核心功能得到良好的测试。

以字符统计的程序为例,如果它的主要用户是中国用户,我们可以重点测试中文和英文字符,而不需要花精力去测试程序对于亚美尼亚语字符的表现,在非核心功能的测试成本比较高的情况下更应该如此,否则,我们花费了宝贵的人力和时间,只是收获了用户可能并不太在乎的完美度,就像是架起高射炮只是为了打蚊子,成本很高,收益很小,不值得。

合理的软件测试思路是把钱花在刀刃上,重点关注核心功能的测试,预算有限时应该如此,预算充足时同样应该如此。


IT学习助手 - qq:2676427015
4楼 · 2021-10-26 13:52

一、性质不同

1、软件测试:描述一种用来促进鉴定软件的正确性、完整性、安全性和质量的过程。

2、软件调试:泛指重现软件故障、定位故障根源并最终解决软件问题的过程。

二、目的不同

1、软件测试:鉴定、审核软件。

2、软件调试:软件调试的基本目标是定位软件中存在的设计错误(bug)。但除此之外,软件调试技术和工具还有很多其他用途,比如分析软件的工作原理、分析系统崩溃、辅助解决系统和硬件问题等。

三、特点不同

1、软件测试:对计算机软件进行测试前,需遵循软件测试原则,即不完全原则的遵守。

2、软件调试:重现故障;定位根源;探索和实现解决方案;验证方案。



py大白
5楼 · 2021-10-26 17:04

完全测试程序是可能的吗?
软件测试初学者可能认为拿到软件后需要进行完全测试,找到全部的软件缺陷,使软件“零缺陷”发布。实际上完全测试是不可能的。主要有以下一个原因:
-完全测试比较耗时,时间上不允许;
-完全测试通常意味着较多资源投入,这在现实中往往是行不通的;
-输入量太大,不能一一进行测试;
-输出结果太多,只能分类进行验证;
-软件实现途径太多;
-软件产品说明书没有客观标准,从不同的角度看,软件缺陷的标准不同;
因此测试的程度要根据实际情况确定

不可能,因为世界上没有完整的测试程序,最终还不是人来审核

summer
7楼 · 2021-10-27 14:12

还差点,测试程序也需要人来操作的。

回答: 2021-11-01 18:22

基本不可能有完美的程序的,很多都是需要加强的,1.0 2.0这样不断的跟进

珍惜生命
8楼 · 2021-10-27 14:55

不太可能,因为不能完全模拟程序的实际运行时的环境。

一个Ai
9楼 · 2021-10-29 16:09

不可能的,实际运行的环境太复杂

相关问题推荐

  • 回答 157

    虽然从事开发行业的女生越来越多,但女生的比例还是远比不上男生。软件测试的男女生比例则基本相当,软件测试要求细心、耐心,大部分女生也是比较适合学的。而且软件测试课程分为手工测试和自动化测试,手工测试分为功能测试、性能测试、接口测试。自动化测试...

  • 回答 121

    需要。很多人当初抱着测试不需要懂代码,才选择了这个行业,这个就要看对自己的职业定位了,是止步于月薪过万就可以了,还是往20k、30k去突破,如果这样的话,是肯定要会接口、会自动化,就必然要涉及到代码。如果真的看不懂代码,实际的测试后期的工作会出现...

  • 回答 91

    在我看来游戏开发挺难的,尤其像手游一类的还有网游,里面有很多的程序代码而且伤神又费力,不过也有女生在这方面做的很好的,如果你感兴趣,非常想学,可以试试

  • 回答 80

    软件测试专业现在很火热,很缺少人才,25岁学软件测试能学会,就业薪资也高,工作也相对轻松

  • 回答 11
    已采纳

    测试类型有:功能测试,性能测试,界面测试。功能测试在测试工作中占的比例最大,功能测试也叫黑盒测试。是把测试对象看作一个黑盒子。利用黑盒测试法进行动态测试时,需要测试软件产品的功能,不需测试软件产品的内部结构和处理过程。采用黑盒技术设计测试用...

  • 回答 15
    已采纳

    这个其实和接口测试的场景密不可分的,比如说:外部接口测试:    必须先接口测试通过了,才能执行功能测试子系统或者各个模块之间的联调测试:    必须各子系统后台代码完成,并提供接口才可以完成测试,一般来说都要求各子系统功能测试通过后再进行...

  • 回答 6
    已采纳

    这个是会因为公司的架构不同而不同的,并不是固定的,但是一般是会有专门的测试部门,或者叫质量保证部,也有可能是叫别的名字。

  • 回答 43
    已采纳

    移动端测试,包括App兼容性测dao试,7*24小时稳定性测试,功耗性能测试,UI测试,交互测试等,课程主要学习的内容有:1、功能测试主要包括计算机基础、软件测试核心理论、Linux、数据库,学习目标是掌握软件测试核心理论,结合Linux、数据库等可实现移动端、w...

  • 回答 1

    标题  1. 首先要做一个标题党(此标题党非彼标题党)。标题一定要清晰简洁易理解,不应该臃长  2. 尽量前缀要规范,例如模板: [Product][Version]_[Feature]_[Title],这样描述会很清晰,也方便查找  3. 缺陷的标题一定要描述在什么情况下发生了什么问...

  • 回答 1

    1、 缺陷报告可以记录缺陷2、可以对缺陷进行跟踪管理3、可以对缺陷报告进行分类 总结 统计

  • 回答 1

    1、缺陷编号(Defect ID),提交BUG的顺序。2、缺陷标题(summary),简明扼要的说明一下这个BUG。3、缺陷的发现者(DetectedBy) ,一般是自己。4、发现缺陷的日期(Detected on date),一般是当天。5、缺陷所属的模块(subject), 在测试哪个模块的时候发现的BUG...

  • 回答 1

    缺陷标题好的缺陷标题需要让相关人员一目了然,一般建议的格式是条件+失败。缺陷类型缺陷类型也是根据具体的项目而定的。但一般情况下分为功能、界面、建议。重现步骤重现步骤的编写规则可以参考测试用例中的操作步骤 ,一定要足够详细、说明清楚问题的操作顺...

  • 回答 1

    工具:NoSQLUnitJsTestDriverQTRunnerVenusFluintBuster.JSSQLUnitECUTQTestlibUnitilsgreatestDbUnitAbbotGoogleTest框架:JUnitMoqJSCaptureMockCUnitPyUnitCppUTestCppUnitzCUTcipra

  • 回答 1

    JunitTestNGGoogleTestpytestunittestJmockitJaCoCogcov、lcov、gcovrCoverage.pyEvoSuiteDiffblue Cover

  • 回答 1

      React Hooks测试库( Testing Library)是一个简单而完整的React Hooks测试工具。  React Hooks测试库让用户可以为React钩子创建简单的测试工具,自定义钩子的输入和检索输出,以处理在功能组件体内运行的情况。  使用React Hooks,用户不必为了测试而去担...

  • 回答 1

    1、单元测试注重代码逻辑,接口测试注重业务逻辑;2、单元测试的粒度最小,是测试最小独立的单元模块(不依赖其他模块);接口测试不是,会覆盖很多;3、单元测试是白盒测试,接口测试是黑盒测试;4、单元测试关注的是代码的实现和逻辑,测试范围较小,保证实...

没有解决我的问题,去提问