ソフトウェア工学

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

8
開発時に同僚に対処するため、アドバイスが必要です[非公開]
ここで何が尋ねられているかを伝えるのは難しいです。この質問は曖昧、曖昧、不完全、過度に広範、または修辞的であり、現在の形式では合理的に答えることができません。この質問を明確にして、再開できるようにするには、ヘルプセンターに アクセスしてください。 8年前に閉鎖されました。 この質問はして移行され、それがソフトウェア工学スタック所に答えることができるので、スタックオーバーフローから。 8年前に移行され ました。 現在のプロジェクトアーキテクチャを開発し、独自に開発を開始しました(次のようなものに到達しますrevision 40)。 シンプルな地下鉄ルーティングフレームワークを開発しており、私の設計は非常によくできているようです- いくつかのメインモデル、対応するビュー、メインロジック、データ構造が「あるべき」ようにモデル化され、レンダリングから完全に分離され、アルゴリズム部分も実装されましたメインモデルとは別に、少数の交差点がありました。 私は、その設計をスケーラブルで、カスタマイズ可能で、実装が容易で、主に「ブラックボックスの相互作用」に基づいて相互作用し、非常に素晴らしいと呼びます。 さて、何が行われたか: 対応するインターフェースの実装を開始し、便利なライブラリを移植し、アプリケーションの一部の実装スタブを作成しました。 コーディングスタイルとそのコーディングスタイルの使用例(自分の記述コード)を説明したドキュメントがありました。 コード(スマートポインターでラップ)などC++を含む、多かれ少なかれ最新の開発手法の使用を強制しましたno-delete。 具体的なインターフェイス実装の目的と、その使用方法を文書化しました。 単体テスト(ほとんどの場合、「実際の」コードがあまり多くないため統合テスト)と、すべてのコア抽象化のための一連のモック。 私は12日間休みました。 現在何がありますか(プロジェクトはチームの他の4人のメンバーによって開発されました): すべてのプロジェクトの上に3種類のコーディングスタイル(私は推測する、それらの2つが同じスタイルを使用することに同意した:)、同じことが私たちの抽象化の命名にも適用される(例えばCommonPathData.h、SubwaySchemeStructures.h)基本的にはいくつかのデータ構造を宣言し、ヘッダーです。 最近実装された部品のドキュメントの絶対的な不足。 私が最近呼び出すことができるものsingle-purpose-abstractionは、少なくとも2つの異なるタイプのイベントを処理し、他の部分と密接に結合しています。 使用されるインターフェイスの半分には、メンバー変数が含まれるようになりました(sic!)。 ほぼすべての場所での生のポインターの使用。 " (Rev.57) They are unnecessary for this project"のため、ユニットテストは無効です。 ... (おそらくすべてではない)。 コミット履歴は、私の設計が過剰であると解釈され、人々がそれを個人用自転車と再実装されたホイールと組み合わせ始め、コードチャンクの統合に問題があったことを示しています。 さて、プロジェクトはまだやらなければならないことのほんの一部をしているだけで、深刻な統合の問題があります。メモリリークがあると思います。 この場合にできることはありますか? 私はすべての努力が利益をもたらさなかったことに気づきましたが、締め切りはもうすぐであり、私たちは何かをしなければなりません。誰かが同様の状況にありましたか? 基本的には、プロジェクトの良い(まあ、できる限りのことをすべてやった)ことは良いことになると思いましたが、間違っていることは理解しています。

2
実行時に取得される型からクラスを動的に生成する
C#(または他の言語)で次のことを行うことは可能ですか? データベースからデータを取得しています。実行時に、列の数とフェッチされた列のデータ型を計算できます。 次に、これらのデータ型をフィールドとしてクラスを「生成」します。また、コレクションにフェッチしたすべてのレコードを保存します。 問題は、実行時にステップ1と2の両方を実行することです。 これは可能ですか?現在C#を使用していますが、必要に応じて他の何かに移行できます。


