ほとんどのユニットテストが時間の無駄なのはなぜですか?(記事の翻訳)

著者:James O Coplien





翻訳:エピシェフアレクサンダー  





1.1私たちの日々

FORTRANの時代、機能が機能チェックに値する機能であったとき、ユニットテストは主要な要素の1つでした。コンピューターは計算を実行しましたが、関数と手順は計算単位でした。当時、支配的な設計アプローチは、小さなチャンクから複雑な外部機能を作成することでした。これにより、さらに小さなチャンクなどが、よく理解されているプリミティブのレベルまで管理されていました。各レイヤーはその上のレイヤーをサポートしていました。全体として、一番下の機能いわゆる機能手順を追跡する絶好のチャンスがありました。人間がアクセスできるインターフェースで表現された要件に関連付けられていました。優れた設計者は、特定の機能のビジネス目的を理解することが期待できます。少なくとも適切に構造化されたコードでは、呼び出しツリーの関係も同様に理解しやすいものでした。コードレビュー中に、コードの実行を精神的にシミュレートできます。  





徐々に、オブジェクト指向は嵐によって世界を引き継いでおり、実際、デザインの世界は逆さまになっています。まず、設計ブロックは、コンピューティングユニットからオブジェクトと呼ばれる小さな異種の複合材料に進化し、関数やデータを含むいくつかのソフトウェアアーティファクトを単一のラッパー内で組み合わせています。オブジェクトパラダイムは、クラス使用て複数の関数をラップし、それらの関数の共通のデータ仕様を示しました。このようなクラスは、実行時にオブジェクトが作成されるテンプレートになりました..。このような計算コンテキストでは、必要な関数は実行時に決定され、FORTRANで可能だったように、ソースから呼び出すことはできません。これにより、分析だけではランタイムでのコード動作の相互関係を理解できなくなりました。ここで、プログラムで何が起こっているのかを少しでも理解するために、プログラムを実行する必要があります。  





, “ ”. - - “ ”. - , , . , , - . - . , . , “”, -. - , , - , , , -, . 





, , , . CRC- ( , ), . . , , , , . , FORTRAN, (, , , , ). . - () , . , . 





1.2

, - - , de rigueur (. " "), , -, , , . , -, , (Richard Jacobs) Sogeti (Sogeti Nederland B.V.):  





-. , , - - . -, . , , , . ( , . . .) , , ... , , , . . , ?





, , , , - . , , , : , , .





, , , , . , , , , , . “ ”, , , , , , . . , , , .  





, , . , . . 





(, - , , , , , , , 16- ).





1.3  

, 40% , , , 1- , 60% 2- 80% 3-, 100%. ! , , , divide et impera ( ). , 80% , , 80% . , , . , , . , , , , . - - GOTO. , , - (branch coverage), . 





, , , , , . .





. , , “ ” , . , , , , . , . .





. 100% , , , , , . - , . : , 10. ( , ) . -. , , , , 1 1012.





- - . : , , -, .   





, 24/7.





, , - . , Lean-, , Toyota, Scrum, (http://www.computer.org/portal/web/buildyourcareer/Agile Careers/-/blogs/autonomation). - , . - , - . . , , , , , , .





: , , - .. , . : “ ”, c J-Tag , - , . , ; , - . - .





, , , , , . . . 





. , . , “” .  





1.4 , ,  

, (, , ), , , , - , , . . , , - , .





- , , , , . ; , . , , . , - . , - . , , - . 





-, . ; ; .  





: , . , , , , , - . , , , . , .





☞ , - , ( -, ). , . 





, , . .  





1.5 ( )  

, . , - - X 5, , , , , , X 5. , , , . ; (, , ) , , , .





. - . ( ; . .) “” “” , . , , . . : “ ?” , “1” - , “0” - , :  





 11111111111111111111111111111111  
      
      



, , . - 32, , , . , , , 5. , : , . . 100%, , , . . ( , .) 





, ?





 1011011000110101101000110101101  
      
      



... . , 32. , . , , , - . , , , . ,   . ( , : 





 00000000000000000000000000000000  
      
      



, , , , .)  





, , , - , , . , , , . . - , , , .





. , , . , , . , , , , , . 





, . , , , , . - . , , .





- .  





- . , , , , (TDD). (, “this” / (non-null) , , . , , , . .)





, - - , -. , : , , , . . 1970- 1980- , (tracebility), . , NP- ( ) ( ), , , . , , : “ , - ?” , : “ ”. , , , . : , , . , . , . , - , .





, - , . , , -. ( , , .) . 





, , , . - ; , , , - . , , . , , , API. , API , . .





☞ , , , “ ”, , . “” -, , , , “”, , . , , . 





1.6 -  

: , , , , . , 99,99% , , . , “”, , (WCA). WCA “” , : 100 . , , (FIT rate) 10 - (Failures In a Trillion).





, , , . , : 





, ( ). , , , , , , . , , . ( : 3- - ( , ) - ( ). , , , , , .. .)





, , WCA , - - : . (side effects) , , , , . . , , . 





, , , , . . , , , - . ( , : , - , , . : (Perry and Kaiser), “ - ” (“Adequate  Testing and Object–oriented Programming”), - 2 (5), 1990 ., . 13). , , . ( “ ” - , { , }, ; - , , , - ). (Halting Problem) , .





1.7 -  

, . , ; , , ( “---”) . - . - . . , , , . , , , , , , ! 





, , , . -, . ( , , , , , , , . , .) , -: , (, Agile ). , XP . , Maven , -, . , , - . , : “, Maven , - - , ”.





200, 2000, 10 000 , (-) , . , , 2005 , - ( ) . , - . ; . , , , , , , , , , , , , , . . , - , , - . , . 





-, , , , - , , , .





1.8 !  

, - . - . , - , . , -, - (TDD). , (coupling and coherence), , ( , (Janzen and Saledian), “ ?” IEEE Software 25(2), / 2008 ., . 77 - 84.) , , , (coupling) . . , . ( , .)  





, -, JUnit,   (assertions). - , , , , , , - . , . .





- , , , , . , , . , : - “ ”, , , . , 5 . : “ - , .” . , . 





- (assertions). . , () () ; -. - , : , , -, . 





, -, , . , , , , - , . , , . , Scrum Knowsy, . , , - , . -, , . , . (Rex) , “ , , ”.





; (Lean) . , ( ) - , .





: - () -, - . , , , , , , ... ! , . , .





1.9 “ , ”  

, - , , . - , , , , , “” . , , , , . -, , - .





. - : , . - . , : - , - . , , .





. “ ” , , . , . , .





. , , (debugging). - , . - . -, ad-hoc ( ) , -, . . , , , . 





1.10

Sogeti. , :  





, , . . , ?





, - , , , , - . , . . 2004 , ( ) . : , , . 





, , , , , , . - , . Sogeti : . . , , , , . : “ , ”. (fail-fast), , . , - , , ; , , , . , , JUnit .





, , , (Nancy Githinji), IT- ; Microsoft. , ( ), , . , . !





, ( ), , , , - , : “ “ ” (fail fast) , , … , - , -”. “ ” , , IT-. , , , “ ”. : “ , …”





, : , . . , - Scrum: , , , , ( ) .





: , . , , , . . : , , . , .





jcoplien@gmail.com .





:  





  • , , -.





  • -, , , , , -.





  • , X - X -, : - .





  • , . 





  • - (assertions).





  • , .





  • : , , , , , .





  • , , . .





  • テストの能力について謙虚になりなさい。テストは品質を向上させません:開発者は向上します。








All Articles