2016/2/25

使用 iWork 的 Pages 來撰寫軟體開發文件

撰寫軟體開發文件在團隊裡往往都是一個讓人愛恨交織的課題,開發人員的身體裡大多都帶著討厭寫文件的基因。所以在時程不充裕的案子中,文件撰寫一定是背負著拖累時程的原罪、頭一個被捨棄的工作項目。但是在接手既有系統時,又期昐原本系統的開發相關人員能留下文件,哪怕是文字殘缺不全、沒有隨著最新的程式碼同步修正,就算只有隻字片語也多少能做為一窺系統設計全貌的契機。

文件本來的目的就是用來溝通(不過制度僵化的公司也許會拿文件來做神主牌),而用什麼工具來撰寫文件會是個影響這項工作成效的關鍵因素。用 iWork 的 Pages 來撰寫軟體開發文件?用慣微軟產品組合的人第一個想法可能會是:為什麼這麼想不開?既然是要溝通,撰寫出來的文件內容就要具備可交換性。如果只是要文件內容可以被閱讀,那麼能輸出成類似 PDF 的通用格式的工具問題都不大。但如果牽涉到協同合作、共用編輯之類的情境,文件的格式轉換工作將會是一場災難。就算是微軟的 Word 在不同作業系統之下,呈現出來的效果也沒有辦法百分之百完全相同,更何況是使用二個設計概念不同的工具要進行轉換。

再者,以功能豐富度的角度來看,使用 Microsoft Word 上手之後,會覺得 Pages 像是 Windows 裡的 WordPad 加強版。Microsoft Word 在發展了這麼多年之後,考慮到許多內容呈現、版面排列、資訊彙整等除了文字以外附帶的功能,甚至也有為亞洲語系的特殊需求做設計,都大幅地增加文件製作者在使用上的彈性。反觀 Pages 在功能上則感覺不到有任何重大地進展或是想要向 Word 致敬的意圖,就是維持在大概夠用的程度。

的確,考慮到文件的可交換性,Pages 並不是個值得推薦的選項,除非整個團隊的工作環境都籠罩在蘋果光之下,不是使用 OSX 就是以 iOS 做為平台。如同大多數以 Windows 為平台的團隊會選擇使用 Microsoft Word 做為文件撰寫工具的第一首選,因為以 Word 普及的程度,就算開發團隊以外傳入的文件也有很大的機率是使用 Word 來撰寫。而 Pages 功能的豐富度上也遠不及 Microsoft Word,如果可以接受使用 Windows 裡的 WordPad 來撰寫開發文件、或是更原始地使用記事本來製作文件,在 OSX 上 Pages 才相對地是可以列入考慮的選項。

那為什麼要還要考慮使用 Pages 來撰寫文件?

隨著 iOS 成為行動裝置平台的顯學,改變了軟體開發的生態與銷售模式,為軟體開發從業人員帶來了不同的機會。想要靠開發 iOS App 來賺錢,受限於 Apple 的策略,所有開發的工作環境就必須要和 OSX 綁在一起。但日常事務性的作業卻不見得可以一併移轉,仍然要在 Windows 的平台中進行,而形成雙作業系統的狀態。如果要像過往在 Windows 平台一樣,以 Word 為撰寫文件的工具,就算公司有購置 Word 授權,也是 Windows 平台上的授權沒有辦法移轉到 OSX 上。所以勢必需要二份的授權費用,對許多團隊來說要再提撥額外的授權預算是沈重的選項。

所以,在 Apple 宣佈 iWork 免費下載之後,在不考慮其他開源的文書編輯軟體的情況下,Pages 是目前在 OSX 上可以直接取得、堪用、門檻最低的選擇。

