ソフトウェア工学

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

5
Google Closureは本当のコンパイラですか?
この質問は、このStack Overflow質問に関するコメントの議論に触発されました。Googleの閉鎖コンパイラのマニュアルは、次の(強調追加)を述べています: Closure Compilerは、JavaScriptのダウンロードと実行を高速化するためのツールです。JavaScript用の真のコンパイラです。ソース言語からマシンコードにコンパイルする代わりに、JavaScriptからより良いJavaScriptにコンパイルします。 ただし、ウィキペディアには、「コンパイラ」の次の定義があります。 コンパイラは、プログラミング言語(ソース言語)で記述されたソースコードを別のコンピューター言語に変換するコンピュータープログラム(またはプログラムのセット)です。言語リライタは、通常、言語。 それに基づいて、私はGoogle Closureはコンパイラではないと言うでしょう。しかし、Googleがそれが実際に「本当のコンパイラ」であると明示的に述べているという事実は、それ以上のものがあるのだろうかと思うようになります。Google Closureは本当にJavaScriptコンパイラですか?

2
Protobufデザインパターン
JavaベースのサービスのGoogleプロトコルバッファーを評価しています(ただし、言語に依存しないパターンを期待しています)。2つの質問があります。 1つ目は、広く一般的な質問です。 人々が使用するパターンは何ですか?上記のパターンは、クラス編成(たとえば、.protoファイルごとのメッセージ、パッケージ化、および配布)およびメッセージ定義(たとえば、繰り返しフィールドと繰り返しカプセル化されたフィールド*)などに関連しています。 Google Protobufのヘルプページや公開ブログにはこの種の情報はほとんどありませんが、XMLなどの確立されたプロトコルに関する情報は大量にあります。 また、次の2つの異なるパターンに関する具体的な質問もあります。 .protoファイルでメッセージを表し、それらを個別のjarとしてパッケージ化し、サービスの消費者をターゲットに出荷します。これは基本的にはデフォルトのアプローチです。 同じことを行いますが、少なくともこれらの2つのメソッドをサポートするコントラクトを実装する各メッセージの周囲に、手作りのラッパー(サブクラスではありません!) : public V toProtobufMessage() { V.Builder builder = V.newBuilder(); for (Item item : getItemList()) { builder.addItem(item); } return builder.setAmountPayable(getAmountPayable()). setShippingAddress(getShippingAddress()). build(); } public static T fromProtobufMessage(V message_) { return new T(message_.getShippingAddress(), message_.getItemList(), message_.getAmountPayable()); } 私はによって導入複雑さを離れて非表示にすることができますことを、私は(2)を参照の1つの利点はV.newBuilder().addField().build()、そのようにいくつかの意味のあるメソッドを追加しisOpenForTrade()たりisAddressInFreeDeliveryZone()など、私のラッパーに。(2)で見た2番目の利点は、クライアントが不変オブジェクト(ラッパークラスで強制できるもの)を処理することです。 (2)の欠点の1つは、コードを複製し、ラッパークラスを.protoファイルと同期する必要があることです。 誰かが2つのアプローチのいずれかについてより良い技術やさらなる批判を持っていますか? *繰り返しフィールドをカプセル化するということは、次のようなメッセージを意味します。 message ItemList { repeated …


2
nullの@Nonnullアノテーションが付けられたパラメーターを確認しますか?
FindBugsの使用を開始し、パラメーターに@Nonnull適切な注釈を付けました。サイクルの早い段階でバグを指摘することは非常に効果的です。これまでnullGuava's を使用するためにこれらの引数のチェックを続けてきましたが、エッジcheckNotNullでnullのみチェックすることをお勧めしますnull。たとえば、SOAPリクエストのようにチェックされずに値が入る場所です。 // service layer accessible from outside public Person createPerson(@CheckForNull String name) { return new Person(Preconditions.checkNotNull(name)); } ... // internal constructor accessed only by the service layer public Person(@Nonnull String name) { this.name = Preconditions.checkNotNull(name); // remove this check? } 値自体を@Nonnullブロックしないことを理解していnullます。 ただし、FindBugsは値がマークされていないフィールドからマークされたフィールドに転送される場所を指すので、渡さ@Nonnullれるnullすべての場所でこれらの値をチェックすることなく、これらのケースをキャッチするためにそれに依存することはできませんか?システム?ツールを信頼し、これらの詳細なチェックを避けたいですか? 結論:下の2番目のnullチェックを削除しても安全に思えますが、それは悪い習慣ですか? この質問は、彼がnullを期待していない場合、nullをチェックするべきであるとおそらくあまりにも似ていますが、私は@Nonnull注釈に関連して具体的に尋ねています。
19 java  null 

3
GPLの静的リンクルールと動的リンクルールは、インタープリター言語にどのように適用されますか?
私の理解では、GPLは非GPLコードからGPLコードへの静的リンクを禁止していますが、非GPLコードからGPLコードへの動的リンクは許可しています。では、コードはインタプリタ言語(Perlなど)で記述されているため、問題のコードがまったくリンクされていないのはどちらですか? 動的リンクと見なされた場合、ルールを活用するのは簡単すぎるように思えますが、一方で、静的と見なされた場合、非GPLコードからGPLコードを合法的に参照することも不可能と思われます!コンパイルされた言語は、少なくとも静的リンクと動的リンクを区別しますが、すべての「リンク」がスクリプトを実行しているだけの場合、明示的なライセンスなしでは意図が何であるかを伝えることは不可能です。 または、この問題に対する私の理解が間違っており、質問が議論の余地がありますか?動的リンクを含む「クラスパス例外」も聞いたことがあります。それはGPLの一部ではなく、代わりに追加できるものなので、動的リンクはライセンスにこの例外が含まれている場合にのみ許可されますか?
19 licensing  gpl  perl 

6
フォルダーをビジネスドメインごとに、または技術ドメインごとに整理する必要がありますか?
たとえば、MVCのようなアーキテクチャを使用している場合、どのフォルダー構造を使用する必要がありますか。 domain1/ controller model view domain2/ controller model view または: controllers/ domain1 domain2 models/ domain1 domain2 views/ domain1 domain2 この質問を言語にとらわれないようにするために、ファイル拡張子を意図的に省略しました。 個人的には、ビジネスドメイン(直感)ごとに分離したいのですが、ほとんど/多くのフレームワークは技術ドメインごとに分離されています。なぜ私が一方をもう一方よりも選ぶのですか?

4
RPGボードゲームルールの汎用ルールパーサー-実行方法
ペンとペーパースタイルのRPGシステム用の汎用ルールパーサーを構築したいと思います。ルールには通常、1〜Nエンティティの1〜Nのサイコロの役割と、エンティティの複数の属性に基づいた値の計算が含まれます。 例えば: プレイヤーはSTR 18を持っています。彼の現在装備している武器は、STR +1のボーナスを与えますが、DEX -1のマルスを与えます。彼はモンスターエンティティを攻撃し、一連のルールまたはアクションを実行するためにゲームロジックが必要になりました。 プレイヤーがサイコロを振る場合、たとえば8以上を取得した場合(渡す必要がある基本攻撃値は基本属性の1つです!)、攻撃は成功します。その後、モンスターはサイコロを振り、攻撃がその鎧を通過するかどうかを計算します。「はい」の場合、攻撃がブロックされていない場合、損害が発生します。 単純な数学ルールに加えて、特定のクラスのユーザー(たとえば、戦士vsウィザード)または他の属性にのみ適用するなどの制約もあります。したがって、これは数学的な操作だけに限定されません。 DungeonやDragonsのようなRPGシステムに精通しているなら、私が何をしているのかわかるでしょう。 私の問題は、これを最善の方法で正確に構築する方法がわからないということです。あらゆる種類のルールを設定し、後でプレイヤーとモンスターを選択するなどのアクションを実行し、アクション(攻撃などのルールセット)を実行できるようにしたいのです。 私は物事のデータベース側での助けを求めていませんが、ルールを柔軟に保つために構造とパーサーをどのように思い付くかについてもっと求めています。ちなみにこれに適した言語はphpです。 編集I: 目標を洗練させましょう:複雑なゲームルールを構築するために、ユーザーフレンドリーなインターフェイス(誰かがプログラミング言語を習得する必要がない)を作成したいと思います。単純な理由:個人的な使用は常にすべてのルールを覚える必要がないため、単純にそれほど頻繁にプレイしないので、毎回ルールを調べるのは止めになります。また、何かをして学ぶための楽しいタスクのように見えます。:) 私がこれまでに試したこと:間違ったアーキテクチャを構築する時間を無駄にするのではなく、コンセプトについて考えるだけです。これまでのところ、ユーザーが必要な数の属性を作成し、任意の種類のエンティティに必要な数の属性を割り当てることができるようにするという考えがあります。エンティティは、プレイヤー、モンスター、アイテム、あらゆるものです。ルールパーサーが何かを計算するとき、Player.base_attack + dice(1x6)> Monster.armor_check then Monster.health-1; ここでの質問は、そのパーサーの作成方法に関するものです。 編集II: 非常に基本的な値の例を次に示しますが、適切に計算するには、考慮すべきさまざまなものや変数がたくさんあります。 基本攻撃ボーナス(期間)基本攻撃ボーナス(通常、d20コミュニティではBABと呼ばれます)は、キャラクタークラスとレベルから派生した攻撃ロールボーナスです。基本攻撃ボーナスは、キャラクタークラスごとに異なるレートで増加します。キャラクターは、基本攻撃ボーナスが+6に達するとラウンドごとに2番目の攻撃を獲得し、3番目は基本攻撃ボーナスが+11以上、4番目は基本攻撃ボーナスが+16以上になります。マルチクラスキャラクターのスタックなど、さまざまなクラスから得られる基本攻撃ボーナス。キャラクターの基本攻撃ボーナスは、+ 16に達した後は攻撃を許可せず、+ 0より小さくすることはできず、キャラクターレベルが20に達した後のクラスレベルにより増加しません。特定の特技には、最低限の基本攻撃ボーナスが必要です。 ここでそれを読むことができます。http: //www.dandwiki.com/wiki/Base_Attack_Bonus_(Term)は、基本攻撃に必要な値を計算するための独自のルールを持つクラスと特技へのリンクを含みます。 できるだけ汎用的にすると、良いルールパーサーを完成させるのがかなり難しくなると思い始めました。

