web-dev-qa-db-ja.com

プログラマーはプロジェクトでどのように連携しますか?

私はいつも一人でプログラムしてきました。私はまだ学生なので、他の誰ともプログラムしたことがなく、バージョン管理システムを使用したこともありません。

私は現在、プログラマーが企業内のソフトウェアでどのように連携するかについての知識を必要とするプロジェクトに取り組んでいます。

ソフトウェアはどのようにコンパイルされますか?バージョン管理システムからですか?個々のプログラマーによるものですか?定期的ですか?誰かが何かを作ろうと決心したときですか? 「機能する」ことを確認するために行われるテストはありますか?

何でもいい。

77
Leo Jweda

実際、これらのプロセスには多くの企業と同じくらい多くのバリエーションがあります。意味:すべての企業には他の企業とは少し異なる規則がありますが、ほとんどの場所で一般的に使用されるいくつかの一般的なベストプラクティスがあります。

常に役立つベストプラクティス

  • Allプロジェクトのソースコードとそれをビルドするために必要なものはすべてversion control(ソース管理とも呼ばれます)。 誰でもワンクリックでプロジェクト全体をビルドできるはずです。
    さらに、不要なファイル(オブジェクトファイルまたはコンパイル済みバイナリ)は、リポジトリに追加する必要があります。リポジトリのスペースを無駄にするだけです。
  • すべての開発者は、バージョンコントロールにupdateおよびcommitする必要があります。日。ほとんどの場合、作業が完了し、十分なテストが行​​われているため、些細なバグが含まれていないことがわかります。
  • もう一度:anyoneは、シングルクリックでプロジェクトをビルドできるはずです。これは重要であり、誰にとっても簡単にテストできます。非プログラマー(例えば、上司)も実行できる場合、大きな利点があります。 (それは彼らがチームが何に取り組んでいるのか正確に見ることができることを彼らに感じさせます。)
  • すべての開発者はテストする必要があります追加する新機能またはバグ修正beforeそれらをリポジトリにコミットします。
  • 定期的に(所定の間隔で)リポジトリから自身を更新し、everythingに構築しようとするサーバーを設定しますプロジェクト全体。失敗した場合は、バージョンコントロールへの最新のコミット(どのコミットがビルドに失敗したか)と共にチームに電子メールを送信して、問題のデバッグを支援します。
    このプラクティスは継続的統合と呼ばれ、ビルドはnightly buildsとも呼ばれます。
    (これは、開発者が自分のマシンでコードをビルドしてテストしてはならないという意味ではありません。前述のように、そうする必要があります。)
  • 明らかに、everyoneはプロジェクトの基本的な設計/アーキテクチャに精通している必要があるため、何かが必要な場合でも、チームの別のメンバーがホイールを再発明します。再利用可能なコードを書くのは良いことです。
  • チームメンバー間で何らかのコミュニケーションが必要です。少なくとも少しは、誰もが他の人が何をしているかに気づいているべきです。多いほど良い。これがdaily standupがSCRUMチームで役立つ理由です。
  • 単体テストは、コードの基本機能を自動的にテストするための非常に優れた方法です。
  • バグ追跡ソフトウェア(時々時間追跡ソフトウェアと呼ばれる)は、何を追跡するのに非常に良い手段ですバグがあり、異なるチームメンバーがどのようなタスクを実行しているか。これはテストにも適しています。プロジェクトのアルファ/ベータテスターは、この方法で開発チームと通信できます。

これらの簡単なことにより、プロジェクトが制御不能にならず、全員が同じバージョンのコードで作業することが保証されます。継続的な統合プロセスは、何かがひどく悪化したときに役立ちます。

また、ビルドしないものをメインリポジトリにコミットすることを防ぎます。
実装に数日かかり、他の人がプロジェクトを構築(およびテスト)できないブロックになる新機能を含める場合は、ブランチバージョン管理の機能。

