測れる!パフォーマンス 
Copyright © Classmethod, Inc. 
〜~ Xcode 6 〜~
• 名前:深澤 豪(ふかさわ たけし) 
• 所属:iPhoneアプリサービス事業部 
• 星座:やぎ座 AB型 
• 役割:プロジェクトマネージャー 
• ⽬目標:お客様と開発者の間に薄く⼊入って、 
お互いが満⾜足できるものを届ける 
Copyright © Classmethod, Inc. 
⾃自⼰己紹介
※ Botsの話しをするつもりでしたが、YosemiteとServer 4.0 
は未だリリースされない事に気づいたので、やめました。 
Copyright © Classmethod, Inc. 
ごめんなさい。
重い処理理ってなんじゃろ 
例例えば… 
・⼤大量量データのソートなどの処理理 
・画像などのエンコード/デコード 
・暗号化処理理 
Copyright © Classmethod, Inc.
⾃自動テストで数値化して 
判定できる仕組みができた! 
Copyright © Classmethod, Inc. 
重い処理理を
Testクラスのself.measureBlock(){} 
内が計測の対象になる。 
Copyright © Classmethod, Inc. 
何処に書くか 
func testPerformanceExample() { 
// This is an example of a performance test case. 
self.measureBlock() { 
// Put the code you want to measure the time of here. 
} 
}
今回の計測されるFunction 
class Logger { 
let max = 10000 
func writeNSLog(){ 
for var i = 0; i < max; i++ { 
NSLog("%d",i) 
} 
} 
func writePrintln(){ 
for var i = 0; i < max; i++ { 
println(NSDate.date().description + " " + String(i)) 
} 
} 
NSLogとPrintlnで1万回の書き出しを比較 
Copyright © Classmethod, Inc.
今回のテストクラス 
import XCTest 
class BotsTests: XCTestCase { 
… 
func testLoggerPrintln() { 
let logger = Logger() 
self.measureBlock() { 
logger.writePrintln() 
} 
} 
func testLoggerNSLog() { 
let logger = Logger() 
self.measureBlock() { 
logger.writeNSLog() 
} 
NSLog} 
とPrintlnで1万回の書き出しを比較 
} 
Copyright © Classmethod, Inc.
テストの実⾏行行⽅方法 
ユニットテストと同様にTest Navigatorや⌘Uで 
実行可能。 
Copyright © Classmethod, Inc.
どう計測しているか 
• 10回計測する。 
• 平均と標準偏差を出す。 
Copyright © Classmethod, Inc. 
10回計測している
何を計測しているか 
• 10回計測する。 
• 平均と標準偏差を出す。 
Copyright © Classmethod, Inc. 
Result:結果 
Average: 
処理理時間の平均値 
Baseline: 
評価の基準となる値 
Max STDDEV: 
標準偏差の最⼤大値
何を計測しているか 
• 10回計測する。 
• 平均と標準偏差を出す。 
Copyright © Classmethod, Inc. 
1回⽬目の処理理時間は 
3.006秒。 
平均値が2.09秒なので 
43.48%遅い。
標準偏差って何? 
どれだけデータがバラけているかの指標。 
例例えば”10%”なら、ばらつきの平均は平均値 
(Avarage)から⾒見見て10%という意味。 
Standard Deviation 
Copyright © Classmethod, Inc.
Copyright © Classmethod, Inc. 
評価させる⽅方法 
“No Baseline” と表⽰示され 
ているので、”Set 
Baseline” ボタンを押す 
と”Baseline”に計測した平 
均値が⼊入る。
Copyright © Classmethod, Inc. 
評価させる⽅方法 
“No Baseline” と表⽰示され 
ているので、”Set 
Baseline” ボタンを押す 
と”Baseline”に計測した平 
均値が⼊入る。
Copyright © Classmethod, Inc. 
評価のされ⽅方 
“Baseline”を設定した後に 
再度度計測すると”Result”に 
値が表⽰示される。 
何か評価された!
Result: 20.788% better (±17%) 
Baselineよりも 20.788% ⾼高速だった。 
また、標準偏差は±17%だった。 
Copyright © Classmethod, Inc. 
評価のされ⽅方
評価のされ⽅方 
テスト成功の条件 
• Max STDDEV(標準偏差の最⼤大値) を超えない 
= ばらつきの⼤大きいテストは失敗 
Copyright © Classmethod, Inc. 
AND 
• Baseline(基準値)より早い時間で処理理が終わる 
= 遅いと失敗
Copyright © Classmethod, Inc. 
注意点 
シミュレータ/実機の種類によって結果は異異なるの 
で、ターゲットとする実機で測定した⽅方が良良い。
NSLogとprintlnでそれぞれ1万回の実行結果を計 
測してみました。 
println(i) -> 0.35秒 
NSLog(“%d”,i) → 2.3秒 
Copyright © Classmethod, Inc. 
ちなみに 
println だけなら7倍位はやい。
• パフォーマンスを計測するって楽しい。 
• Botsでも回せます。 
• 実機で実⾏行行するように。 
Copyright © Classmethod, Inc. 
まとめ
ご静聴、ありがとうございました。 
Copyright © Classmethod, Inc.
[iOS 8] 測れる!パフォーマンス

[iOS 8] 測れる!パフォーマンス