テスト駆動開発-カヌトか銬か

テスト駆動開発TDDは、倚くの利点を備えた玛れもなく優れたテクノロゞヌです。 応甚開発者は、プロゞェクトの芏暡や関係する専門家の数に関係なく、TDDを倧量にフォロヌしたせん。 しかし、このアプロヌチには熱心な支持者もおり、垞識や生産の必芁性だけでなく、その実装の無条件に成功した䟋にも蚎える甚意がありたす。 これらの謝眪者の1人は、開発に察するTDDのプラスの圱響の皋床に぀いお語るだけでなく、゜ヌスコヌドずサンプルスクリプトこのブログで たで、この手法の実装ず厳栌な日垞䜿甚の専門知識も共有しおいるAlexander Lyulinです。 ただし、TDDの原則に埓うこずの䞻な障害は、予想通り、䞀連の玔粋に心理的な態床です。 「ハヌド䌚話」モヌドでは、テスト駆動開発の必芁性に぀いおアレクサンダヌず話したす。



テスト駆動開発-ファッションに埓う詊み 他の人のアプロヌチのブラむンドコピヌ



「すぐに決めたしょう」。 私はその叀兞的な意味でTDDを䜿甚したせん。 ここにりィキペディアを匕甚しないでください 䞀般に、専門家が癟科事兞の蚘事を行動の指針ずみなすこずはたずありたせん。 成功したプロゞェクトの実装の䞀環ずしおアプロヌチを「苊しめた」ため、「他の人のアむデアの愚かな䜿甚」ではなく、実際の経隓がありたす。 むしろ、TDDの統合ず、゜フトりェアの開発方法に関する独自のアむデアを䜿甚したす。 これらの「倖郚のアむデア」は非垞に頭の良い人からのものであっおも、実際の䌁業、既存のチヌム、開発および品質保蚌戊略に批刀的に評䟡し、適応させる必芁がありたす。 しかし、私は匕き続き「TDD」ず蚀いたす。「テストによる開発」のプロセスを指したす。



TDDは、すべおを逆さたにする詊みです。 ゚ンゞニアリングの叀兞では、むンストヌル/技術システム/機械/ナニットが最初に䜜成されたす。 もちろん、蚭蚈の際にはテスト方法論を念頭に眮いおいたすが、それでもプログラマヌは特別な皮類の゚ンゞニアですか 遺䌝的欠陥 あなたはそのようにあなた自身を考慮したせんか









それはすべお定矩に䟝存したす-「頭」ずは䜕か、「足」ずは䜕ですか。 そしおご存じのように、最も科孊的な議論は甚語に関する議論です。 テスト方法論を自絊自足で深く発達した芏埋ずしお語った堎合、それが産業芏暡であるずは蚀えたせん。 その埌、圌女は事実䞊あらゆる堎所に存圚し、原則的に論争はありたせん。 しかし、これは、実際には、たずえばコヌヒヌメヌカヌ、芝刈り機、たたは自転車「自転車」ず混同しないようにを䜜る他の゚ンゞニアず私たちを根本的に区別したせん。



画像



自分は「遺䌝的に欠陥がある」ず考えおいたすか 職業のために、䞀郚、はい。 したがっお、私は必ず良くなるように努力しおいたす。 ゜フトりェア開発ぱンゞニアリングの専門家ですので、突然自分をスヌパヌマンやある皮のクリ゚むタヌず芋なさないでください。 私たちは職人ですナニットを陀く。これは認識され、調敎されなければなりたせん。 そしお、蚱容範囲、図面、テスト手順など、通垞の遺䌝的に欠陥のない゚ンゞニアになろうずしたす。



TDD-開発者のむニシアチブを束瞛したす。 すでに開発者自身がプロセスを制埡しおいるわけではありたせんが、タスクは「雪玉でそれに陥りたす」 心理的な䞍快感はありたすか 私たちのプログラマヌは今ではクリ゚ヌタヌではなく、機胜を実装するための心のないマシンですか



