私はいつも一人でプログラムしてきました。私はまだ学生なので、他の誰ともプログラムしたことがなく、バージョン管理システムを使用したこともありません。
私は現在、プログラマーが企業内のソフトウェアでどのように連携するかについての知識を必要とするプロジェクトに取り組んでいます。
ソフトウェアはどのようにコンパイルされますか?バージョン管理システムからですか?個々のプログラマーによるものですか?定期的ですか?誰かが何かを作ろうと決心したときですか? 「機能する」ことを確認するために行われるテストはありますか?
何でもいい。
実際、これらのプロセスには多くの企業と同じくらい多くのバリエーションがあります。意味:すべての企業には他の企業とは少し異なる規則がありますが、ほとんどの場所で一般的に使用されるいくつかの一般的なベストプラクティスがあります。
これらの簡単なことにより、プロジェクトが制御不能にならず、全員が同じバージョンのコードで作業することが保証されます。継続的な統合プロセスは、何かがひどく悪化したときに役立ちます。
また、ビルドしないものをメインリポジトリにコミットすることを防ぎます。
実装に数日かかり、他の人がプロジェクトを構築(およびテスト)できないブロックになる新機能を含める場合は、ブランチバージョン管理の機能。
それだけでは不十分な場合は、問題のプロジェクトで可能であれば、自動テストを行うように設定することもできます。
上記のリストは、一見すると非常に重い場合があります。 必要に応じてベースでフォローすることをお勧めします。バージョンコントロールとバグトラッカーから始め、その後継続的インテグレーションサーバーをセットアップします。 、必要な場合。 (大規模なプロジェクトの場合は、すぐに必要になります。)最も重要な部分の単体テストの作成を開始します。それで十分でない場合は、それらをさらに記述します。
いくつかの便利なリンク:
継続的インテグレーション 、 毎日のビルドはあなたの友達です 、 バージョン管理 、 ユニットテスト
バージョン管理のために、私は最近、個人的なプロジェクトに Git を使用する傾向があります。 Subversion も人気があり、たとえば、Windowsサーバーを使用する場合、 VisualSVN の設定は非常に簡単です。クライアントの場合、 TortoiseSVN は多くの人に最適です。 これはGitとSVNの比較です
バグ追跡ソフトウェアの場合、 Jira および Bugzilla が非常に人気があります。以前の職場でも Mantis を使用しました。
継続的インテグレーションソフトウェアの場合、 Teamcity が1つあります(また、 CruiseControl とその 。NET対応 が注目に値します)。
もちろん、それは主要な開発者です。
企業では、主な開発者は、プロジェクトの財務/マーケティング担当者と話し合い、企業の財務能力、計画された機能、ユーザーからの要件、および時間に従ってアーキテクチャを決定する人ですそれが利用可能です。
これは複雑な作業であり、通常は複数の人が関与します。チームのメンバーは、プロジェクト全体または特定のパーツの設計について、参加またはブレインストーミングを求められることもあります。
私も学生です。最近、学期全体が巨大なグループプロジェクトで構成されているソフトウェアエンジニアリングコースを修了しました。最初に、3名で、全学期に12名かかっていたことができたと言ってみましょう。人との仕事は大変です。コミュニケーションが鍵です。
間違いなくリポジトリを利用してください。一人一人がリモートですべてのコードにアクセスし、何でも追加/削除/変更することができます。しかし、Subversionの最も優れた点は、誰かがコードを壊した場合、以前のバージョンに戻して、そこから何が問題になっているかを評価できることです。ただし、コミュニケーションは依然として重要です。競合が発生しないように、チームメイトが何をしているかを把握してください。コードに座ってはいけません。最も効果的になるように、リポジトリにすばやく意味のあるコミットをしてください。
** Redmineなどのバグトラッカーもお勧めします。全員のアカウントを設定し、優先度の異なる人にタスクを割り当て、人が特定の問題を処理したかどうか、またはさらに問題が発生したかどうかを追跡して確認できます。
また、前述のとおり、単体テストは非常に役立ちます。がんばって!これがお役に立てば幸いです:-)
大きな点は次のとおりです。
最後に、計画の実現に向けて協力する意欲が必要です。それは非常に頻繁に難しい部分です。
通常、ビルドアーティファクトをリポジトリにチェックインしないことをお勧めします。リポジトリには、ソースツリー、ビルド構成など、人間が作成したものが含まれます。ソフトウェアエンジニアは、コードのコピーをローカルファイルシステムにチェックアウトし、ローカルでビルドします。
ビルドプロセスの一部として実行される単体テストを作成することもお勧めします。このようにして、開発者は自分の変更によってユニットテストが無効になったかどうかを即座に知ることができ、変更をチェックインする前にそれらを修正する機会があります。
バージョン管理システム(Subversion、CVS、Gitなどの1つ)とビルドシステム(たとえば、JavaにはAntとMavenがあります)のドキュメントを調べてください。 。
プログラマーが企業内のソフトウェアで共同作業する方法
開発者がチームとして働くことはありません。チームは最低だ。 ディルバート 面白いのは、彼がグーフィーのようなコミカルなキャラクターだからです。彼は本物であり、人々は彼がいる状況を認識しているので、彼は面白いです。
あなたが尋ねていることについての基準はありません。むしろ、慣例があり、これらは組織の規模と成熟度に大きく依存します。小規模な組織の場合、たとえば2、3人のプログラマーであれば、コーディング、ビルド、およびテストを行う個々の開発者にとっては、おそらく非公式なことになるでしょう。
大規模な組織では、専用のビルドエンジニアとプロセスが存在する場合があります。この種の組織は通常、チェックインされたソースコードを使用して、定期的に、たとえば1日に1回、正式なビルドを実行します。このプロセスには、通常BVT(ビルド検証テスト)とおそらくいくつかの回帰テストも含まれます。開発者は、リポジトリからコードをチェックアウトし、独自の部分でローカルに作業してから、チェックインします。
MicrosoftやGoogleなどの最大規模の組織では、完全に専用のグループと完全なラボがあり、多かれ少なかれ継続的に構築して、各実行の結果を利用できるようにします。これらの組織では、チェックインされる内容とチェックインのタイミング、コードレビュープロセスの内容などについて、非常に正式なプロセスと手順が用意されています。
ソフトウェア開発を扱うためのクックブックはありませんが、たとえ自分が唯一の開発者であるプロジェクトで作業している場合でも、一般に、バージョン管理システムがビルドシステムの中心になるはずです。この場合でも、バージョンを元に戻してバージョンログを読み取ることができると、バグの修正に非常に役立ちます。これはバージョン管理システムの唯一の機能ではありませんが、これだけでバージョン管理システムのインストール、構成、保守が正当化されます。
ビルドは、新しいコードを追加するときに各開発者が行うか、「ビルドサーバー」によって定期的に行うことができます。最後のアプローチは、より多くのセットアップを必要としますが、ビルドエラーをより早く見つけるのに役立ちます。
短い答え-「場合によります」。
現在、自分でプロジェクトに取り組んでいるので、VCSをビルド/使用するのは私です。 shudderメールでチームが一緒にプロジェクトに取り組んでいる他の場所を知っています。または、VCSを使用する大きな(+5)チーム。
その点について、私は少なくともいくつかのVCSを学ぶことを強くお勧めします、そしてJoel SpolskyはMercurialのための素晴らしい入門 tutorial を持っています。 Bazaar(私の個人的な選択)は似ており、Gitは類似性の点で次に近いですが、おそらくどちらかよりも人気があります(少なくともATM)。その後、SVNがあり、これは比較するとかなり弱いです。
実際、Joel talks あなたのほとんどの質問について-彼が持っている10年間のアーカイブを読むことをお勧めします-それはすべて非常に有用な情報であり、そのほとんどは現在および近未来の状況に関連しています。
まず、チームはリポジトリを使用して作業します(専門的なバージョン管理、または「ライブ」ディレクトリと見なされる一連のディレクトリのいずれでもかまいませんが、リビジョン管理システムは事実上の標準です)。また、プロジェクトの管理方法は、作業方法(ウォーターフォール、アジャイルなど)によっても異なります。イテレーションで作業する場合は、自己完結型のコンポーネント/プラグイン/モジュール/ライブラリーを構築し、サインオフが完了するまで単体テストを実行します。チームとしてチームで作業するということは、プロジェクト全体で同時に作業するわけではないということです。代わりに、プロジェクトの領域内で実行するタスクを取得します。場合によっては、自分のものではないコードを修正する必要がありますが、これは通常、奇妙な動作が発生したときに行われます。基本的に、開発するパーツのテストを行っています。
これを具体的に説明します。あなたは建設労働者のチームの中にいます。建築家は建物の計画を立て、職長は建設に必要なものを調べ、建設業者を雇います。石工は壁を作り、強度をチェックし、うまく接着します。電気技師は建物内のすべての配線を行うので、電気を流すことができます。それぞれの人には自分の仕事があります。時々、電気技師は、特定の壁を彫ることができる場合はメイソンと話し合いたいと思うかもしれませんが、常に職長と一緒に行います。
これがあなたの助けになれば幸いです!
適切なプログラミングは、経験から大きな恩恵を受ける深いものです。ペアプログラミングは、複数の認識プロセッサを実行するようなものです...他の人が見ている何かを見落とす可能性があり、通信している限り、大きな進歩をもたらす可能性があります。
ソース管理を使用する方法の入門としては、Eric Sinkのソース管理HOWTOがあります http://www.ericsink.com/scm/source_control.html
彼の例では、彼が作成したSourceGear Vaultを使用していますが、その方法は他のバージョン管理システムにも適用できます。
通常、ソース管理システムにはソースコードが含まれており、通常、バイナリはありません。ビルドして実行する場合は、コードをチェックアウトして、ローカルマシンでビルドします。
すべてが機能することを確認するために、夜間ビルドを実行する場所もあります。サーバー側で実行されるいくつかの自動化されたテストがあるかもしれません。ビルドまたは他の何かが失敗した場合、誰かに自動的に通知されます。
これも、オープンソースプロジェクトを検討する必要がある1つの理由です。
大規模なオープンソースプロジェクト(Chromium、Mozilla Firefox、MySQL、人気のあるGnuソフトウェアなど)で作業する主要な開発者は、専門家です。彼らは多くの経験があり、これらのプロジェクトは何百人ものそのような専門家のアイデアで長年にわたって進化してきました。
回答で言及されている他のすべてのもの(計画、バージョン管理システム、問題トラッカー、通知システム、ビルドシステム、テストスイート)は、これらのオープンソースプロジェクトにあります。
実際に体験したい場合は、人気のある大きなオープンソースプロジェクトをいくつか試してから、(バージョン管理を使用して)任意のプロジェクトからソースを取得し、自分でビルドすることを強くお勧めします。
PS:私は学生でもあり、オープンソースプロジェクトに参加することは私の人生でこれまでで最高のことでした。私を信じて!あなたも同じように感じるでしょう。