只不過要拿 Pages 來撰寫文件在作法上還是要有一些調適,文件的可交換性降低了,就沒有特別期待能夠使用於共同編輯的情況,主要是著眼在做為「記錄設計軟體過程中思考路徑」的用途之上。設計通當都是反覆構思的循環,在設計的初始階段,為了釐清設計的重點,Mind Map 是一個值得推薦的工具。隨著工作的演進,我習慣用文字記錄設計上的一些想法,做為進一步文件的基礎。一般的純文字編輯器並沒有辦法滿足我的需求,畢竟思考是一個很容易被中斷的活動,像是生理時鐘、外在環境的干擾,甚至思考本身也會因為總總的想法造成設計上的分歧點,需要不斷的放下、回復。使用 Pages 可以做一些顏色、排版上的變化來幫助我記錄思考中斷的位置,讓我可以接續原本思考的狀態,做為後續調整設計方向的依據。

Pages 只是功能上和 Word 相比有一些不足之處,但仍是一個功能健全的文書編輯工具。如果是講究一點,還是可以套用 Pages 內建提供的範本,讓這些內容能夠直接輸出成一份俱專業感的正式文件。至於要和團隊中既有不同工具的文件體系銜接,就只能依靠 Pages 的格式轉換功能,和後續版面調整的功夫了。




2016/1/29

來自 Play Store 的流量垃圾 (Referrer Spam)

長見識了,原來流量垃圾 (Referrer Spam) 的「轉介網址」跟廣告信的「寄件信箱」一樣,可以被設定成任何的網址。不過想想也不意外,HTTP 裡本來就有轉介規格,如果 Blogger 是利用這個規格來記錄流量來源,那送出要求端要設定成什麼字串就隨人高興了。

最近在檢視 Blogger 提供的「統計資料」功能時,發現有一個集中的流量來源是轉自 Play Store (play.google.com),看網址是指向某個 App。至於哪一個就不附上來,被騙已經心有不甘了,不想再替他廣告,讓更多人點進去。

看到這個網址當下的想法是,會不會有人在評論中加上了文章的網址。但想想又有點奇怪,有什麼樣的 App 評論需要附上別人的文章?佐證?讓我變相去站台?

基於好奇就點了那個網址,想看一下是什麼人?寫了什麼樣的評論?結果,是一個交友的 App,新上架的,根本還沒有任何人留下評論!那是有客服或連絡資訊誤植了文章的網址?我知道,很白痴的想法!但我還是檢查了一下,的確沒有。

讓我意識到這應該是一個流量垃圾的原因是:簡介的內容全部都是俄文,是個戰鬥民族開發的軟體。一個連英文簡介都沒有的 App,怎麼可能會和中文為主的 Blog 有關係?!雖然我不清楚這個廣告是怎麼鎖定我的文章,也沒有直接的證據顯示這是個流量垃圾,但我高度的懷疑,就算是網址中的 Domain 和常見的流量垃圾 Domain 不同。

所以還是留下個記錄,讓收到相同資訊的人有個戒心。我覺得應該還不致於有病毒或木馬,畢竟是在 Play Store 上的標準頁面,主要的目的應該還是增加曝光度吧!

在查詢相關資料時,發現了一個有趣的小插曲。Referrer 因為經常被誤拼為 Referer,反而積非成是地被列入規格文件之中!




2015/12/1

在 Android 6.0 上免 Root 備份及還原 Line

這篇文章是「修正 Android 上免 Root 備份 Line 不正常的問題」的延續,這次是要從 Android 4.x 移到 Android 6.0 的手機上,以「免 Root 備份與還原 3.9.0v5」這個工具的命名模式,還原的標的手機用 B 為代碼,備份的來源手機就稱為 A。

在前一次操作時 A 與 B 手機都是 Android 4.x 的系統,除了 Line 的版本所造成的問題之外,並沒有遇到其他的情況。但完成了「1.A手機備份資料.bat」、「2.B手機還原資料.bat」的動作之後,要在 Anroid 6.0 的 B 手機上執行「3.B手機免root清除重登.bat」卻出現了問題!

