[解決済み] プログラマーはどのように協力してプロジェクトを進めるのか?
質問
私はいつも一人でプログラミングをしています。まだ学生なので、他の人と一緒にプログラミングをしたことがありませんし、バージョン管理システムも使ったことがありません。
今取り組んでいるプロジェクトでは、プログラマーが企業内のソフトウェアでどのように共同作業をしているかという知識が必要です。
ソフトウェアはどのようにコンパイルされるのでしょうか?バージョン管理システムからでしょうか?個々のプログラマーによって行われるのでしょうか。定期的なのでしょうか?誰かがビルドすることを決定したときなどでしょうか?それが動作することを確認するために行われるテストはありますか?
何でもいいです。
どのように解決するのですか?
実は、多くの企業が存在するのと同じだけ、これらのプロセスには多くのバリエーションがあります。意味: どの企業も他とは少し異なる慣習を持っていますが、ほとんどの場所で一般的に使用されている、共通のベスト プラクティスがいくつか存在します。
常に有用なベスト プラクティス
-
すべて
プロジェクトのソースコードと、それをビルドするために必要なものは、すべて
バージョン管理
(ソース管理とも呼ばれます) の下にあります。
誰でも
はワンクリックでプロジェクト全体をビルドできるようにしなければなりません。
さらに、不要なファイル(オブジェクトファイルやコンパイル済みバイナリ)は ではなく なぜなら、それらは非常に簡単に再生成することができ、リポジトリのスペースを無駄にするだけだからです。 - すべての開発者は を更新する必要があります。 と コミット を一日に数回バージョン管理へコミットします。たいていは、作業中のタスクを終了し、十分にテストして、些細なバグが含まれていないことがわかったときです。
- もう一度。 誰でも はワンクリックでプロジェクトをビルドできるようにしなければなりません。これは重要なことで、誰でも簡単にテストできるようになります。プログラマーでない人(例えば上司)もそうすることができれば、大きな利点です。(チームが何に取り組んでいるかを正確に見ることができるのは、彼らにとっても気分がいいものです。)
- すべての開発者 をテストすべきです。 新機能やバグフィックスを追加する際には 前に それらをリポジトリにコミットします。
-
定期的に(あらかじめ決められた間隔で)リポジトリから自分自身を更新するサーバーをセットアップし、そのサーバーでビルドしようとします。
すべて
で
プロジェクト全体
. 失敗した場合は、バージョン管理への最新のコミット(どのコミットからビルドに失敗したのか)と共にチームにメールを送り、問題のデバッグを支援します。
このプラクティスは 継続的インテグレーション と呼ばれ、ビルドはまた ナイトリービルド .
(これは、開発者が自分のマシンでコードをビルドしてテストしてはいけないということを意味するものではありません。前述したように、彼らはそうすべきです)。 - 明らかに 皆 はプロジェクトの基本設計/アーキテクチャに精通している必要があります。再利用可能なコードを書くことは良いことです。
- ある種の コミュニケーション が必要です。誰もが、他のメンバーが何をしているのか、少なくとも少しは知っているべきです。多ければ多いほどいい。そのために デイリースタンドアップ がSCRUMチームにおいて有用である理由である。
- ユニットテスト は、コードの基本的な機能を自動的にテストするための非常に良いプラクティスです。
- A バグトラッキングソフトウェア (と呼ばれることがあります。 タイムトラッキングソフトウェア は、どのようなバグがあり、異なるチームメンバーがどのようなタスクを持っているかを追跡するための非常に良い手段です。また、テストにも適しています。プロジェクトのアルファ/ベータ版テスターは、この方法で開発チームとコミュニケーションをとることができます。
このような簡単なことで、プロジェクトが制御不能にならず、全員が同じバージョンのコードで作業できることを保証します。継続的な統合プロセスは、何かひどく悪いことが起こったときに役立ちます。
また、ビルドしないものをメインリポジトリにコミットするのを防ぐことができます。
もし、実装に何日もかかるような新機能を含めたい場合、他の人がプロジェクトをビルド(およびテスト)するのを妨害するような場合には
ブランチ
機能を使用します。
これで十分でなければ、問題のプロジェクトで可能であれば、自動テストもできるように設定することができます。
その他の考え
上記のリストは、一見すると非常にヘビー級です。私は、このリストを 必要に応じて に従うことをお勧めします。バージョン管理とバグトラッカーから始め、必要であれば継続的インテグレーションサーバをセットアップします。(大きなプロジェクトであれば、すぐに必要になるでしょう。) 最も重要な部分のユニットテストを書き始めましょう。もしそれが十分でないなら、もっとたくさん書いてください。
いくつかの有用なリンク。
継続的インテグレーション
,
デイリービルドはあなたの友達です
,
バージョン管理
,
ユニットテスト
例です。
バージョン管理のために、私はしばしば Git を使うことが多いです。 サブバージョン も人気があり、例えば VisualSVN はWindowsサーバを使えばかなり簡単に設定できます。クライアントの場合は TortoiseSVN が多くの人にとって最適です。 ここでは、Git と SVN の比較をしています。
バグトラッキングソフトウェアの場合。 Jira や バグジラ は非常に人気があります。また、私たちは Mantis も使っていました。
継続的インテグレーションソフトウェアについては チームシティ を一つ(また クルーズコントロール とその .NET 対応の が注目されます)。
質問への回答 "プロジェクトのメイン デザインを決定するのは誰ですか?"。
もちろん、それはリード・デベロッパーでしょう。
企業では、リードデベロッパーは、プロジェクトの財務/マーケティング担当者と話をし、会社の財務能力、計画された機能、ユーザーからの要求、利用できる時間に応じて、アーキテクチャーを決定する人なのです。
複雑な作業であり、通常は複数の人間が関与する。時には、チームのメンバーもプロジェクト全体や特定の部分のデザインについて参加したり、ブレーンストーミングを行うよう求められることもあります。
関連
-
[解決済み] Git で直近のローカルコミットを取り消すには?
-
[解決済み] Gitブランチをローカルやリモートで削除するには?
-
[解決済み] Git で、ステージされていない変更を破棄するにはどうしたらいいですか?
-
[解決済み] ファイルをリセットしたり、特定のリビジョンに戻したりするにはどうすればよいですか?
-
[解決済み] プライベートメソッド、フィールド、インナークラスを持つクラスをテストするにはどうすればよいですか?
-
[解決済み] Git はシンボリックリンクをどのように扱うのですか?
-
[解決済み】"git pull" でローカルファイルを強制的に上書きするには?
-
[解決済み】Gitで複数のコミットの著者名やコミッター名、Eメールを変更する方法は?
-
[解決済み】ローカルのGitブランチの名前を変更するには?
-
[解決済み] Enzyme - How to access and set <input> value?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] mockitoのwhen()呼び出しはどのように動作するのですか?
-
[解決済み] 1つのファイルを以前のバージョンに戻すにはどうすればよいですか?重複
-
[解決済み] なぜGitはSubversionよりも優れているのですか?
-
[解決済み] いつモックすればいい?
-
[解決済み] GUIをユニットテストするにはどうしたらいいですか?
-
[解決済み] "エラー。Karma-Jasmineのユニットテストケースを書いているときに「No provider for router」というエラーが発生しました。
-
[解決済み] Go言語でのテストに適したパッケージの命名法
-
[解決済み] Angular2でEventEmitterをテストする方法は?
-
[解決済み] Githubでテストの成功/失敗を表示するには?
-
[解決済み] ユニットテストはどれだけ深いか?