推 guest2008:防禦性模式真的勝過檢核模式..我也覺得我一直在跟人雞同 05/28 23:31
→ guest2008:鴨講..結果原因是我沒想到「防禦性」這個詞來表達 05/28 23:33
推 wiz:"比起Unit Test,有更好的方法可以提高軟體品質". 05/28 23:45
→ wiz:事後的unit test, 無法有效提升軟體品質, 它只是用來檢驗 05/28 23:47
→ wiz:現在這個實作, 有沒有達到一開始設計所預期的品質 05/28 23:48
推 wiz:unit test,只是檢驗"實作",而架構/設計這和軟體品質高度相關 05/28 23:52
推 atpx:的確, 一開始就把叉路都封死, 減少user預期之外的操作, 比 05/28 23:52
→ atpx:事後測到死好多了 05/28 23:52
→ wiz:必須要是相關的程式設計方法論,以及相關domain的及經驗 05/28 23:53
→ atpx:樓上的是理想狀況吧? 現實上應該是從PM/SA/SD都沒人懂 05/28 23:56
→ atpx:業務邏輯, 邊談使用者需求邊開規格讓外包商去做 05/28 23:56
→ atpx:這時候test case就很有用了, 因為從頭到尾都沒有人真正懂 05/28 23:57
→ atpx:所以設計一些test case, 來堵長官跟user的嘴 05/28 23:58
→ atpx:你看看~ 我們通過測試這些操作流程, 所以驗收~ 05/28 23:58
推 wiz:因此當開發人員, 在進行"設計/架構"時, 不太能靠unit test 05/28 23:58
→ atpx:結果上線後又慢, bug又一堆, 最後維護的pg就通通吃下來問題 05/28 23:59
→ wiz:樓上混淆名詞.. "test case" and "unit test" 05/29 00:00
→ atpx:才發現有些功能根本系統架構就做不到, 從上線就注定不能用 05/29 00:00
→ wiz:不管是哪個,若是對"需求"進行 unit test, 或著設計test case 05/29 00:01
→ atpx:不不, 我指的不是unit test, 是一整個作業流程的測試, 包含 05/29 00:02
→ wiz:只會進入"地獄"這個無底深淵 05/29 00:02
→ atpx:許多功能頁面 05/29 00:02
→ atpx:的確是無盡的爛坑, 所以特地爬整串文, 想吸收點新想法 05/29 00:04
推 lovdkkkk:推防禦性權式 05/29 00:05
→ wiz:這個討論串,很多人提到, 如何"提升"軟體品質", 05/29 00:05
→ wiz:我不知道未來會不會有"銀彈"出現, 以大多人論述的test理論. 05/29 00:05
→ wiz:它的的確確, 不是一種銀彈.. 05/29 00:07
→ lovdkkkk: 模 05/29 00:07
推 atpx:討論串都是開發人員的角度, 好像沒看到外包狀況的探討 05/29 00:07
→ wiz:更不是一種方法, 因為它無法"提昇"..唯有良好"設計/架構"方法 05/29 00:08
→ superpai:外包?用unit test檢查外包人員的成果嗎? 05/29 00:08
→ atpx:目前看過最鳥的狀況是, PM/SA/SD全都不會寫這個專案的程式 05/29 00:09
→ atpx:全部給外包商開發, 然後PM/SA/SD這些人手動測試到死 XDDD 05/29 00:10
→ TonyQ:簡言之,我認為這兩個,不是拿在天平上放在一起比誰重誰輕的 05/29 01:18
→ TonyQ:東西。他們解決的問題並不一樣。 05/29 01:18
→ TonyQ:這就好像「比起防禦性權式,版本控制就相對沒那麼重要了」 05/29 01:19
→ TonyQ:照樣造句,所以版本控制就不重要了嗎?不,他仍然是不可或缺 05/29 01:19
→ TonyQ:的。這是描述上的盲點。 05/29 01:19
→ TonyQ:防禦性權式當然重要,但他也只是軟體開發的一個環節。 05/29 01:19
→ TonyQ:不會因為做了這個,test-case (yep,這裡我講得就是你定義 05/29 01:20
→ TonyQ:的 test-case 了)就變得不重要。他們不是同一條線上非死即 05/29 01:20
→ TonyQ:活的東西。 05/29 01:20
→ TonyQ:要照樣造句我也會,無法控制需求是專案失敗的大多數主因,所 05/29 01:21
→ TonyQ:以比起控制需求,防禦性權式也相對沒有那麼重要。 05/29 01:21
→ TonyQ:這樣比比不完的。 05/29 01:21
→ derekhsu:這不是我定義的Test Case,我有拿Ref啊~ 05/29 01:22
→ TonyQ:欸 我這裡 test-case 講得是你引用的 test-case 沒錯啊。 05/29 01:22
→ derekhsu:問題在於資源有限,資源應該投入在被認為重要的地方 05/29 01:23
→ TonyQ:好啦 改成「你認為」 05/29 01:23
→ TonyQ:你還是沒搞懂我的論點,他們不在同一個天平上。 05/29 01:23
→ TonyQ:這東西值得很多的資源,這點沒話說,但是這跟 test-case 重 05/29 01:23
→ TonyQ:不重要,有沒有用一點關係也沒有。事實上我也不認同他說 05/29 01:24
→ derekhsu:我是說那不是我Defined的,那是我引用公開的Ref 05/29 01:24
→ TonyQ:不用 test-case 是成本考量的那一段。 05/29 01:24
→ TonyQ:I know , 不過是你提/引用的 , 就算是你這麼認為吧. 05/29 01:24
→ derekhsu:我在後面一篇文章有提到,開發自動化測試有ROI考量 05/29 01:25
→ derekhsu:不過我也認為寫Test Case則一定要有,不管用什麼形式 05/29 01:28
→ derekhsu:不然怎麼做Integration Test,亂做嗎? 05/29 01:28
→ derekhsu:就算是只Save在腦裡,但是他也是一種Test Case的形式 05/29 01:29
推 lovdkkkk:他們是不同的沒有錯, 但是 嗯打到這發現樓樓樓...上講了 05/29 01:34
→ lovdkkkk:不過我覺得他們各有適用的地方, 某些特定程式不適合甚至 05/29 01:35
→ lovdkkkk:該說不能用防禦性模式 05/29 01:37
→ lovdkkkk:不過應該算小部份 05/29 01:37
→ TonyQ:我倒是好奇什麼情境下防禦性模式不能用,是需要擴充性的? 05/29 01:56
推 lovdkkkk:就是不適合在程式裡塞一堆檢核的程式 05/29 02:21
→ lovdkkkk:理由可能是效能 也可能是別人有機會看到 code 如 Javasc~ 05/29 02:25
→ lovdkkkk:而檢核內容可能包含你並不想讓別人知道的資訊 05/29 02:26
→ guest2008:@lovdkkkk:你先test做過實驗再來反駁效能吧.用迴圈跑 05/29 08:38
→ guest2008:1千萬次含檢核的程式耗時.是跑幾豪秒?實驗完你就知道了 05/29 08:40
→ guest2008:至於那麼怕別人知道.那真的是你不知道還可以這樣子做. 05/29 08:42
→ guest2008:有一種東西叫做"條件式編譯",當然語言屬性不同,但概念 05/29 08:44
→ guest2008:相同.這些都可以實作出來的. 05/29 08:45
→ guest2008:不用太在意你的源碼讓人知.還以為別人都做不出來.你太小 05/29 08:49
→ guest2008:看台灣的怪物.我也曾經跟你一樣有這樣的思維過.還以為自 05/29 08:51
→ guest2008:己的程式多了不起.不想給客戶我的原始碼.我觀念都改了 05/29 08:51
→ guest2008:你要我都大方給.只要照合約不准拿去商業用途,第三用途 05/29 08:53
→ guest2008:客戶其實都求心安的.不是真的要研究你的程式碼. 05/29 08:55
→ guest2008:除非你們公司客服做太爛了.都不幫人家處理.要不然客戶 05/29 08:56
→ guest2008:都是會回頭讓你賺第二筆錢.不會去換別家公司的 05/29 08:57
→ guest2008:記住:台灣的工程師都有一個癖.都認為自己的最好.你源碼 05/29 09:05
→ guest2008:都給他了.工程師他根本都還是想用他自己的寫法去重寫. 05/29 09:06
→ guest2008:根本連去看你的解答都不想看.大家都認為自己的方法最好 05/29 09:07
推 lovdkkkk:@guest2008 請考慮一些本身就很慢的直譯式語言 05/29 09:17
→ lovdkkkk:就說是小部份了咩 個人也很喜歡防禦模式 05/29 09:17
→ lovdkkkk:另外怕人知道我想的不是怕別人抄 05/29 09:18
→ lovdkkkk:只是檢核條件不想讓人知道 所不寫在 js 在 server 做 05/29 09:20
→ lovdkkkk:其實整體來說還是有檢核 只是前端沒有 05/29 09:20
→ lovdkkkk:(防的人基本上不是客戶而是客戶的客戶) 05/29 09:22
→ guest2008:所以你的問題是?? 你已經正解處理有安全疑慮的在 server 05/29 09:29
→ guest2008:端檢核.其餘丟JS處理.我反而不知道你上面在抱怨什麼了. 05/29 09:30
推 pingsky:lovdkkkk 的不想讓人知道應該是基於security考量吧 05/29 09:31
推 lovdkkkk:沒有啊, 只是說不是所有程式都適合防禦式 05/29 09:43
推 lovdkkkk:其實這可能是我最喜歡的模式 05/29 09:50
→ lovdkkkk:整個就很 整齊 清潔 簡單 樸素 迅速 確實 05/29 09:51
→ TonyQ:@guest2008 如果是 integration test 是有可能有效能問題啦. 05/29 10:23
→ TonyQ:@lovdkkkk 前端的整合基本上以「防止使用者寫錯」為主, 05/29 10:24
→ TonyQ: 或者是協助使用者寫對為主,而比較不是檢查資料對 05/29 10:24
→ TonyQ: 不對,因為檢查也沒有用就是了,使用者照繞。 05/29 10:24
→ TonyQ: *檢核 05/29 10:24
→ lance70176:前端一起檢核啊 前端輔助 後端防禦不就好了? 05/29 18:44
→ lance70176: ^後 05/29 18:45