B 手機上並沒有如預期地出現備份的畫面,同時電腦命令列視窗上也有以下的錯誤訊息:

abe unpack 錯誤
ab檔案 unpack tar錯誤

為了要解決問題,所以就著手研究了一下「3.B手機免root清除重登.bat」的執行細節,最後終於順利地把 Line 由 Android 4.x 備份並還原到 Android 6.0 上。由於會遇到的情況不只一個,以下分不同的小節按照備份序順說明解決的方式。

更新最新版本的 adb

「免 Root 備份與還原 3.9.0v5」所附的 adb.exe 應該不是最新的版本,由於「3.B手機免root清除重登.bat」和 「1.A手機備份資料.bat」一樣會執行 adb 的 backup 指令,但檢查「3.B手機免root清除重登.bat」的備份輸出檔 db.ab 卻發現檔案大小是 0。所以導致後續的動作出現錯誤,也由於 db.ab 的內容不正確,unpack 會出現錯誤是必然的情況。猜測應該是因為 adb.exe 與 Android 6.0 不相容,所以才沒有辦法在 Android 6.0 的手機上觸發備份的程序。

如果你的 A 手機已經是 Android 6.0,應該在「1.A手機備份資料.bat」時就會出現問題,最明顯的特徵就是 A 手機上沒有出現要求備份的畫面,而且備份很快就完成了,但檔案大小遠小於 14M。試著更新 adb.exe 到最新應該不會有錯,最少在我操作的環境是可行的。

不過更新的程序有點複雜,沒有辦法一鍵下載。首先要到 Android Developer Tool 網頁下載 SDK 工具,在執行安裝或解壓縮之後,進入 SDK 的根目錄中執行 SDK Manager.exe。SDK Manager 的畫面中,因為我們只是要 adb.exe 所以選擇清單中最上方的 Android SDK Platform-tools 並取消其他所有的勾選後,按下【Install 1 packages...】按鈕。官方網站中有相關的操作說明可供參考。

更新完成之後,可以在 SDK 的 platform-tools 目錄下找到 adb.exe,把檔案複製並覆蓋到「免 Root 備份與還原 3.9.0v5」所在的目錄。

請注意:如果你的 Line 已經更新到最新的版本,備份前,前一篇說明的降版程序還是要先執行。

在執行備份時,由於 Android 6.0 是預設全機加密,所以在手機上出現備份畫面時會要求要設定密碼,才能進行備份,這會和「免 Root 備份與還原 3.9.0v5」的說明有衝突。但也只能設定密碼,否則接下來的動作無法進行。密碼設定好了之後要記得,待會會用到。不過,所設定的密碼不用考慮強度的問題,隨便打一個字元也行。

當 A 手機是 Android 6.0 時,執行「1.A手機備份資料.bat」就會要在 A 手機上輸入備份的密碼。所以在 B 手機執行「2.B手機還原資料.bat」時就不能像「免 Root 備份與還原 3.9.0v5」的說明直接按還原,要把原本設定的備份密碼輸入之後才能成功地執行還原的程序。

完成備份之後最好檢查一下備份結果的檔案大小,如果小於 14M 接下來的步驟大概也不用試了,只能說你跟這個解決方案無緣了!

更新最新版本的 abe.jar

由於到了「3.B手機免root清除重登.bat」時還會再對 B 手機執行一次同機的備份與還原,所以一定會要在備與及還原時輸入密碼。但是在還原之前會需要做 unpack 的動作,批次檔中進行 unpack 的方法是使用 abe.jar,但「免 Root 備份與還原 3.9.0v5」的批次檔中並沒有指定密碼。

所以如果在備份時有設定密碼,「3.B手機免root清除重登.bat」在執行到這一步時會失敗。必須要修改「3.B手機免root清除重登.bat」的內容,在大約 51 行的指令最後加上備份時所設定的密碼字串。例如:在備份時使用的密碼是「0」,則修改的結果如下:


