ソフトウェア工学

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

3
単一のオブジェクトが複数の変数よりも優先されますか?
タイトルに意味を込めるのはかなり大変でしたが、コードに入れるのは簡単です。 C ++ これは int offset_x = 10; int offset_y = 40; ... element.move(offset_x, offset_y); これよりも優先されますか? Vector<int> offset(10, 40); ... element.move(offset.x, offset.y); (Vector std::vectorはとは異なり、2Dベクトルです。このクラスには、やのようにnormalize()、ここでは不要な多くのメソッドがあります。これscale()には、より基本的なPointクラスが必要ですか?) JavaScript これは var offsetX = 10; var offsetY = 40; ... element.move(offsetX, offsetY); これよりも優先されますか? var offset = {x: 10, y: 40}; ... element.move(offset.x, offset.y);

2
コンカレントガベージコレクターは変数をどのように処理しますか?
それが並行マークアンドスイープガベージコレクタであるとしましょう。 そのようなGCが定数ポインターを処理するとき、それはそれらを(ルートから開始して)ウォークスルーし、遭遇したすべてのデータブロックにマークを付けます。次に、マークされていないものをすべてスイープします。クライアントコードは、使用するデータブロックをルートとしてマークする必要があります。 しかし、変数をどうすればよいでしょうか。ここに状況があります: Vオブジェクトへのポインタを格納する変数ですA。 Thread 1読み取りVと中断。 Thread 2変更しV、オブジェクトを指すようにしますB。 ガベージコレクターは、「マーク」フェーズを実行し、A参照されなくなった遭遇した後、「スイープ」フェーズ中に割り当てを解除します。 Thread 1目覚めさせ、ルートとしてマークすることにより(ステップ2でA既に読み取った)使用を試みVます。そして、Aもう存在しないので失敗します。 それで、これをどのように処理するのですか? Thread 2置換オブジェクトをマークすることができるA(同様のフラグが新たに割り当てられたオブジェクトのために使用される)特殊なDO-未削除フラグで。しかし、このフラグを削除する必要があるのはいつですか?もちろんそれThread 1は可能です。しかし、Thread 2についてThread 1は何も知らないため、これが行われるかどうかはわかりません。これはA解放されないことにつながる可能性があります。そして、GCがそのフラグを削除する場合、GCがA2回目に実行されたときに何も削除されることを妨げるものはありません... 私が読んだオンザフライのマークアンドスイープガベージコレクターの説明では、置き換えられたオブジェクトは「グレー表示」である必要があると述べています。しかし、詳細はありません。ソリューションのより詳細な説明へのリンクをいただければ幸いです。

3
負符号と変数名の間のスペース
このStack Exchangeサイトを検索するだけでなく、Google検索も試しましたが、これに直接関連する質問は見つかりませんでした。 PEP 8 - Pythonのコードのためのスタイルガイドは、良いスタイルの推奨事項の多くを持っている、しかし、私は彼らがマイナスまたはマイナス記号(間にスペースかどうかについては何も言及しないと思います-)、変数名は、多かれ少なかれ読みだろうが。 質問 (非常に)小さな問題ですが、どちらがより読みやすいと考えられますか? false_positive = -true_positive false_positive = - true_positive 動機 ささいなことをしないようにお願いしますが、過去の数学のコースでは、エントロピーを計算するための方程式などの重要な方程式の負符号に気付かないことがよくあります。 -合計の前にサインに気付かないことが多いので、目立たせることが望ましいでしょう。

