タグ付けされた質問 「development-methodologies」

16
一人に最適な開発方法論?
私は、自分が唯一の開発者、プロジェクトマネージャー、デザイナー、QT担当者(はい、わかっています...悪い!)であるプロジェクトに多くの時間を費やし、時にはクライアントでもあります。 私は、フリースタイルで座って仕事をするだけでなく、プロジェクトがどれだけ時間がかかるまで、プロジェクトを計画し、自分自身を管理するためにあらゆることを試しました。 -男は毎朝チャートを燃やします(冗談ではありません)。 一人で仕事に多くの時間を費やしている人にとって、自分自身を整理し、(1人の)大規模なプロジェクトを管理し、生産性を可能な限り高く保つ最良の方法は何ですか?

10
なぜアジャイルがテスト駆動開発(TDD)であり、開発駆動テスト(DDT)ではないのですか?
したがって、アジャイルは初めてですが、テスト駆動開発ではありません。大学の私の教授は、テスト、コード、そしてテストのアイデアについてすべてでした。理由がわかりません。私の観点からは、多くの初期費用であり、おそらくコードが進化するにつれて変更されるでしょう。 これが私がTDDを想像し、それが私を混乱させる理由です。TDDの請負業者として家を建てる場合。 すべての仕様(ストーリー)を教えてください。 仕様の承認を取得します。 すべての仕様を検査に分解します(今後参照してください)。 検査官に電話してそれらの点を見て、今私は検査に失敗していると教えてください(ありがとう)。 家を建て始めます。 インスペクタを毎日コールバックします(2/100を渡します)。 ああ、私の理解に問題があったので、今度は9つの検査を追加して、27を変更する必要があります。 1/109を渡すインスペクターを呼び出します。 畜生。なぜインスペクターはこのようなものではないのでしょうか...ああ、そのメソッド名を更新しました... さらにビルドします。 UGGGGHHHHのその他の変更により、いまいましいインスペクタを更新できます。ああ、私は失敗していません。 もう終わった? さて、それは奇妙なことかもしれませんが、すべてのメソッドをどのように知るべきか、そしてコードがそこに来るまでどのように機能するかはわかりません。99%の時間、戻ってユニットテストを更新する必要があります。ただ逆に思えます。 より適切と思われるのは、DDTまたは開発主導のテストです。これは、コミュニティが忘れてしまったことのように思えます。 私の理解では、家のDDTは次のようになります。 すべての仕様(ストーリー)を教えてください。 仕様の承認を取得し、それらを分割します。 ユニット(基礎)を開始します。 トリッキーなロジックのメモ(コメント)を取ります。 最後に次のユニットの検査を開始します(テストを作成します)。 見つかった問題を修正し、再度検査します。 このユニットが次のユニットに移動することを承認しました。 私たち全員が正直であるならば、それはより人間的で、開発者とビジネスに集中しているとは思わないでしょうか?変更をより速く行うことができ、オーバーヘッドなしでTDDが作成されるようです。

25
率直に言って、カウボーイコーディングが好きですか?[閉まっている]
アジャイル、ウォーターフォール、RUPなど、政治的に正しい方法論を擁護するほとんどのプログラマー。それらの一部は方法論に従いますが、すべてではありません。率直に言って、方法論を選択できれば、確かに主流の「正しい」方法論に行くのでしょうか、それともカウボーイプログラミングのような「より簡単な」方法論を好むでしょうか。どうして? 私はそれが依存することを知っています。いつ使用するか説明してください。カウボーイコーディングにはどのような利点がありますか。 ウィキペディアでカウボーイコーディングについて参照してください