1
OAuthの代替手段
Web業界は、APIサービスを外部の消費者と開発者に拡張する際にOAuthを使用する方向に移行/移行しています。シンプルなものにはいくつかの優雅さがあります...そして、3ステップのOAuthプロセスはそれほど悪くはありません...私はそれが最良の選択肢であることに気づきました。 より優れた、より安全な代替手段はありますか? セキュリティ参照は、次のURLから派生しています。 OAuth 2.0はWebに悪いですか? Webに悪い署名のないOAuth 2 ITセキュリティスタックエクスチェンジでこれに遭遇しましたが、セキュリティの観点からはそれが痛烈だと思いました。 OAuth / OpenID / Facebook Connect ..クレイジー? たぶんSAML 2.0が代替手段ですか? 何についてのOpenIDの? この質問の目的は、プログラミングの観点からです。 OAuthは今日存在する最良のオプションですか? セキュリティの観点、実装の観点、長寿命(数か月でやり直す必要はありません)、Webを消費するモバイルアプリケーションのサポートを可能にする消費者にWebアプリケーションを拡張できる代替オプションがありますか応用。

4
なぜ人々はSOAPが廃止されると考えるのですか?[閉まっている]
閉じた。この質問は意見に基づいています。現在、回答を受け付けていません。 この質問を改善したいですか?この投稿を編集して事実と引用で答えられるように質問を更新してください。 6年前に閉鎖されました。 今日のSOを閲覧中に、私はこの質問をここで見つけました、そして、それはこれで始まります: 確かに、SOAPは絶望的であり、すべてを使用することを余儀なくされていることを教えてくれます 今までSOでこのような声明をたくさん見つけましたが、これは私にこの質問をするきっかけになりました。 RESTには用途があり、SOAPには用途があり、機能として交差する場所もありますが、相互に交換することはできません。 だから、なぜ人々はSOAPが「非推奨」だと思うのだろうか?それは無知ですか?SOAPおよびWS- *仕様の複雑さ RESTの誇大広告?何? SOAPが廃止されると思われる場合は、その理由を教えてください。私は興味がある!
20 web-services  soa  soap 

8
巨大なモノリシックアプリケーションの危険性
私がここ数年取り組んでいる大きなプロジェクトは、ファームウェアの心臓部である高度なデバイスの制御(およびすべて)アプリケーションです。 デバイスは非常に高度であり、メモリから言うことができるよりも多くの異なる機能を備えており、それらの98%はこの1つの巨大な実行可能ファイルによって処理されます。一方では、プログラムは非常に保守性が高く、内部で適切にモジュール化され、適切に文書化されており、ディレクトリやファイルなどによって機能が合理的に分離されています。 しかし、最終的には、リモートデータベース通信、タッチスクリーン処理、多数のさまざまな通信プロトコル、測定、いくつかの制御アルゴリズム、ビデオキャプチャ、イースターの日の出時刻と日付(真剣に、非常に深刻な目的のために必要です!)...一般に、非常に薄く関連しているもの、多くの場合、いくつかの遠いモジュール間で少しずつ流れるいくつかのデータを通してのみ関連するもの。 ソケットを介して、より具体的な目的で、必要に応じてロード/アンロードするなど、互いに通信する複数の個別の実行可能ファイルとして実行できます。この方法で作成された理由は特にありません。 片手で機能し、大丈夫です。プロジェクトは、複数のバイナリのビルドを維持することなく、よりシンプルです。内部構造も簡単です。ソケットや共有メモリを介して通信するのではなく、メソッドを呼び出すか、変数を読み取るだけです。 しかし、一方で、このことの大きさ、規模は私をゾッとさせるだけで、タイタニックを操縦しているように感じます。私は常にモジュール化することを教えられましたが、すべてを1つの巨大なファイルにまとめるのは間違っているように感じます。私が知っている問題の1つは、1つの(わずかな)モジュールがすべてクラッシュするという重大なクラッシュです。それ以外の場合、内部の分離と防御的なプログラミングにより、何らかの理由で内部モジュールの半分が正常に機能しなくなった場合でも、これがほとんど正しく実行されることが保証されます。 他にどんな危険を見落としましたか?なぜこれが私を怖がらせるのですか?これは単なる不合理な未知への恐怖ですか?このように深刻な大きなプロジェクトを作成することは、受け入れられている慣行ですか?不安を和らげるか、バージョン2.0を複数の小さなバイナリにリファクタリングする正当な理由を教えてください。