1
視覚化(3Dグラフィックス)フレームワークの単体テスト
これはこの質問のフォローアップです。科学的アルゴリズムのライブラリがあるときに、ユニットテストを行う方法を尋ねていました。現在、同様の問題がありますが、プロジェクトが異なります。 私は、DirectX、OpenGl、WebGl、Silverlight、WPFの3Dグラフィックエンジンフレームワークの抽象化に取り組んでいます。シナリオは次のとおりです。このプロジェクトは、同じオフィスで作業している私の同僚の小さなチームによって開発されています。私たちは皆、コンピューターサイエンティストであり、ソフトウェアエンジニアリングコミュニティや実践にはあまり関与していません。SubversionからGitに切り替えて、プロジェクトをCodeplexに公開することを説得するのに苦労しました。プロジェクトは大きくなり(C#の約80K行)、現在はShader Model 5.0までのほとんどのDirectXとOpenGlをカバーしているため、リンクされた質問で説明されているような1人のプロジェクトではありません。また、オープンソースコミュニティとのコラボレーションを促進したいと考えています。 これまでのところ、すべてのデバイスとリソースの初期化、シーンの設定、描画を含む小さなアプリケーションを作成してテストしてきました。問題は、それを異なるものにする方法がわからない、つまり、リソースの割り当て、プリミティブテセレーション、シェーダーコンパイルなど、フレームワークの特定の機能をテストする小さなテストケースを設計する方法です。エンジン全体の初期化。これらのケースのいくつかでは、便利なモックを考えることができますが、一般的に、出力がビジュアル(イメージ、またはアニメーションシーン)の場合、レンダリングアルゴリズムの正確さをどのようにテストできますか?現在、私たちが考え出した最も賢いことは、同じシーンをソフトウェアレンダラーであるDirectXとOpenGlにレンダリングし、それらをピクセルごとに比較することです。 では、ここでの「正しい」テストアプローチとは何でしょうか。
8 c#  unit-testing  tdd 

3
シンプルなウィジェットシステムで、各ウィジェットがその親への参照を必要とするのはなぜですか?
私は単純なウィジェットシステム(単一ウィンドウ、固定サイズ)に取り組んでいます。各ウィジェットは、その親(つまり、ウィジェットを含むウィジェット)をコンストラクターに渡します。ただし、私がScreenと呼んだルートウィジェットを除きます。 そのアプローチが理にかなっているかどうか、私にはいくつかの疑問があります。以前使用したほとんどのウィジェットシステム(Qt、GTKなど)で実行したためですが、これらは私のものよりもかなり複雑であることに気付きました。 ウィンドウのサイズ変更はありません 子供のサイズに基づいてコンテナのサイズを設定する予定はありません メモリ管理には必要ないと思います(C ++を使用しています)。代わりに共有ポインタを使用できます(基本的にはJavaでの動作) ウィジェットがその親への参照を必要とする理由はありますか? これを変更することは大きなリファクタリングです。そのため、先に進んでコンテナーとレイアウトを実装する前に、その親が必要かどうかをよく理解したいと思います。 編集:親はとにかくそのすべての子を知っていることに注意してください。子供も親を知る必要があるのか​​と思っています。

5
ロールバックを許可するためにゲームの動きを保存する最良の方法は何ですか?
ゲームフローを制御するゲームクラスと、ゲームクラスに接続されたプレーヤーを含むボードゲームを開発しています。ボードは単なるビジュアルクラスですが、動きの制御はすべてゲームによって行われます。 プレーヤーは、この種の動きが許可されていないことをプレイヤーに伝えるゲームにつながる誤った動きを試みる可能性があります(その背後にある理由を伝えます)。しかし、場合によっては、プレイヤーは動きを作ってそれが最良の動きではないことに気づくか、ボードをクリックするのを忘れるか、または別のアプローチを試してみたいだけです。 ゲームを保存して読み込むことができるので、移動前にすべてのデータを保存してロールバックを許可せずに、ユーザーが最後に自動保存されたターンを読み込むことができます。これは素晴らしいアプローチのように見えますが、ユーザーとのやり取りが含まれており、ボードの再描画はユーザーにとって退屈な作業になる可能性があります。この種のことをするより良い方法はありますか、それともアーキテクチャが本当に重要なのですか? ゲームクラスとプレーヤークラスは複雑ではないため、クラスのクローンを作成することをお勧めします。または、ゲームデータをゲームルールから分離してより適切な方法を選択します。 更新:このゲームの仕組み:移動(簡単な移動)を行うメインボードと、その移動に反応するプレーヤーボードがメインボード上にあります。また、他のプレイヤーの動きや自分の動きに応じたリアクションムーブがあり、自分の番でないときにリアクションしてボード上で行動することもできます。すべての動きを元に戻すことはできないかもしれませんが、現在の答えの1つに浮かぶ元に戻す/やり直しのアイデアが気に入っています。

4
インタープリターをコンパイラーに変換しますか?
まず、これが私の前に他の多くのプログラマーから寄せられた質問であることを私は知っています。しかし、私を助けることができる使用可能なリソースを見つけることができませんでした。 まあ、私は「ライト」と呼ばれるプログラミング言語を作成しています。構文はpythonに匹敵しますが、厳密なオブジェクト指向のコンセプトがあります。 私はまだこの言語用のインタープリター(C ++で)を作成しましたが、私の問題はこれを実行可能ファイルに変換する方法です。(または単に:どのようにコンパイラーを作るのですか?) ご清聴ありがとうございました PS:私は非常に古いチュートリアルへのリンクをいくつか見つけましたが、それはパスカルです... 編集:まあ、まあ。今、私はC ++に適したチュートリアルを見つけました。プロジェクトについて:いくつかの変更がありました。現在、この言語は「Q」と呼ばれています。(kju Dot)。
8 c++  compiler 

2
ファサードとしてのドメインサービス
C#を使用した.NETドメイン駆動設計:問題-設計-解決策を読んだところ、作成者が各集計ルートのドメインサービスを作成していることに気付きました。 ただし、ドメインサービスは対応するリポジトリのファサードにすぎませんでした。たとえば、これは彼の本のアプリケーションのコードサンプルです。 public static class CompanyService { private static ICompanyRepository repository; private static IUnitOfWork unitOfWork; static CompanyService() { CompanyService.unitOfWork = new UnitOfWork(); CompanyService.repository = RepositoryFactory.GetRepository<ICompanyRepository, Company>(CompanyService.unitOfWork); } public static IList<Company> GetOwners() { return CompanyService.GetAllCompanies(); } public static IList<Company> GetAllCompanies() { return CompanyService.repository.FindAll(); } public static void SaveCompany(Company company) { CompanyService.repository[company.Key] …

3
C ++でテーブルを保存する最良の方法は何ですか
C4.5アルゴリズムのわずかに変更されたバージョンを使用して、C ++で決定木をプログラミングしています。各ノードはデータセットの属性または列を表し、属性の可能な値ごとに子があります。 私の問題は、各ノードにサブセットを使用する必要があるため、行と列のサブセットのみを選択する簡単な方法が必要であることを念頭に置いて、トレーニングデータセットを格納する方法です。 主な目標は、可能な限り最もメモリと時間効率の良い方法で(優先度の高い順に)実行することです。 私が考えた最善の方法は、配列の配列(またはstd :: vector)またはそのようなものを持ち、各ノードにリスト(配列、ベクトルなど)または何かcolumn,line(おそらくタプル)を持つことですそのノードに有効なペア。 私はこれを行うためのより良い方法があるはずです、何か提案はありますか? 更新:私が必要なのは次のようなものです: 初めに私はこのデータを持っています: Paris 4 5.0 True New York 7 1.3 True Tokio 2 9.1 False Paris 9 6.8 True Tokio 0 8.4 False しかし、2番目のノードでは、次のデータが必要です。 Paris 4 5.0 New York 7 1.3 Paris 9 6.8 そして、3番目のノードの場合: Tokio 2 9.1 Tokio 0 8.4 しかし、最大数百の列を持つ数百万のレコードのテーブルがあります。 …

4
Pythonで 'format'メソッドがより広く使用されないのはなぜですか?
ここで何かが足りないのかもしれませんが、検索した結果、答えが見つかりませんでした。 私はかなりの数のPythonプロジェクトを調査しましたが、私が気づいていることの1つは、大部分のプロジェクト%が新しい推奨される.format()方法ではなく、演算子を文字列のフォーマットに引き続き使用しているという事実です。これには理由がありますか?何かを完全に見逃していない限り、それは些細な変更のように思えます。 例えば: # count how many times the % operator technique is used find . -name "*.py" -exec grep -HE "\"[^\"]+\"\s\%\s\w+|'[^']+'\s\%\s\w+" {} \; | wc -l # and the same for format() find . -name "*.py" -exec grep -HE "\w+\.format\(" {} \; | wc -l # Results: # # …
8 python 

3
他の開発者にコードを説明する上でどうすればよいですか?[閉まっている]
現在のところ、この質問はQ&A形式には適していません。回答は事実、参考文献、専門知識によって裏付けられると期待していますが、この質問は、討論、議論、投票、または拡張ディスカッションを求める可能性があります。この質問を改善でき、再開できると思われる場合は、ヘルプセンターにアクセスしてください。 7年前休業。 質問自体はばかげているように聞こえるかもしれませんが、問題が私の仕事のパフォーマンスに悪影響を及ぼしていると感じているので、答えは私にとって非常に重要です。 ここで少し背景を説明します。私は、ソフトウェア以外の会社の中規模ソフトウェア部門の経験豊富な上級ソフトウェア開発者です。物事の技術的な面では平均を上回っていますが、私は物事を伝えたり説明したりするのが非常に苦手です。他の開発者に何かを説明するときでも。 最も難しいのは、特定の小さなコードがどのように機能するかを説明するときに発生します。 面白いのは、たとえば、個別のモジュールとサブシステム間の相互作用など、何かがはるかに高いレベルでどのように機能するかについての例を説明および提供する方がはるかに簡単だということです。 より明確にするために、私が「ソースコード説明スキル」と呼ぶのは、 a)コードの実行フローを明確に説明する機能-たとえば、「これはそのThingを呼び出し、そのオブジェクトを返します。これは後でメソッドAを呼び出し、オブジェクトBを...に渡します」 a)現在の設計の問題を明確に説明する能力、またはより重要なのは、「パフォーマンス上の理由から、オブジェクトをクラスのフィールドとしてキャッシュし始めた場合、キャッシュが常に最新の状態になるように、10か所の場所で変更を加える」など なぜ私が物事を説明するのが苦手で、説明を見つけられなかったのかを分析しようとしましたが、箇条書きで説明しているのかもしれません。また、私が説明しているとき、私は自分の発言や質問を見落としていること、人々の質問に集中しすぎているかもしれませんが、これらの質問はしばしば無関係であり、単に会話を引っ張ってしまいます。 何をすればいいのでしょうか(おそらく、間違いを何度も何度も練習すると思うので、実際には購入しませんが、「完璧にするための実践」を除いて)、私はソースを改善できます。スキルを説明するコード。