6
C ++開発でSTLを放棄するのは実用的ですか?[閉まっている]
閉じた。この質問はより集中する必要があります。現在、回答を受け付けていません。 この質問を改善したいですか?この投稿を編集するだけで1つの問題に焦点を当てるように質問を更新します。 4年前に閉鎖されました。 一部の分野(ゲーム業界など)では、STLはお勧めできません。だから私の質問は次のとおりです:場合によってはSTLを使用しないことは本当に良い習慣ですか?もしそうなら、最新のC ++のSTLを使用しない最大の理由は何ですか?
19 c++  stl 

6
なぜウェブはリモートアプリケーションのスペースを獲得し、Xはそうではなかったのですか?
X Window Systemは25歳で、昨日(15日)に誕生日を迎えました。 おそらくご存知のように、最も重要な機能の1つは、Microsoft、Apple、またはWaylandのウィンドウシステムのいずれにもない方法で、サーバー側とクライアント側を分離することです。 かつて(あいまいな言い回しでごめんなさい)多くの人は、このサーバーとクライアントの分離のために、Xがウィンドウを作成する他の方法よりも支配的であり、ユーザーがクリックしてタイプする間、アプリケーションを別のサーバーで実行できると考えていました自宅で自分のコンピューター。 この使用法は明らかに残っていますが、せいぜい無視されています。サーバー上で実行されるプログラムを作成して使用する場合、ほとんどの場合、html / css / jsでWebを使用します。 なぜウェブは勝ちましたが、Xは勝たなかったのですか?Webに使用される技術(html / css / jsによる)は混乱です。すべてのバックエンドフレームワーク(Rails、Djangoおよびすべて)と組み合わせることで、実際にナビゲートするジャングルです。それでも、ウェブは創造性と進歩とともに繁栄しますが、リモートXアプリは繁栄しません。
19 history  web 