10
卒業予想と現実[終了]
私たちが勉強したいものを選択し、私たちのキャリアと人生をどうするかを選択するとき、私たちは皆、それがどのようになるかについていくつかの期待を持っています。ほぼ10年間業界に携わってきた今、私は(コンピューターサイエンスを勉強していた頃の)プログラミングワーキングライフがどのようなものになるのか、実際にどうなるのかについて少し考えてきました。あります。 私の2つの最大のショック(または、期待を裏切る)は、ソフトウェアに関わるメンテナンス作業の量が非常に多いことと、プロフェッショナリズムの全体的な欠如です。 メンテナンス:uniでは、ソフトウェア作業の大半は既存のシステムのメンテナンスであると言われました。だから私は抽象的にこれを期待することを知っていた。しかし、これがどれほど圧倒的であるかを正確に想像することはできませんでした。おそらくそれは私が精神的にmentalめたものであり、私はもっと多くのクールな新しいものをゼロから構築することを望んでいました。しかし、実際には、ほとんどのジョブは、圧倒的にメンテナンス、バグ修正、およびサポート指向です。 プロフェッショナリズムの欠如:大学では、商用ソフトウェアの仕事は非常にプロセス指向であり、厳密に設計されているという印象が常にありました。ISOプロセスのイメージ、一連の技術文書、すべての機能とバグが厳密に文書化され、一般的にプロフェッショナルな環境がありました。ほとんどのソフトウェア企業が、学期規模の大規模なプロジェクトに取り組んでいる学生チームと同じように運営されていることに気づいたのは、大きな衝撃でした。そして、私は小さなアジャイルハックショップと中規模の企業の両方で働いてきました。私はそれが常にあからさまな「非専門的」だとは言いませんが、ソフトウェア産業は(全体として)私が期待していた強力なエンジニアリングの規律とはかけ離れているように感じます。 他の誰かがこれに似た経験をしましたか?私たちの職業がどのようになるかについてのあなたの期待が現実と異なっていた方法は何ですか?

9
アジャイル開発方法論の実行可能な代替手段はありますか?
2つの主要なソフトウェア開発方法論は、ウォーターフォールとアジャイルです。これら2つを議論するとき、それらを区別する特定のプラクティス(ペアプログラミング、TDDなどと機能仕様、大きな先行設計など)に多くの焦点が置かれることがよくあります。 しかし、実際の違いははるかに深く、これらの慣行は哲学に基づいているという点です。 Waterfall氏は次の ように述べています。 アジャイルは言う: 変化は避けられないので、変化を安くする。 私の質問は、TDDや機能仕様についてどう考えているかにかかわらず、ウォーターフォール開発の方法論は本当に実行可能かということです。 ソフトウェアの変更を最小限に抑えることは、貴重なソフトウェアを提供することを望む人々にとって実行可能なオプションであると本当に考えている人はいますか?それとも、避けられない変化を管理するために、私たちの状況でどのような実践が最も効果的に機能するのかという質問ですか?

7
リファクタリングの潜在的な価値を測定する方法
技術的な負債を抱える古い大規模なプロジェクトでは、リファクタリングコードの利点をどのように確実に推定または測定できますか? たとえば、古い言語で記述されたソフトウェアスタックソリューション内のコンポーネントと、新しい言語で記述された後のコンポーネントがあるとします。このソリューションには、開発チームによって常に新しい機能とバグ修正が追加されています。 開発者は、既存の古い言語コンポーネントを新しいバージョンに置き換えることは「良いこと」だと提案します。ただし、この作業によって追加の機能は追加されず、x開発日数かかります。 営業担当者は、「すばらしい新機能」を追加することを提案しています。会社は数式を使用して提案の価値を測定します。すなわち。x dev-daysの作業コストで、t年間でFポンドを獲得します。 どうすれば会社はリファクタリングの提案に意味のあるコストをかけることができますか?そして、どのような状況下でそれが会社にとって最も収益性の高いオプションになる可能性がありますか?

17
毎日のスタンドアップ-はい、またはいや?[閉まっている]
毎日のスタンドアップミーティングはどれほど価値があると思いますか(またはそうでないと思いますか)? あなたがそれに慣れていない場合、これはスクラムの支持者の一部である毎日の会議を指します(および他のいくつかのアジャイル方法論)。アイデアは、15分のタイムボックスで毎日会議を開催し、全員が立ち向かわなければならないということです(人々がそのポイントになるように促すため)。 会議では、部屋を歩き回って各自が次のように言います。-昨日あなたがしたこと-本日あなたがすることを計画していること-進行の妨げや障害 この実践には価値があると思いますか?誰かがそれをした場所で働いたことがありますか、あなたはどう思いましたか?

