zoukankan      html  css  js  c++  java
  • [Inside] System Thinking

    这是一个大topic,一时半会是说不清楚,作为一个码工,有针对性的说说我对它的理解吧。作为一个SDET应该会经常被提到要system thinking。我的理解是Test是测试产品的,而且往往不是测试一个个独立的部件,更多需要测试独立部件,然后部件组合后的功能,也就是一个系统了,所以Test已经要有全局意识,把系统结构搞清楚,并有针对性地知道自己主要负责的组件在系统中的作用,系统如何影响该部件等问题搞清楚。

    其实这里,我认为System Thinking和Structured Thinking是类似的,在设计测试用例时不能random,需要结构化地进行、也就是从系统角度进行。而系统需要考虑哪些方面呢?下面是wikipedia上列举的System Thinking的是个准则:

    • 【对象及其属性的相互依赖性】Interdependence of objects and their attributes - independent elements can never constitute a system
    • 【整体观,emergent properties是很难分析出来的,更应该靠整体论的方法来发现】Holism - emergent properties not possible to detect by analysis should be possible to define by a holistic approach
    • 【寻求目标】Goal seeking - systemic interaction must result in some goal or final state
    • 【输入和输出】Inputs and Outputs - in a closed system inputs are determined once and constant; in an open system additional inputs are admitted from the environment
    • 【输入到输出的转换】Transformation of inputs into outputs - this is the process by which the goals are obtained
    • 【信息熵,系统中存在的无序和随机的数量】Entropy - the amount of disorder or randomness present in any system
    • 【规则,系统运作的规则】Regulation - a method of feedback is necessary for the system to operate predictably
    • 【层次,复杂的整体由小的子系统构成】Hierarchy - complex wholes are made up of smaller subsystems
    • 【差异性,特殊的单元执行专门的方法】Differentiation - specialized units perform specialized functions、
    • 【等效性,达成同样目标的另一种方法】Equifinality - alternative ways of attaining the same objectives (convergence)
    • 【多效性,从同一输入得到另一个目标的方法】Multifinality - attaining alternative objectives from the same inputs (divergence)

    这些都可以作为我们System Thinking的一些指导,当我们设计test cases时就可以按照System Thinking的方式进行:

    比如,当要判断一盆花是否是真花时,我们首先要知道,真花是一个系统、假花是一个系统,我们先搞清楚真花和假花的区别,可以从系统本身来看(生长和死亡)、系统与环境关系(呼吸)、系统与其他动植物关系(虫,太阳)等等,然后利用这些不同的区别来设计测试用例,这样得到的方法就会更全面一些了。

    比如:现在Win8中有个流媒体播放器,可以播放audio,video,请测试。

    播放器肯定是个大系统,我们目标是测试整个播放器,但不能一把抓,而应该用System Thinking的方式分析然后解决问题。整体而言,我们需要有功能测试、性能测试、安全测试、压力测试、国际化/本地化等测试,下面重点看功能测试,功能测试,首先要知道有哪些功能:1 播放AudioVideo、停止;2 拖动(前、后);3 streaming and cache假定有这么多功能,然后有针对性的设计用例,分别说清楚针对哪个功能而言的,这样设计,就更加结构化,当我们一起review时,也可以很容易看到功能上有没有遗漏、针对某个功能或者交互是否有测试用例的遗漏。

    设计test case时需要根据feature判定其risk和dependency,这是case 的重要来源

    例子1: test copy command in command prompt

    Features:

    1. file path support local path and UNC;

    • local to local;
    • local to UNC;
    • UNC to local, UNC;
    • local to local itself;
    • UNC to UNC itself;

    2. support directory?

    • one level sub-directories in the directory
    • more levels sub-dirs in the directory;
    • directory without slash ended;
    • directory with wrong slash ended;

    3. computing/storage requirement;

    • computing/storage requirement is not met when starting copy
    • computing/storage requirement is becoming not met after copy started;

    4. credential for UNC;

    • no permission to read;
    • no permisstion to write;
    • provide credential in the command;

    5. error messages for unsupported path, unsupported environment;

    • wrong slash in the path;
    • no network connection for UNC copy
    • network connection is down during the UNC Copy
    • power is done during the Copy;

    Performance

    Stress

    Security

  • 相关阅读:
    源代码的下载和编译
    搭建Android开发环境
    Git使用入门
    Android系统构架
    Android深度探索心得<9>
    Android深度探索心得<10>
    Android深度探索心得<8>
    android深度探索xinde < 7>
    android深度探索xinde < 5>
    android深度探索xinde < 6>
  • 原文地址:https://www.cnblogs.com/whyandinside/p/2832015.html
Copyright © 2011-2022 走看看