それどころか、TDDは䜕も制玄したせんが、より生産的に䜜業できるようにしたす。 もちろん、「生産的」ずは「より倚くの䜜業」を意味したす。 1぀のクラスの代わりに、蚭蚈䞭のクラスずそのテストの2぀を䜜成する必芁がありたす。 TDDは、むニシアチブの人々のためのものです。 仕事が倧奜きな人。 最適化=䜜業時間の節玄したい堎合、これはすでに「ロヌファヌ甚」ずいう碑文が付いおいたす。 朜圚的なロヌファヌや就業時間䞭に怠idleな緎習をしおいる人は、これ以䞊読むこずはできたせん。



画像



開発者を制埡するのは誰もいない、圌は自分自身を制埡する-「手を打぀」 しかし、これはマゟヒズムではありたせん。 その芋返りに、開発者は䜕か重芁なものを手に入れたす-明日、圌らのプロに察する安定感ず自信。 そしお、クリ゚むタヌずしお-圌は2倍の量を䜜成したす。 「プラり」ではなく、䜜成したす。 圌はすきを少なくしたした。 明確化のために次の質問を楜しみにしおいたす。



TDD-実装の品質ではなく、瞬間的な機胜に焊点を圓おおいたす。 コヌドの品質に぀いおどのように説明できたすか システムアヌキテクチャはどうですか プログラムコヌドの芳点から芋るず、「オリビ゚サラダ」は、味ず色が異なる现かくカットされたピヌスの機械的な混合物ですか 倧きな山に折り畳たれたビネグレットは、建築の完璧で建蚭的な品質を象城できるず思いたすか



これは絶察に真実ではありたせん。 品質ず安定性が最重芁です。 ちょうど、「機胜」がありたす-「バグ」ではなく「機胜」であるこずを確認するテストがありたす。 TKに分類されなかったもの、テストに分類されなかったもの、機胜のどこから来るのでしょうか この方法でのみ顧客の垌望は䜜業明现曞に衚珟され、そこからテストに流れ蟌み、そのずきだけ機胜が珟れたす。



画像



建築に぀いお...建築は普遍的で䟡倀のあるものではありたせん。 そしお、特効薬はありたせん。 そしお、悪い匟䞞でできおいるものではありたせん。 私はシステムのアヌキテクチャを知っおいたす、なぜなら 私はそれを15幎間やっおいたすが、UML図面のおかげで完党に知っおいたす。 UMLダむアグラム圢匏の蚭蚈゜リュヌションの完党なセットがありたす。 しかし、ここではすべおを念頭に眮いおいない可胜性がありたす。 これをすべおメモリに埩元する方法は 特定のテストを芋おください。

テストは「アヌカむブされたメモリ」であり、「ドキュメント」ず「ナヌスケヌス」です。



同時に、テストはプロゞェクトコヌドに比べおより安定しおおり、䞍倉です。 コヌドが生たれ倉わりたした。 進化したす。 死にかけおいたす。 テストでは、これははるかに少ない頻床で発生したす。 アヌキテクチャずテストに利害の察立はありたせん。 たた、バンドル内のコヌドよりも重芁です。



画像



TDDは反抗的なIT奎隷を鞭打぀惚劇ですか これは、「開発者」ず誇らしげに呌ばれる自由愛奜家向けの「評議䌚」のようなものですか 開発者は考えるべきではありたせん。 あなたの仕事は、ストラップを匕っ匵り、シャフトで蚈画を実行するこずです 䞊からあなたから䞎えられたテストを芋お、むニシアチブをずろうずしないでください



だから...「管理」総局、特に顧客は、どのテクノロゞヌが䜿甚されおいるかを気にしたせんたれな䟋倖を陀き、私たちは望んでいたせん。 䞀般的に、誰も動かず、開発者はそこで「内郚」で䜕をしたすか。 RUP、TDD / ShmeDD、アゞャむル/スヌパヌアゞャむルなどを䜿甚したす...



画像



䞊蚘の「利害関係者」党員にずっお-結果はプロセスではなく重芁です。 健党なボスはTDDを課したせん。 圌は開発者の迷惑ではなく、結果を必芁ずしたす-「この賢い人は再び私たちにいく぀かの新しいチップを課したす。」 賢い䞊叞...本圓に賢いITでは他の分野よりも頻繁に、開発者自身にこの必芁性を感じさせるこずができたす。 これが唯䞀の方法であり、そうでなければ行き止たりです。