如果加了密碼還是會出現錯誤,有可能是 abe.jar 的版本還沒有支援使用密碼,可以到 SourceForge 下載最新的版本,並且覆蓋「免 Root 備份與還原 3.9.0v5」所提供的檔案即可。

下載 UnlimitedJCEPolicyJDK

如果已經做了以上的步驟,在 abe.jar 進行 unpack 的過程中還是有問題,可以試著下載 Java Cryptography Extension (JCE),依照你目前的 Java 版本,下載對應的壓縮檔,要確認 Java 的版本可以在命令列視窗執行以下的指令:


會看到命令列視窗中輸出「java version "1.x.x_x"」的字串,其中 1.x 的 x 代表的就是 JCE 要下載的對應版本,應該會是 6、7、8 其中一個。確定 Java 版本之後,可以到以下對應的網址下載:


下載後依照壓縮檔內的說明文件,把二個 jar 檔放到指定位置後再執行一次「3.B手機免root清除重登.bat」。JCE 通常放置的位置應該是在安裝 Java 路徑的 lib\security 目錄內。

假設過程一切正常,就可以開始在 Android 6.0 上繼續無接縫地使用 Line 了。如果還是不成功,那就麻煩大喊三聲「我支持拒用 Line」,因為我也愛莫能助了,請節哀!

至於前一篇提到的電話認證的疑問,這次有特別試了一下其實是可以用的,並不一定要使用 Facebook 認證,也許是電話認證的失敗率比較高,所以網路上的文章才比較不推電話認證的方式。





2015/11/9

如何寫好程式

這個標題有語帶雙關的意味,是如何「寫好」程式?還是如何寫「好程式」?如果是問如何「寫好」程式,有很多人可能會下意識地說:很簡單啊,就是把程式碼打好,按下執行程式、沒有問題就「寫好」了啊!但是,「寫好」了就是「好程式」嗎?

2015/10/23

修正 Android 上免 Root 備份 Line 不正常的問題

更新:如果要進行備份或還原的手機是 Android 6.0 可以參考這一篇文章。

幫人轉移 Android 上的 Line 到新手機真是一個讓人很不愉快的經驗,最主要的痛苦來源還是來自於聊天記錄的備份問題。如果是要備份自己的聊天記錄,基本上會很清楚和哪些人對話是重要的,只要挑選好重要程度高的聊天室,數量不致於太多。然後用 Line 內建的「備份聊天記錄」功能逐一備份,並且把檔案移到新手機就完事,想看以前的記錄再匯入就行了。

但是幫人備份就不太容易拿捏輕重,萬一一個不好,漏了,就會被人埋怨是不是專業程度不夠。更何況不是群組或一對一的聊天室,好像備了也沒有用,全部聊天記錄整包備份是最保險的做法。但,Line 不提供!很難想像一個這麼受歡迎的軟體,在這個手機更換頻繁的世代,備份功能竟然如此的陽春。更不可思議的是,聽說這家公司在台灣還沒有對話的窗口,權利受損是無從申訴的,大家居然還這麼熱情的支持,連行政首長都甘願成為活廣告。

完整備份有這麼難嗎?還是有什麼見不得人的考量?Line 不提供這樣的功能就算了,等一下會提到 Line 似乎還有意圖阻擋大家使用第三方備份的方案。真不懂!不過就是個備份,逐個聊天室備份都提供了,也有人做出完整備份的方案,為什麼不提供大家一個愉快的使用經驗?這麼不親民的軟體不知道有沒有人想要發起抵制的運動?我們本土也有很多自己的通訊軟體,應該要多多支持一下,而不是一直被韓國人壓著打!更何況這個軟體披著日皮,連韓國人自己都不支持。

