ソフトウェア工学

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

5
C ++アプリケーションの監視
新しい集中監視ソリューション(Zenoss)を実装しています。サーバー、ネットワーキング、およびJavaプログラムの組み込みは、SNMPとJMXを使用すると簡単です。 ただし、問題は、大規模な異種(Solaris x86、RHEL Linux、Windows)環境でカスタムC ++アプリケーションを監視および管理するためのベストプラクティスは何ですか? 私が見る可能性は次のとおりです。 ネットSNMP メリット 各サーバーに単一の中央デーモン よく知られた規格 監視ソリューションへの簡単な統合 サーバーでNet SNMPデーモンをすでに実行しています 短所: 複雑な実装(MIB、Net SNMPライブラリ) C ++開発者向けに導入する新しいテクノロジー rsyslog メリット 各サーバーに単一の中央デーモン よく知られた規格 監視ソリューションへの不明な統合(テキストに基づいてアラートを実行できることはわかっていますが、メモリ使用量、キューの深さ、スレッド容量などのテレメトリの送信にはどの程度うまく機能しますか) 簡単な実装 短所: 考えられる統合の問題 C ++開発者向けのやや新しいテクノロジー 監視ベンダーを切り替えた場合に起こりうる移植の問題 おそらく、アドホック通信プロトコルを思い付く必要があります(またはRFC5424構造化データを使用しています。ZenossがカスタムZenpackコーディングなしでそれをサポートしているかどうかはわかりません) 組み込みJMX(JVMを組み込み、JNIを使​​用) メリット JavaとC ++の両方の一貫した管理インターフェース よく知られた規格 監視ソリューションへの簡単な統合 やや単純な実装(他の目的のために、今日すでにこれを行っています) 短所: 複雑さ(JNI、ネイティブC ++とJavaの間のサンクレイヤー、基本的に管理コードを2回記述する) 起こりうる安定性の問題 かなり多くのメモリを使用して、各プロセスにJVMが必要 JMXはC ++開発者向けの新しいテクノロジーです 各プロセスには独自のJMXポートがあります(各マシンで多くのプロセスを実行します) ローカルJMXデーモン、プロセスはそれに接続します メリット 各サーバーに単一の中央デーモン JavaとC ++の両方の一貫した管理インターフェース …
10 java  c++ 

8
データベースに保存されているタスクの優先リスト
私は次のことをするための最良の方法を考えています: データベースに保存されているタスクのリストがあります。タスクには優先度が割り当てられています。タスクの優先度を変更して、実行する順序を並べ替えることができます。 Pivotal Trackerに非常によく似たものを考えています。 次のように想像してください。 1 Task A 2 Task B 3 Task C 4 Task D 5 Task E Eが最も重要なタスクであると判断します 1 Task E 2 Task A 3 Task B 4 Task C 5 Task D 5つのタスクすべてを更新して、新しい優先順位を付ける必要があります。 タスクBがより重要になると、AIは 1 Task E 2 Task B 3 Task A 4 Task C …

5
Microsoftの新しいLocalDBを使用するアプリケーションをデプロイするには何が必要ですか?
この新しいLocalDBをユーザーのマシンで実行するために、どのMicrosoftコンポーネントをインストールする必要があるか知りたいのですが。 現在CTP3で:SQL Server Express LocalDB LocalDBは、SQL Server Express Editionの新しい軽量の展開オプションであり、非常に短時間でインストールできる前提条件が少なくなっています。これは、デスクトップアプリケーションまたはツール用の組み込みSQL Serverデータベースを必要とする開発者に最適です。LocalDBはSQL Expressと同じプログラミング機能をすべて備えていますが、サービスとしてではなく、アプリケーションとインプロセスで実行されます。SQL Serverコード名「Denali」CTP3ダウンロードの一部として入手できます。 上記はMicrosoftのWebサイトからの抜粋CPT3の新機能 これは、小さな1ユーザーのデスクトップアプリケーションに最適なSQLデータベースのように聞こえます。インストールに含める必要があるものを見つけようとしています。これを組み込みデータベースとして使用したいのですが、Microsoftコンポーネントをインストールする必要があるかどうか、または他のMicrosoftコンポーネントが以前にインストールされていることを確認します。 この新しいLocalDBを実行するためにどのMicrosoftコンポーネントをインストールする必要があるか知っている人はいますか?必要なコンポーネントの存在を自動的に検出してインストールするインストーラーはありますか?