6
MetroアプリにXAML / C#またはHTML5 / JavaSciptを使用する利点と欠点は?[閉まっている]
現在のところ、この質問はQ&A形式には適していません。回答は、事実、参考文献、または専門知識によってサポートされると予想されますが、この質問は、議論、議論、世論調査、または広範な議論を求める可能性があります。この質問を改善し、場合によっては再開できると思われる場合は、ヘルプセンターをご覧ください。 7年前に閉鎖されました。 Metro AppsにXAML / C#またはHTML5 / JavaScriptを使用することに大きな利点または欠点があるかどうかを疑問に思っていました。
19 c#  javascript  html5  xaml  metro 

5
csv形式は正規表現で定義できますか?
同僚と私は最近、純粋な正規表現がcsv形式を完全にカプセル化できるかどうかを議論しました。これにより、任意のエスケープ文字、引用文字、および区切り文字を含むすべてのファイルを解析できます。 正規表現は、作成後にこれらの文字を変更できる必要はありませんが、他のエッジケースで失敗してはなりません。 これはトークナイザーだけでは不可能だと主張しました。これを行うことができる唯一の正規表現は、トークン化だけでなく、非常に複雑なPCREスタイルです。 私は次のラインに沿って何かを探しています: ... csv形式はコンテキストのない文法であるため、正規表現のみで解析することは不可能です... それとも私は間違っていますか?POSIX正規表現だけでcsvを解析することは可能ですか? たとえば、エスケープ文字と引用文字の両方がの"場合、これらの2行は有効なcsvです。 """this is a test.""","" "and he said,""What will be, will be."", to which I replied, ""Surely not!""","moving on to the next field here..."

