ソフトウェア工学

システム開発ライフサイクル内で働く専門家、学者、学生向けのQ&A

12
「false」であるブール関数の引数に付けるコメントを修正しますか?
いくつかのオープンソースプロジェクトから、次のコーディングスタイルを集めました void someFunction(bool forget); void ourFunction() { someFunction(false /* forget */); } falseここで何を意味するのか、私はいつも疑っています。それは「忘れる」ことを意味しますか、それとも「忘れる」は対応するパラメーターを参照しますか(上記の場合のように)、「false」はそれを無効にすることを意味しますか? どのスタイルが最も頻繁に使用され、曖昧さを避けるための最良の方法(またはいくつかのより良い方法)は何ですか?

6
単純型の新しい制限を定義できるプログラミング言語
多くの言語が好きC++、C#とJavaあなたのような単純な型を表すオブジェクトを作成できるようにするintegerかをfloat。クラスインターフェイスを使用すると、演算子をオーバーライドし、値が100のビジネスルールを超えているかどうかをチェックするなどのロジックを実行できます。 一部の言語では、これらのルールをアノテーションまたは変数/プロパティの属性として定義することが可能かどうか疑問に思っています。 たとえば、C#次のように記述できます。 [Range(0,100)] public int Price { get; set; } または多分C++あなたは書くことができます: int(0,100) x = 0; このようなことが行われたことは一度もありませんが、保存前にデータ検証に依存するようになったことを考えます。この機能が言語に追加されていないのは奇妙です。 これが可能な言語の例を挙げていただけますか?

5
Joda Time vs Java Time
Jodaは豊富な機能を備えており、標準のJava時間よりも洗練されていますが、常に使用するのが最善とは限りません。JavaコードでJoda TimeとJava Timeのどちらを使用すべきかを判断するにはどうすればよいですか? 要件に応じて適切なガイドラインを選択する方法を示すガイドラインがありますか?
19 java  api  joda-time 

1
サードパーティのMaven依存関係のライセンスを含める方法
私は、Javaプロジェクト用に配布可能なバイナリを作成しています。次の2つの方法でリリースしています。 メイヴン・セントラル Googleコードで配布可能なzip形式 私のプロジェクトは、Apache 2.0ライセンスの下でライセンスされています。私は少数のサードパーティを使用していますが、そのうちの1つはMITライセンスです。ライセンスの次のテキストに基づいて、プロジェクトのユーザーにライセンスの内容を認識させることが私の義務だと思います。 上記の著作権表示およびこの許可通知は、ソフトウェアのすべてのコピーまたは大部分に含まれるものとします。 私の情報源と配布物内でこれをどのように参照するのが最善ですか?私は現在考えています: 私のソースファイルは何も参照する必要はありません。それらには、Apache 2.0の定型的な通知が含まれています。 Apache 2.0ライセンステキストを含むLICENSE.txtファイルをプロジェクトのルートに追加します。 zip形式の配布可能ファイルについては、コンポーネントがMITライセンスされていることを示すものも追加する必要があります。おそらくNOTICEファイルですか? Maven Centralディストリビューションでは、アーティファクトが依存関係を宣言するだけで、実際にはそれらを含めないため、何もする必要はありません。 これは有効な計画のように思えますか?もしそうなら、誰でもポイント3を達成する方法をアドバイスできます。

4
プロパティのXMLドキュメントには「取得または設定..」が必要ですか?
C#でのXMLコメントのベストプラクティスの推奨事項を探しています。プロパティを作成すると、予想されるXMLドキュメントは次の形式になっているようです。 /// <summary> /// Gets or sets the ID the uniquely identifies this <see cref="User" /> instance. /// </summary> public int ID { get; set; } しかし、プロパティのシグネチャはすでにクラスの外部クライアントが使用できる操作を示しているため(この場合は両方getとset)、コメントはおしゃべりすぎて、おそらく次のようになります。 /// <summary> /// ID that uniquely identifies this <see cref="User" /> instance. /// </summary> public int ID { get; set; } Microsoftは最初の形式を使用しているので、暗黙の慣習のようです。しかし、私が述べた理由のために、2番目の方が優れていると思います。 この質問は建設的ではないとマークされるのが得意であると理解していますが、コメントしなければならないプロパティの量は膨大であるため、この質問にはここにある権利があると思います。 …