如果覺得本土的通訊軟體都上不了檯面,聽說有一款戰鬥民族出資開發的通訊軟體,可靠、效率好、保密性高。還有八掛說這軟體的出資者有膽和戰鬥民族的政府作對還安然無事,這麼傳奇的軟體應該要推薦給嗡嗡嗡,不然我們首都的公事機密都給韓國人給看光光了!

理智斷線的胡說八道就先打住,回到正題。網路上找得到的備份資訊還不少,但因為備份要移轉的標的是新買的手機,需要 Root 的方法會讓人有保固無效上的疑慮,所以還是選擇了免 Root 的方法。免 Root 的方法中有一個是使用批次檔來執行,為了確保執行的過程中出現問題,還有機會可以調查一下執行了什麼內容、有沒有機會調整,所以選了這個。

由於是第一次做,為了怕失敗,還先手動逐一的把群組及一對一的聊天記錄給備份下來,一共幾十個。其間還因為舊手機的空間已經被耗得差不多了,聊天記錄又多是陳年加一堆勵志圖檔,所以只能備一個移一個,由此可想見這段過程的慘烈。不過,悲慘的事情才正要開頭。

執行了第一個「1.A手機備份資料.bat」步驟就失敗,沒有辦法從舊手機裡把 Line 備份出來,backup.ab 檔案大小只有 1K。網路上找到今年六月的教學文章明明說沒問題的,研究了一下批次檔的內容,備份是使用 adb 的 backup 來做的。難道是我使用的手機太舊,所以 adb 無法正確執行?

我試著用 adb 的指令去備分其他的 apk,居然可以備份!所以我的 adb 是正常的!? 那為什麼 Line 不能備分?是 Line 的 apk 被下了什麼限制嗎?本來想放棄,打算直接把用內建備份功能產生的檔案複製到新手機後,再逐一還原回來好了。但想想,不對!新手機聊天室都沒有產生怎麼匯入?我是幫別人備份,這些又不是我的連絡人,要先逐一丟訊息給他們產生聊天室之後才能匯入。那我要跟他們說什麼?安安,還沒睡?還是要放著,並且教會手機的主人:「你有跟他對話之後,再點哪裡、哪裡,然後以前的記錄就回來了」。

天啊!這將會是一個多漫長的歷程,要等到還原齊了要多久?這期間可能要一直被騷擾、詢問那個還原要怎麼操作。不過在這之前大概就會先被抱怨怎麼這麼麻煩,你到底行不行啊!不是我不行,是 Line 的問題啊...如果有扺制運動,可以來一起支持一下嗎?只有大家都不用,才有可能擺脫這個惡夢。

沒辦法,只好認命地再回網路上扒看看有沒有能用的資訊,無意間看到有討論區說在 5.2.3 之前的版本還能用,現在舊手機用的是 5.6.0。好吧!抱著死馬當活馬醫的心態,先去專門提供舊版本 apk 的網站下載 5.2.3 版,再裝回舊手機試看看吧。

為了怕有閃失,所以在把 5.2.3 裝到舊手機之前,先把原本的 apk 給備份出來。要把 apk 從舊手機拉出來要先知道檔案的位置,所以先執行以下的指令:


假設路徑在:
/data/app/jp.naver.line.android-1.apk

接著執行以下的指令把檔案從手機拉到 PC 來:


最後使用以下的指令把下載到的 5.2.3 版本的 apk 安裝回舊手機:


jp.naver.line.android_5.2.3.apk 是下載到的 apk 檔名、參數 r 是要求覆蓋原本安裝的檔案並保留資料、參數 d 則是允許降版安裝,所以很重要,這個參數一定要下。

安裝完了之後,再執行一次備份,嘿嘿,果然可以備份了。這也就是為什麼一開頭說 Line 企圖阻擋第三方的備份方案,雖然我不知道這是有意還是無意的。因為我也試過要備份 Facebook 開發的某一支 apk,一樣也會有無法備份的問題。