7
コンパイラの入門コースをたどるには、どのコンピュータサイエンスの科目が必要ですか?[閉まっている]
閉まっている。この質問はトピックから外れています。現在、回答を受け付けていません。 この質問を改善してみませんか? 質問を更新して、ソフトウェアエンジニアリングスタック交換のトピックになるようにします。 4年前休業。 私はコンピュータサイエンス以外の学部生で、ウェブ開発者(java、python、AS3など)としてプロとして働いています。私は地元の大学で学期ごとに1つのコースを取ります。私は人工知能(ロジック、文脈自由文法、CYK構文解析、入門NLP、マルコフ連鎖、HMMなど)を前学期に受講しました。 次のシラバスをカバーする次のセムスターでコンパイラの入門コースをとることを計画しています。 字句解析、構文解析、意味解析、ランタイム環境、中間表現、コード生成、レジスター割り当て、命令の選択とスケジューリング、ローカルおよびグローバルコード最適化入門、データフロー分析 私の質問は、このコースを受講する前に知っておくべきコンピュータサイエンスの科目はありますか?はいの場合、それらのコースをリストしていただければ幸いです。

5
インタビューで「プロジェクトの現在のアーキテクチャを説明してください」という質問にどのように答えますか?[閉まっている]
休業。この質問には、より焦点を当てる必要があります。現在、回答を受け付けていません。 この質問を改善してみませんか?質問を更新して、この投稿を編集するだけで1つの問題に焦点を当てます。 4年前休業。 私が現在取り組んでいるアプリケーションは少し巨大です。15分程度では説明できません。 前回、いくつかのクラス図とそれらがどのようにリンクされているかを描くことになりましたが、インタビュアーが答えに満足していないことがわかりました。 この質問に答えるときに強調すべき主なことは何ですか? たとえば、セッションの管理方法、永続性の実現方法はほとんどありません。 他に見逃してはならないものは何ですか?

2
Java Swingでモデルをビュー/コントローラーから完全に分離する方法
Java Swingアプリで、ModelクラスをView / Controllerクラスから分離するための、よく合意された設計ガイドラインのコレクションはありますか?ビュー/コントローラーがモデルについて何も知らないことをそれほど心配しているわけではありません。逆に、モデルを設計して、javax.swingで何も認識しないようにしたいと考えています。理想的には、CLIのようなプリミティブによって駆動できるようにする単純なAPIが必要です。大まかに言えば「エンジン」である必要があります。 モデルへのGUIイベントの伝達はそれほど難しくありません。アクション実行者はモデルのAPIを呼び出すことができます。しかし、モデルがGUIに反映する必要がある独自の状態変更を行う場合はどうでしょうか?それが「聞く」ことの目的ですが、「聞く」ことさえ完全に受動的ではありません。モデルがリスナーの追加について知っている必要があります。 考えさせられた特定の問題は、ファイルのキューに関係しています。GUI側にはのDefaultListModel後ろにありJList、ファイルシステムからファイルを選択してJListに追加するためのGUIがいくつかあります。モデル側では、この「キュー」の最下部からファイルをプルし(JListからファイルを非表示にします)、何らかの方法でそれらを処理します。実際、Modelコードは既に作成されています-現在、を維持しArrayList<File>、パブリックadd(File)メソッドを公​​開しています。しかし、モデルにSwing固有の大きな変更を加えずに、ビュー/コントローラーでモデルを機能させる方法について、私は途方に暮れています。 私はJavaとGUIプログラミングの両方に非常に慣れていないため、これまで「バッチ」プログラミングと「バックエンド」プログラミングを常に行ってきました。したがって、可能であれば、モデルとUIの間の厳密な分割を維持することに関心があります。教わります。
10 java  mvc  swing 

6
コードベースをどのように計画する必要がありますか?[閉まっている]
休業。この質問には、より焦点を当てる必要があります。現在、回答を受け付けていません。 この質問を改善してみませんか?質問を更新して、この投稿を編集するだけで1つの問題に焦点を当てます。 9か月前に閉鎖。 私は現在、5,000行を超えるコードに到達しようとしているプロジェクトに取り組んでいますが、デザインを完全に考えたことはありません。コードを構造化および編成するには、どの方法を使用すればよいですか?紙とペン?UML図?他に何か?
10 architecture  uml 

