[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

原文地址:https://www.cnblogs.com/whyandinside/p/2832015.html