ソフトウェア工学

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

4
ささいな保護されたゲッターは過剰に露骨ですか?
私が以前に本当に考えたことがないもの(AS3構文): private var m_obj:Object; protected function get obj():Object { return m_obj; } private var m_str:String; protected function get str():String { return m_str; } 少なくともサブクラスはm_objまたはm_strを設定できません(ただし、m_objを変更することはできます)。 私の質問:これは単なる露骨なやりすぎですか? このプログラマーの質問: 単純にパブリックプロパティにするのではなく、クラスプロパティのゲッター/セッターをいつまたはなぜ使用する必要があるのでしょうか。 重複として提案されています。 その質問は、パブリックプロパティとプライベートプロパティのみを扱い、プロパティをゲッターとセッターでラップする必要があるかどうかという点で異なります。私の質問では、保護された変数と、継承するクラスがそれらの変数とどのように相互作用するかに焦点を当てています。 したがって、代替実装は次のようになります。 protected var m_obj:Object; //more accessible than a private variable with a protected getter protected var m_str:String; //more accessible than a …

10
複雑なデザインで本当に得られるものはありますか?
私は以前から、さまざまな規模のクライアントを抱えるコンサルティング会社で働いており、非常に単純なものから複雑なものまで、さまざまなWebアプリケーションを見てきました。 MVC サービス層 EF DB 本当に複雑に: MVC うわー DI / IoC リポジトリー サービス UIテスト ユニットテスト 統合テスト しかし、スペクトルの両端で、品質要件はほぼ同じです。単純なプロジェクトでは、新しい開発者/コンサルタントは、何が起こっているのかを理解するために6層の抽象化をたどる必要がなく、複雑な抽象化を誤解し、コストを下げるリスクを冒すことなく、期待に応え、変更を加え、すぐに貢献できます。 すべての場合において、実際にコードをスワップ可能または再利用可能にする必要はありませんでした。また、要件が変更されたため、テストが実際に最初の反復を超えて維持されることはありませんでした。 だから-最終的に- テストとインターフェースは使用されません 迅速な開発(読み取り:コスト削減)が優先事項 プロジェクトの要件は開発中に大きく変化します ...エンタープライズクライアントに複雑な問題を解決するためであっても、超シンプルなアーキテクチャを推奨するのは間違っているでしょうか?エンタープライズソリューションを定義するのは複雑ですか、それとも信頼性、同時ユーザー数、保守の容易さ、またはこれらすべてですか。 私はこれが非常に曖昧な質問であることを知っており、どの回答もすべてのケースに当てはまるわけではありませんが、私はしばらくの間ビジネスに携わっており、これらのさまざまな程度の複雑さで機能している開発者/コンサルタントからの連絡に興味があります、少なくともプロジェクトの開発中は、クールだが高価な抽象化が全体的なコストに見合うかどうかを聞くため。

3
アクティビティ図は常に1つのエンドポイントで終わりますか?
たとえば、単純なプログラムのアクティビティ図: ユーザーデータを取得します。 ユーザーが存在する場合は、ELSEは何もしません。 終わり。 複数のエンドポイントがあるダイアグラムをよく見るが、1つだけのダイアグラムもある。以前のパスに関係なく、アクティビティ図は両方の方法を1つの最終状態にマージする必要がありますか?

2
Ruby-メソッド間でインスタンス変数とパラメーターを使用する場合
他のメソッドを呼び出すメソッドをいくつか書いています。 情報を渡すには、いくつかの選択肢があります。 情報をパラメーターとして渡す 他のメソッドがインスタンス変数にアクセスできるようにインスタンス変数を設定します どちらのオプションをいつ選択すればよいですか? 渡されるものについて非常に具体的であるため、最初のオプションは良いようです。欠点は、多くの値が渡されていることです。 2番目の方法はすべての値を渡す必要はありませんが、メソッドがインスタンス変数を「どこかに」設定するという多くの魔法につながるようです クラス内の他のメソッドに渡されることについて常に明示する必要がありますか?例外はありますか?