9
チームでさまざまな開発スタイル(トップダウンとボトムアップ)に対処する方法は?
たとえば、{現在は比較的小さいが、将来的には大きくなる可能性がある}プロジェクトで、非常に小さなチームで作業を始めたばかりだとしましょう。これは、実際の世界の他の開発者が使用することを目的とした実際のプロジェクトであり、学期の終わりに廃棄されることを意図した学術プロジェクトではないことに注意してください。 ただし、コードはまだ他の人にリリースされていないため、まだ決定が確定していません。 方法論 コーディングを開始して、すべてのコンポーネントがどのように正確に相互作用するかを明確に理解する前に、ピースを一緒に合わせることが好きです(ボトムアップ設計)。もう1人は、最初に設計全体を行い、ソリューションをコーディングする前にすべてのコンポーネントと通信の詳細を特定することを好みます。 既存のシステムを模倣するのではなく、新しいシステムで作業しているため、適切な最終設計がどのように見えるかが必ずしも明らかではないと想定します。そのため、チームでは、チームメンバーごとに、最終製品にどのような要件が必要であるかについてのアイデアが異なることがあります。 ボトムアップ開発者がいくつかのコードを書くとき、トップダウン開発者は、コードが手元の問題を解決するかもしれないという事実にもかかわらず、設計で想定される潜在的な将来の問題のためにそれを拒否します。問題の解決策をコーディングする前に。 トップダウン開発者がコードを書き始める前に完全な設計と想定される問題を解決しようとすると、ボトムアップ開発者は実際に問題の一部が実際に発生するとは思わないため、ボトムアップ開発者はそれを拒否します、および要件と制約がより明確になったときに、設計を将来変更する必要があるかもしれないと考えています。 問題 これにより、ボトムアップ開発者は設計上の欠陥のためにボトムアップ開発者が書いたソリューションを廃棄すべきであると頻繁に判断するため、ボトムアップ開発者が時間を無駄にしてしまうという問題があります。 -コードを記述します。 トップダウン開発者は、作業を並列化する代わりに、ボトムアップ開発者と正しい設計を行うために頻繁に座って、2つをより速くなる可能性があるまで直列化するため、時間が無駄になります1人が2人よりも仕事をする。 両方の開発者は協力を続けたいと考えていますが、実際にこの組み合わせが実際にどちらかを支援しているようには見えません。 目標 共通の目標は、明らかにコーディングの効果を最大化する(つまり、時間の浪費を最小化する)ことと、有用なソフトウェアを書くことです。 質問 簡単に言えば、どのようにこの問題を解決し、この状況に対処しますか? 時間を無駄にしないと考えることができる唯一の効率的なソリューションは、各開発者が自分のデザインのスタイルに従うようにすることです。しかし、これは、コードをレビューして、お互いの変更を実際に承認する必要があるとき、および他の人が使用するための一貫したフレームワークを設計しようとしているときに聞こえるよりも困難です。 もっと良い方法はありますか?

8
テスト駆動開発(および一般的なアジャイル)のこの制限は実際に関連していますか?
テスト駆動開発(TDD)では、最適ではないソリューションから開始し、テストケースを追加してリファクタリングすることにより、より良いソリューションを繰り返し生成します。ステップは小さいと想定されています。つまり、新しいソリューションはそれぞれ前のソリューションの近くにあることになります。 これは、勾配降下法やローカル検索などの数学的なローカル最適化方法に似ています。このような方法のよく知られた制限は、グローバルな最適値、または許容可能なローカルな最適値を見つけることを保証しないことです。開始点が悪い解の大きな領域によってすべての許容可能な解から分離されている場合、そこに到達することは不可能であり、メソッドは失敗します。 より具体的に言うと、いくつかのテストケースを実装した後、次のテストケースではまったく異なるアプローチが必要になるというシナリオを考えています。前の作業を破棄して、最初からやり直す必要があります。 この考え方は、TDDだけでなく、小さなステップで進行するすべてのアジャイルメソッドに実際に適用できます。この提案されたTDDとローカル最適化の類推には重大な欠陥がありますか?

