説明するサイクルは正常です。物事を改善する方法は、このサイクルを回避することではなく、それを合理化することです。最初のステップはそれを受け入れることです:
- プロジェクトの初日にすべてを知ることはほぼ不可能です。
- どうにかしてすべてを知っていても、プロジェクトを終える頃には、何か(クライアントの要件、彼らがいる市場、あなたが働いている技術、顧客の希望)が変わってしまいます。無効または不正確であることがわかっているものの少なくとも一部。
したがって、すべてを前もって計画することは不可能であり、可能であっても、その計画に従うと、不完全または時代遅れの何かを構築することになります。これを知って、変更を計画に統合します。あなたのステップを見てみましょう:
- いくつかのユースケースから始めます
- コーディングを開始
- うまく処理できず、現在のコードベースにうまく適合しないいくつかのことを理解してください。
- コードの大部分を書き換える
それは実際には素晴らしい出発点です。アプローチ方法は次のとおりです。
1.いくつかのユースケースから始めます
良い。「ユースケース」と言うことで、あなたはソフトウェアの目的に焦点を合わせています。「少数」と言うことで、あなたはすべてを発見しようとしているのではありません。管理しやすい量の仕事にこだわっています。ここで追加するのは、優先順位を付けることだけです。クライアントまたはエンドユーザーと一緒に、この質問に対する答えを見つけてください。
あなたの状況を改善するために私があなたに与えることができるソフトウェアの最小で最も単純な部分は何ですか?
これは最小の実行可能な製品です。これよりも小さいものはユーザーにとっては役に立たないが、それよりも大きいものは計画が早すぎます。これを構築するのに十分な情報を入手してから先に進みます。この時点ですべてを知っているわけではないことに注意してください。
2.コーディングを開始します。
すばらしいです。できるだけ早く作業を開始します。コードを書くまで、クライアントはゼロの恩恵を受けています。計画に費やす時間が長いほど、クライアントは返済なしで待機する時間が長くなります。
ここで、良いコードを書くためのリマインダーを追加します。SOLID Principlesを覚えて従い、壊れやすいものや複雑なものについてきちんとした単体テストを書き、忘れそうなものや後で問題を引き起こす可能性のあるものについてメモします。変更によって問題が発生しないようにコードを構造化したいと思います。これを行うには、そのような方法ではなく、この方法で何かを構築することを決定するたびに、コードができるだけ少なくなるようにコードを構築します。一般的に、これを行う良い方法は、コードを分離することです:
- シンプルで個別のコンポーネントを使用します(言語と状況に応じて、このコンポーネントは関数、クラス、アセンブリ、モジュール、サービスなどになります。また、多数の関数を含むクラス、または多数のクラスを含むアセンブリ)
- 各コンポーネントは1つのジョブ、または1つのことに関連するジョブを実行します
- 1つのコンポーネントの内部動作の方法を変更しても、他のコンポーネントを変更する必要はありません
- コンポーネントには、取得または作成するのではなく、使用または依存するものを与える必要があります
- コンポーネントは、必要があります与える他のコンポーネントに情報をしてではなく、仕事をするためにそれらを求めるフェッチ情報を、作業そのものをやって
- コンポーネントは、他のコンポーネントの内部動作にアクセスしたり、使用したり、依存したりしてはなりません-公的にアクセス可能な機能のみを使用してください
これを行うことで、変更の影響を隔離し、ほとんどの場合、問題を1か所で修正でき、残りのコードは気付かないようにします。
3.デザインの問題または欠点に遭遇します。
これは起こります。やむを得ない。これを受け入れます。これらの問題の1つを見つけたら、それがどのような問題であるかを判断します。
いくつかの問題は、ソフトウェアがすべきことを実行するのを難しくするコードまたは設計の問題です。これらの問題については、戻って問題を修正するために設計を変更する必要があります。
いくつかの問題は、十分な情報を持っていないか、以前は考えもしなかった何かを持っていることが原因です。これらの問題については、ユーザーまたはクライアントに戻って、問題の解決方法を尋ねる必要があります。答えが得られたら、デザインを更新して処理します。
どちらの場合も、コードのどの部分を変更する必要があるかに注意を払う必要があります。また、コードをさらに書くにつれて、将来どの部分を変更する必要があるかを考える必要があります。これにより、どの部分が相互にリンクされすぎている可能性があり、どの部分をより分離する必要があるかを簡単に判断できます。
4.コードの一部を書き換える
コードを変更する方法を特定したら、変更を加えることができます。コードを適切に構造化した場合、通常は1つのコンポーネントのみを変更しますが、場合によってはいくつかのコンポーネントを追加することも含まれます。多くの場所で多くのことを変更しなければならないことがわかったら、それがなぜなのかを考えてください。このコードをすべて内部に保持するコンポーネントを追加し、これらすべての場所でそのコンポーネントを使用するようにできますか?可能な場合は変更してください。次回この機能を変更する必要がある場合は、1か所で実行できます。
5.テスト
ソフトウェアの問題の一般的な原因は、要件を十分に把握していないことです。これは多くの場合、開発者のせいではありません。多くの場合、ユーザーは必要なものがわからないこともあります。これを解決する最も簡単な方法は、質問を逆にすることです。「ソフトウェアに何が必要なのか」と尋ねる代わりに、これらの手順を実行するたびに、これまでに作成したものをユーザーに提供し、「これを作成しました-必要なことを行いますか?」彼らが「はい」と言ったら、あなたは彼らの問題を解決する何かを構築したので、仕事をやめることができます!彼らがノーと言うなら、彼らはあなたのソフトウェアのどこが悪いのかをより具体的な言葉であなたに伝えることができます。
6.学ぶ
このサイクルを経て、見つけている問題と行っている変更に注意してください。パターンはありますか?改善できますか?
いくつかの例:
- 特定のユーザーの視点を見落としていることに気付いた場合、そのユーザーを設計段階により深く関与させることができますか?
- テクノロジーとの互換性を保つために物事を変更し続けなければならない場合、コードとそのテクノロジーの間のインターフェースを構築することで、インターフェースを変更するだけで済みますか?
- ユーザーがUIの単語、色、写真、またはその他のことについて考えを変え続けている場合、アプリケーションの残りの部分にそれらをすべて1か所で提供するコンポーネントを構築できますか?
- 多くの変更が同じコンポーネントにあることがわかった場合、そのコンポーネントが1つのジョブだけに固執していると確信しますか?それをいくつかの小さな断片に分割してもらえますか?他のコンポーネントに触れることなく、このコンポーネントを変更できますか?
アジャイルになる
ここに向かっているのは、アジャイルとして知られる働き方です。アジャイルは方法論ではなく、多くのこと(Scrum、XP、Kanbanなど)をすべて取り入れた方法論のファミリーですが、それらに共通しているのは、物事が変化するという考えです。変更を回避または無視するのではなく、変更に適応することを計画する必要があります。その中核となる原則のいくつか-特に、あなたの状況に関連するもの-は次のとおりです。
- 自信を持って予測できるよりも先に計画しないでください
- あなたが行くにつれて物事が変化することを考慮してください
- 一度に大きなものを構築するのではなく、小さなものを構築してから段階的に改善する
- プロセスにエンドユーザーを巻き込み、迅速で定期的なフィードバックを得る
- あなた自身の仕事と進歩を調べ、あなたの過ちから学ぶ