3
事前条件の強化と事後条件の弱化は、リスコフ代替原理にどのように違反しますか?
次の場合、リスコフの置換原則に違反していると読みました。 前提条件が強化されている、または 事後条件が弱体化 しかし、これらの2つの点がリスコフの代替原則にどのように違反するかは、まだ完全にはわかりません。例を挙げて説明してください。具体的には、上記の条件のいずれかが、サブクラスオブジェクトをスーパークラスオブジェクトに置き換えることができない状況をどのように引き起こしますか?

3
Javaの例外の例外サフィックス
例外クラスで例外の接尾辞を指定すると、コードの匂いがします(冗長な情報-名前の残りの部分はエラー状態を意味し、例外から継承されます)。しかし、それは誰もがそれをしているようで、良い習慣のようです。 私はこれが良い習慣である理由を理解したいと思っています。 私はすでに例外がクラス名に接尾辞例外を持っているのはなぜかという質問を見てきました 質問はPHPに対するものであり、応答はおそらくJavaに対して有効です。他の引数はありますか、それとも明示的に区別するのと同じくらい簡単ですか? 前の質問の例を取り上げると、FileNoFound例外ではない名前のクラスが実際にjavaにあるでしょうか?可能であれば、接尾辞を付ける必要がありExceptionますか? の日食の簡単な階層を見るとException、確かに、それらの大部分は例外の接尾辞を持っていますが、いくつかの例外があります。javassist例えば-接尾辞なしでいくつかの例外を持っていると思われるライブラリの一例であるBadByteCode、BadHttpRequestなど BouncyCastle のような例外を持つ別のライブラリです CompileError 私はこの問題に関する情報がほとんどないので、少しグーグルで調べました。

6
C ++コンパイラの支払い時期[終了]
閉じた。この質問は意見に基づいています。現在、回答を受け付けていません。 この質問を改善したいですか?この投稿を編集して事実と引用で答えられるように質問を更新してください。 5年前に閉鎖されました。 最近、私は開発者がいつコンパイラーにお金を払うべきか疑問に思い始めました。コンパイラは、ほとんどのプラットフォームで無料で提供されていますが、簡単に入手できる無料版もあります。 例: OS X-GCCおよびClang / LLVMには開発者ツールが付属しています。ここで、どのようにして何を実現できるかについての制限はありません。 Linux-GCCと私はもっと確信しています。Linuxコンパイラの現在の状態を知りません。ここで、どのようにして何を実現できるかについての制限はありません。 Windows-MinGWとMicrosoftは無料版のVisual Studioを提供しています。MinGWには制限はありませんが、無料のVisual Studioには重大な制限があると思います。 ただし、例として、IntelはC / C ++コンパイラを製造しています。彼らは価格が高いです。教育的には、OS Xバージョンは49ドルで、Windows / Linuxはそれぞれ129ドルで入手できると思います。その後、完全な「スタジオ」製品も提供します。明らかに教育価格を使用すると、制限が課せられます。 しかし、私が不思議に思っているのは、いつコンパイラーへの支払いを本当に検討すべきかということです。私が考えることができる1つの例は、ビデオゲームです。主要なプラットフォームで動作するコンパイラを使用している場合、プラットフォーム用の切り替えツールはもうありません。ツールが同じであれば、プラットフォーム間での切り替えが容易になると思われます。 Intelコンパイラーなどのコンパイラーと、それらを使用することで得られる真のクロスプラットフォームのメリットにお金を払うことについて、誰かが光を当てることができますか?プラットフォーム固有の手法を使用しないように非常に一生懸命に努力しても、コードの移植性は低下しますか?
19 c++  compiler 