2
組み込みC開発者向けの優れた単体テストの例[終了]
閉まっている。この質問はトピック外です。現在、回答を受け付けていません。 この質問を改善したいですか? 質問を更新して、 Software Engineering Stack Exchangeのトピックになるようにします。 6年前に閉鎖されました。 来週、ユニットテストとテスト駆動開発について私の部署に講演する予定です。その一環として、最近書いたコードから実際の例をいくつか紹介しますが、講演で書く非常に簡単な例をいくつか紹介したいと思います。 私はウェブ上で良い例を探してきましたが、開発分野に特に当てはまるものを見つけるのに苦労していました。私たちが作成するソフトウェアのほとんどは、小型のマイクロコントローラーで実行される埋め込み型の制御システムです。ユニットテストに簡単に適用できる多くのCコードがあります(ターゲット自体ではなくPCでユニットテストについて説明します)。「下」の層から直接離れている限り:直接話すものマイクロコントローラー周辺機器に。しかし、私が見つけたほとんどの例は文字列処理に基づいている傾向があります(たとえば、優れたDive Into Python Romanの数字の例)。文字列を使用することはほとんどないため、これは実際には適切ではありません(コードが通常使用する唯一のライブラリ関数について)ありmemcpy、memcmpそしてmemset、strcat または正規表現は正しくありません)。 では、質問に答えてください。ライブセッションで単体テストのデモンストレーションに使用できる機能の良い例を提供してくれる人はいますか?私の(変更される可能性がある)意見での適切な答えは、おそらく次のとおりです。 誰でも(たまにコードを書くだけでも)理解できるほど単純な関数。 無意味に見えない関数(つまり、パリティまたはCRCを計算することは、おそらく2つの数値を乗算してランダムな定数を追加する関数よりも優れています)。 人の部屋の前に書くのに十分短い関数(エラーを減らすためにVimの多くのクリップボードを利用するかもしれません...); 文字列を処理するのではなく、数値、配列、ポインター、または構造体をパラメーターとして受け取り、類似のものを返す関数。 単純なエラー(例えば)>ではなく、簡単に入力できる関数は、>=ほとんどの場合は動作しますが、特定のエッジケースで破損する可能性があります。ユニットテストで簡単に識別および修正できます。 何かご意見は? おそらく関連性はありませんが、テスト自体はおそらくGoogle Test Frameworkを使用してC ++で記述されます。すべてのヘッダーには既に#ifdef __cplusplus extern "C" {ラッパーがあります。これは、これまでに行ったテストでうまく機能しました。

11
情報の隠蔽は慣例以上のものですか?
Java、C#、およびその他の多くの厳密に型指定された静的にチェックされた言語では、次のようなコードを記述するために使用されます。 public void m1() { ... } protected void m2() { ... } private void m2() { ... } void m2() { ... } 動的にチェックされる言語の中には、特定のクラスメンバーの「プライベート」レベルを表すキーワードを提供せず、代わりにコーディング規約に依存しているものがあります。たとえば、Pythonはプライベートメンバーの前にアンダースコアを付けます: _m(self): pass 動的にチェックされる言語でこのようなキーワードを提供することは、実行時にのみチェックされるため、ほとんど使用されないと主張できます。 ただし、これらのキーワードを静的にチェックされた言語で提供する正当な理由も見つかりません。protected迷惑で気を散らすようなかなり冗長なキーワードでコードを埋める必要があると思います。これまでのところ、これらのキーワードによって引き起こされるコンパイラエラーがバグから私を救ったという状況にはありませんでした。まったく逆に、間違って配置されprotectedたためにライブラリを使用できない場合がありました。 これを念頭に置いて、私の質問は次のとおりです。 クラスの公式インターフェースの一部を定義するために使用されるプログラマー間の慣習以上の情報が隠されていますか? クラスの秘密状態を攻撃から保護するために使用できますか?反射はこのメカニズムをオーバーライドできますか?コンパイラが情報の隠蔽を強制することが価値があるのは何ですか?

