ソフトウェア工学

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

4
ファイルタイプを設計する際の考慮事項
コードからデータ構造を保存して、独自の、まだ未定義のタイプのファイルにファイルを保存するプロセスを記述しようとしています。ただし、ファイルの種類や構造を設計したことはありません。 一般的に言えば、デザインを始める前に考慮すべきことはありますか? ここで認められた良い習慣はありますか?避けるべき悪い習慣は? 絶対にすべきこと、すべきでないことはありますか?

2
アルゴリズムのパラダイムとは何ですか?
私たちは一般に、プログラミングのパラダイムについて、関数型、手続き型、オブジェクト指向、命令型などについて話しますが、アルゴリズムのパラダイムを聞かれたときはどうすればよいですか? たとえば、巡回セールスマン問題、ダイクストラ最短経路アルゴリズム、ユークリッドGCDアルゴリズム、バイナリ検索、クラスカルの最小全域木、ハノイの塔アルゴリズムパラダイムなどです。または、おそらくパラダイムは、これらのアルゴリズムを設計するために使用するデータ構造ですか?

1
六角形のアーキテクチャの説明が必要
Alistair CockburnのHexagonal Architectureについて興味を持って読んでいます。 彼の主張の1つは次のとおりです。 最後に、自動化された関数回帰テストは、ビジネスロジックをプレゼンテーションレイヤーから除外するという約束の違反を検出します。組織はロジックリークを検出して修正できます。 この点はわかりません。テストはヘッドレスであるため、UIレイヤーを呼び出すと例外がスローされると彼は言っていますか?それは非常に健全なテストではないようです!

4
JavaScriptがスパゲッティコードになるのを防ぐ方法は?
私は何年にもわたって多くのJavaScriptを実行してきましたが、特にモジュールパターンを使用して、よりオブジェクト指向のアプローチを使用しています。より大きなコードベースがスパゲッティになることを避けるために、どのようなアプローチを使用しますか?「最善のアプローチ」はありますか?

3
サードパーティの集中ソフトウェア設定管理のオプションは何ですか?
私はSaaSソリューションの構築を検討している企業のアーキテクトです。当社の製品は、さまざまなデプロイ可能なコンテナ、Webサービス、Web UIなどに分散されています。 私は、アプリケーションの設定を管理するためのオープンソースまたはサードパーティのソフトウェアソリューションを探しています。これらは、Word、Eclipse、またはVisual Studioにある設定と似ています。設定は、製品のさまざまな動作と機能を制御します。(おそらく、どのデータベースに接続するかなどの設定ではなく、デフォルトでページに行番号を表示するかどうかを指定します。)理想的には、さまざまなディメンションの値を(テナントごと、ユーザーごと、アプリケーション環境ごとに)格納できるようにするのが理想的です。 私たちは非常に多くの異なるデプロイ可能ファイルを持っているので、各デプロイ可能部品が個別の設定を取得できるWebサービスを提供できる集中型ソリューションを探しています。 この種の機能を提供する集中型サービスを知っている人や、私たち自身のサービスをロールする代わりの方法を探す手助けをしてくれる人はいますか?

5
データベース非正規化の利点の予測
私は常に、データベースの正規化の最高の正規形を追求するように教えられ、3NFを達成するためのバーンスタインの合成アルゴリズムを教えられました。これは非常によくできており、一貫性を維持しながらフィールドを変更できることを知って、データベースを正規化するのは良い感じです。 ただし、パフォーマンスが低下する可能性があります。ですから、非正規化時にスピードアップ/スローダウンを予測する方法があるのか​​と思います。このようにして、3NFを特徴とするFDのリストを作成し、可能な限り非正規化することができます。非正規化が多すぎると、スペースと時間が無駄になると思います。たとえば、巨大なブロブが複製されたり、トランザクションを使用して複数のフィールドを更新する必要があるために一貫性を維持することが困難になったりするためです。 概要:3NF FDセットと一連のクエリがある場合、非正規化のスピードアップ/スローダウンを予測するにはどうすればよいですか?論文へのリンクも高く評価されています。