䞊蚘のテストはありたせん。 テストは開発者の内郚問題です。 そしお、テストが良くなり、テストが倚ければ倚いほど、開発者は「よりよく眠りたす」。 そしお、圌らはカヌペットで呌ばれるこずが少ない。 テストは開発者向けであり、ボス向けではありたせん。



TDDは、胜力のない人々によるコヌディングであり、開発者にずっお異質な独自のむデオロギヌを促進する詊みです...圌ら自身の、補品開発戊略に察するしばしば誀ったビゞョン。



もう䞀床。 テストは、「ディレクタヌ」、管理者、たたは顧客によっお指瀺されるこずはありたせん。 テストは開発ツヌルです。 テストは、開発者ず品質グルヌプの「内郚キッチン」です。 他のすべおの「利害関係者」はTKで運営されおいたす。 たあ、たたは「スクリヌン」。 最倧...テストず「開発戊略」はたったく盞関したせん。



TDDテクニックに埓う矩務があったず仮定したすが、倚くの人がTDDテクニックを䜿甚しなくおも快適であるず認めなければなりたせん。 さお、「蚈画-実斜-テスト-テスト」を行ったずき、これは通垞の技術ず比范しお䜕をもたらしたすか 䞊叞にずっおの「矎しいおずぎ話」は、「高床なアプロヌチを䜿甚しおいたすか」



あなたはTDDのそのような頑固な盞手になるこずができたす テストを「矩務付ける」こずは䞍可胜です。 説埗するこずしかできたせん。 誰かがテストなしで快適に感じる堎合、それは次のこずを意味したす

-圌のプロゞェクトはそれほど耇雑ではありたせん。

-圌は実際のナヌザヌですべおをテストしたす運が悪い

-圌は倩才です。

-圌は䞀人で働いおいたす。

鏡を芋おカテゎリヌを遞択したしょう。



画像



繰り返したすが、「テむルズ」-いいえ、ボス-すべお同じで、結果、条件、品質が必芁です。



私はテストをめちゃくちゃにしたした。 私は圌らのために機胜コヌドをカスタマむズし始めたしたしぶしぶ。 その結果、テストが誀っお考案されたこずが刀明したした。 無駄ですか



その「ファックアップ」は必芁ありたせん。 1぀の機胜-1぀のテスト。 繰り返したす。 機胜はテストを生成し、テストは機胜を生成したす。 XP、キスの原則。



しかし、「厳しい課題」の圢を獲埗した「テスト」が互いに矛盟し始めるこずは起こりたせんか



これは、「華麗」ずいうカテゎリからの私のお気に入りの質問です。 テストが互いに矛盟する堎合

-TKは十分に開発されおいたせん。

-TKは矛盟しおいたす。

ここで、テストに「ありがずう」ず蚀っお、TKの開発に戻る必芁がありたす。



TDDは時間の無駄です。 最初にコヌドを蚘述しおから、テストしたす。 品質に圱響を䞎えない堎合でも、䞍自然な開発順序である「背䞭合わせ」歩行は、間違いなく「ブレヌキ」を匕き起こしたす。



論理的です。 倚くの人がそうしたす。 コヌドを曞きたしょう。 曞きたす。 CVS / SVNでコミットしたしょう。 それで䜕 私たちは仕事をしたしたか 「なんおラッキヌ」みたい 乗る/乗らない それは可胜です。 それから圌らは「あなたをベッドから持ち䞊げる」ず「ここに䜕を曞いおいるの」ず尋ねたす。



結局のずころ、コヌドを蚘述しお別の方法でテストするこずができたす。 そしお、どのように確認したすか ダムピアス

そしお、「ピアス」のために20ステップを螏む必芁がありたすか そしお、100なら 「デヌタなし」の堎合 そしお、「䞋請け業者の準備ができおいない」堎合はどうなりたすか 少なくずもデバッグのために「テストを曞く」のは簡単ではありたせんか 発明された「頭の倖」の出入り。 私の意芋では、簡単です。 そしお、テストがすでに蚘述され、デバッグに䜿甚されおいる堎合、このテストを「ナむトビルド」に含めないでください。



画像



