開発者は、実際のプログラムの前に内部ライブラリをコンパイルする必要がありますか?


10

最近、私が一緒に仕事をしている上級開発者が、開発者に最新バージョンを入手し、プロジェクトの一部として主要な内部ライブラリをコンパイルするよう要求することを主張しました。これは、プロジェクトチームが内部のMavenリポジトリから取得する安定したバージョンを使用して作業する必要があるという反論とは対照的です。開発者は、ソースコードを開発者のマシンで利用できるようにすると、ライブラリのソースを読み取ることができるので時間を節約できると主張しました。必要な機能が利用可能かどうかを判断するコード。

上級開発者には有効な議論がありますか?それとも、開発者に、ライブラリのソースコードを読み取って、カプセル化の基本的な哲学に対抗し、そもそもライブラリを用意するように要求するのでしょうか。

回答:


15

この上級開発者の議論は私には意味がありません。

開発者が時々ソースコードを読むことができるように、内部ライブラリを常に取得してコンパイルするオーバーヘッドを追加したいですか?これは、開発者が機能が利用可能かどうかを確認する必要がある場合にのみソースコードを確認するよりも多くの時間を浪費します。

ライブラリとクライアントが異なる開発グループによって開発されており、ライブラリが積極的に開発されている場合、これは特に悪い考えです。クライアントの開発者は、ライブラリの不安定さから絶縁されません。

開発者が通常のビルドの一部になるように強制せずにソースコードを利用できないようにする理由がわかりません。


2つ目は、使用しているライブラリバージョンのソースを簡単に取得できることです。なぜライブラリの「最新の最先端バージョン」が必要なのですか?プロジェクトに潜在的なエントロピーを追加するだけです
。– jlemos

1
部分的にのみ同意します。私見それはlibの開発方針に依存します。ライブラリが2番目のチームの積極的な開発中であれば、100%正しいです。libを現在のチームの誰でも変更できる場合、および libに下位互換性を維持することをポリシーとする場合は、常に最新バージョンを使用することで、統合の問題をより早期に特定でき、これは良いことです。
Doc Brown、

ブラウン博士-そうですね。私の答えは、get&compileを要求する唯一の理由が開発者がソースコードを読むことができるように質問がフレーズ化されたという事実に基づいていました。

4

提案は

クライアント側の開発者がライブラリのソースコードを読んで、必要な機能が利用可能かどうかを判断することで、時間を節約できます。

別の提案をすることができます

ライブラリをドキュメント化して、使用可能な機能を示すことで、時間を節約できます。


それは試みられました、そして、議論はライブラリの開発者が新機能を加えるのに忙しすぎるということでした。
rjzii

2
あなたはそれを言うかもしれないと思った。おそらくライブラリはクライアント側の開発者を支援するために存在、それ自体が目的ではありませんか?それにもかかわらず、図書館の開発者に彼らの重みを引き出すための政治的力(マネージャー、顧客または上級開発者との影響力)がないかもしれないことを感謝します。おそらく、クライアント側の開発者がライブラリを文書化できますか?ウィキを開始して、必要に応じてドキュメントを作成しますか?ソースコードの読み取りが必要になる場合がありますが、最新バージョンを継続的にコンパイルする必要はありません。
MarkJ

3

ソースをローカルで熟読できることは利点だという主張は買えませんが、ライブラリが活発に開発されている場合(おそらくプロジェクトのニーズに対応するため)、開発者に次のことを要求するのは無理はないと思います更新を頻繁にダウンロードする(おそらく1日に数回)。ただし、開発者にソースからのコンパイルを要求する代わりに、コンパイル済み(および単体テスト済み)のバイナリを使用可能にするほうが、ビジネス上意味があると思います。

プロジェクト内で、最新のコンパイル済みバージョンが利用できるような共有リポジトリをセットアップする機能はありますか?理想的には、フェッチとビルドをスケジュールどおりに実行したCIサーバーが必要ですが、チームの1人がリードするネットワークリソースだけが定期的に更新を担当している場合でも、役立つ場合があります。もちろん、これは図書館チームの側にあるべきですが、明らかに彼らは興味がないので、あなたは彼らのたるみを拾う必要があります。


1

私は以前、自社のソフトウェアを社内のビジネスシステムで常に「ドッグフーディング」していた大規模なソフトウェア会社で働いていました。

彼らはこれを別のレベルのテストと見なした。

会社にとって私が同意することは良いことです。

