問題タブ [codebase]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
codebase - 2 つ以上の言語 (Java や C++ など) が混在する場合のソース コード ベースの編成
数日前、C++ ファイルを Java プロジェクトに導入しなければならなかったときに、問題に遭遇しました。Java プロセスの CPU 使用率を測定する必要性から始まり、JNI を使用して C で記述されたネイティブ ライブラリ (Unix マシン上の共有ライブラリ) を呼び出すことが決定されました。問題はJava ファイルのみで構成されるソース リポジトリ (ついでに Clearcase) に C ファイルを配置する適切な場所を見つけます。
私はいくつかの選択肢を考えました:
(a) 次のように、C ファイル (具体的には、1 つの .h ファイルと 1 つの .c ファイル) をソース ベースの先頭に配置するための別のディレクトリを作成します。
/vobs/myproduct/javasrc /vobs/myproduct/cppsrc
Cファイルが2つしかなく、このようにソースベースを言語レベルで分割するのは非常に奇妙に思えたので、私はこれが好きではありませんでした. プロジェクトの大部分がほぼ同等に C++ と Java で書かれていれば、これで問題ありません。
(b) C ファイルを、それを使用する Java パッケージに入れます。
/vobs/myproduct/com/mycompany/myproduct/util/ に呼び出し元の Java クラスがあり、C ファイルもそこに入ります。
CファイルはJavaパッケージに属していないと思うので、これも好きではありませんでした。
このような問題を以前に解決した人はいますか?一般的に、2 つ以上の言語が混在するコードベースを編成する際に従うべき適切な戦略は何ですか?
更新: プロジェクトで C または C++ を使用する計画はありません。おそらく Jython を使用する予定ですが、C を使用することによってのみ解決できる機能や、C を使用することで解決するのが最適な機能がいつ顧客に必要になるかはわかりません。
legacy - 大規模なコードベースに慣れるための最良の方法は何ですか?
大規模なコードベースが既に配置されている既存のチームに参加することは、困難な場合があります。最善のアプローチは何ですか;
- ブロード; コードから、すべてがどのように相互にリンクしているかの概要をつかむようにしてください
- 狭い; 一度にコードの小さなセクションに集中し、それらがどのように機能するかを完全に理解する
- 開発する機能を選択し、作業を進めながら学習します
- クラス図と UML が利用可能である場合 (および最新の場合) から洞察を得るようにしてください。
- まったく別の何か?
私は現在、約 20k 行の C++ アプリとライブラリに取り組んでいます (編集: 物事の壮大な計画では小さい!)。業界では、経験豊富なプログラマーから紹介を受けると思います。しかし、そうでない場合、できるだけ早く付加価値を開始するにはどうすればよいでしょうか?
--
回答の要約:
- デバッグ モードでコードをステップ実行して、その動作を確認します
- あなたよりもコードベースに精通している人とペアを組んで、コーディングする人と見たり議論したりする人を交代で行います。チーム メンバー間でパートナーをローテーションして、知識が広まるようにします。
- 単体テストを書きます。コードがどのように機能すると思うかについての主張から始めます。期待どおりの結果が得られた場合は、おそらくコードを理解しています。そうでない場合は、パズルを解くか、問い合わせを行う必要があります。(ドナルに感謝します。これは素晴らしい答えです)
- 上記と同様の方法で、機能コードの既存の単体テストを実行します
- UML、Doxygen によって生成されたクラス ダイアグラム、およびその他のドキュメントを読んで、コードの全体像を把握してください。
- 小さな編集やバグ修正を行い、徐々に積み上げていきます
- メモを取り、飛び込んで開発を開始しないでください。面倒なコードや不適切なコードを生成するよりも、理解に時間を費やす方が価値があります。
この投稿は、 the-best-way-to-familiarize-yourself-with-an-inherited-codebaseの部分的な複製です
maintenance - ドキュメントのないコードベースをどのように理解しますか?
わかりませんが、以前の開発者は、大きな問題もなく、問題なくコーディングに取り掛かったと言われています。ここで上級プログラマーとの簡単なミーティングをマネージャーに依頼するのは間違っているのではないかと思います。用心深く、この時間に敏感なトラッカーを長い道のりで終わらせる方が良いですか、それとも締め切りに間に合うように急ぐ方が良いですか?
余談ですが、このアプリを維持していた以前のプログラマーは、入社して 1 年も経たないうちに全員いなくなりました。何かに関係があるかどうかはわかりません。
regex - コードベース全体で変数名を変更することは、災害を要求するだけですか?
StackOverflowの名前をFrackOverflowに変更するとします。
これで、コードには、「スタック」という名前のバリエーションを持つ数十のオブジェクトと変数、およびセレクターがすでに含まれています。それらを「Frack」に置き換えたいと思います。
だから私の質問は、正規表現フィルターを介してコードベース全体を実行し、これらの名前をすべて変更することを選択しますか?それともあなたは彼らをそうさせますか?
open-source - ウィキペディアのコードに追加しますか?
ウィキのコンセプトは、世界中の人々が貢献できるものであることを知っています。ウィキペディアのコードベースにコードを追加 (「貢献」) する方法はありますか? オープンソース?
たとえば。すべてのウィキペディアン (登録ユーザー) のユーザー ページで、削除主義者 (むしろ少ない) か追加主義者 (むしろ多い) かを尋ねるアンケートを提供したいと思います。
FireFoxアドオンのように、多くの人が貢献できる素晴らしいアイデアを持っていると確信しています。
ウィキペディア ソフトウェアにアドオンまたは追加する方法はありますか? 常に節度を守っていて、すべての変更がウィキペディアの従業員によって検証されている場合でも、ウィキペディアを更新することができます!
wine - ドキュメント化されていない大規模なソース コード セットを理解していますか?
私はいつもワインに驚かされてきました。時々、私はそれをハッキングしたり、小さなことを修正したり、それがどのように機能するかを一般的に理解したいと思っています. それで、Wine のソース コードをダウンロードすると、すぐに圧倒されてしまいます。コードベースは膨大で、Linux カーネルとは異なり、コードに関するガイドはほとんどありません。
このような巨大なコードベースを理解するためのベスト プラクティスは何ですか?
.net - App.Config コードベースが .NET によるアセンブリの検索に役立たないのはなぜですか?
次のクライアント アプリケーションとそれに対応するconfig
ファイルがあります。
にはAssemblyPrivate.exe
公開鍵がなく、GAC にもありません。私の知る限り、ランタイムはapp.config
クライアント アプリ ディレクトリでアセンブリを探す前にファイルを解析する必要があります。
未処理の例外 (読みやすいようにラップされています) は次のとおりです。
なぜ機能しないのですか?(静的ではなく) 動的バインディングを使用する必要があります。
敬具、PK
c# - リモートコードベース
私はdllを持っています。そのdllはサーバーにアップロードされます。アプリケーションがサーバーから「最新の」dllの取得を開始するたびに必要なので、app.configで次のコードを使用しました。なぜ機能しないのですか?
これがapp.configファイルです:
architecture - コアライブラリのマージ
約1年前、当社は主に2人の上級開発者によって作成された比較的大きなソフトウェアパッケージをリリースしました。デモンストレーションを簡単にするために、これを「プロジェクトA」と呼びます。それ以来、私たちは新しいソフトウェアパッケージ「プロジェクトB」に取り組んでおり、そのツリーにはプロジェクトAのブランチがあります。
プロジェクトBにはプロジェクトAへの参照がありますが、プロジェクトBの終わりが近づいているので、AからBも参照する必要があります。したがって、Aのブランチをマージした後、Bと一緒に稼働する前に、 2つのプロジェクト間でコアライブラリをマージします。
この種の状況であなたが経験したことは何ですか?このプロジェクトで学んだいくつかのベストプラクティスと教訓は何ですか?プロジェクトAの残りのソースコードへの影響を最小限に抑えて、コアライブラリを最適にマージするにはどうすればよいですか?
編集: プロジェクトAの名前空間を保持しながら、プロジェクトBのコアライブラリ(最終的には会社のコアライブラリになる)にコードを配置することの実現可能性について、あなたはどう思いますか?そこから、レガシープロジェクトの新しい会社のコアライブラリを参照するだけです...
編集2: 返信ありがとうございます。たぶん、もう少し技術的な説明が必要です。これらのプロジェクトはどちらも非常に密接に関連していますが、それぞれにコアライブラリ用の独自の.NETクラスライブラリプロジェクトがあります。それを超えて、各ライブラリは他のさまざまな.NETプロジェクトによって参照されます。内部および外部のWebアプリ、フォームアプリなど。私の質問の多くは、ソースコードがどこにあるべきかということです。これらは、2つの別々の.NETプロジェクトのままである必要があるとは思いませんが、1つのプロジェクトに両方が含まれ、既存の名前空間を最初に保持します。 。開発を続けるにつれ、名前空間の組み合わせ、重複する機能のクリアなど、リファクタリングを行います。両方の既存のライブラリに含まれる機能が今後のプロジェクトで役立つことは間違いありません。また、既存の両方で共有する必要もあります。 「コア」ライブラリ。
java - Javascript_Java_Interaction アプレット「コードベース」の問題
今日、Javascript_Java_Interaction に関する記事を見ました:
================================================== ==========================================
================================================== ========================================
ページ [Javascript_Java_Interaction.html] にアプレットが表示されましたが、テキストを入力してボタンをクリックしても何も起こりません。問題は次の行にあります。
そこで、クラス ファイルを html ファイルと同じディレクトリ [C:/Dir_Fit/] にコピーし、上記の行を次のように変更しました。
動作するようになり、警告ウィンドウが表示されます。
それで、私の質問は、コードベースを指定したときになぜ機能しなかったのですか? Javaドキュメントによると、クラスファイルが別のディレクトリにある場合、コードベースで確認できます。アプレットは表示されますが、テキストを入力してボタンをクリックしても何も起こりません。指定するさまざまな方法を試しましたコードベース:
それでも、どれも機能しません。なぜですか?クラスファイルをhtmlと同じディレクトリに配置したくありません。修正は何ですか?
フランク