Pages

Saturday, November 19, 2011

使用 SenTestCase 為後續整合更快速

繼上篇 使用 SenTestCase 為 Continuous Integration 之路更踏實 ,對應到 iPhone App Project 開發,以 Model-View-Control 架構來看,Model 是最可以撰寫的地方。而根據過去經驗,這邊是最少修改被挑剔批評,同時也是邏輯重要陣地。

再來進一步談談對於 TestCase 撰寫對於後續開發不同程式介接而言的收獲,是可以讓整合測試進行相當的快速。

速度一、增加 Code base 幫自己留意,也讓夥伴有個參考。
現在很多 iPhone App 都是希望跟 Web Service 做介接,而 iPhone app 與 Web service 的溝通良好關鍵在 API 設計 ,所以當 Model 部份的程式都對應寫了 XXModelTests,裡面針對各種呼叫 API 行為都敲定好,也都測試完畢,那麼當開發人員轉移到 View 和 Controller 開發時候就不會有後顧之憂,甚至在接的時候,都已經擁有使用 Model 的測試 Code base,看一下馬上就接上手。甚至不論今天是自己接自己寫的程式碼順手,當夥伴們要接的時候,可以很有信心跟他說,參考我的 Test Case 即可。

速度二、犯過的錯誤要累積下來。
我們在經驗不是很豐富情況下,在開發設想角度不足情況下,我們的程式功能和測試情境是不夠的。不要忘記,開發人員自己的邏輯 思考錯誤,測試又將錯誤程式測試成對的,這樣荒謬的情況是真的會發生的。所以事後的矯正 Test Case,或者回來不充測試案例是要一直進行的。當曾經粗心的錯寫下來到 Test Case,這樣到後面開發過程,Test Suite 整個包裝下去測試,都是可以涵蓋進去不會忘的。

速度三、為跨系統整合把關。
iPhone App 在整個產品服務下的角色扮演是 Client 最終端的部份,所以也不要忘記了後面支撐我們的 Server side。Server side 也是會變動的,不論是功能新增、條款異動、情境改變等等因素,進行呼叫的參數值、回傳值都會跟著改變。而作為 iPhone App 的開發人員,如果平日都有寫好 Test Case,每天執行很多次都沒有問題,突然在某一次原本對的測試情境突然出錯了,那麼就能進一步分析問題出在原因,如果是 Server side 沒有講好的默契,這時候趕緊跟 Server side 的開發人員做個溝通協調,也能為這道溝通的關卡把關。 

使用 SenTestCase 帶給 iPhone App 開發人員最大的收獲就是,今日的你會謝謝昨天的你,程式不如預期就發生警訊,儘快處理;如果如預期都過關,就讓我們就可以把更多心力放在 User Interface 的設計上。

剛剛跑了一個開發中的 iPhone App 專案,結果得到:
Executed 41 tests, with 0 failures (0 unexpected) in 54.148 (54.166) seconds
Test Suite 'All tests' finished at 2011-11-18 16:43:52 +0000.

您的測試程式有在更新、維護和累進嗎!

Sunday, November 13, 2011

使用 SenTestCase 為 Continuous Integration 之路更踏實

"Testing is not closely integrated with development. This prevents you from measuring the progress of development- you can't tell when something starts working or when something stops working. Using JUnit you can cheaply and incrementally build a test suite that will help you measure your progress, spot unintended side effects, and focus your development efforts." -  Test Infected:Programmers Love Writing Tests. by Kent Beck, Erich Gamma.
 
導入 Unit Test 開發可以用最便宜又累積性的建置測試套件,如此一來可以幫忙幫助評估進度,未發掘的潛在 side effects,改此程式動到另外邊功能的狀況,而且可以用對力氣更專注在開發。
 

在上篇 天使與魔鬼對於 Unit Test 的影響 有對單元測試做了些看法分類,而當最近選擇導入 Test Driven Development 測試導向開發,再次找到了投資的好處了。要投資在很怕會異動的程式、最底層不希望會出錯的程式、每天測試保持在最佳狀態。換言之,使用者介面 User Interface 以外,都是很好的投資點。對應到 iPhone App Project 開發,以 Model-View-Control 架構來看,Model 是最可以撰寫的地方。而根據過去經驗,這邊是最少修改被挑剔批評,同時也是邏輯重要陣地。

SenTestingKit framework,是 Objective-C testing framework 建立在 SUnit 之上,Kent Beck 的 Smallltalk unit testing framework。同時在 Java 的 JUnit 也看得到,而且這是發佈出來 Open Source 的。對應到 Apple 在 XCode 2.1 之後都已經有包含這個套件可以使用。

Saturday, November 12, 2011

用 iCarousel 在 iPhone App 上做出旋轉木馬效果的顯示

iCarousel 是一套在 GitHub 上 Open Source Project,它是一個 class 設計來簡單套用即可呈現多種樣貌的類似旋轉木馬效果的在 iPhone 或者 iPad App 上面呈現。

想要看效果可以參考 forked 來自 nicklockwood/iCarouselpolydice/iCarousel ,下載回去打開 iCarousel iOS Demo 就可以看到這種效果展示了。iCarousel 是用 type 來設定要顯示的樣式,目前分為 Linear, Rotary, Inverted Rotary, Cylinder, Inverted Cylinder, Cover Flow, Cover Flow 2, Custom。

在使用上很簡單不過,除了規劃好基本的 type 和要顯示的 frame 之外,透過兩個 protocol 來做所有的設定和參考互動。