6
何百人もの開発者が単一のソリューションに取り組んでいるときの開発方法論?
私たちは約200人の開発者で構成される組織であり、特定の日にリリースされる予定の1つの製品(リビジョン管理Gitを使用)で継続的に作業しています。 開発者が非常に多いため、各チームに約10人の開発者がいる「クロスファンクショナル」チームを作成しようとしています。その結果、組織内に約20の開発チームができます。 メインリポジトリ内の製品の継続的な「高水準」(開発者がプルするとき、製品が少なくともコンパイル可能であることなど)を維持したいので、何らかの品質ゲートを使用したいと思います。 質問の言い方が少しわかりませんが、単一の製品に取り組んでいるこのような大規模な開発者グループの開発方法論に関するアドバイスを得ることができるかどうか疑問に思っています。 私たちの意見では、スペクトルの一端は各開発者がメインリポジトリに直接コミットできるようにすることですが、開発者/コミットの数が多いため、「メインリポジトリ」が常に壊れた段階にある可能性があることを恐れていますコミットごとに厳しい「品質ゲート」を持つことはできません。 スペクトルのもう一方の端は、(メインリポジトリ)に3つのプルソースのみがあり、これら3つに少数の信頼できるプルソースのみがあるツリーまたはピラミッド構造のようなものです(Linus Torvalds / Linuxが行うと思います)しかし、そのような構造では、変更が「メインリポジトリ」に入るために登るには長いチェーンがあると感じています。さらに、マージの競合が発生した場合、「元の開発者」以外の別の開発者に問題が発生します。 この背景情報と意見をすべて述べた上で、非常に多くの開発者に推奨される開発方法論をどのように学び、読むことができますか?大規模な組織(Microsoft、Facebook、Ubuntuなど)はどのように開発を構成していますか?

2
アーティファクトリポジトリとしてのSubversionと特定のアーティファクト管理ツールの使用
TL; DR:Subversionではなく、Apache ArchivaやSonatype Nexusなどをアーティファクトリポジトリとして使用する理由は何ですか? 現在使用しているビルドシステムには、ビルドへの入力と出力の両方として、多くのバイナリブロブ(イメージ、サウンドファイル、コンパイル済みバイナリなど)があります。これらを管理するシステムは非常にアドホックです。コードとともにSubversionリポジトリにチェックインされるものもあれば、正式なバージョン管理外の別の場所に保存されるものもあります。 私はこれを統合しようとしているので、より一貫性があり使いやすいものがあり、コードからバイナリアーティファクトを分離します。 Googleは、利用可能なアーティファクトリポジトリ(Archiva、Nexus、Artifactory、…)の選択があると言っていますが、読み返してみると、これらをSubversionよりも使用する利点はありません。それは私たちのためにバイナリの世話をします-それはすでにいくつかのバイナリのためにそれを行います、私たちはそれらをコードから分離するためにリポジトリレイアウトを再配置したいだけです-そして、すでにSubversionサーバーと専門知識を持っているという顕著な利点があります。 そう。Subversionのような一般的なバージョン管理ツールを使用するよりも、専用のアーティファクト管理システムを使用する利点は何ですか?

3
デカップリングはRESTのDRYに勝りますか?
既存のJava APIのほとんどの機能を公開するREST APIを構築しています。両方のAPIは、組織内で使用するためのものです。外部で使用するために設計する必要はありません。私は両方のAPIに影響を及ぼしていますが、REST APIを実装しています。Java APIは引き続きローカルアプリケーションに使用されます(「非推奨」ではありません)が、重要な新規開発にはREST APIが使用されます。 Java APIクラスの一部は単なるデータです(プロパティ、ゲッター、セッターを持つBean)。そして少なくともこれらのいくつかは、REST APIを介して(何らかの形で)データ(XMLまたはJSONにマーシャリングされる)として送信するのに意味があります。たとえば、サーバーマシンに関する情報を格納するクラス。これらのデータクラスについて、次の選択に直面しています。 元のJavaクラス(またはサブクラス)をREST APIで直接公開する、または REST API専用の新しいデータ転送クラス(DTOパターン)を作成しますか? いずれにせよ、RESTデータ転送クラスがあります。問題は、オリジナルに注釈を付けるか、新しいものを作成するか(オリジナルのコピーに近い場合があります)です。他の選択肢もありますが、主にこれら2つに焦点を当てます。 #1の引数: DRY(繰り返さないでください) 実装が速い REST APIのアップグレードが簡単 #2の引数: REST APIをJava APIとは別にバージョン管理する必要がある場合はどうなりますか?(これは多少可能性があります。) プロパティの削除、動作の追加、クラス階層の変更など、Javaデータクラスに大幅な変更があった場合はどうなりますか?(これも多少可能性があります。) 要するに、DRY(#1)とデカップリング(#2)の間のトレードオフのように思えます。 #1から始めて、その後#2に移って問題が発生した場合は、必要なことを証明できないものを構築しないというアジャイルガイドラインに従っています。これは悪い考えですか。とにかくそこに行き着くかもしれないと思うなら、私は#2から始めるべきですか? 私のリストに欠けている主要な議論/結果はありますか?
19 java  api  rest  coupling  dry 