2
マルチスレッドアプリケーションでのロガーの同時実行パターン
コンテキスト:パイプラインモデルに従うマルチスレッド(Linux-C)アプリケーションに取り組んでいます。 各モジュールには、データの処理を行うプライベートスレッドとカプセル化されたオブジェクトがあります。各ステージには、次のユニットとデータを交換する標準形式があります。 アプリケーションはメモリリークがなく、データを交換するポイントでロックを使用してスレッドセーフです。スレッドの総数は約15で、各スレッドには1〜4個のオブジェクトを含めることができます。約25〜30個の奇妙なオブジェクトを作成します。これらすべてに重要なロギングが必要です。 私が見たほとんどの議論は、Log4Jのようなさまざまなレベルと、それ以外の翻訳です。本当に大きな問題は、全体的なロギングが実際にどのように行われるべきかについてです。 1つのアプローチは、すべてのローカルロギングが行うfprintfことstderrです。stderrはいくつかのファイルにリダイレクトされます。ログが大きくなりすぎると、このアプローチは非常に悪くなります。 すべてのオブジェクトが個々のロガーをインスタンス化する場合(そのうちの約30〜40)、ファイルが多すぎます。そして、上記とは異なり、イベントの真の順序についての考えはありません。タイムスタンプは1つの可能性ですが、照合するのはまだ面倒です。 グローバルロガー(シングルトン)のパターンが1つある場合、ログの作成でビジー状態になっている間、非常に多くのスレッドが間接的にブロックされます。スレッドの処理が重い場合、これは受け入れられません。 では、ロギングオブジェクトを構造化するための理想的な方法は何でしょうか。実際の大規模アプリケーションでのベストプラクティスにはどのようなものがありますか? また、インスピレーションを得るために、大規模アプリケーションの実際のデザインのいくつかから学びたいと思っています。 ====== 編集: ここでの両方の答えに基づいて、私は今残っている質問です: ロガー(ロギングキュー)をオブジェクトに割り当てる場合のベストプラクティスは何ですか?それらがglobal_api()を呼び出すか、ロガーがコンストラクターでロガーに割り当てられるかどうかです。オブジェクトが深い階層にある場合、この後のアプローチは面倒になります。それらがいくつかのglobal_api()を呼び出している場合、それはアプリケーションとの一種のカップリングであるため、他のアプリケーションでこのオブジェクトを使用しようとすると、この依存関係がスローされます。これのためのよりきれいな方法はありますか?

1
PhoneGapのいくつかの重要な概念が欠けているようです
複数のプラットフォームでアプリを開発することを計画しており、PhoneGapが最適だと思います。私はそれがすべてのプラットフォームの1つのコードベースであることを読んでいましたが、PhoneGapガイドを見ると、プラットフォームごとに個別の指示があるようです。それで、iOS、Android、BB、WP7用に開発したい場合、4つの異なるコードセットを記述する必要がありますか?私はここで基本的な何かを見逃していると確信しています。 それ以外に、人々は通常どのようにPhoneGapビルドにアプローチしますか?あなたは明らかに/おそらく完成したアプリをネイティブアプリのように見せたいと思います-PhoneGapと一緒にjQuery Mobileを使用しない方が一般的ですか? 優先IDEはありますか?ガイドでは、iOS向けにXcodeを提案しているようです。Xcodeを使用しても問題ありませんが、HTMLとCSSには少々やり過ぎです。Xcodeで開発する必要がありますか?そうでない場合はどうすればよいですか?別のIDE /テキストエディターを使用してから、ビルドとテストのためにXcodeにコピーして貼り付けますか? この質問は根本的に根本的なものですが、ガイドでは適切に扱われていないと思います。 ありがとう。

2
Cでのライブラリのリンクに関する質問
LinuxでGCCコンパイラを使用してC(まだ初心者)を学んでいます。math.hヘッダーで使用されるライブラリなど、一部のライブラリを含める場合は、手動でリンクする必要があることに気付きました。上記の数学ライブラリ-l[library-name]など、さまざまな形式のフラグを使用してライブラリをリンクしてい-lmます。 ただし、コマンドラインからおよび/または切り替えた後GeanyにCode::Blocks、私は気づいCode::Blocks用途は、g++プログラムをコンパイルする代わりに、gcc私は(プロジェクトが間違いなくCとして指定されているにもかかわらず)に慣れていること。また、Code::Blocksそのような数学ライブラリなどのライブラリ-手動でコンパイルする際にリンクするライブラリを必要としないだけで仕事を。 2つの質問があります。 まず、g++コンパイラでCプログラムをコンパイルするのは「悪い」のでしょうか。これまでのところそれは動作するようですが、結局のところ、C ++はCではなく、g++コンパイラーがC ++用であることを確信しています。 次に、g++ライブラリの自動リンクを実行しているのはコンパイラCode::Blocksですか?
8 c  libraries  gcc  linking 


3
Sin関数をより速くより正確に計算する方法は?
を計算しますy(n)=32677Sin(45/1024•n)。yは整数で、n範囲は0〜2048です。このプロセスをより速く、より正確にするにはどうすればよいですか?以来:今、私はあなたの参照の答えを示したい Sin(a+b)=Sin(a)Cos(b)+Cos(a)Sin(b) とし Cos(a+b)=Cos(a)Cos(b)-Sin(a)Cos(b)。だから私は保存することができ Sin(45/1024•1)、そして Cos(45/1024•1)次の公式を使います: Sin(45/1024•2)=Sin(45/1024•1+45/1024•1)、 Cos(45/1024•2)=Cos(45/1024•1+45/1024•1)、 Sin(45/1024•n)=Sin(45/1024•(n-1)+45/1024•1)、 Cos(45/1024•n)=Cos(45/1024•(n-1)+45/1024•1)、この方法で多分速く大きな配列を格納せずに。
8 c++  algorithms 

