5

私はTDDの方法論全体を把握しようとしています。そのため、これを簡潔な質問として提示する方法がよくわからないため、ここに長く引き出されたバージョンがあります. ボウリング (Martin)、お金 (Feathers)、およびその他の同様のゲーム/単純な例と、完全に機能するエンタープライズ アプリとの間にギャップが生じているようです。

私が理解しているように、機能の概念のようなものが欠けているかどうかを理解しようとしています. 機能の定義が難しいルールである場合、ロギングやエラー報告などは機能ではありません。これは、TDD がログ記録と通知の手段を提供しないということですか?

戦争を始めようとしているのではなく、そうではないと確信しているので、「ビジネス価値」はアプリの途中で顧客のビジネス価値からビジネス(アプリの作成者)のビジネス価値に切り替える必要があると自分に言い聞かせます。

次に、この一般的な例のように切り替えようとします From: As a math idiot From: As a math idiot When I enter 2, press add, enter 2, then press = I want 4 returned.

宛先: システムを監視するシステム アナリストとして、ユーザーが関数を入力して未処理のエラーが発生した場合、アプリケーションの現在の状態、スローされた例外、およびスタック トレースがログに記録され、システム アナリスト配布リストに電子メールが送信されます。 .

ビジネス アナリストとして、すべての顧客注文が処理されるようにします。ユーザーが電子注文を送信し、ルーティングまたは会計情報が検証されない場合、無効な会計およびルーティング情報をログに入力し、注文ファイルを添付して電子メールで送信します。ビジネス アナリスト ユーザー グループ。ネットワークの問題が原因で顧客情報を検索するためにデータベースに到達できなかったことが問題の原因でない限り、ログに「ネットワークの問題により顧客情報を検索するためにデータベースに到達できませんでした」と入力し、エラー メッセージを記載した電子メールをシステム アナリスト配布リスト。

その後、それは完全に受け入れられないと私が思うものに拡張され始めます。電子注文完了チェックとして 注文を受け取ったときに x12 ファイルがフラット ファイルに変換されていることを確認したい。検証または変換ログに失敗した場合はエラーをメールで送信し、注文情報とステータスが抽出され、フラット ファイルがデータベースにロードされるファイルが as400 のキューに送信され、ステータスがデータベースに更新されます。 as400 が注文を受け取ったことの確認を送信し、ステータスがデータベースに更新されます。確認が x12 に変換され、ステータスがデータベースに更新されます x12 確認が適切にルーティングされ、ステータスがデータベースに更新されます 確認が送信されますx12 に無効なデータが含まれている場合、ステータスがデータベースに更新されます。エラーをログに記録し、電子メールを送信します。フラット ファイルが 2 分以内にキューから取り出されない場合は、エラーをログに記録し、x 乗の n などを含む電子メールを送信します。可能なエラー シナリオの。

それぞれを独自の「機能」に分割したとしても、アプリケーションが例外をスローしたこと、ネットワークエラーが発生したこと、データベースが見つからないことなどをシステムアナリストに通知したり、認識されないアカウント番号の注文があったことをビジネスグループに通知したりするという問題がまだあります。これらのいずれかをメソッド、属性などとしてクラスに追加すると、単一責任の原則に違反しているようです。その頃、物事がぐるぐる回り始め、めまい、息切れ、動悸がする

ですから、これを明確な質問として提起する方法さえわからないほど混乱しているので、このように要約してみます。

これらのものをいつ、どこで、どのように分解して分離するかをどのように決定しますか? それらをビジネス価値を提供する最小の部分に分解すると言うのは簡単ですが、他の多くの部分なしでは 1 つの部分を持てない場合、「本当の」答えは何でしょうか? そのすべてが 1 つの付箋には収まりません。

私はより多くの本、チュートリアル、ビデオを含む回答を受け入れていますが、アジャイルとTDDの原則に準拠し、おそらく最も価値のあるこれらの種類のものを説明する現実世界のアプリケーションがおそらくあると思いますか? 確かに、私はこれに比較的慣れていませんが、Martin/Feathers/Osherove の本を読んだことがあります。三目並べ、ボーリング、素数などで多くの型を見てきましたが、ログもエラー報告もありません。その種の「現実世界」のもの。


他のことを試してみましょう。

メインフレームから ftp 経由で、サプライヤに発注する注文をリストしたファイルを取得します。このファイルは概要ファイルと呼ばれます。このファイルを 5 分ごとにチェックします。ファイルがある場合は、それを解析し、この概要ファイルにリストされているすべての注文を MQ 経由で受け取ったことを確認します。二重チェックとして、注文の存在も確認します。なぜなら、要約ファイルを受信できない場合、すべての注文を受信したことを保証できないからです。そうは言っても、次のことは私が正しい方向に向かっているように見えますか?

Feature: Check for the presence of a summary file
  In order to verify all orders were sent through MQ from the mainframe
  a summary file must be found to determine the expected orders.

  Scenario: A summary file has not been sent
    Given a summary file does not exist
    When I check for the existence of a file
    Then I should sleep for 5 minutes

  Scenario: A summary file has been sent
    Given a summary file does exist
    When I check for the existence of a file
    Then I should validate the summary file

Feature: Validate the summary file
  In order to process a summary file
  summary file must be valid

  Scenario: A valid summary file exists
    Given a valid summary file
    When I validate the summary file
    Then I should upload the order details to the order details DB.

  Scenario: An invalid summary file exists
    Given a invalid summary file
    When I validate the summary file
    Then I should log the errors encountered
    And email the erroneous file to the analyst email group