ライブラリの販売またはアウトソーシングさえ提供する重要な部分でない限り、ダウンロードを強制して最新バージョンをコンパイルすることは、あまりにも遠いステップです。


製品の一部として展開されます。ただし、私は2つの角度からこの問題に対処しようとしています。開発者がマシンで作業を行うことと、継続的インテグレーションサーバーです。
rjzii

1

ソースコードを利用できるようにすることはメリットですが、CIビルドエージェントがリポジトリを監視している場合、開発者にこのライブラリをコンパイルして依存関係のあるプロジェクトに外部にコピーさせる方が、開発者に要求するよりも意味があります。コピーをビルドするときに、2つの異なるコンパイル手順を実行します。

現在、ビルドエージェントに接続されていないプロジェクトに取り組んでいます。そのため、メインアプリケーションをビルドする前にサブアプリケーションをビルドする必要があります。それは私の後部の深刻な痛みです。サブアプリに変更を加えるには、まずプロジェクト全体をビルドしてから、サブビルドフォルダーに移動し、コンパイルされた製品をそこから取得して別のサブフォルダーにコピーしてから、プロジェクト全体をビルドします。サブアプリの最新バージョンがメインアプリのビルドに含まれていることを確認します。これはどのように行われるべきかではありません。少なくとも、このプロセスを自動化するMSBuildスクリプトが必要です。新しいコードがトランクにコミットされるたびに、ビルドエージェントが外部を更新することをお勧めします。


1

多くの人々が、誰もが内部ライブラリを構築するのは意味がないと答えたので、私は理由を正当化できる反対の視点を提示します。

  1. ライブラリを頻繁に使用し、ドキュメントはありません。だから誰もが参照のためのソースを持っている必要があります。これが非常に頻繁に使用されるライブラリである場合、参照が手元にあると便利です

    • 確かに、彼らはドキュメントに取り組むべきだと言うでしょう、そしておそらくあなたの上級開発者はこの事実を知っています。しかし、現実に直面してみましょう。多くの場合、開発チームはドキュメント化されていない大量のコードを作成することになるため、その機能を知る必要がある場合は、ソースにアクセスします。あなたはそれをする必要はありませんが、短期的には、これが最良の代替手段です。
    • 通常、ドキュメントを配置するのに最適な人は、ライブラリを最もよく知っている人です。残念ながら、それらは通常最も忙しい人と同じ人なので、すべてを落として文書化を開始するのはそれほど簡単ではありません。
  2. 人々がライブラリに依存する独自のコードを書き始め、ライブラリ内の何かが機能しない場合、腕を宙に投げるのではなく、ライブラリがローカルで構築されている場合、ライブラリコード内に直接入ることが非常に簡単になります

    • これは、多くのライブラリーが完全とはほど遠いために発生する可能性があり、「安定した」リリースで作業したいのに問題が発生する可能性があります。
    • APIの使い方を誤解しているために、結果が良くないのかもしれません。ドキュメントがあっても、人々はしばしば間違った仮定をします
    • ライブラリのコードに起因するクラッシュやその他のエラーのように思われるときはいつでも、上司は新しい人にうんざりしているでしょう(そして、プロジェクトを知っている人よりもはるかに多くの新しい人が空中に腕を投げている場合もあります)。だから、あなたのマシンに来て、あなたの隣に座っている人に来る必要がある代わりに、彼らはこれらの質問で答えるオプションを望んでいます:1)正確にどこがクラッシュですか?どのモジュール/ファイル/行?2)デバッグしましたか?あなたは何を見つけましたか?
    • 上司はこのコードベース(アプリケーションと主要なライブラリ)を十分に長く使用していたため、コードが既にマシン上にあり、デバッグとステップ実行の準備ができていると、彼の生活が楽になり、人々を獲得できることに気づいたかもしれません。コードベースをより速く学ぶため。そのため、彼はあなたのマシンでライブラリを構築するための先行費用をあなたに強いることを強います。

彼の決定が正当であると言っているのではなく、a)質問が物語の一方の側に提示され、b)もっともらしい動機があり得ることを指摘しているだけです。


1

この種のテストは実際に行われる方がよいでしょう。ただし、開発者ではなくテスターが行う必要があります。その意味で、それはあなたやライブラリの開発者の仕事ではありません。

あなたの説明から、プロジェクトにはテスターがいないようです-これが事実である場合、それは管理上の問題であり、非常に深刻な問題です。