3
製造現場のレイアウトに使用するアルゴリズム?
私は昨日教室の問題に遭遇しました(コンピューターサイエンスではなくビジネス志向のクラス)。アルゴリズムの観点から興味深いことに気付きました。 問題は次のよう になります。N個の異なる部屋がある製造現場があり、それらの部屋に行く必要のあるN個の異なる部門があるとします。部署と部屋はすべて同じサイズなので、どの部署でもどの部屋にも入ることができます。各部屋から他の部屋への移動距離はわかっています。ある部署から別の部署への必要な既知の移動量もあります(移動元の部屋に関係なく、移動は同じようにカウントされるため、AからBへの移動はBからAへの移動と同じです)。これらの入力を考慮して、移動時間を最小にする部屋への部門のレイアウトを決定します。 この問題にアルゴリズム的に取り組む最善の方法は何ですか?このタイプの問題を解決するために設計された特定のアルゴリズムまたはアルゴリズムのクラスはすでにありますか?この種の問題はコンピュータサイエンスで名前を持っていますか? これを解決するアルゴリズムを設計することを私は探していませんが、必要に応じて自由に設計してください。これがすでにアルゴリズムで十分に定義され、研究されている問題空間であるかどうか、そして、もしそうであれば、さらに研究するためのリンクをいくつか取得してください。これに適用できるさまざまなデータ構造とアルゴリズムがたくさんあるので、どのアプローチが「最適」か知りたいです。 心配しないでください、あなたは私の宿題をしてくれません。これはビジネスコースであるため、それ自体は宿題の問題ではありません。概念を単に議論しているだけで、アルゴリズムで問題を解決しようとはしていません。


7
学ぶ必要のある特定のスキルセットを持つ開発者やジェネラリストを探すべきですか?[閉まっている]
閉まっている。この質問はトピックから外れています。現在、回答を受け付けていません。 この質問を改善してみませんか? 質問を更新して、ソフトウェアエンジニアリングスタック交換のトピックになるようにします。 4年前休業。 このサイトとSOのおかげで、販売したいソフトウェアのプロトタイプを作成できましたが、残念ながらプロトタイプは機能しますが、コードの品質は非常に低いと思います。私はOOPやデザインパターンをあまり使用していなかったので、私のコードは理解できますが、通常の開発者はそれを読む必要があると気絶するでしょう。 だから私はそれをもう少し良い品質にするために開発者を雇い、私が正しく行っていないかもしれないAPIの私の実装のいくつかを改善したかったのです。開発者を雇うのに問題があります。 私は2人の開発者に会い、私のソフトウェア仕様を読んでもらいました。問題は、私のビジネスのドメイン知識(完全に理解可能で、大したことはありません)が欠けていることですが、Hadoop、Hbase、 Cudaなど。私は、map / reduce、bigtables、および使用したその他のテクノロジーの説明に多くの時間を費やしました。このサイトの人々とのやり取りから、それは常識だと思いましたが、私が知り合った人々は、これらの事柄に対処する必要がないため、知らなかったと述べました。 私の質問は、請負業者の開発者を採用しているソフトウェアプロジェクトの場合、開発者が基礎となるテクノロジーの経験がない場合は危険ですか?または、別の領域で達成された一般的な開発者が現実的に新しいテクノロジーを習得できますか?私は非常に迅速にエンベロープ計算を行いましたが、何時間も働くテクノロジーの経験がない学生または開発者を雇う場合と、2倍の料金で半分に終わる非常に経験豊富な開発者を雇う場合の先行費用は同じだと思います時間ですが、他にどのようなリスクを考慮または心配する必要がありますか?また、ジェネラリストを雇った場合、請負業者であれば、HadoopまたはCudaを習得するのにかかる時間を払う必要があります(ビジネス上理にかなっているようですが、再びスキル)。 私は少し混乱しているので、どんな提案も素晴らしいでしょう。

9
ソフトウェアテストの目的は何ですか?[閉まっている]
休業。この質問には、より焦点を当てる必要があります。現在、回答を受け付けていません。 この質問を改善してみませんか?質問を更新して、この投稿を編集するだけで1つの問題に焦点を当てます。 6年前休業。 多くの本を読んだことで、基本的な矛盾があります: 「テストの目的はバグを見つけることです」と言う人もいれば、「テストの目的は製品の品​​質を均一にすることです」と言う人もいます。つまり、バグはその副産物です。 また、テストが主にバグハントに向けられている場合、実際に検証を行い、ソフトウェアの準備ができているという情報を実際に提供するのは誰ですか。 たとえば、Kanerでさえ、テスト目標の元の定義をバグハンティングから品質評価規定に変更しましたが、まだ明確な違いはわかりません。私はどちらも同じくらい重要だと考えています。 ソフトウェアを仕様で検証して機能することを確認できます。その場合、見つかったバグは製品のみによるものです。しかし、私は物事を壊すためだけにテストを実行します。 また、どの定義がより正確ですか? 上記の注意点私は主にソフトウェアテストをプロセスと呼んでいます。

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