それだけでは不十分な場合は、問題のプロジェクトで可能であれば、自動テストを行うように設定することもできます。

もう少し考えて

上記のリストは、一見すると非常に重い場合があります。 必要に応じてベースでフォローすることをお勧めします。バージョンコントロールとバグトラッカーから始め、その後継続的インテグレーションサーバーをセットアップします。 、必要な場合。 (大規模なプロジェクトの場合は、すぐに必要になります。)最も重要な部分の単体テストの作成を開始します。それで十分でない場合は、それらをさらに記述します。

いくつかの便利なリンク:
継続的インテグレーション毎日のビルドはあなたの友達ですバージョン管理ユニットテスト

例:

バージョン管理のために、私は最近、個人的なプロジェクトに Git を使用する傾向があります。 Subversion も人気があり、たとえば、Windowsサーバーを使用する場合、 VisualSVN の設定は非常に簡単です。クライアントの場合、 TortoiseSVN は多くの人に最適です。 これはGitとSVNの比較です

バグ追跡ソフトウェアの場合、 Jira および Bugzilla が非常に人気があります。以前の職場でも Mantis を使用しました。

継続的インテグレーションソフトウェアの場合、 Teamcity が1つあります(また、 CruiseControl とその 。NET対応 が注目に値します)。

「プロジェクトの主なデザインは誰が決めるのですか?」

もちろん、それは主要な開発者です。
企業では、主な開発者は、プロジェクトの財務/マーケティング担当者と話し合い、企業の財務能力、計画された機能、ユーザーからの要件、および時間に従ってアーキテクチャを決定する人ですそれが利用可能です。

これは複雑な作業であり、通常は複数の人が関与します。チームのメンバーは、プロジェクト全体または特定のパーツの設計について、参加またはブレインストーミングを求められることもあります。

54
Venemo

私も学生です。最近、学期全体が巨大なグループプロジェクトで構成されているソフトウェアエンジニアリングコースを修了しました。最初に、3名で、全学期に12名かかっていたことができたと言ってみましょう。人との仕事は大変です。コミュニケーションが鍵です。

間違いなくリポジトリを利用してください。一人一人がリモートですべてのコードにアクセスし、何でも追加/削除/変更することができます。しかし、Subversionの最も優れた点は、誰かがコードを壊した場合、以前のバージョンに戻して、そこから何が問題になっているかを評価できることです。ただし、コミュニケーションは依然として重要です。競合が発生しないように、チームメイトが何をしているかを把握してください。コードに座ってはいけません。最も効果的になるように、リポジトリにすばやく意味のあるコミットをしてください。

** Redmineなどのバグトラッカーもお勧めします。全員のアカウントを設定し、優先度の異なる人にタスクを割り当て、人が特定の問題を処理したかどうか、またはさらに問題が発生したかどうかを追跡して確認できます。

また、前述のとおり、単体テストは非常に役立ちます。がんばって!これがお役に立てば幸いです:-)

11
Elaina R

大きな点は次のとおりです。

  • プラン —どこに行くのかわからなければ、どこにも行きません。したがって、プロジェクトを開始するには、何人か(多くの場合、プロジェクトグレービアード)がグループに参加して計画を立てる必要があります。計画はあまり詳細である必要はありませんが、それでも必要です。
  • バージョン管理システム —これがないと、一緒に作業することはできません。あなたが物事がコミットされない場合、それらはカウントされないという確固たるコミットメントも必要です。 「ああ、それは私のサンドボックスの1つにあります」というのは、単なる言い訳にはなりません。
  • Issue tracker —メールフォルダーでこれらを追跡することはできません。確実にデータベースでバックアップする必要があります。
  • 通知システム —人々は、物事が彼らが維持するコードにコミットされるとき、または彼らが責任を負うバグに対してコメントがなされるときを知る必要があります。電子メールcanはこれで機能し、IRC(もちろん誰もがそれを使用する場合))。
  • ビルドシステム —実際には問題ありません方法これは、1つのアクションで完全なビルドを取得できる限り、起こります開発サンドボックスとメインリポジトリの両方の現在の状態。これに最適なオプションは、使用している言語によって異なります。
  • テストスイート —テストスイートは、愚かなエラーを回避するのに役立ちます。ビルドと同じくらい簡単に実行できる必要があります(ビルドの一部であることはgoodです)。テストは正確さの大雑把な代用に過ぎませんが、テストは何もないよりもはるかに優れています。