3
TDDでボールを転がします
私は、他の多くのチームと協力して、少なくとも15年間使用されているアプリケーションを維持および改善する開発者チームの一員です。それが最初に構築および設計されたとき、TDDは前代未聞でした。 アプリケーションはかなり安定しており、番組停止のバグに遭遇することはほとんどありませんが、平均して週に1〜2件のバグがあり、サービスの品質が大幅に低下しています。これらのバグの発見と修正には、主に指差しのために永遠にかかります。私たちが行っている唯一のテストは、インターフェイステストです。バグが修正される前にバグがどこにあるかを探すのに多くの時間を費やしているため、私と別の開発者はテスト駆動開発を提案する予定です。近々新しいオーバーホールが予定されており、新しいモジュールでほぼ完全なユニットテストを実施したいと考えています。また、レガシーである変更が必要なコード(バグ修正や機能の実装など)のテストユニットの構築を提案する予定です。 )、ただし、問題を引き起こしていないコードのテストケースの開発に時間を費やすことはできません。 私には、これは理にかなっているようです。今月は、修正に2週間以上かかるバグがありましたが、ユニットテストが行​​われていれば、導入前に特定できた可能性があります。しかし、私たちのマネージャーにとっては、彼らはより多くのお金を使うように見えるだけです。 ユニットテストとテスト駆動開発にお金を使うことをクライアントにどのように説得しますか?単体テストのROIを示す研究はありますか?
10 unit-testing  tdd 

2
ブランチが1つしかない場合、SVNブランチを気にする必要がありますか?
Subversionで1つのブランチのみを処理する場合、気にする必要がありますか?トランクで作業を高速化することはできませんか? これは、Subversionで開発する方法です。 トランクあり 新しい開発ブランチを作る そのブランチで新しい機能を開発します 機能が完了すると、トランクにマージされ、ブランチが削除され、トランクから新しい開発ブランチが作成されます プロダクションにリリースしたいときは、トランクからタグを作ります。バグ修正は、そのタグからのブランチで行われます。このバグ修正はトランクにマージされます。 これが、機能の完了後に新しい開発ブランチを作成する理由です。このようにして、バグ修正はすぐに新しいコードに含まれます。 以下は明確にする必要がある図です: これは、これが最も効率的な作業方法ではないという感じがあります。コミットする前にローカルでビルドします。これには5〜10分かかります。これはかなり長い待ち時間として経験されていることを理解できます。 開発ブランチの考え方は、トランクは常にリリースの準備ができているということです。しかし、これは私たちの状況ではもう当てはまりません。場合によっては、機能の準備がほぼ整っており、一部の開発者は既に次の機能のコーディングを開始します(そうでない場合、1人または2人の開発者が完了してマージするのを待っています)。 次に、機能1が完了すると、トランクにマージされますが、機能2の一部のコミットが含まれています。 では、ブランチは1つしかないので、開発ブランチを気にする必要がありますか?私はトランクベースの開発と抽象化による分岐について読んでいますが、ほとんどの記事は抽象化による分岐の部分に焦点を当てています。数回のリリースにまたがる大きな変更の印象を受けました。これは私たちが抱えている問題ではありません。 どう思いますか?トランクで作業できますか?最悪のシナリオは(私が思うに)トランクからタグを作成し、必要なコミットをチェリーピックする必要があるということです(一部のコミット/機能はまだ本番稼働の準備ができていないため)。
10 svn  branching  tagging 

2
非ビジネスアプリケーションについて話すとき、「ビジネスロジック」という用語を使用する必要がありますか?
初期化、入力、出力を処理しないプログラムの一部があるとします。何をすべきか、何を許可するか、または許可しないかを指定するだけです。これには「ビジネスロジック」という用語を使用します。しかし、アプリケーションはビジネスとは何の関係もありません。 例:ゲーム。次の部分があるとします。 入力処理 衝突検出、物理、プレーヤーコントロール 出力のレンダリング AI-NPCは指定された目標をどのように達成するか。 「ビジネスロジック」-プレーヤーが特定のオブジェクトに触れるとどうなるか。どのような種類のNPCが存在し、どのような場合に何が行われるか、「ライフ」、「弾薬」、「レベル」、「スコア」の概念。 しかし、それはビジネスではなく、単なるゲームです。ウィキペディアはそれについて明確ではありません。