5
あるチームで設計し、別のチームでコーディングする
私は、すべてのソフトウェア設計がローカルチームによって行われ、これらの設計がコーディングのためにオフショアチームに送られるプロジェクトに関与します。 この特徴を持つプロジェクトに直面するのはこれが初めてであり、私にとってはちょっと奇妙に感じます。マネージャーは、私たちが非常に詳細な設計文書を作成することを期待しています。私の観点からは、IDEで行うことはできますが、彼らは紙でコーディングすることになります。 だから、私の質問はこのアプローチが良いですか、それとも正しいですか?ソフトウェアプロセスがプロジェクトで成功するために必要な主な考慮事項は何ですか?

9
ソフトウェアエンジニアリングについて間違った考えを持っていますか?[閉まっている]
私の最新の仕事(むしろインターン)によって提起された質問があります。 状況を整理するために-私は21歳で、大学の2年目を終えてから、システム管理/ QAの仕事を2年ほど経験しましたが、基本的には、 ITセクターが運営されています。現在にさかのぼり、ここに私が英国の主要な研究機関の1つで実習生を募集しています。 私がしなければならないのは、さまざまなテクノロジー(主にAWS / Java / Bash)を使用して内部ツールを作成することです。すべては大丈夫です、私は仕事をしていますが、私は幸せではありません。なぜですか-アドホックな問題で働くことが期待されているからです。それは、設計に時間を費やすことなく、ものをすばやく作成することです。私のマネージャーは、問題が発生するとすぐに問題を「急ぐ」ことが予想されると明示的に述べました。結果として、物事をやり直し、再設計する必要があり、それらはまだ完全ではないことが判明しました。テストに関する限り-最小限に抑えてください。動作しているようであれば、問題ありません。 この仕事のやり方に反対するのは間違いですか?システム全体を考え、さまざまなコンポーネントに焦点を合わせ、それらがどのように相互作用するかを見て、将来問題になる可能性のあるさまざまな「キーポイント」に焦点を合わせたいと思うのは間違っていますか?「迅速な仕事」ではなく、良い仕事をしたいのは犯罪ですか?特定の問題セットに応じて最適なものを選択できるように、問題に適用可能なデータ構造を調査するのは間違いですか、それとも間違った態度ですか?私の理解の限りでは、「ソフトウェアエンジニアリング」の「エンジニアリング」ビットはこれと正確に関係しています。問題の領域を調査し、情報に基づいたソリューションを考え出し、必要に応じて改良しますか。 私は英国のArm'sオフィスでインタビューに行ってきましたが、彼らは彼らのSCRUMルームを見せてくれました。問題の解決には時間がかかる場合があります-SCRUMの通常のこと-「ここ」での実行方法とはまったく異なります ソフトウェア業界全般について間違った考えを構築しましたか?そのことについてあなたの意見を聞きたいです。純粋でシンプルなものを作りたいからといって、純粋にソフトウェア開発を「始めた」のですが、質の高いものを作りたいのです。さまざまなシナリオでソフトウェアが使用されていることを確認したいのですが、完全な証拠を見たいと思います。それがすべてのソフトウェアエンジニアの原動力ではないでしょうか。構文を学ぶだけで誰もがプログラマー/コーダーになることができると思いますが、私にとって本当の楽しみは、現実世界で実行可能な設計を実際に考えなければならないときに始まります。 私は大学の課題を見て、コーディングを直接開始していたため、75%を超えるマークを簡単に取得でき、「ソフトウェア開発ライフサイクル」モジュールを高く評価することはありませんでした。しかし今、現実の世界で、正式なプロセスや、要件が明日変更されるかどうかわからない状況に内在するフラストレーションなしで作業するのがどれほど悪いかを見たとき、 「要件分析を明確に定義していない?) 私は、一部の人々が汚い仕事をするのにコードモンキーを必要とするだけの地位に着いたと信じているのが本当に好きです。これは、ソフトウェアの世界がどのように動作するかということではありません。