1
アップストリームがプルしない機能ブランチを持つフォークされたgitリポジトリを維持する方法は?
これがGithubの典型的なワークフローです... いくつかのプロジェクトのように->それをフォークし-> git clone https://github.com/you/someprojectます。 プロジェクトを開きます。あなたが見るものに似ていますが、いくつか変更を加えます。 feature-branch(git checkout -b some-feature)でのみ機能するように注意して、Githubフォークにupstreamプッシュした後、メンテナーにプルリクエストを出すことにしましたfeature-branch。 メンテナは、何らかの理由でプルを拒否します。 たとえば、上記のシナリオに一致する、失敗したプルリクエストは次のとおりです。.. 今一般的にメンテナ場合、HADがマージプル...ワークフローがシンプルになります...私のローカルマシン上で、私は何でも上の任意のローカルの変更コミットするだろうfeature-branch、私は一度にあったし... git fetch --all、git checkout master、git pull upstream --ff-only。次に、必要に応じて、その上で変更を再生します... だが... 私のフォークへの変更を無理なく続けていきたいと決心した場合はどうなりますかupstream?それでも、発生した変更を追跡してマージできるようにしたいですか?通常、私はあなたが維持することができますどのように..機能ブランチを削除して、自分の道に行くとmaster、マージされた上流ことすることができ、まだから「永久に切り離さ」されながら、あなたのフォークの機能を維持し、分岐upstreamのをHEAD?

1
効果的なC ++ライブラリのWebサイトとドキュメントの作成
C ++ライブラリを作成することは、他のユーザーが使用できるようにドキュメント化することも意味します。また、ドキュメントの品質は劇的に異なる可能性があります。 C ++ライブラリのWebサイトは、最も効果的になるようにどのように構成すべきですか? 私は、「最も効果的な」ことを、図書館の利害関係者の3つの特定のグループに分割することで構成します。 新規ユーザーは、1つのステップから次のステップに明確に流れる、優れた簡単な導入、ダウンロード、セットアップ、およびドキュメントが必要です。 経験豊富なユーザーは、必要な詳細にすばやくアクセスできる確かなリファレンスと、新しい更新に関する明確な情報が必要です。 新しい寄稿者は、寄稿をライブラリーに取り込むために実行する必要があるステップをカバーする方法をガイドする必要があります。 私は彼らが見たり使用したりするものにとても満足する方法を見つけたいと思います。この質問は、プロのプログラミングとユーザーエクスペリエンスとの間のちょっとしたクロスです。 特定の例では、Boostはライブラリの最高のコレクションの1つですが、初期インストール、リファレンスドキュメント、および貢献方法の把握はやや混乱を招く可能性があります。 一方、cppreference.comとSGI STLのドキュメントは、説明、リンク、および例があり、非常に明確で有用であることがわかりました。 例は単なる意見であり、他の例は異なる場合がありますが、それは私が質問している質問にコンテキストを与えるのに役立ちます。

2
無駄な複雑さを制御するために、開発環境に正式な役割(内部または外部)を割り当てる必要がありますか?
数年前、私は社内のフレームワークの開発にこれまで取り組んできた小さな会社で働いていました。彼らは彼らの最上級の開発者とそのアーキテクトをカスタムMVCフレームワークとORMをゼロから開発することに専念していました。これらの2つは、コア製品と直交しています。残念ながら、このフレームワーク主導のアプローチのサポートは上から来たものであり、収益を生み出すソフトウェアの配信を遅らせました。そして、生成されたフレームワークは、既製の代替品よりも著しく劣り、遅延をさらに悪化させました。会社はすぐに現金を使い果たし、最終的には全員が解雇された。 後の雇用主も同様のミスを犯しました-彼らは非常に技術的に熟練した開発者-完璧主義者を手に入れました。このソリューションは、他の顧客に合わせて拡張することができます。プロジェクトは大幅に実行されました。しかし、他の潜在的な顧客は少しもしません。金運の戦略的失敗、それは少額の財産です。 どちらの場合も、かなりの量のオーバーエンジニアリングがありました。どちらの場合も、会社とプロジェクト管理は、プログラミングのバックグラウンドではなく、ドメインまたは分析のバックグラウンドを持つ人々でした。どちらの場合も、ソフトウェアアーキテクトは過度に複雑なソリューションを構築して、かゆみを掻き消し、履歴書を強化しました。どちらの場合も、アーキテクトはコストを抑えることに利害関係がありませんでした(会社が倒産した場合に仕事を失うリスクは別として、それは彼らの高いエンプロイアビリティを考慮するとそれほどリスクはありませんでした)。 私の経験によれば、開発ショップが陥るのは珍しいことではありません。 正式な内部または外部の技術的な敵対的な役割-「量測量者」-建物のアナロジーを使用して、無駄なオーバーエンジニアリングを呼び出したり、防止したりするためのソフトウェアプロジェクトの場所はありますか?この役割を果たすのに最適なのは誰ですか?

