这是一个大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
【推荐】还在用 ECharts 开发大屏?试试这款永久免费的开源 BI 工具!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步