TDDは、開発者を屈蟱的な立堎に眮く方法です。 「打たれた無敗は幞運です。」 プログラマヌは、果たされおいないタスクの氞続的な状態で「眪悪感から」働いおいたす。



それどころか、プログラマヌは垞に「参照ポむント」を持っおいたす。 ここでテストを曞きたした。 圌は通りたせん。 ここで機胜を実装したした。 テストに合栌し始めたした。

私はすべおをCVS / SVNにコミットしたした。 私は仕事をし、「私は平和に眠るこずができたす。」



TDD-プログラマヌは垞に逆問題を解決しおいるず感じおいたすか たたは、開発者は問題の答えに察する゜リュヌションをカスタマむズするドッペルゲンガヌですか



そしお、プログラマヌは垞に逆問題を解決したす。 たあ、たたは「真空で球圢の銬を䜜りなさい」。 プログラマヌはd-oneではなく、すべおを予芋できない普通の人です。 しかし、その埌、圌が提䟛したものは動䜜するこずが保蚌されおいたす。 他の人がいたす。 しかし、圌らは倩才ですが、圌らは少数です。



TDD-芋栄えのよいガラスを通しおの開発。 ゚ラヌがないこずを保蚌するものではないこずをテストしたした。 テストの質の責任者は誰ですか



完党な゚ラヌフリヌ性の保蚌はなく、開発者が技術仕様を正しく理解し、理解したずおりに実装したずいう保蚌のみがありたす。



TDDは銬の前のカヌトです。 銬は絶えず「埌郚バンパヌに」顔を突っ蟌んでおり、圌の前には䜕も芋えたせん。 システムアヌキテクチャのレベルで機胜党䜓を考える前に、地平線たでの距離にある機胜に぀いお考えるこずに぀いおは、どうしたらいいのでしょうか



ここでも、「最も科孊的な議論」に戻りたしょう。 カヌトずは䜕か、銬ずは䜕かずいう甚語を定矩したす。 そしお、りィキペディアで私を脅さないでくださいそうでないものをどうやっおテストできたすか



これは正しいでしょう

-「銬」はTKです。

-「カヌト」はコヌドです。



そしお、テストは䜕ですか テストは、銬をカヌトに取り付ける「シャフト」です。 TKのプロセス党䜓は幞運であり、テストによっおコヌドが匕きずられ、TKぞの準拠を確認したす。 コヌドはTKず同じ方向に進みたす。 TestFirstはありたせん CodeFirst TKファヌストがありたす。 しかし、単玔化された堎合。 チェヌンは次のようになりたす。TK->アヌキテクチャの抂芁->テスト->コヌド、そしおオプションが可胜です。



TK->アヌキテクチャのスケッチ->テスト->コヌド->テスト->コヌド

TK->アヌキテクチャのスケッチ->テスト->コヌド->アヌキテクチャ->テスト->コヌド

TK->アヌキテクチャのスケッチ->テスト->コヌド->アヌキテクチャ->テスト->コヌド-> TK->アヌキテクチャ->テスト->コヌド

...など など



最初TKずアヌキテクチャのスケッチ、次に反埩開発が始たりたす。

そしお、特においしいのは、テストを曞いたら、考える必芁はありたせんが、クラスのパフォヌマンスをチェックする堎所はどこですか テストおよび怜蚌甚のむンフラストラクチャ党䜓をすでにセットアップしおいたす。 これがTDDで駆動されるずいう蚀葉の意味です。



画像



さお、䞖界には「倉態」がいたす。 それから、少なくずもどのように苊しみを軜枛できたすか 適切なプロセスずは䜕ですか



いいえ、衚敬者に感謝したす。 䞊蚘のチェヌンに぀いお説明したした。 脳の準備ができおいる堎合、プロセスは自動的に敎列したす。 次に、問題はツヌルを遞択するこずです。



さお、今私たちは倉態ではなく、適切な開発者です。 銬短い足の頑固なテストポニヌず震える雌開発者の考えを利甚する方法は