1
スクリプト言語のネイティブ拡張-名前の衝突を回避し、他の人の名前空間を混乱させる
小さなスクリプト言語を開発し、最初のネイティブライブラリバインディングの作成を開始しました。これは、スクリプト言語のネイティブ拡張を書いているのは事実上初めてなので、概念的な問題に遭遇しました。 この言語から使用できるように、一般的なライブラリのグルーコードを書きたいと思います。私が書いたエンジンの設計により、これはstruct、仮想マシン、および関数ポインタ。 したがって、ネイティブバインディングは実際には単なるグローバル配列変数であり、ここで明らかに(できれば適切な)名前を付ける必要があります。Cでは、myscript_parse_source()またはのように、関数名の前にカスタムプレフィックスを付加することにより、自分の関数を「名前空間」に配置するのが慣用的myscript_run_bytecode()です。カスタム名は、理想的には、それが属しているライブラリの名前を表すものとします。ここで混乱が生じます。 のバインディングを書いているとしましょうlibcURL。この場合、次のように拡張ライブラリを呼び出すのが合理的curl_myscript_bindingです。 MYSCRIPT_API const MyScriptExtFunc curl_myscript_lib[10]; しかし、これはcurl名前空間と衝突します。(私はそれを呼び出すことさえ考えましたcurlmyscript_libが、残念ながらlibcURLはcurl_プレフィックスのみを使用していません-パブリックAPIにはCURLCODE_*やなどのマクロが含まれているCURLOPT_*ため、これにより名前空間も乱雑になると思います。) もう1つのオプションはmyscript_curl_lib、それをとして宣言することですが、バインディングを作成するのが私だけである場合にのみ有効です(自分の名前空間で何をしているのかわかっているため)。他のコントリビューターが独自のネイティブバインディングを追加し始めるとすぐに、myscript名前空間が乱雑になります。(私はいくつかの調査を行いましたが、たとえば、Perl cURLバインディングはこのパターンに従っているようです。それについて私が何を考えるべきかわかりません...) では、変数に名前を付けるにはどうすればよいでしょうか。従うべき一般的なガイドラインはありますか?

2
特定のハードウェアに依存するアプリケーションをテストするにはどうすればよいですか
Androidアプリケーションを作成しました。アプリケーションには、非常に特定のハードウェア(現在はプロトタイプ)へのBluetooth接続が必要です。現在アプリをテストできる唯一の方法は、何百マイルも走行して機能するかどうかを確認することです。最終的にANRが発生した場合、クライアントの前では非常に恥ずかしいことがあります。このアプリの接続タイプとメカニズムは、このハードウェアに合わせて非常に厳密に調整されています。ラップトップを持参したり、電話をルート化したり、敷地内の他のデバイスに接続したりすることは許可されていません。 このアプリケーションを自宅でテストする方法、またはアクティビティをステップ実行して、クライアントが私を怖がらせている間、2番目のアクティビティで別のANRがないことを確認する方法はありますか? 私は経験豊富なプログラマーではないことを指摘しておく必要があります。これは、現在スタッフを雇っていないため、誰かを助けるための新しいアイデアです。間違いなく、これを開発するための非常に基本的な概念の一部が欠けています。

1
タグ付きポインターの実際の使用例は何ですか?[閉まっている]
閉まっている。この質問はトピックから外れています。現在、回答を受け付けていません。 この質問を改善してみませんか? 質問を更新して、ソフトウェアエンジニアリングスタック交換のトピックになるようにします。 6年前休業。 タグ付きポインターの実際の使用例は何ですか? これは主に、小さな64ビットシステムと、64ビットワードポインターの可能な使用法について読んだことが原因です。 私の理解では、タグ付きポインターは、特定のアーキテクチャーで可能なアドレス空間がはるかに小さいため、ビットで追加情報を含むことができるアドレスです。 しかし、些細な場合を超えてタグ付きポインタを使用することは可能ですか?クールなアイデア/例はありますか? タグ付きポインターを介して64ビットポインターを利用する一般的なライブラリ、フレームワークはありますか?すべてのハードウェアでそれは可能ですか?

4
「データベースに大きなblobを格納するとパフォーマンスが低下する」とはどういう意味ですか?
データベースの内部を知っている人にとって、これは簡単な質問かもしれませんが、データベースに大きなBLOB(たとえば、400 MBの映画)を格納するとパフォーマンスが低下することになっている理由を明確に説明できますか?これはインターネット全体でよく見られる申し立てですが、実際に説明されたことはありません。 具体的には、SharePoint / MSSQLのパフォーマンス、つまりファイルアップロードのパフォーマンス、サイトの閲覧、リストの表示、ドキュメントのオープンなどについて言及しています。データベースが大きくなりすぎると、動作が遅くなると言われています。ファイルシステムへのBlobの外部化(SharePointではリモートBlobストレージと呼ばれ、データベースからファイルを移動し、参照のみを残します)はこれをある程度解決するはずですが、正確には-最下位レベルで-違いは何ですか?データベースに巨大なファイルが保存されている場合、バックアップに時間がかかることは明らかです...しかし、どの操作が正確に影響を受け、その基本的なメカニズムは何ですか(つまり、データベースの外部のファイルシステムに保存されているファイルは、どのようにアクセスまたは保存されますか?) 列を含む単純なテーブルをID(guid, PK), FileName(string), Data(varbinary(max))考えてみてください-大きなData列は、Webサイトにファイルのリストを表示する(内部的には実行することを意味しますSELECT FileName FROM table)、または新しい行を挿入するなどの操作を本当に遅くしますか?実際のバイナリコンテンツの列にインデックスが付けられるのとは異なります。 このような質問が既に出されていることは知っていますが、十分な説明が見つかりません。