3
C#は実際にはマルチプラットフォーム言語ですか?
この質問はして移行され、それがソフトウェア工学スタック所に答えることができるので、スタックオーバーフローから。 8年前に移行され ました。 C#(および一般的な.netプラットフォーム)は、マルチターゲティングアプリからの優れたオプションになりつつあるようです。 公式MS .netフレームワーク:フルブローウィンドウ開発、asp.net開発、Windows Phone開発など モノとそのすべての派生物:モノタッチ、モノドロイド:世界の残り。このツールは現在RTMです。 これは、C#がデスクトップ、Web、モバイルなどの最も人気のあるプラットフォームをターゲットとするための優れた言語になりつつあることを意味していますか? ターゲットプラットフォームの「ネイティブ」言語(客観的なC、Javaなど)を使用するのがさらに良いですか? それはただの煙幕であり、唯一のマーケティング言語ですか? プラットフォーム間でコードをコピー/貼り付けできないことを実際に意識していることに注意してください。しかし、アプリケーション(モデル、ビジネスなど)の下位層は再利用できると確信していますが、プラットフォームに上位層(Guiなど)を適応させる必要があることは知っています。私の目標は、技術的なコードの共有よりも必要なスキルに重点を置いています。 [編集]私は c#を大量に使用する会社のac#開発者です。そのため、会社のターゲットプラットフォームの範囲を拡大する計画でC#について話しました。
20 c#  mono  monodroid 

6
スーパーグローバルを直接変更する
この質問はして移行され、それがソフトウェア工学スタック所に答えることができるので、スタックオーバーフローから。 8年前に移行され ました。 私は人々(一般に良いコードを書く人)$_POSTがこのようなコードで配列を直接変更するのを見ました: // Add some value that wasn't actually posted $_POST['last_activity'] = time(); // Alter an existing post value $_POST['name'] = trim($_POST['name']); // Our pretend function // Pass the entire $_POST array as data to work with in the function // The function update_record() will read only the …
20 php 

3
「下流/上流設計」とはどういう意味ですか?
この質問は、Software Engineering Stack Exchangeで回答できるため、English Language&Usage Stack Exchangeから移行されました。 8年前に移行され ました。 ソフトウェア開発における「下流/上流設計」とはどういう意味ですか?

4
GCC vs clang / LLVM —それぞれの長所と短所[非公開]
現在のところ、この質問はQ&A形式には適していません。回答は、事実、参考文献、または専門知識によってサポートされると予想されますが、この質問は、議論、議論、世論調査、または広範な議論を求める可能性があります。この質問を改善し、場合によっては再開できると思われる場合は、ヘルプセンターをご覧ください。 6年前に閉鎖されました。 GCC対clang / LLVMの長所と短所は何ですか?
20 compiler  clang  gcc  llvm 

9
リレーショナルデータベースの制約-完全に削除しないのはなぜですか?
最近(SQLserver内の)テーブル間に制約を作成する理由はありますか?もしそうなら、いつ?私の分野のほとんどのアプリケーションはオブジェクトの原則に基づいて構築されており、テーブルは必要に応じて結合されます。需要は、アプリケーションのニーズに基づいています。単純なルックアップのために束縛されたテーブルをロードすることはありません。順番に(アクションの後)別の単純なルックアップが必要です。 EntityContext、Linq2Data、NHibernateなどのORMツールも、それ自体で制約を処理します。少なくとも、相互に必要なテーブルはわかっています。サーバー内で制約を行うことは、同じ変更を2回行う(強制する)だけのことですか? これは通常、決定に疑問を投げかけるものではありませんが、このデータベースはまったく異なる設計になっています。設計は通常のように見えますが、ほとんどはアプリケーションで使用されるオブジェクトをミラーリングしています。私を悩ませているのは、SQLserver内で「カスケードなし」に設定されたすべての制約です。つまり、新しいデータベースクエリをコーディングするときは、「検索して検索」する必要があります。場合によっては、1回の削除を行うために最大10レベルの正確な順序が必要です。 これは私を驚かせます、そして、私はそれをどう扱うべきかわかりません。 私の単純な世界では、この設定により、制約のほとんどの目的が失われます。設計に関する知識がなくてもデータベースにホストからアクセスした場合はOKです。 このシナリオでどのように行動しますか? dbからすべての制約を削除して、アプリケーションレベルで保持しないのはなぜですか。