後續就按著教學文章的程序,「2.B手機還原資料.bat」到新手機、「3.B手機免root清除重登.bat」。但在第三步之後,為了保險起見,沒有直接啟動 Line。我先使用和舊手機一樣的指令,先把舊手機原本安裝的版本再更新回新手機,然後才啟動 Line。

登入時就是照著教學文章裡的步驟,使用最先開始就設好的電子信箱連結登入、選擇 Facebook 認證、輸入換機密碼。等程式更新好,進入到聊天畫面,耶!所有的聊天記錄都在,連不是一對一的聊天室都有被保留下來。只不過有一些時間較久的圖檔、影片沒有辦法回復,其他的看起來跟舊手機沒什麼二樣。

在選擇認證時其實有個小狀況,我是依照教學文章中的建議使用 Facebook,不過之前有看到一則新聞有提到 Line 自己的副總都不贊成連結 Facebook,呼籲大家把 Facebook 移除。自己都不贊同的功能還提供?有用的不加,反倒加一些有問題的功能!所以後來增加了電話認證,想要移除 Facebook,結果程式竟然顯示出現錯誤,移不掉!這...叫人移掉結果程式又有問題,抵制的理由再加一。不知道當初如果選用電話認證是不是就不會有這樣的問題?聊天記錄是不是可以正常的回來?等下次有比較好欺負的受害者來請我備份時再來試試...


更新:如果要進行備份或還原的手機是 Android 6.0 可以參考這一篇文章。




2015/9/19

調整 Android Studio 編譯檢查規則

在 Android Studio 中進行程式碼的編輯時,會對程式碼進行即時的分析,並且在編輯窗格的右上方顯示分析的結果。檢查程序在進行中時,窗格右上方的角落會以一個眼睛的圖示來表達。如果程式碼通過所有檢查條件會顯示綠色的勾勾;程式碼有違反一項以上的警告規則顯示黃色的方塊;當程式碼有違反一項以上的錯誤規則顯示紅色的圓圈包著驚嘆號。

很多人在寫程式的時候都只關心編譯後能不能執行好進行測試,因為程式一旦有錯誤就會中斷編譯程序、阻擋工作的進行,要等到錯誤的程式碼被修正後才能繼績工作。而警告的訊息並不會阻擋工作的進行,就會變得無所謂、大多數的人都會選擇不予理會。

這並不是一個好的開發習慣,Android Studio 進行的程式碼分析就像健康檢查一樣,用來顯示程式碼的健康程度。當健康檢查的報告中有數值超出標準值,雖然沒有達到疾病的程度,但代表身體已經有一定的問題。如果繼續忽視不理,很有可能就會轉變成疾病,甚至危害生命。同樣的道理,當分析的結果出現警告的訊息代表程式的寫法有一定程度出錯的風險。所以一但有警告訊息出現,應該要和錯誤一樣認真地看待並謹慎地處理。

不過,有的時候特定的習慣性寫法或是團隊的 Coding Convetion 可能會和工具預設的檢查規則有衝突,但其實並不影響程式的執行結果。舉例來說,以下的程式碼是一般判斷布林值的慣用寫法:


但是這樣的寫法由於「!」的寬度不寬,和判斷布林值是 true 的程式碼差別沒有很大,很容易因為看漏而導致修改程式時誤判而發生改錯程式碼的情況。再者,我們的母語並不是英文,所以在命名變數時常常詞不達意,甚至在過去的工作經驗中遇到有人命名變數的語意與用途相反的情況,更大大地增加了這樣的情況出現的機率。

為了有效地提高防呆的機率,我都習慣性地使用以下的方式來撰寫判斷式:


雖然會多打好幾個字,但是卻可以換來表達意思明確的效果。閱讀程式碼的人容易判斷區塊中到底是要執行 true 還是 false 的邏輯,不會被變數的名稱誤導形成邏輯上的混亂。