最後に、計画の実現に向けて協力する意欲が必要です。それは非常に頻繁に難しい部分です。

8
Donal Fellows

通常、ビルドアーティファクトをリポジトリにチェックインしないことをお勧めします。リポジトリには、ソースツリー、ビルド構成など、人間が作成したものが含まれます。ソフトウェアエンジニアは、コードのコピーをローカルファイルシステムにチェックアウトし、ローカルでビルドします。

ビルドプロセスの一部として実行される単体テストを作成することもお勧めします。このようにして、開発者は自分の変更によってユニットテストが無効になったかどうかを即座に知ることができ、変更をチェックインする前にそれらを修正する機会があります。

バージョン管理システム(Subversion、CVS、Gitなどの1つ)とビルドシステム(たとえば、JavaにはAntとMavenがあります)のドキュメントを調べてください。 。

7
danben

プログラマーが企業内のソフトウェアで共同作業する方法

開発者がチームとして働くことはありません。チームは最低だ。 ディルバート 面白いのは、彼がグーフィーのようなコミカルなキャラクターだからです。彼は本物であり、人々は彼がいる状況を認識しているので、彼は面白いです。

Comic

5
Andomar

あなたが尋ねていることについての基準はありません。むしろ、慣例があり、これらは組織の規模と成熟度に大きく依存します。小規模な組織の場合、たとえば2、3人のプログラマーであれば、コーディング、ビルド、およびテストを行う個々の開発者にとっては、おそらく非公式なことになるでしょう。

大規模な組織では、専用のビルドエンジニアとプロセスが存在する場合があります。この種の組織は通常、チェックインされたソースコードを使用して、定期的に、たとえば1日に1回、正式なビルドを実行します。このプロセスには、通常BVT(ビルド検証テスト)とおそらくいくつかの回帰テストも含まれます。開発者は、リポジトリからコードをチェックアウトし、独自の部分でローカルに作業してから、チェックインします。

MicrosoftやGoogleなどの最大規模の組織では、完全に専用のグループと完全なラボがあり、多かれ少なかれ継続的に構築して、各実行の結果を利用できるようにします。これらの組織では、チェックインされる内容とチェックインのタイミング、コードレビュープロセスの内容などについて、非常に正式なプロセスと手順が用意されています。

3
jfawcett

ソフトウェア開発を扱うためのクックブックはありませんが、たとえ自分が唯一の開発者であるプロジェクトで作業している場合でも、一般に、バージョン管理システムがビルドシステムの中心になるはずです。この場合でも、バージョンを元に戻してバージョンログを読み取ることができると、バグの修正に非常に役立ちます。これはバージョン管理システムの唯一の機能ではありませんが、これだけでバージョン管理システムのインストール、構成、保守が正当化されます。

ビルドは、新しいコードを追加するときに各開発者が行うか、「ビルドサーバー」によって定期的に行うことができます。最後のアプローチは、より多くのセットアップを必要としますが、ビルドエラーをより早く見つけるのに役立ちます。

2
gclello

短い答え-「場合によります」。

現在、自分でプロジェクトに取り組んでいるので、VCSをビルド/使用するのは私です。 shudderメールでチームが一緒にプロジェクトに取り組んでいる他の場所を知っています。または、VCSを使用する大きな(+5)チーム。