1
一般的なデータをより具体的な形式で保存するためのAPI設計は何ですか?
私が取り組んでいるプロジェクトでは、ウィジェットに関するメッセージをメッセージキューを介して送信し、XMLとしてキューにシリアル化します。XMLスキーマには、ウィジェットタイプ、コマンド名、宛先など、これらのウィジェットメッセージのすべてのタイプに共通のプロパティのタグが含まれています。また、任意のサイズのキーと値のペアのリストを含めて、特定のタイプのウィジェットメッセージにのみ関連するプロパティを保存することもできます。WidgetMessageクラスは、このデータをカプセル化し、WidgetMessageXmlWriterそしてWidgetMessageXmlReaderクラスは、XMLにしてから直列化を提供します。 特定のメッセージをカプセル化するクラスをいくつか作成しました。たとえばFooPlaySoundMessage、「Foo」ウィジェットやBarSetLightPatternMessage「Bar」ウィジェットなどです。これらはそれぞれ、クラスとの間で変換するためのToWidgetMessageインスタンスメソッドとFromWidgetMessage静的メソッドを持っていますWidgetMessage。メッセージの各ファミリは、そのウィジェットタイプの抽象クラスから継承されます。たとえばFooMessage、and BarMessageはWidgetMessageMappingクラスから継承されます。これは、変換のためにサブクラスによって使用される共通のメッセージプロパティと保護されたメソッドを格納します。これらのクラスはWidgetMessage、キーと値のコレクションプロパティと関連するメソッドを継承したくないため、継承しません。単純なキャストではなく変換が必要です。 私はAPIの単純さを気に入っています(例:)が、FooPlaySoundMessage msg = FooPlaySoundMessage.fromWidgetMessage(widgetMessage)機能を共有するために基本クラスで保護されたメソッドを使用し、それを公開するために静的メソッドを使用しなければならないという事実は、別個のクラスまたは2つが関与する必要があるのか​​と疑問に思いますここ(WidgetMessageXmlWriterおよびと同様WidgetMessageXmlReader)。一方、OOPのポイントの一部は、データとメソッドをグループ化して、「ダムデータオブジェクト」を回避することだと思いました。 それで、データオブジェクトに変換メソッドを追加することによって正しいアイデアを持っていますか、それともその機能を別のクラスに抽出する必要がありますか? 更新: 上記の現在の設計の試みのすべての詳細において、私が解決しようとしている問題を十分に明確に説明していなかったと思います。 要約すると、強く型付けされたプロパティと、他のカスタムデータを格納するためのキーと値のペアのコレクションを持つ「ジェネリック」DTOクラスがあります。キーと値のペアが厳密に型指定されたプロパティに置き換えられていることを除いて、汎用DTOと同じデータをすべて格納するカスタムデータのセットごとに、いくつかの特殊なDTOクラスが必要です。これら2つのタイプのDTO間で変換するための最良の設計は何ですか?