但 Android Studio 預設的檢查規則在遇到以上的寫法卻會顯示以下的警告訊息:

flag == false can be simplified to !flag

Reports pointless or pointlessly complicated boolean expressions. Such expressions include anding with true, oring with false, equality comparison with a boolean literal, or negation of a boolean literal. Such expressions may be the result of automated refactorings not completely followed through to completion, and in any case are unlikely to be what the developer intended to do.


當這樣的訊息與其他的警告混在一起就會造成在寫程式時的困擾,因為沒有辦法在第一時間就利用編輯窗格右上角的綠色勾勾,了解程式是否已經通過其他的檢查規則。當看到窗格的右上角呈現黃色的方塊,如果要確認還要將滑鼠游標移到有問題的位置,才能夠判斷是不是因為以上的程式碼寫法所產生的警告訊息,或是還有其它的問題待修正!

這樣的動作如果在寫程式時頻繁的重複,會讓工作的效率下降很多,而且也會因為久了出現怠惰的心態,進而忽略警告訊息造成程式出問題的風險增加。

所幸 Android Studio 的檢查規則是可以調整的,在 Settings 的對話視窗中選擇「Editor->Inspections」項目,就可開啟或關閉特定的檢查規則。以文章中的示範程式碼寫法為例,可以切換到「Java->Control flow issues->Pointless boolean expression」項目。如下圖所示取消勾選該項目,Android Studio 就不會再針對這項寫法進行檢查。



有更動過的選項會以藍色的字體顯示,同時所屬的逐級向上分類項目也會顯示藍色,以方便識別。


2015/9/4

如何在 Android Studio 中批次執行不同性質的測試程式

當所開發的系統中,測試程式被依性質做區分,例如:單元測試(Unit Testing)、整合測試(Integation Testing)。通常會讓整合測試交給後端的 CI 系統來執行,因為相較於單元測試,整合測試所需的執行條件較高、所耗的時間也相對地較長。否則隨著程式日漸龐大,很有可能會出現只是幾分鐘的程式修改,但等測試執行完成卻要花上數倍時間的情況。

而單元測試就會被程式撰寫人員執行,用來確認程式是否依設計的內容來完成,所以這個時候就會需要有一個簡易的方法可以用來觸發單元測試的執行。在 Android Studio 中可以設定 Configuration 以便用來觸發不同的執行內容,像是要執行測試可以選擇新增 JUnit 或 TestNG  設定來啟動測試。

以 JUnit 為例,如果要在一堆的測試程式檔中只執行特定的測試項目,最直接的方法就是把檔案用不同的目錄或是 Package 分隔,在設定 Configuration 時指定對應的目錄或是 Package,就可以在測試啟動後只執行其下的測試檔案內容。

只是有的時候專案的結構較為複雜,因為規劃的關係同性質的測試檔案沒有辦法都歸在同一個目錄或 Package 下,更進一步可能檔案在不同階層的目錄或 Package 間交錯。而 Android Studio 的 JUnit Configuration 同時只能指定一個目錄或 Package,就算是可以指定多個,要一個一個的設定不但麻煩還會有遺漏的問題。當開發還在進行、專案結構還持續有異動時,要維持設定的正確更是個挑戰。

這時如果測試檔案的名稱有一定的規則,例如:單元測試以 UT 做為檔名的結尾、整合測試以 IT 做為檔名的結尾,可以使用 JUnit Configuration 裡的另一個選擇 - Pattern。不過這個部份在官方文件中沒有找到比較明確的說明,只有簡略地提一下可以透過搜尋由清單中選出所需的檔案。

實際上可以如下圖所示,在 Pattern 右方文字框中輸入 Regular Expression 內容,像是要過濾以 UT 結尾的檔案可以輸入 ^(.*UT$).*$。啟動後會依設定的搜尋範圍來進行比對,挑出檔案名稱符合樣板的測試檔案,並執行所有符合條件的測試程式。