5
AppleのApp Storeで配布されているソフトウェアのGPL違反を報告するには、弁護士に連絡する必要がありますか?[閉まっている]
閉まっている。この質問はトピック外です。現在、回答を受け付けていません。 この質問を改善したいですか? 質問を更新して、 Software Engineering Stack Exchangeのトピックになるようにします。 5年前に閉鎖されました。 一部の企業は、GPLの下で公開したコードの一部を使用するAppleのApp Storeを通じてソフトウェアを販売しています。会社は2つの方法でライセンス条件に違反しています。(1)私の著作権声明を保存せず、GPLライセンスの下でコードをリリースしないことと、(2)AppleのApp StoreでGPLライセンスコードを配布することです。(Free Software Foundationは、GPLの条件とApp Storeの条件に互換性がないことを明らかにしました。)これをAppleに報告し、適切な措置を講じるようお願いします。報告プロセスについてさらに情報を求めるためにそれらを郵送しようとしましたが、以下に引用された自動返信を受け取りました。 提供する必要のあるもののリストの最後のポイント、「偽証罪の罰則の下で行われたあなたによる声明」は、ある種の特定の法的文書を意味するように聞こえます。よく分かりません。これは、レポートを提出するために弁護士に連絡する必要があるということですか?可能であれば、そのような面倒な作業は避けたいと思います。 (この特定の質問への答えに加えて、AppleのApp StoreでGPL違反に対処しなければならなかった人からのコメントと経験報告を歓迎します。) Appleの著作権エージェントにお問い合わせいただきありがとうございます。AppleのWebサイトの侵害となる方法であなたの作品がコピーされたと思われる場合は、次の情報を提供してください。 著作権の所有者に代わって行動する権限を与えられた人の電子署名または物理署名。 侵害されたと主張する著作物の説明。 権利を侵害していると主張する素材がサイトのどこにあるかの説明。あなたの住所、電話番号、メールアドレス; 紛争のある使用が著作権所有者、その代理人、または法律によって許可されていないことを誠実に信じているというあなたによる声明; 偽証罪の罰則に基づいてなされた、通知の上記の情報が正確であり、あなたが著作権所有者であるか、著作権所有者に代わって行動する権限を与えられているというあなたの声明。 詳細については、http://www.apple.com/legal/trademark/claimsofcopyright.htmlでAppleの法的情報と著作権侵害の申し立て/請求を確認してください。 iTunes(音楽/音楽ビデオ、ポッドキャスト、テレビ、映画)に関連する知的財産の問題に​​関する申し立てを迅速に処理するには、iTunesStoreNotices @ apple.comに通知のコピーを送信してください。ソフトウェアアプリケーションに関する申し立てについては、通知のコピーをAppStoreNotices@apple.comに送信してください。 大量の電子メールを受け取っているため、これがcopyrightagent@apple.comからの唯一の返信である場合があります。ただし、Appleの著作権エージェントおよび/またはiTunesリーガルチームは、あなたの報告に関して速やかに調査し、適切な措置を講じますのでご安心ください。

7
プログラマは、高レベル言語での低レベルソフトウェア開発にどのように対処しますか?
私はプログラミングにやや慣れていないので、この質問に答える最良の方法は例です。 JavaとC#で基本的なことを行う方法を知っています。小さなウィンドウのようなものは、アプリケーションを形成するか、汎用クラスを作成します。私は基本的に学習してきましたが、まだ大きなことをしようとはしていません。とにかく、「フードの下で」物事がどのように行われるかについて、私はいつも興味がありました。 私はそれがすべて1と0に煮詰められ、アセンブリ言語が基本的に1と0のパターンにコマンドを与えることを知っていますが、そこからこのジャンプがあるようです:これにライブラリを使用してください ライブラリを使用せずにすべてのC#でできることは、算術およびバイナリロジックです。入力または出力を取得するには、ライブラリなどを使用します... おそらくこの質問は一部の人には自明であり、学ぶべきことがたくさんあることは知っていますが、このような質問からどこから始めればよいかさえわかりません。ありがとうございました。 だから私の質問はこれです: 誰かが仮想マシンやプレイステーションエミュレーター、オペレーティングシステム、ドライバーを作成したり、メディアプレーヤーにmp3サポートを追加したり、独自のファイルタイプを作成したりした場合... C#またはJavaでどのように行われるかわかりません。 言い換えると、WROXのProfessional C#やOReillyのC#のプログラミングのような本を読んだ場合、これらの方法を知っていますか?それとも、アセンブリ言語や、C ++のようなより低レベルのものを学ぶ必要がありますか?

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