3
HTTPの状態の欠如は、プロトコルを最新のアプリケーションに適合させませんか?[閉まっている]
現在のところ、この質問はQ&A形式には適していません。回答は事実、参考文献、専門知識によって裏付けられると期待していますが、この質問は、討論、議論、投票、または拡張ディスカッションを求める可能性があります。この質問を改善でき、再開できると思われる場合は、ヘルプセンターにアクセスしてください。 7年前休業。 PHPからASP.NETに変更しましたが、今はやや大規模な会社でWebフォームを使用しています。しかし、ASP.NET Webフォームに関する印象を裏付けるためにいくつか調査を行い、Webフォームは「デスクトッププログラミング」の世界から来た人のためにWebアプリケーションを簡単に作成できるようにするための試みであるという結論に達しました。 しかし、私はWebフォームを回避する前に、私たちが作成したソフトウェアのニーズを分析することを決定し、Web上のアプリケーションの状態を維持する問題にぶつかりました。 HTTPはステートレスプロトコルであり、ASP.NETはセッション変数、hiddenfields、viewstatesを使用して状態をシミュレートしようとしていることを理解しています。上記のすべてに欠陥があり、状態を維持するのに完全ではないことも理解していますアプリケーションですが、アプリの状態を維持する必要性も理解しています。 どちらが問題を提起しますか、HTTPはこのタイプのジョブ(状態を必要とするアプリケーションの作成)に本当に適していますか?現在、ツールはWeb開発者が利用できますか?HTML5で利用できる新しいツールは仕事で効果的ですか、それともHTTPの制限に対する回避策にすぎませんか。 私はWeb用に開発するのが大好きで、デスクトップよりもWebに精通しています。このHTTPのステートレス性についてしばらく疑問に思っていたので、ポイントが足りないのか、それともm私の考えにぴったりです。

