すべてまたはほとんどのコーディングがスプリントの最後まで行われない場合、テストはコーディングと同じスプリント内でどのように処理されますか? (私は、スプリント内の単一のPBIの「スープからナッツ」への開発とテストについて言及しています。)
私がオンラインで見た回答のほとんどはQA自動化に関するものですが、自動テストを記録または作成するには機能的なUIが一般的に必要なので、それは実際には不可能です。私は機能を開発し、新しい要件を発見するにつれて進化し続けるストーリーボードしか持っていません。
私の場合、新しいデスクトップアプリケーションを開発しています。デスクトップアプリは、通常、自動テストにあまり適していません。自動化された単体テストがありますが、QAプロフェッショナルが実行する手動の機能/統合テストではありません。
つまり、今のところ、スプリントは明日終了しますが、私はまだコーディングを完了していて、QA担当者はまだテストするものがありません。手を握らずに自分が与えたものをテストする方法がわかりません。
私はこのジレンマを抱えた最初の人ではないと確信しています。
過去にパイプラインを作成しました。現在のスプリントでは、テストチームが前回のスプリント中に実装された機能をテストします。現在の仕事では、PMはこのアプローチを「ウォーターフォール」と呼んでいるため、受け入れられません。
ユーザーストーリー(米国)をテストせず、受け入れ基準が満たされていることを確認した場合、このストーリーは行われません。それが行われない場合、この米国はもちろん次のスプリントに進みます。そして、すべての米国がこの状態にある場合、スプリントはプロジェクトに付加価値がなく終了しました。クライアントの観点から見ると、休暇中の開発チーム全体とこれを区別することはできません。
無駄のない原則の1つ(アジャイルはスクラムで終わらない)は、「品質が組み込まれている」と述べています。定義した品質基準を満たしている場合にのみ、何かが行われます。これは、実際のアジャイルプロセスを実現するために重要です。ゼロの値で春を終えるか、開発とは別にテストを行うことは、大きな問題の兆候です。
あなたができることはたくさんあります:
自動化は成功への鍵です。少なくとも単体テストレベル、およびCIのような他のプラクティスも重要です。これでは十分ではありませんが、これらのタイプのテストを適切に実行すると、手動テスト(通常はマイナーなUIの問題)で発見されたバグがほとんどまたはまったくありません。専任のQA担当者がいる場合は、受け入れテストを自動化する担当者にすることができます。この自動化の一部は、スプリントを完了する前に開始できます。
ユーザーストーリーのサイズを確認します。米国のスプリントの最初の2日間が終了した場合、3日目はQA担当者がテストできます。私の意見では、小さな(SMART)ユーザー履歴があることは、アジャイル開発で成功するための最も重要なことの1つであり、多くの人々はこれを認識していないようです。
テスターと開発者間のコラボレーションも成功の重要な部分です。私の以前のプロジェクトでは、USが開発者によって終了したときに、QA担当者が開発者と「ペアテスト」を行います(手動でも、いくつかの自動化、またはより優れた起動でも可能)、これはかなりうまくいきます。
本質的な問題は、コーディングするがテストしないプログラマーと、テストするがコーディングしないプログラマーがいることです。
その問題を解決すれば、この問題はなくなり、間違いなくより効率的なチームになります。
過去に私にとってうまくいった方法の1つは、完全にテストされたストーリーを提供するという明確なタスクとストーリーを組み合わせるようにコーダーとテスターに提案することでした。それに伴い、「開発完了」の考えをすべて消し去りました。スクラム/カンバン/トレロボードに「開発完了」列はなく、プログラマーは「開発完了」の態度を取りません。
起こったことは:
ペアはストーリーを配信する責任があり、ストーリーが完了しなかった場合、どちらも失敗します。彼らは、ソフトウェアの提供を担当する責任ある専門家として扱われ、ほとんどの場合そうでした。
テスターは単体テストと統合テストにさらされていたため、同じテストを手動で繰り返す必要がなかったため、実行するテスト作業ははるかに少なくなりました。
一部のテストは、開発者がテスターに必要なものをよりよく理解したときに自動化されました。
一部の人々は動揺しました。
コードコミットプルテストサイクルがほぼ瞬時になったため、ストーリーは平均して速く配信されました
もちろん、これは私の逸話的な体験にすぎませんが、できれば自分で試してみたいと思うかもしれません。
あなたの場合、テスターと開発者があなたの会社で正式に分離されているというあなたのコメントを考えると、メッセージは私には明白に思えます。会社のルールによってもたらされるコミュニケーションとコラボレーションには明らかな障壁があります。
これは通信の問題であり、アジャイルの問題ではありません。アジャイル手法の採用は、それを明らかにするだけです。サイロ化されたチームは 既知の管理アンチパターン なので、この場合はアジャイルの非適応性を受け入れます!
QAの実際の役割は、受け入れテストに近いものです。これは、開発チームの一部ではなく、製品の所有者として機能する別のチームによって行われると想像します。
例:スプリント中に、さまざまな基準で検索結果をフィルターできる機能を追加する必要があります。検索メカニズムはすでに実装されていますが、結果はアルファベット順に並べられています。
スプリント中:
チームは、新機能の設計と実際のコードベースへの影響を起草します。
開発者は、順序が期待どおりに機能していることを確認する単体テストを作成すると同時に、実際のコードを作成します。
新しい機能は、何も壊さないように(回帰テスト)、期待どおりに機能するように(単体テスト)、慎重にテストされています。
可能で適切な場合、ほとんどのプロジェクトではそうではありません、製品所有者(およびQAチーム)はチームが間違った方向に進むのを防ぐために、常に新しい機能を評価してください。これには、毎日数十のビルドとの継続的な統合が必要です。
スプリント後、製品の所有者は新機能を評価して、それが顧客のニーズに対応していることを確認します。スプリントが終了した後、QAチームは実際にここにいます。
あなたの実際の問題は次のとおりです:
スコープ。スプリントはチームに関係し、チームのみに関係し、製品所有者としてより多くの役割を果たす実際のQAには関係しません。
テスト。あなたがQAチームを持っているという事実は、あなたがしなければならないすべてがコードを書くことだけであるということを意味しません。 チームの仕事は、期待どおりに機能する機能を提供することであり、他の人がテストするためのコードを捨てないことです。 QAチームにテストを依頼してもらうと、これにより、バグはほぼ即座に修正されるのではなく、1〜2週間後に修正されるため、全体的なコスト。
すべてまたはほとんどのコーディングがスプリントの最後まで行われない場合
なぜ早く終了しないのですか?この重要な制限が問題の原因であり、2つのアプローチが成功するのを見てきました。 1つはアジャイルアプローチによく適合しますが(他の一般的なプラクティスには当てはまりません)、他のテイントは少しアジャイルです(しかしより一般的です)。
1つ目は、スプリントが終了するまでコードを記述しないことです。実際にコードを書くことは、開発の比較的小さな部分です。スプリントの半分ほどのところを終えれば、QAが仕事をするのに十分な時間が与えられます。また、ドキュメントを書いたり、技術的負債を整理したり、バックログアイテムの設計を行ったりするための十分な時間も残します。高品質の製品のために必要なその他すべてのこと。私が見たこの欠点の1つは、機能を取得することがほぼ不可能であることですおよび単体テストが迅速に実行されました。個人的には、単体テストを行うのはまったく問題ないと思いますafter QAに機能の調査を開始させますが、TDD擁護者(およびその他の人々)はこれに同意しません。
2番目のオプションは、PM嫌いなように、QAが開発スタッフの背後でスプリントを操作することです。私もこれを嫌う傾向があります。スプリントの最後にある「リリース可能な製品」の概念がなくなります。 、リリースのエスカレーションプロセスがある場合でも、さらに悪いことに、開発者はQAがテストからの質問またはバグを彼らに持ってくるとき、「新しい」ものに集中します。開発者もこの配置のバグを修正する可能性はより低いです。しかし、私は時間通りに高品質のソフトウェアを生成することを確認しました。
スクラムガイドでは、チームが部門の枠を超えて行動する必要があります。個々の専門分野に関係なく、すべてのチームメンバーは開発者と見なされます。サイロ化された個人(コーダー、テスター、QA、UXなど)は、スクラムでは役に立ちません。チームメンバーは、できる限り互いに助け合います。 「アイテムをqaに渡す」という概念はありません。
あなたの状況では、見積もりの問題があるように聞こえます。製品のバックログアイテムを見積もるときは、allアクティビティ(つまり、コーディング、テスト、ピアレビュー、展開、統合)を検討する必要があります。
大まかな目安として、5〜15の製品バックログアイテムを1つのスプリントに含めることを期待します。これにより、各製品バックログアイテムの大きさがわかります。また、スプリント内で「完了」する作業を行う絶好のチャンスも得られます。
最後に、チームのタスクは、1つの製品バックログ項目を「完了」に移動してから、次の項目に移動することです。時々、これをすることは人々が互いにつま先で踏みつけていることを意味するので、一度に複数の製品バックログをスピンアップすることは理にかなっています。ただし、ガイドラインは、進行中の作業(WIP)を減らし、製品のバックログ項目を完了に移動することです。
テストとコーディングは密接に関連しています。モジュールごとにスケジュールできます。モジュールが完成したら、テスターに提供できます。このシナリオ全体は、作業しているテストのフェーズによっても異なります。 Spiral SDLCモデル よさそうです。その点で、テストとコーディングを同時に行うと便利です。別のアプローチは Vモデル です。
私の答えは、おそらく最初はかなり奇妙ですが、テストは副作用で行う必要があると思うので、テストする時間が見つかりませんコードの。そして副作用とは コンピュータサイエンスの用語 :
関数(...)は、値を返すことに加えて、(...)が(...)外界との観測可能な相互作用を持っている場合、副作用があると言われています。
私は「外界との相互作用」の部分を強調するために引用を持ち出しました。画面に印刷されたときにUIでテストを実行したいのです(「[テストを開始する]は、一般に機能が必要なので、実際には不可能です自動テストを記録または作成するためのUI」)。
他の回答では、この「受け入れテスト」を自動化して、迅速に実行できるようにするよう指示されています。これは正しいですが、元の問題に完全には対処していません。これらの受け入れテストを作成するのに十分な時間がない場合はどうなりますか?
コードが外の世界と相互作用した場合、つまり、コードが何かを出力し、何らかの入力が期待されるようになった場合は、テストの見方を手放す必要があります。副作用の問題は、実際にはテストできないことです。これは、Guido van Rossumへのインタビューを読んでいるうちに私に明らかになりました。彼は、コンピューターをシャットダウンするステートメントは、実行することによってのみ機能することを証明できると述べました。
その「アンテスタビリティ」の解決策は、ステートメントが機能することを一度証明した場合、それをどこでも使用でき、その機能に頼ることができることを理解することです。それを関数に分離し、その他すべてをテストします。
その例を質問に近づけると、関数はおそらくライブラリ全体またはフレームワークになり、コンピューターをシャットダウンする代わりに、ユーザーインターフェイスを出力します。アプリケーションのその部分に入ると、高価な受け入れテスト(つまり、ある種の外部観測)を介してのみテストできるので、呼び出しをできるだけ簡潔で、できるだけ安定させます。 。
あなたが提供していないライブラリのロジックをテストする必要がないため、UIを「外国の領域」と見なすことは実際には正しい見解であり、おそらく驚くべきことに、それは現実的な見解です。たとえば、その呼び出しをテストすることを期待しますMyWidget.draw()
は、単一ピクセルのレベルまで期待どおりに動作しますか?
これは、受け入れテストが重要ではない、またはスキップできるということではありません。他の回答が示唆しているように、それを維持して自動化することには大きなメリットがあります。ただし、同じスプリントでテストしてコード化する時間を見つけたい場合は、コードにできるだけ副作用がないようにしてください。