6
テスト環境の分岐戦略
今月から新しいプロジェクトを開始します。プロジェクトは1年間で、本番環境への展開はプロジェクトの終わり頃にのみ行われます。 反復的な開発(反復ごとに1か月)を行うため、これは、QAテストの各反復の終わりに機能をテスト環境にドロップすることを意味します。 私たちの分岐戦略は: トランク-すべての開発はトランクで行われます。 機能の分岐-トランクから分岐すると、大きな機能を開発するために必要に応じて作成され、トランクで実行すると壊れる可能性があります。 QAリリースブランチ-各反復の最後に、トランクのブランチが作成されます。このブランチ(バージョン番号を含む)は、テスト環境にリリースされます。このバージョンで発見されたすべての重大なブロッキングバグはこのブランチで修正され、修正はトランクにマージする必要があります。新しいリリースブランチがトランクから作成される次の反復の終了後にQAリリースブランチが破棄されるため、重大ではない/重要でないバグはQAリリースブランチでは対処されず、トランクでのみ修正されます。 本番ブランチ-これは、プロジェクト終了時の最新のQAリリースブランチになります。これはタグ付けされ、すべての製品バグ修正はこのブランチにあり、トランクにマージされます。 これは正しい分岐戦略ですか?他に検討し損なったことはありますか? SVNを使用しています。

2
OOP言語のモジュールシステム
シンプルなオブジェクト指向プログラミング言語を設計しています。 これは、Javaと同様に、VMによって静的に型付け、コンパイル、および実行されます。 違いは、OOPをそれほど強調したくないということです。コード自体はほとんどC ++(ファイルスコープで許可されているクラス、関数、変数)に似ています。 必要なものの1つはモジュールシステムです。私は以下を理解しました: すべてのファイルはモジュールです(一度コンパイルすると)-Pythonのように プログラマーはimportキーワードを使用してモジュールをインポートする必要があります。これにより、コンパイラーは標準ディレクトリーおよびファイル・ディレクトリーでモジュールを検索します(VMは実行時にもこれを行う必要があります)。 そして今、私はサブモジュールとモジュール階層の概念をどのように導入すればよいのか分かりません。 たとえば、1つのオプションは、ディレクトリ階層に依存することです。これによりimport engine.graphics.renderer、作業ディレクトリ内、および「renderer」というモジュールを持つ「graphics」というディレクトリ内に「engine」というディレクトリが見つかるはずです。 そのようなデザインの欠点は何ですか?何か不足していますか?

6
xmlベースのプログラミング言語
私はウィキペディア-Category:XMLベースのプログラミング言語を見ていました。 言語を設計するために誰かがこのアプローチを取るのはなぜですか それの利点は何ですか? 私はデメリットしか考えられません。 維持するのが難しい 読みにくい 書くのが難しい

2
適切に設計されたオープンソースWPFアプリケーション[終了]
閉まっている。この質問はトピックから外れています。現在、回答を受け付けていません。 この質問を改善してみませんか? 質問を更新して、ソフトウェアエンジニアリングスタック交換のトピックになるようにします。 6年前休業。 WPFを使用してうまく設計された.NETオープンソースアプリケーションについて誰かが知っているかどうか疑問に思っていますか? すでにGitHubやSourceforgeなどの通常のサイトで検索を試みましたが、結果にはまったく満足していませんでした。 実際、私はMVVMやデータバインディングなどの比較的大きなソフトウェアのコンテキストでの適切な使用法に興味があります(少なくとも、サンプルコードの数行よりも多く、多くの場合、チュートリアルや書籍を見つけることができます)。また、NHibernateとのORMが私の主な関心事です。 現在、私はWPFがあまり広く使用されていないという全体的な印象も持っていますが、それでよろしいですか?どのクローズドソース(商用)ソフトウェア製品があり、それを使用していますか?
8 c#  .net  software  wpf 

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