Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/108.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 单元测试策略,理想的代码覆盖率基线_Ios_Xcode_Swift_Unit Testing_Code Coverage - Fatal编程技术网

Ios 单元测试策略,理想的代码覆盖率基线

Ios 单元测试策略,理想的代码覆盖率基线,ios,xcode,swift,unit-testing,code-coverage,Ios,Xcode,Swift,Unit Testing,Code Coverage,从单元测试和代码覆盖率的角度来看,关于XCode7和Swift 2.0的真实体验的信息仍然不多 虽然有大量的教程和基本操作指南可用,但我想知道不同的iOS团队在实际尝试为其发布的iOS/Swift应用程序实现合理覆盖方面的经验和典型覆盖率统计是什么。我特别想知道: 1) 虽然代码覆盖率并不代表代码库的总体质量,但这是否被用作团队的一个基本指标?如果不是,那么评估代码库质量的其他可测量方法是什么 2) 对于更健壮的应用程序,您当前的代码覆盖率是多少?(仅供参考,我们目前的代码基数很难超过50%)

从单元测试和代码覆盖率的角度来看,关于XCode7和Swift 2.0的真实体验的信息仍然不多

虽然有大量的教程和基本操作指南可用,但我想知道不同的iOS团队在实际尝试为其发布的iOS/Swift应用程序实现合理覆盖方面的经验和典型覆盖率统计是什么。我特别想知道:

1) 虽然代码覆盖率并不代表代码库的总体质量,但这是否被用作团队的一个基本指标?如果不是,那么评估代码库质量的其他可测量方法是什么

2) 对于更健壮的应用程序,您当前的代码覆盖率是多少?(仅供参考,我们目前的代码基数很难超过50%)

3) 您如何测试以下各项:

  • 应用程序生命周期,AppDelegate方法
  • 任何与推送/本地通知、深度链接相关的代码
  • 防御性编程实践、各种思想(几乎不可复制)安全防护、异常处理等
  • 动画、过渡、自定义控件(CG)的渲染等
  • 可能包含任何附加逻辑的弹出窗口或警报
我知道上面的一些内容更像是实际UI测试的主题,但这让我想知道:

  • 从UTs的角度来看,是否有合理的方法对上述内容进行测试?我们是否应该尝试在整个代码库中使用UTs来满足任意最小的代码覆盖率百分比,还是应该在给定应用程序代码库的合理可实现覆盖率的基础上定义该百分比
  • 为了实现更高的覆盖率,使代码库更具灵活性是否合理?(我说的不是一个生命危在旦夕的医疗应用程序)
  • 除了UI测试之外,在测试上面提到的所有东西方面有什么好的实践吗

期待一场富有成果的讨论。

您确实提出了一个非常大而且很好的问题。尽管你的问题包括:

我想知道不同iOS团队的经验和典型覆盖率数据是什么

我认为这个问题与语言/操作系统无关。当然,有些语言和平台比其他语言和平台更易于单元测试。因此,一些单元测试的成本更高(与其他形式的自动化/编码测试相反)。我认为您正在寻找一个成本/收益等式,以最大限度地提高生产率。啊,软件开发过程的乐趣

要跳到结尾,为您提供快速的声音抓取答案:

您应该对所有您想要工作并且适合于单元测试的代码进行单元测试

那么现在为什么全部,为什么强调单元测试

什么是单元测试?

开发社区中的语言已经被破坏,所以请容忍我。单元测试只是自动化测试的一种类型。其他测试包括自动验收测试、应用程序测试、集成测试和组件测试。这些都测试不同的东西。它们有不同的目的

然而,当我听到单元测试时,我想到了两件事:

  • 什么是单元测试
  • 作为TDD(测试驱动开发)的一部分
  • TDD是关于在编写代码之前编写测试的。这是一个非常低级的编码实践/过程(XP-极限编程),因为您编写一个测试来编写一条语句,然后再编写另一个测试。非常多的是编码实践,而不是应用程序/需求实践,因为它是关于编写符合您意图的代码,而不是产品需求的代码(哦,天哪,我觉得失去了要点)

    编写代码,然后进行单元测试。。。以我的经验。。。有趣,短期的团队建设,但不富有成效。确实发现了一些缺陷,但不是很多。TDD导致更好的“健康”代码

    我的观点是,单元测试是:

  • 自动化/编码测试的子集
  • 是编码过程的一部分
  • 是关于代码运行状况(可维护性)
  • 注意是否证明您的应用程序有效(落点声音)
  • 为什么是所有人?

    如果您的团队一直在交付零缺陷软件(ZDFD是真实的,可以实现的..但这是一个平坦的地球讨论),而不进行单元测试,那么这是胡说八道,您不会在这里提出任何问题

    团队将单元测试作为其编码过程的一部分的唯一有效原因是提高生产力。如果所有团队成员都致力于团队生产力,那么唯一的问题就是确定哪些代码从单元测试中获益。这就是一切的背景

    我认为说明这一点的最简单方法是列出我不进行单元测试的类型:

    • 工厂-它们只实例化类型
    • 构建器/写入(IoC)-与工厂相同-无域逻辑
    • 第三方库-我们称之为第三方库。如果要测试这些,请使用集成/组件测试
    • 圈复杂度为1-每种类型的方法的CC为1。也就是说,没有条件。单元测试不会告诉你什么有用的东西,同行评议更有用
    实际答案

    我的团队期望在所有应该进行单元测试的新代码上都有100%的单元测试覆盖率。这是通过指定不符合单元测试标准的代码来实现的。所有代码都必须经过代码审查,并且属性必须特定于上面列出的“为什么”选项。-简单

    答案很长,也许不容易理解,也不是人们想听到的。但是,从长期的经验来看,我知道这是能够带来最佳利润的最佳答案

    发表评论

    我的回答是针对问题的单元测试方面。至于防御性编程和其他实践,TDD是一个需要mi的过程