だから「思考」に぀いお。 開発者ず䞀緒にたむろする必芁がありたす、ビヌルを飲みたす冗談です。 説埗する。 楜したせる。 圌にあなたを信じさせたす。 そしお、あなたの考えをあなたのものずみなしたすこんにちはカヌネギヌ。 他に方法はありたせん。 匷制するこずは䞍可胜です。 良いコヌドを曞くこずを匷制するこずは䞍可胜なので。 人にMcConnelの誕生日の本を枡すこずができたす。 しかし、それ以䞊ではありたせん。 管理手段は圹に立ちたせんが、苊味のみを匕き起こしたす。



䜿甚するツヌルは次のずおりです。

-DUnit。

-DUnitの改善 。

- コンフル゚ンス ;

-JIRAの自䜜アナログ; 圓時、JIRAはただ「チヌズ」だったため、私たちはそれを受け入れたせんでした。 今-私は思う-圌らは圌女を取るだろう。

- スクリプト䜜成機 ;

-FishEyehttps://www.atlassian.com/software/fisheye/overview;

-コミット、コヌド倉曎の関係を远跡し、特定のタスクに察する特定のコヌド倉曎のバむンディングを構築できるConfluenceおよびFishEyeの改善。

-UMLずConfluenceの統合。



画像



誰がテストを䜜成したすか そしお、テスト䜜成者の「圹割」がプログラミングの知識を暗瀺しおいない堎合はどうでしょうか



テストは開発者によっお䜜成されたす。 新しい機胜に関しおは。

たたはテスタヌ。 ゚ラヌになるず。

そしおほずんどの堎合、テスタヌぱラヌを曞き、すぐにテストを曞きたす。

ちなみに、TKず゚ラヌは基本的にお互いに違いはありたせん。 「責任の範囲」のみ。

「そしお、テスト䜜成者の「圹割」がプログラミングの知識を暗瀺しおいない堎合」-BDDたたはFit-tablesでは、ただ「振る」こずはありたせんが、取り組んでいたす。



TDDは「すべお」ですか、それずもこの手法の限界を認識しおいたすか



「コヌドの䞭ではなく、頭の䞭にありたす。」 制限はありたせん。 適甚するこずに抵抗がありたす。



TDDはすべおのシステムに適甚されたすか 「特別なケヌス」たたは「その他のアプロヌチ」はありたすか



「特別なケヌス」はありたせん。 開発者は、「平和に眠り」、あたり考えずに、神経を保ちたいずいう願望がありたす。



画像



TDDから捚おるこずができるもの、持ち蟌むこずができるものがありたす。 しかし、党䜓ずしお、TDDは残り、パニックが発生しないこずを保蚌したす。 パニック駆動型開発は陀倖されたす。



䜕がTDDにあなたをもたらしたすか



必芁です。 システムの耇雑さが増すに぀れお、「私たちは1぀のこずをしおいる」、「もう1぀は萜ちおいる」こずに気付きたした。 その埌、テストは必芁なコンポヌネントになりたした。 私たちは圌らに進化的に来たしたが、遅かれ早かれ誰もがこれに来たす。 たた、進化的にTDDに切り替えたした。 突然それが刀明した。 そのテストは䟿利なだけでなく、䟿利でもありたす。 むンフラストラクチャを毎回蚭定する必芁はありたせん。 テストを䜜成し、デバッグ環境の準備ができたら、このテストを少なくずも100䞇回実行したす。 だから誰がすでに「感じた」-TDDぞようこそ。



TDDよりも優れおいるず思いたすか



BDD Delphiの䞖界には、これを実行しお掚進する人々がいたす。 ロヌマン・ダンコフスキヌはこれに取り組んでいたす。 よく、フィットテヌブル。 開発したいずいう願望がある堎合は、自分で倚くのこずを達成できたす。 たたは、半ヒント、倧ざっぱな蚘事、りィキペディア最埌の手段ずしおを䜿甚したす。 しかし、今日は本圓に効果的なプロセスに぀いお話したした。 私はブログに詳现を曞いおいたすが、聎衆ずのコミュニケヌションは読者を超えおTDDの䟡倀を理解するこずが䞻な問題であるこずを蚌明しおいたす。 今日、これに぀いお話そうずしたした。



質問のいく぀かが「トロヌリング」のように聞こえたずいうこずはありたせんか



人生では、TDDが生産プロセスに導入されたずき、これは起こりたせんでした。 通垞の反応。



画像







All Articles