2
メタプログラミング
私はC ++開発者として旅を始めたばかりで、最近、メタプログラミングと呼ばれるトピックを研究しています。これまでのところ、このトピックに関する多くの情報を調査してきましたが、質問はほとんどありません。 c ++でのReflectionの使用:可能ですか?私の理解によると、リフレクションはプログラムの状態を操作する能力を備えたメタプログラミング手法であり、その操作は内省したり、内省したりすることができます。 リフレクティブアーキテクチャとメタレベルアーキテクチャの違いは何ですか?メタプログラミングアーキテクチャはどのカテゴリに分類されますか? メタプログラミングには、メタレベルとベースレベルの2つのレベルがあります。私の理解では、調査中のオブジェクトプログラムまたはシステムはベースレベルであり、調査中のシステム上で動作するメタプログラムはメタレベルです。私は正しいですか? また、C ++でのテンプレートメタプログラミングの作業に関するガイドラインを提供してください。 このプログラミング手法を実践するために私が探すことができる実用的な例をいくつか教えていただけますか?
10 c++ 

2
Google CodeリポジトリのクローンをGithubに移行できますか?
国の制限によりダウンロードできないGoogle Codeリポジトリのクローンを作成し、そのクローンをGithubに移行します。これを問題なく使用できます。 重要なのは、Githubアカウントを持っていて、GoogleCodeを閲覧できますが、キューバ出身なので、TortoiseHgを取得してレポのクローンを作成することができず、Googleコードにアクセスできないという素敵なGoogleページが表示されます。 私がどうやってブラウジングを管理したか知っていると思います:) MercurialリポジトリをGithubリポジトリにインポートしたいのですが、私の質問: 出来ますか? どうすればできますか?
10 git  github  mercurial 

4
継続的な統合により、成長する多様なコードベースを維持する
継続的インテグレーションセットアップの哲学と設計について、いくつかの助けが必要です。 現在のCIセットアップではbuildbotを使用しています。それを設計し始めたとき、私は(厳密には、一年前にその設計に関わっていたため)、ビルド全体を一度に一晩実行するように調整されたオーダーメイドのCIビルダーを継承しました。しばらくして、これは不十分であると判断し、さまざまなCIフレームワークの調査を開始し、最終的にビルドボットを選択しました。buildbotへの移行における私の目標の1つ(ウィズバンのエキストラをすべて楽しむ以外に)は、オーダーメイドのナイトリービルダーの不備のいくつかを克服することでした。 私をちょっとユーモアして、私が受け継いだものを説明させてください。私の会社のコードベースは約150のユニークなc ++ Windowsアプリケーションで、それぞれが1ダース以上の内部ライブラリ(および多くのサードパーティライブラリ)に依存しています。これらのライブラリーの一部は相互依存しており、依存関係のあるアプリケーションがあり(それらは相互に何の関係もありませんが)、そのライブラリーの同じビルドでビルドする必要があります。これらのアプリケーションとライブラリの半分は「レガシー」で移植不可能と見なされており、IBMコンパイラーのいくつかの異なる構成で構築する必要があります(私はの固有のサブクラスを作成しましたCompile)。残りの半分はVisual Studioで構築します。ShellCommands、VSSのサポートがないため)。 オリジナルの夜間ビルダーは、すべてのソースを単純に削除し、特定の順序でビルドしました。単一のアプリケーションだけをビルドしたり、リビジョンを選択したり、グループ化したりする方法はありませんでした。仮想マシンを起動して、多数のアプリケーションを構築します。あまり堅牢ではなく、配布できませんでした。それはひどく拡張可能ではありませんでした。私はビルドボットのこれらの制限をすべて克服できるようにしたかったのです。 私がこれを最初に行った方法は、構築したい各アプリケーション(すべて150アプリケーション)のエントリを作成し、さまざまなアプリケーションをグループとして構築できるトリガースケジューラを作成し、全体的なナイトリービルドスケジューラの下にそれらのグループを含めることでした。これらは専用スレーブで実行でき(仮想マシンシカネリーは不要)、必要に応じて新しいスレーブを追加することもできます。これで、予定外のフルビルドを実行したい場合は、ワンクリックで実行できますが、必要に応じてアプリケーションを1つだけビルドすることもできます。 ただし、このアプローチには4つの弱点があります。1つは、ソースツリーの複雑な依存関係のWebです。設定のメンテナンスを簡略化するために、すべてのビルダーは大きな辞書から生成されます。依存関係は、それほど堅牢ではない方法で取得およびビルドされます(つまり、ビルドターゲットディクショナリ内の特定のものをキーオフします)。2つ目は、各ビルドに15から21のビルドステップがあり、Webインターフェイスで閲覧および確認するのが難しいことです。約150の列があるため、ロードに永久に時間がかかります(30秒から数分と考えてください)。3つ目は、ビルドターゲットの自動検出機能がなくなったことです(ただし、同僚の1人が私にこのことを気にかけているのと同じように、そもそも何が私たちにもたらされたのかわかりません)。最後に、 現在、新しい開発に移行し、g ++とsubversionを使用し始めています(古いリポジトリは移植しないでください。新しいものに限って)。また、より多くの単体テスト( "more"は誤った結果をもたらす可能性があります...それは他のものに似ています)、および統合テスト(pythonを使用)を開始しています。これらを私の既存の構成にどのように組み込むかを理解するのに苦労しています。 それで、私はここで哲学的にどこが間違っているのですか?どのようにすれば、自分の構成を実際に保守可能にするために(buildbotを使用して-これは私が取り組むライセンスを持っている唯一のパズルのピースです)先に進むことができますか?デザインの弱点に対処するにはどうすればよいですか?大規模な(おそらく過度に)複雑なコードベースのCI戦略に関して、実際に機能するものは何ですか? 編集: 私は自分の問題を説明したと思ったが、明らかに十分に明確ではなかった。私はない CIのプラットフォームを変更するための提案を探しています。それは起こらないでしょう、そしてそれが受け入れられないことを示唆する答え。私が知りたいのは、他の人々がCIを使用して複雑なコードベースをどのように管理するかです。私は十二乗の異なる製品を持っています、そして依存関係が風に散らばっていて、それらはすべて異なります。これは私がどのように対処するか知りたいものです。