9
プライベートプロパティを作成する必要がありますか?
private string mWhatever; private string Whatever { get { return this.mWhatever; } set { this.mWhatever = value; } } 私は、個人であろうとなかろうと、すべてのメンバーのプロパティを作成する人々を見てきました...これは意味を成しますか?それを含むクラス内のメンバーへのアクセスを制御したい場合、1%のケースでそれが理にかなっていることがわかりました。すべてのメンバーのプロパティを使用しないと、矛盾が発生し、メンバーにはアクセス権があるかどうか(クラスのスコープ内で両方にアクセスできるため)。
19 c# 

7
良いチームプレーヤーになるには?[閉まっている]
閉じた。この質問はより集中する必要があります。現在、回答を受け付けていません。 この質問を改善したいですか?この投稿を編集するだけで1つの問題に焦点を当てるように質問を更新します。 4年前に閉鎖されました。 私は12歳からプログラミングを続けています(アセンブリからC ++、Javascript、Haskell、Lisp、およびQiまで)。しかし、私のプロジェクトはすべて自分のものです。 CSやコンピューターエンジニアリングではなく化学工学の学位を取得しましたが、今年の秋に初めて大規模なプログラミングプロジェクトを他の人々と一緒に作業することになり、準備方法がわかりません。私はこれまでずっとWindowsを使ってきましたが、このプロジェクトは非常に統一されたものになるので、最近、環境に慣れるためにMacを購入しました。 昨年、CSメジャーの両方である友人たちとハッカソンに参加できたのは幸運でした。しかし、彼らと一緒に仕事をするうちに、彼らのワークフローは私のものとは非常に異なっていることに気づきました。彼らはバージョン管理にGitを使用しました。一度も使用したことはありませんでしたが、それ以来、できることをすべて学びました。また、多くのフレームワークとライブラリを使用しました。ハッカソンにとってRailsがほぼ一晩であったことを学ばなければなりませんでした(一方、レキシカルスコーピングやクロージャが何であるかを知りませんでした)。私たちのコードはすべてうまく機能しましたが、彼らは私のものを理解していませんでしたし、私は彼らのものを理解していませんでした。 実際のプログラマーが日常的に行うこと-単体テスト、コードレビュー-への参照を聞きますが、私はこれらが何であるかについて漠然とした感覚しか持っていません。通常、私の小さなプロジェクトには多くのバグはありません。そのため、バグ追跡システムやそれらのテストは必要ありませんでした。 そして最後のことは、他の人のコードを理解するのに長い時間がかかることです。変数の命名規則(新しい言語ごとに異なる)は難しく(__mzkwpSomRidicAbbrev)、疎結合は難しいと感じています。だからといって緩くつなげないわけではありません-私は自分の仕事でそれが得意だと思いますが、LinuxカーネルやChromiumソースコードのようなものをダウンロードして見てみると、これらの奇妙な名前のディレクトリとファイルのすべてがどのように接続するかを理解します。車輪を再発明することはプログラミングの罪ですが、多くの場合、ライブラリを解剖するのに何時間も費やすよりも、自分で機能を作成する方が簡単だと感じます。 明らかに、生活のためにこれを行う人々はこれらの問題を抱えておらず、私はその点に到達する必要があります。 質問:他の全員と「統合」を開始するために実行できる手順は何ですか? ありがとう!


4
実施していない会社で単体テストを実装する
私の会社のソフトウェア開発責任者は「辞任」(解雇)しましたが、現在、当社の開発慣行の改善を検討しています。これから作成されるすべてのソフトウェアに単体テストを実装したいと考えています。 開発者からのフィードバックはこれです: テストは価値があることを知っています ただし、仕様は常に変更されるため、時間の無駄になります。 そして、あなたの締め切りは非常に厳しいので、とにかくテストするのに十分な時間がありません CEOからのフィードバックは次のとおりです。 私たちの会社に自動化されたテストをしてもらいたいのですが、それを実現する方法がわかりません 大きな仕様書を書く時間がない 開発者はどのように仕様を入手しますか?口コミまたはPowerPointスライド。明らかに、それは大きな問題です。私の提案はこれです: また、開発者に一連のテストデータと単体テストを提供しましょう それが仕様です。それが望むものについて明確で定量的であるかどうかは、管理者次第です。 開発者は、必要と思われる他の機能は何でも配置でき、テストでカバーする必要はありません さて、あなたがこのような状況にあった会社にいたことがあれば、どのように問題を解決しましたか?このアプローチは合理的ですか?
19 unit-testing  tdd 

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