6
リポジトリメソッドをテストするためにユニットテストが必要なのはなぜですか?
私は経験不足のためにそれをうまく防御できないので、この質問について少し主張する悪魔を演じる必要があります。これが契約です。概念的には、単体テストと統合テストの違いを理解できます。永続化メソッドとリポジトリに特に焦点を当てる場合、単体テストでは、おそらくMoqなどのフレームワークを介してモックを使用し、検索された順序が期待どおりに返されたと主張します。 次の単体テストを作成したとしましょう。 [TestMethod] public void GetOrderByIDTest() { //Uses Moq for dependency for getting order to make sure //ID I set up in 'Arrange' is same one returned to test in 'Assertion' } したがって、セットアップしOrderIdExpected = 5て、モックオブジェクトが5IDとして返されると、テストに合格します。わかった。コードを単体テストして、コードのプリフォームが期待するオブジェクトとIDを返し、他の何かは返さないことを確認しました。 私が得る議論はこれです: 「なぜ単体テストをスキップして統合テストを行わないのですか?データベースのストアドプロシージャとコードを一緒にテストすることが重要です。テストに時間がかかることはわかっていますが、テストを実行してテストする必要があるので、両方を持っていても意味がありません。重要なことをテストするだけです。」 「まあ、それは統合テストであり、ユニットテストとしてコードを個別にテストする必要があります。やだ、やだ、やだ...」などの教科書の定義でそれを守ることができます。対現実は失われつつあります。私は時々これに出くわし、最終的に外部依存関係に依存する単体テストコードの背後にある理由を擁護できない場合、それを主張することはできません。 この質問に関するヘルプは大歓迎です、ありがとう!

3
小さなオープンソースのJavaプロジェクトに選択するパッケージ名は何ですか?[閉まっている]
閉じた。この質問は意見に基づいています。現在、回答を受け付けていません。 この質問を改善したいですか?この投稿を編集して事実と引用で答えられるように質問を更新してください。 4年前に閉鎖されました。 Javaで小さなオープンソースライブラリを公開したいと思います。どのパッケージ名を選択すればよいのでしょうか?私は会社ではなく、命名規則に従ってパッケージの命名の基礎として使用できるドメインがありません。それでも、偶然の衝突を防ぎ、物事を標準に保つために、どういうわけか命名規則に従いたいと思います。

2
オープンソースコードでクローズドソースソフトウェアを作成できますか?
ヘルプファイルの法的セクションを開いたときに、ポピュラーな音楽パッケージ(Ableton Live)を使用していましたが、プログラムには自由とビールの両方のように見えるコードライセンスが含まれていることがわかりました。残念ながら、オンラインコピーを見つけることはできませんが、必要な場合は、ライセンスパッケージを一覧表示できます。 私が見る限り、ここには3つの可能性があります: かなり大規模な会社がコードライセンスに違反している-非常にありそうもないが、もしそうであれば、なぜライセンステキストを含めるのか? 実際には、何らかの理由で、オープンソースコードを含むパッケージにお金を請求し、ソースをクローズするのは合法です。これは間違いなく私にとってニュースです。 私は何かを誤解しています-非常に可能性が高い。


弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.