要約を順序に置き換えて、もう一度繰り返します。それが私が思いついたものです。

4

3 に答える 3

6

あなたは次のように考えて軌道から外れています:「...他のいくつかのピースがなければ、1つのピースを持つことはできません...」

ストーリー分割はスキルです。練習が必要で、上手になるのは難しい場合があります。このページでは、概念について説明し、ストーリー分割に関するリソースへのリンクを示します。

あなたが別れるのに苦労したアイデアの 1 つを次に示します。

ビジネス アナリストとして、すべての顧客の注文が確実に処理されるようにする ユーザーが電子注文を送信し、ルーティングまたは会計情報が検証されない場合、無効な会計およびルーティング情報をログに入力し、ビジネス アナリスト ユーザーに添付された注文ファイルと一緒に電子メールで送信したいグループ。ネットワークの問題が原因で顧客情報を検索するためにデータベースに到達できなかったことが問題でない限り、ログに「ネットワークの問題により顧客情報を検索するためにデータベースに到達できませんでした」と入力し、エラー メッセージを記載した電子メールをシステム アナリスト配布リスト。

その段落には少なくとも 4 つの記事があります。

  1. BA として、アカウントとルーティング情報が無効なために注文が失敗した場合、アカウントとルーティング情報を注文ファイルと一緒に BA グループに電子メールで送信して、誰かが正しい情報を取得して注文を再入力できるようにしたいと考えています。

  2. BA として、無効なアカウントとルーティング情報による注文入力の失敗時に、アカウントとルーティング情報をログに入力して、無効な情報の永続的な記録を残してほしいと考えています。

  3. BAとして、「データベースにアクセスできません」による注文入力の失敗時に、データベース/ネットワークの問題が発生しないように、「データベースにアクセスして顧客情報を検索できませんでした」というエラーメッセージをSAリストに電子メールで送信してほしい分析して改善することができます。

  4. BA として、「データベースにアクセスできません」が原因で注文入力が失敗したときに、「ネットワークの問題により、データベースにアクセスして顧客情報を検索できませんでした」というエラー メッセージをログに記録して、永続的な記録を残したいと考えています。データベース/ネットワークの問題の。

また、チームが TDD をうまく行っている場合は、これらの各ストーリーを個別に実装することはそれほど難しくありません。あなたのコードはテストで守られているので、誰かがカード 4 に取り組んでいる人がカード 1 の機能を壊したとしても、うまくいけばテストがそれをキャッチします。

于 2010-06-18T20:14:14.790 に答える
3

最も高度なストーリー (x12 ファイル変換、むかし) に直接ジャンプすることは絶対にできません。未熟なシステムを扱っている場合は、非常に複雑な機能を、反復内で見積もって提供できる理解可能なストーリーに分解する必要があります。

2 番目のユーザー ストーリーから始めます。これで十分だと思います。

システムを監視するシステム アナリストとして、未処理のエラーが発生する機能をユーザーが入力したときに、アプリケーションの現在の状態、スローされた例外、およびスタック トレースがログに記録され、システム アナリスト配布リストに電子メールが送信されます。

これをさらに 2 つのユーザー ストーリーに分割することから始めます。

1) システムを監視しているシステム アナリストとして、ユーザーが未処理のエラーを引き起こす関数を入力したときに、アプリケーションの現在の状態、スローされた例外、ログに記録されたスタック トレースが必要です。これにより、何が起こったかを診断して取得できます。問題を修正するための有利なスタート。

2) システムを監視するシステム アナリストとして、未処理のエラーが発生するたびに電子メールで通知され、問題にタイムリーに対処できるようにしたいと考えています。

最新の開発プラットフォーム (およびそのオープンソース コミュニティ) ではログ記録が簡単になっているため、最初のものをそれ自体でユーザー ストーリーとして明確にする必要さえないかもしれません。

2 番目のユーザー ストーリーを承認してもらったとします。電子メールの処理にライブラリを使用していない場合は、グローバル エラー ハンドラー (未処理の例外が既にログに記録されています) で何をしたいのかを検討するだけで、すぐにテスト駆動開発の実践を開始できます。次のことが必要です。

  • 受信者リスト用に 1 つ以上の電子メール アドレスを取得します。
  • 件名を取得します。
  • 追加コンテンツを取得します。
  • 使用しているメカニズムを介してメールを送信します。

これらのことを行うクラスについて考え始め、インターフェイスをスタブ化し、いくつかのテストを記述します。

要件に関するさらなる詳細は、すべて追加機能です。次の要件では、さまざまな種類の情報をログに書き込む必要があります。その後、メールに添付ファイルを追加できるようにする必要があります。そしてそれは続きます。各ストーリーには複数のクラスが含まれる場合があるため、単一責任の原則が障害になることはありません。

于 2010-06-18T19:27:50.877 に答える
2

私はこれを回避するために少し作業を行ったので、これが役立つかもしれない私が書いたいくつかのことです:

ビジョンを機能、ストーリー、シナリオ、およびコードに分解します。

http://www.infoq.com/articles/pulling-power

ストーリーの分割:

http://lizkeogh.com/2008/09/11/splitting-up-stories/

テクニカルストーリーの処理(ロギングなど):

http://lizkeogh.com/2008/09/10/feature-injection-and-handling-technical-stories/

すべてのフィードバックを歓迎します。

于 2010-06-23T10:30:10.533 に答える