Other Tests

  1. 1. 軟體開發故事07 - 其他不同的測試與驅動開發
    1. 1.1. 壓力測試
    2. 1.2. 記憶體監控
    3. 1.3. 網路監控與測試

軟體開發故事07 - 其他不同的測試與驅動開發

在整個軟體開發的過程中,還是會有一些可能要做的測試。

舉個例子

壓力測試

有聽過server在做壓力測試的,為什麼手機APP也有機會要做壓力測試?

舉個例子吧

以兩個帳戶之間互相轉帳為例子, a 有1000元 轉給 b 200元,b也同時轉200給 a,程式如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
let a = Account(id: 1, balance: 1000)
let b = Account(id: 2, balance: 0)

DispatchQueue.global(qos: .background).async {
self.transfer(from: a, to: b, amount: 200)
}

DispatchQueue.global(qos: .background).async {
self.transfer(from: b, to: a, amount: 200)
}

func transfer(from: Account, to: Account, amount: Double) {
from.synchronized(self) { () -> Void in
to.synchronized(self) { () -> Void in
from.withdraw(amount: amount)
to.deposit(amount: amount)
}
}
}

此時因為我們在背景執行轉帳時,就有可能發生Race condition或dead lock的情況發生,只做一次有可能是成功的,但是連續做個一萬次再來看兩個人的balance,一沒寫好,就有可能金額是不對的。

簡單的範例如下:

1
2
3
4
5
6
7
extension NSObject {
func synchronized<T>(_ lock: AnyObject, _ closure: () throws -> T) rethrows -> T {
objc_sync_enter(lock)
defer { objc_sync_exit(lock) }
return try closure()
}
}

記憶體監控

1
2
3
override func didReceiveMemoryWarning() {
//這裡要測
}

嗯,不多解釋了。
記憶體監控

網路監控與測試

  • Network Link Conditioner
    Network Link Conditioner

  • Packet Logger
    Packet Logger

  • Charles Proxy
    Charles Proxy