その点について、私は少なくともいくつかのVCSを学ぶことを強くお勧めします、そしてJoel SpolskyはMercurialのための素晴らしい入門 tutorial を持っています。 Bazaar(私の個人的な選択)は似ており、Gitは類似性の点で次に近いですが、おそらくどちらかよりも人気があります(少なくともATM)。その後、SVNがあり、これは比較するとかなり弱いです。

実際、Joel talks あなたのほとんどの質問について-彼が持っている10年間のアーカイブを読むことをお勧めします-それはすべて非常に有用な情報であり、そのほとんどは現在および近未来の状況に関連しています。

2
Wayne Werner

まず、チームはリポジトリを使用して作業します(専門的なバージョン管理、または「ライブ」ディレクトリと見なされる一連のディレクトリのいずれでもかまいませんが、リビジョン管理システムは事実上の標準です)。また、プロジェクトの管理方法は、作業方法(ウォーターフォール、アジャイルなど)によっても異なります。イテレーションで作業する場合は、自己完結型のコンポーネント/プラグイン/モジュール/ライブラリーを構築し、サインオフが完了するまで単体テストを実行します。チームとしてチームで作業するということは、プロジェクト全体で同時に作業するわけではないということです。代わりに、プロジェクトの領域内で実行するタスクを取得します。場合によっては、自分のものではないコードを修正する必要がありますが、これは通常、奇妙な動作が発生したときに行われます。基本的に、開発するパーツのテストを行っています。

これを具体的に説明します。あなたは建設労働者のチームの中にいます。建築家は建物の計画を立て、職長は建設に必要なものを調べ、建設業者を雇います。石工は壁を作り、強度をチェックし、うまく接着します。電気技師は建物内のすべての配線を行うので、電気を流すことができます。それぞれの人には自分の仕事があります。時々、電気技師は、特定の壁を彫ることができる場合はメイソンと話し合いたいと思うかもしれませんが、常に職長と一緒に行います。

これがあなたの助けになれば幸いです!

1
Shyam

適切なプログラミングは、経験から大きな恩恵を受ける深いものです。ペアプログラミングは、複数の認識プロセッサを実行するようなものです...他の人が見ている何かを見落とす可能性があり、通信している限り、大きな進歩をもたらす可能性があります。

1
Hardryv

ソース管理を使用する方法の入門としては、Eric Sinkのソース管理HOWTOがあります http://www.ericsink.com/scm/source_control.html

彼の例では、彼が作成したSourceGear Vaultを使用していますが、その方法は他のバージョン管理システムにも適用できます。

0
ManiacZX

通常、ソース管理システムにはソースコードが含まれており、通常、バイナリはありません。ビルドして実行する場合は、コードをチェックアウトして、ローカルマシンでビルドします。

すべてが機能することを確認するために、夜間ビルドを実行する場所もあります。サーバー側で実行されるいくつかの自動化されたテストがあるかもしれません。ビルドまたは他の何かが失敗した場合、誰かに自動的に通知されます。

0
Donald Miner

これも、オープンソースプロジェクトを検討する必要がある1つの理由です。

大規模なオープンソースプロジェクト(Chromium、Mozilla Firefox、MySQL、人気のあるGnuソフトウェアなど)で作業する主要な開発者は、専門家です。彼らは多くの経験があり、これらのプロジェクトは何百人ものそのような専門家のアイデアで長年にわたって進化してきました。

回答で言及されている他のすべてのもの(計画、バージョン管理システム、問題トラッカー、通知システム、ビルドシステム、テストスイート)は、これらのオープンソースプロジェクトにあります。

実際に体験したい場合は、人気のある大きなオープンソースプロジェクトをいくつか試してから、(バージョン管理を使用して)任意のプロジェクトからソースを取得し、自分でビルドすることを強くお勧めします。

PS:私は学生でもあり、オープンソースプロジェクトに参加することは私の人生でこれまでで最高のことでした。私を信じて!あなたも同じように感じるでしょう。

0
claws