2017-01-31 8 views
0

私はコーディングが大好きなサイドプロジェクトがあります。できる限り私は時間を費やしています。私はまだ大学の研究を終えているからです。私がそれを始めたとき、良いプログラミングのやり方やTDDをほとんど知りませんでした。私だけがと書きました。コードをテストし続けるか、より多くの機能を実装する必要がありますか?

新しい機能を実装する前に、いくつかの反復、リファクタ、改良、蓄積された知識が私に可能な単体テストと統合テストを書いてくれました。 しかし、私はまだ実際に行うには十分な時間がありませんすべて許容範囲のコードカバレッジを持つためのテスト...ソフトウェアは が動作しますが。

私はこのプロジェクトに費やす時間があるとき、私は多くのテストを行っていない新しい機能(今度はユニットテストを並行して実行する)を実装したいと思う、それらの多くは嘲笑やもののためにするのが難しいです...

私は機能を追加し続けなければなりませんか、それとも前にすべてのテストを終了すべきですか?

私は合理コードカバレッジに到達するまで、ソフトウェアがベータバージョンである必要があり、このことで決定。現時点ではバージョン0.9-betaです。

私は新しい機能を追加する場合、ベータ版を保持しているセマンティックバージョンに従うべきですか?たとえば、次の繰り返しである0.10-beta0.11-betaなどがテストが終了するまで続き、最後にの非ベータ版になります。

あなたは私のプロジェクトを確認したい場合は、ここでのリンクは次のとおりです。私の意見ではoctaviospain.github.io/Musicott

+1

コードカバレッジについては忘れてください。高いコードカバレッジは通常、(値の小さいメトリックではなく)ターゲットに変わります。このとき、テストの品質に影響があります。プログラマーは、覆われていないコードを実行するための不自然な、複雑なテストケースの作成を開始します。代わりに機能性を記述するテストを書くことに集中してください。テストスイートをコードカバレッジで実行します。テストが明確で期待された機能をカバーしている場合、コードカバレッジは実際にはコードが必要ないことを示します。それをカバーするためのテストを書くのではなく、それを削除してください。 – axiac

+0

まあ、8%は実際には低いコードカバレッジです。より多くのテストを書くことができますが、テストするものの目安として行単位のコードカバレッジを使用しないでください。テスト済みのコードを書いた後でもテストを書くことは、アプリケーションフローをよりよく理解するのに役立ちます。 – axiac

+0

@axiacあなたの答えをありがとう、私はより多くのオープンソースプロジェクトのgithubのように、プロジェクト_をもっと良く見せるために、より高いコードカバレッジを持っていたいと思っていました。私は、ターゲットに戻ることは、自分のコードをテストする適切な方法ではないことを理解しています。 – ottogarcia

答えて

5

既存のコードのテストはテスト駆動開発ではありません。あなたのコードが正しく動作しないかもしれないと心配している場合、私はそれを行うようなサイドプロジェクトのために。既存のコードをテストしたい場合は、受け入れテストを作成します。

アクセプタンステストは、ユーザのストーリーをカバーするテストであり、ユーザが実行したい一連のアクションを意味し、システム全体の動作が要件を満たしているかどうかを確認します。受け入れテストは主にエンドツーエンドのテストであるため、システムをあまりにもモックする必要はありません。これらの受け入れテストを行うことで、システムが共通のユーザー入力に適切に反応することが確実になります。

その後、TDDサイクルを使用して新しい機能を追加することに集中できます。 私はそこで受け入れテストを使うことをお勧めします。まず、機能やユーザーストーリー全体をカバーする受け入れテストを作成し、受け入れが完了するまでRed-Green-Refactorサイクルを繰り返します。それまでに、機能が正しく動作していることを知っていて、次の機能を開始することができます。

アクセプタンステストの詳細については、「Growing Object Oriented Software、Guided By Tests」をお読みください。時にはちょっと退屈になり、著者は何度か繰り返しますが、読む価値はあります。

+0

あなたの答えをありがとう。私は受け入れテストでは直接考えていませんでしたが、代わりにシステムテストでは、ユーザー入力がGUIに入力されるアプリケーションがあるためです。私はあなたが言うように、結果は同じであると思います:正しい機能を達成するためにユースケース/ユーザ/ストーリーをカバーするテストを記述します。 私は、既存のコードに対してTDD書き込みテストを実行しようとしているとは言及していませんでした。私は適切な瞬間にTDDをやっていないと言ってみましたが、コードの量が多く書かれた後にテストを書きたいと思っていました。 – ottogarcia

1

、あなたはそれがあまりにも時間がかかることになるので、一度のすべてのテストを書くことを試みるべきではないと奇妙な仕事を達成する。テストがコードの設計を導き出すことはなく、リファクタリングしない限りコードの品質に影響を与えないので、すでに書かれたコードのテストを書くことはTDD(IMHO)のようなものではありません。ちょうどそれ以上のコードについては、必ずテストを書くようにしてください。それで、特定の機能の作業を開始するときは、高レベルの統合/回帰テストを作成することを忘れないようにしてください。

これは、あなたのコードが十分に書かれていて、十分にtestableと書かれていることを前提としています。そうでない場合は、作業を開始する前に、まず機能に関連するコードを箇条書きおよびリファクタリングする必要があります。

関連する問題