1
開発者アナーキーとは何ですか?
開発者(またはプログラマー)アナーキーについて読んでいますが、これはアジャイル開発後の方法論として請求されているようです。私は(それにいくつかのリソースを発見した1、2)そこにたくさん出ていないようです。 私はそれについてもっと知ることができる良いリソースがあるかどうか疑問に思っていました-実装方法、賛否両論、他の方法論との比較など

11
継続的に変更する必要のないソフトウェアを書くことは可能ですか?
私は多くの異なる言語で多くのソフトウェアを書きました。また、VerilogとVHDLを使用してFPGAで使用するハードウェアを「書きました」。 私はソフトウェアよりもハードウェアを書くことを楽しむ傾向があり、主な理由の1つは、「完了」して変更する必要のないハードウェアを書くことができるからだと思います。インターフェイスと機能を定義し、テストベンチを書く、ハードウェアモジュールを実装してから、シミュレータを使用してそれをテストします。次に、そのハードウェアモジュールをビルディングブロックとして使用して、より大きくより良いものを作成できます。そのモジュールに機能を追加する必要がある場合は、2番目のモジュールを作成し、そこに機能を追加します。元のモジュールは問題なく機能し、引き続き有用であるため、元のモジュールを捨てることはありません。 ソフトウェアに関する私の主な不満の1つは、「完了」しないことです。追加する別の機能が常にあります。多くの場合、機能を追加すると、以前は正常に機能していた別の場所にバグが発生します。これは、インターフェイスに違反していない限り、ハードウェアでは発生しません。 明確にするために、機能のリストを使用して何かの1つのバージョンを構築することを支持していません。それは永遠です。左側のコードを突いて右側のバグを見つけたくないのですが、これは新しい機能を追加した後に起こるようです。 ハードウェアが「書き込まれる」のと同様の方法でソフトウェアを書くことは可能ですか?既存のコードを書き直したり新しいバグを導入したりすることなく、常に前進を続け、新しい機能を追加できる優れたソフトウェア開発方法論はありますか?

7
アジャイルの最初の数回の反復で何を提供しますか?
私が理解しているように、アジャイル方法論のアイデアは、機能的なものを提供し、頻繁にそれを提供することです。アプリケーションは、増分後に最終的な形状の増分になります。 しかし、初期のイテレーションでは、アプリケーションが基盤となるフレームワークまたは基盤を構築する可能性があります。これは重要なことですが、ユーザーには見えません。 これらの最初の反復でクライアントに配信されるものは何ですか?足場コードをビルドするとき、正しい方向にどのように進行状況を表示しますか?

7
スクラムスプリントは、可能な限り速いペースで機能するということですか?
この投稿を改善したいですか?引用や回答が正しい理由の説明など、この質問に対する詳細な回答を提供します。十分な詳細のない回答は、編集または削除できます。 私は最近、より正確にアジャイル、スクラムを行ういくつかの企業にインタビューしましたが、私にはアジャイルとは思えないものがいくつかあります。私が特に興味を持っているのは、スクラムスプリントのケースです。 私が話した特定のプロジェクトマネージャー(はい、私はプロジェクトマネージャーと言いました)は、彼女のチームの人々が、勤務時間を過ぎても家に帰らないことを理解していることを誇らしげに述べました、仕事がどれだけかかっても家に帰ります。行間で読んだことは、できる限り多くの機能をスプリントにまとめ、それを実現するために残業することです。 今、私は今までにアジャイルをやっていません(ほとんどの場合、ウォーターフォールを好む金融機関や政府機関と協力しました)が、私の理解は次のとおりです: スクラムのスプリントは、アジャイルの一般的な反復の名前です。 チームは持続可能なペースで作業し、長期的な残業を避けるように努める必要があります。これは、短時間にしか影響を与えず、その影響は長期間に発生する問題によってd小化されるためです。 私の声明は正しいですか?そして、マネージャーのプレゼンテーションを危険信号とみなすべきですか?

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.