...ライブラリのソースコードを読み取って、必要な機能が利用可能かどうかを判断できるため、時間を節約できます

かなり不十分な推論。最新バージョンのライブラリが最新バージョンのプロジェクトでコンパイルできない場合、さまざまな理由が考えられます。libソースコードをドリルダウンするだけでは、時間の無駄になります。

  • ライブラリに問題がなく、プロジェクトコードのバグが原因でビルドが失敗した場合はどうなりますか?または、ビルドの失敗が1日か2日後に修正されるはずの一時的な互換性のない変更によって引き起こされた場合はどうなりますか?ビルドの失敗が複雑な統合の問題を示し、対処に1週間または1か月かかる場合はどうなりますか?統合の問題について、以前のバージョンのライブラリを使用すると回避策が生じるかどうか。
     
    理由が何であれ、失敗の予備分析を行うことは、テスターが行うことになっている作業に開発者の時間を浪費することを意味します。

開発ミスとQAアクティビティを切り替えることでフロー断ち切らなければならない場合に続く、生産性の損失は避けられない(そして私の経験ではかなり痛い)です。


チームにテスターがいる場合、そのようなことは非常に簡単で、はるかに簡単に処理できます。「上級」開発者があなたに投げかけるのは、基本的にはドラフトテスト要件です。

プロジェクトまたはライブラリに変更を加えるたびに、ビルドが成功することを確認してください。

そこから先に進む手順には、一般的なQAアクティビティがあります。要件の詳細を明確にし、正式なテストシナリオを設計し、テストの失敗を処理する方法について交渉します。

  • SQAの観点から見ると、これは非常に自動化できるかなり単純な回帰テスト手順を設計、設定、および維持するという非常に日常的なタスクです。おそらく、手動アクティビティのみが課題追跡でチケットを作成および維持し、修正。

0

Sr Devが提案していることは、私にはほとんど意味がありません。ソースを閲覧できるのは良いことですが、もっと良い方法があります。

どのアーティファクトリポジトリを使用していますか?各バージョンのソースjarをデプロイして、コンパイル済みライブラリの隣に置くことができるはずです。ほとんどのIDEでは、ソースの参照用にこれをコンパイル済みライブラリに添付できます。Mavenプラグインを備えたEclipseは、これを自動的に行います。

最新のコードが必要な場合は、バージョンのスナップショットをデプロイするだけです。


Mavenはリポジトリーとして使用されており、プロジェクトのほとんどは依存関係管理にそれまたはIvyを使用しています。
rjzii

@RobZあなたはArtifactoryやNexusのような中央のアーティファクトリポジトリを使用しませんか?
smp7d 2012

Archivaを使用しています。
rjzii

@RobZ了解しました。おそらく自動的に行わない場合は、src jarをデプロイしてIDEのライブラリに接続するようにpomsを設定できます。maven.apache.org/plugins/maven-source-pluginを
smp7d

0

これは単にビルドスクリプトで発生するはずです。

  1. 新しいバージョンが利用可能かどうかを確認します。それ以外の場合は2をスキップします。
  2. ダウンロードしてコンパイルし、ローカルでソースコードからAPIリファレンスを生成するために必要なツールを実行します。変更ログを表示します。
  3. アプリを作成する

これがなぜ、どのように問題であるのかわかりません。また、参照に不足しているものがある場合は、それをソースに追加して変更をプッシュできます。もちろん、ライブラリがあなたの足元で変わることが少し怖いように見えるかもしれませんが、ライブラリのメンテナが適切に仕事をしていれば、これは良いことです。


継続的インテグレーションサーバーの観点から見ると、ライブラリ自体は小さくなく、ビルドには数分かかります。
rjzii

@RobZ:それで?ライブラリが変更されない限り、ライブラリを再構築する必要はありませんか?
back2dos 2012

現在それはまだ活発に開発中です。
rjzii

@RobZ:はい、そうかもしれませんが、ライブラリチームが10分ごとにバージョンにタグを付けている場合、彼らはそれを間違っています。継続的インテグレーションは素晴らしいことですが、リリースはある種のユーザビリティテストで構成されている必要があります。ライブラリの場合、それはコードレビューです。これは自動化できません。ただし、最後にレビューされタグ付けされたバージョンを取得するプロセスは自動化できます。レビューが適切に行われ、タグ付けが責任を持って行われれば、問題は発生しませんが、実際には機能強化が行われます。
back2dos 2012
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.