3
タイプのエイリアス/シノニムについての考え?
言語の戦争やリストにならないような方法でこの質問を構成するために最善を尽くします。この質問に対する優れた技術的な答えがあると思います。 さまざまな言語がさまざまな程度で型エイリアスをサポートしています。C#では、各コードファイルの先頭で型のエイリアスを宣言でき、それらはそのファイル全体でのみ有効です。ML / Haskellのような言語は、型定義を使用するのと同じくらい、型エイリアスを使用します。C / C ++はと、ソートワイルドウェストのあるtypedefと#define別名型に一見互換的に使用されていることが多いです。 タイプエイリアスの利点は、あまり論争を引き起こしません。 これは、言語によって自然に記述されている複合型、例えばを定義することが便利になりますtype Coordinate = float * floatかtype String = [Char]。 長い名前は短縮できます:using DSBA = System.Diagnostics.DebuggerStepBoundaryAttribute。 MLやHaskellなどの関数パラメーターに名前がないことが多い言語では、型エイリアスは自己文書化のようなものを提供します。 マイナス面はもう少し不明瞭です。エイリアスが急増し、コードを読んで理解したり、プラットフォームを学習したりすることが難しくなる可能性があります。Win32 APIのは、そので、良い例でDWORD = int、そのHINSTANCE = HANDLE = void*とそのLPHANDLE = HANDLE FAR*とな。これらすべての場合において、HANDLEとvoidポインタ、またはDWORDと整数などを区別することはほとんど意味がありません。 王が主体に完全な自由を与え、彼ら自身に責任を負わせるべきか、または疑わしい行動のすべてを介入させるべきかという哲学的議論を別にして、タイプエイリアスの利点を可能にする幸せなメディアが存在するだろうかその乱用のリスクを軽減する? 例として、長い名前の問題は、優れたオートコンプリート機能によって解決できます。たとえばVisual Studio 2010では、IntellisenseをSystem.Diagnostics.DebuggerStepBoundaryAttributeに参照するためにDSBAを入力する必要があります。タイプエイリアスのその他の利点をより安全に提供する他の機能はありますか?

5
プログラミングを学ぶときに自分自身を将来保証する[終了]
閉まっている。この質問はトピックから外れています。現在、回答を受け付けていません。 この質問を改善してみませんか? 質問を更新して、ソフトウェアエンジニアリングスタック交換のトピックになるようにします。 3年前休業。 必要に応じて、「将来を見据えた」方法でプログラミングする方法を学びたいです。Windowsが(今のところ)デスクトップOS市場を支配していますが、その言語、フレームワーク、APIなどを学ぶことには明らかに大きな価値があります。これは、新しいデバイスが登場したり、Windowsが足を踏み入れたり(Windows -Windows 8のプレビューはあまり魅力的に見えません...)。 GUI用のJavaなどの非常に移植性の高い言語と組み合わせて、バックエンドロジック/低レベルプログラミングなどのC / C ++に関する確かな知識があることは、ソフトウェア開発の良い基礎になると思いますか?それは、ほとんどのシステムで役立つでしょうか?-私はデスクトップPC、タブレット、電話を話している。
10 java  c++  c  portability 

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