3
動的に型付けされた言語のプロシージャの途中で変数の型を変更するのは悪いスタイルですか?
変数に固定型がないPython(および場合によってはPHP)では、コードのロジックの途中で変数に対して「型変換」を頻繁に実行します。私は(必ずしも)単純なキャストについて話しているのではなく、基本的に同じ値またはデータを表すまま、変数の型を変更する関数について話しています。 たとえば、Webリクエストを実行するときに、response変数を使用してaddurlinfoオブジェクトを格納し、次にそのオブジェクトの文字列コンテンツ、および文字列をJSONとして解析して返されるディクショナリを次のようなコードで記述します。 response = urlopen(some_url) assert response.info().type == 'application/json' response = response.read() logger.debug('Received following JSON response: ' + response) response = json.loads(response) do_something(response) (さて、それは少し不自然な例ですが、私はそれがアイデアをうまく​​示していると思います)。これは、3つの個別の変数名を使用するよりも良いと思います。これは、a)response変数に基本的に同じ情報が含まれていること、別の型に「変換」されていること、b)以前のオブジェクトがそうではないことを伝えるためです。これらの変数を再割り当てすることで、後のコードで使用できなくなったため、関数のさらに下で必要になります。 トレードオフは、おそらく、ある時点で変数がどのタイプであるかについて読者が混乱する可能性があるということです。 これは悪いスタイルですか?上記の例では、1つに再割り当てする代わりに3つの異なる変数を使用する必要がありますか?また、これは動的に型付けされた言語での標準的な方法ですか?他の人のコードを知るのに十分なほど見ていません。

3
ソフトウェアがブール値で性別を特定するときに論争がありましたか?[閉まっている]
ここで何が尋ねられているのかを知るのは難しい。この質問は、あいまいで、あいまいで、不完全で、過度に広い、または修辞的であり、現在の形では合理的に回答することができません。再開できるようにこの質問を明確にするヘルプについては、ヘルプセンターに アクセスしてください。 7年前休業。 Javaを使用した最初のプログラミングクラスでは、データ型を説明しているときに、次のことが起こりました(ちょっと)。 教授:では、プログラムがユーザーの性別を格納する必要がある場合、どのデータ型を選択しますか? 誰か:ブール値はどうですか?ご存知のとおり、男性には真、女性には偽。 教授:確かに、それはうまくいくかもしれませんが、一部の人々はそれについて躊躇するかもしれません。過去に男性を「本当」と女性を「本当」と呼ぶことに異議を唱えてきました... * 笑い声 * 彼は結局、ブール値は問題ないはずですが'm'、chars(やなど'f')を検討するように勧めました。 このプログラミングの実践に基づいた大規模な紛争について、運が悪かったという歴史的な記録がある場合は、少し検索してみました。 性別にどのデータ型を使用するか、またはブール値を使用するかどうかは問題ではありません。、場合、私は聞いてるのよ歴史的に、(私はそれは言っていませんので、明らかに「間違った」のプログラムで性別を決定するブール値の使用に関する紛争があったある行動-私はそれを気にしない間違いました)教授が示唆するように女性を「偽」と呼ぶことの。 関連する質問を検索すると、結果はたまたまソフトウェアの効率に関するものにすぎません。
8 history 

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