首先来看一件事情的几个关键要素: 时间,空间(地点),人物(主体),事件。
软件也逃脱不了自然法则:
主体:程序,是人类逻辑思维的物化,表现形式为一系列的指令代码。
时间:运行的时间。运行的速度。
空间:即资源。 包括软件和硬件。 如操作系统,数据库, cpu,内存等。
事件:软件运行。
广义的中间件包括: os, 应用服务器,数据库等。
大家开始从经济学的角度来考虑软件产品。软件功能和性能的区别的实质是,软件功能焦点在于软件“做什么”,关注软件物质“主体”发生的“事件”;而软件性能则关注于软件物质“做的如何”,这是综合“空间”和“时间”考虑的方案(资源和速度),表现为软件对空间和时间的敏感度。
软件发展初级阶段,又要马儿跑,又要马儿少吃草。 跑和时间有关,草和空间有关。 马儿跑即处理时间短,响应快。少吃草就是少占用资源,如内存。 再后来,不仅要跑,还要能快能慢。即软件的伸缩性; 路遥知马力,即软件稳定性。细说有以下几点:
- 计算性能--马儿要能跑,最好日行千里夜行八百
- 资源的利用和回收--就是少吃草。
- 启动时间--这是马儿的加速度问题。
- 伸缩性--马儿能快能慢
- 稳定性--路遥知马力
衡量软件性能的常见指标有:
- 响应时间
- 吞吐量
- 资源使用率
- 点击数
- 并发用户数
满足用户性能需求的几种方案:
- 消除软件对空间和时间不必要的浪费
- 以空间换时间
- 以时间换空间
如何考虑: 第一,软件系统设计的架构及技术平台;第二,中间件的设置和优化;第三硬件的配置。
常见的性能测试方法有以下几种:
- 负载测试
- 压力测试--压力测试和负载测试不同的是,压力测试的预期结果就是系统出现问题,而我们要考察的是系统处理问题的方式。考察极端条件下的表现,可以是超负荷的交易量和并发用户数。
- 并发测试
- 基准测试
- 稳定性测试
- 可恢复性测试。
下面看一个常用测试过程模型:
GAME(A)模型:
- G goal, 目标
- A analysis 分析
- M metrics,度量
- E execution, 执行
- (A) adjust,调整。
这个模型有两个优势:第一,灵活,每个过程都有自己的关注点。第二,通用,不依赖于具体工具。
系统运行良好的时候恰恰也是各项资源达到了一个平衡体,任何一项资源的过度使用都会造成平衡体系破坏,从而造成系统负载极高或者响应迟缓。比如cpu过度使用会造成大量进程等待cpu资源,系统响应变慢,等待会造成进程数增加,进程增加又会造成内存使用增加,内存耗尽又会造成虚拟内存使用,使用虚拟内存又会造成磁盘io增加和cpu开销增加(用于进程切换,缺页处理的cpu开销)。
以上为读 性能测试从零开始 总结。