ソフトウェア工学

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

6
物理的な小道具を使用して、非プログラマーにオブジェクト指向の原則を実演する[終了]
休業。この質問には、より焦点を当てる必要があります。現在、回答を受け付けていません。 この質問を改善してみませんか?質問を更新して、この投稿を編集するだけで1つの問題に焦点を当てます。 3年前休業。 私たちは、他の部門の人々がITスタッフからコーディングする方法を学ぶことができる私のコーディングで、新しいコーディングブートキャンプの支援に着手しようとしています。これは素晴らしいことですが、私は漬物になっています。継承、ポリモーフィズム、has-a、is-aの概念を物理的なデモと物理的に実証する方法を考え出すように依頼されました。事実上、彼らは私にプロップを使用してこれらの概念をプログラミングとコンピュータサイエンスについて何も知らない人々に示すように求めています! これらの原則を実証するために使用または見た良い類似点またはデモンストレーションはありますか?

4
一般的なエラーを無視して、プログラムが[クローズ]から回復する場合
休業。この質問は意見に基づいています。現在、回答を受け付けていません。 この質問を改善してみませんか?この投稿を編集して、事実と引用で回答できるように質問を更新してください。 3年前休業。 毎日何百ものCURL要求、SMTP要求、およびその他の要求を行うプログラムがあります。1%未満の時間で、CURLまたはSMTP要求は失敗します。問題の原因は外部にあり、100%信頼できるように修正することはできません。私のプログラムはいつでもそれから回復することができ、そこから人間の相互作用は必要ありません。何かが失敗したときに電子メールアラートを送信するシステムを導入しています。私が受け取るものの大部分は、これらの無害なCURLおよびSMTPの失敗です。 プログラムが回復する一般的な障害について、電子メールアラートを送信しないでください。

4
メンバー関数がクラスプロパティ/メンバー変数を使用しない場合、OOP原則に違反しますか?
私は、ファイルを開いたり、読んだり、書き込んだりできる相互作用する既存のクラスを持っています。そのためにファイルの変更を取得する必要があります新しいメソッドを追加する必要があります これが私のクラス定義で、新しいメソッドを追加したいとします。 class IO_file { std::string m_file_name; public: IO(); IO(std::string file_name); + time_t get_mtime(file_name); + OR + time_t get_mtime(); }; 2つのオプションがあります- 空のオブジェクトを作成してから、ファイルの変更時刻を取得するメソッドの引数にfile_nameを渡します。 オブジェクト構築時にファイル名を渡し、単純にメンバー変数を操作するメンバー関数を呼び出します。 どちらのオプションも目的を果たします。また、2番目のアプローチは最初のアプローチよりも優れていると思います。しかし、私が理解していないのはどのようにですか?メンバー変数を利用しないので、最初のアプローチは悪いデザインですか?オブジェクト指向設計のどの原則に違反しますか?メンバー関数がメンバー変数を使用しない場合、そのメンバー関数は常に静的にする必要がありますか?

4
bashでデフォルトで式を評価しないためのプログラミング言語の概念は何ですか?
Bashでは、変数に格納された整数値を増やすには、算術展開を明示的に使用する必要があります。 i=1 i=$((i+1)) さもないと i=1 i=i+1 式を評価しませんi+1が、式を文字列として変数に割り当てます。 これは、式がデフォルトで評価される他のプログラミング言語と比較すると非常に不自然です。 プログラミング言語の設計または概念で、bashのそのような機能の概念または用語はありますか? 式を評価せず、デフォルトで文字列として扱うことの意味は何ですか? この機能は、遅延評価などの評価のタイミングに関連していますか? ありがとう。

4
複数の市場を処理するためのコード構造?(米国の州ごとに異なるビジネスルール)
アプリを入手できる各ビジネス市場(国や州)ごとに要件がわずかに異なるアプリを開発しています。それは一般的な状況のようですが、このシナリオのコード/モジュールの構造化に関する良い記事を見つけることができないようです。 これはC#アプリであり、戦略パターンとテンプレートパターンの間で議論していますが、フォルダー構造と命名規則の考慮事項もあります。各州の個別のプロジェクトはすぐに管理できなくなるようです(たとえば、5つのコアサービスX 50州のカスタムプロジェクト)= 250プロジェクト!!)おそらく、サービスごとに1つのカスタムプロジェクトが、州ごとにサブフォルダーに編成された専門化を処理していますか?

2
Eclipseコレクションを排他的に使用することに不利な点はありますか?
私のアプリケーションは非常に大きな整数のコレクションで動作するため、Eclipseコレクションはプリミティブなコレクションであるため、非常に便利なフレームワークのように見えます。私はすでにテストしましたが、パフォーマンスとメモリの大幅な改善が見られて嬉しいです-JDKコレクションを完全に廃止することを検討しているほどです(アプリケーションの一部で、改善がまったく目立たない場合でも)-ほとんど一貫性を保ち、1つのコレクションフレームワークのみを使用するため。 しかし、それは本当であるには良すぎるように聞こえるかもしれません-多分私はEclipseのJDKのコレクションを捨てることに関して重要な欠点を見逃しています。 私に起こる唯一のことは、コレクションに関して将来のJavaの更新/機能が何であれ、Eclipseがそれに適応するまで、Javaを利用できない可能性があるということです。 Eclipseコレクションに完全に移行したくない理由はありますか?

1
メッセージパッシングをCPUの冗長性と負荷分散構造に使用できますか
複数のプロセッサを備えたベアメタルまたは最小限のRTOSタイプの組み込みシステムで、メッセージパッシングインターフェース(MPI)を使用して同一のプログラムを各プロセッサで実行し、ロードバランシングとプロセッサ障害時の冗長性を提供することは可能ですか?渡されたメッセージに基づいて他のCPUが実行するアクションを変更するステートマシンなど。たとえば、ロードバランシングまたは定期的なアライブメッセージの送信のためにシステムループの一部を引き継ぐように別のプロセッサに要求し、各CPUが何を担当しているかを記憶するCPUの冗長性。 この例の図では、「オープン」である完全なシステムループの実際の部分は、異なるシステムである可能性があります。ある種の非常に原始的な非対称マルチプロセッシングで、各CPUで実行されている完全なシステムループの一部を開いたり閉じたりする機能だけでは、協力がありません。別のCPUへの「プロセスの移行」は、別のCPUがシステムループのその部分を開くように要求することによってトリガーされます。その後、要求側のCPUがその部分を閉じるか、クエリが実行されたときに別のCPUからの応答がないため、一定時間存続する。 組み込みOSを移植してカスタムボードで対称または非対称のマルチプロセッシングを実際に実行することはできず、理論的には可能であるように思えますが、設計が非常に悪いため、これは潜在的なプロセッサ障害の解決策およびロードバランシングの解決策として提案されています考え。また、この方法でメッセージパッシングを使用するための設計パターンやアルゴリズムを見つけることができませんでした。 ソフトウェアエンジニアリングの決定に重要な背景:学生のCubeSatプロジェクト(採点またはクラス用ではありません)。オペレーティングシステムの設計に関する知識がほとんどまたはまったくない、ほとんどが中学生の小規模なソフトウェア開発チームがあります。さまざまな理由により、私が読んだ多くの現実的な解決策のいずれも実行できません。これは、チームが対処するのに複雑すぎるほど導入される可能性があるように聞こえるかもしれませんが、それが可能であっても、CubeSatを軌道に乗る岩石に変えるいくつかの問題につながる恐ろしい設計を引き起こす可能性があるようです。 スペースフェアリングに十分な信頼性のある方法でメッセージパッシングを実装できるかどうかさえわかりません。小さなOSまたはベアのバスでメッセージを渡すために使用できるプロダクション対応の通信プロトコルを見つけることもできませんでした。私たちが必要とするような金属。しかし、私は、プロセスの移行、CPUの冗長性、およびロードバランシングのためのこの提案されたソリューションが、安全性が重要なシステムでも実行可能かどうかを知りたいと思っています。検出が困難なスリープ状態から復帰すると、2つのCPUが同じ「プロセス」またはプログラムループの一部を実行している状態になる可能性があります。

2
ここでクラスを分離しすぎていませんか?
私はリアルタイムの地形レンダリングエンジンに取り組んでいます。QuadTreeクラスとNodeクラスがあります。QuadTreeクラスは、カメラの場所に応じてツリーを展開または折りたたみます。したがって、QuadTreeがNodeオブジェクトの存続期間を担当することは理にかなっています。問題は、その存続期間に関連付ける必要があり、QuadTreeとは何の関係もない多くのデータがあることです。これらのデータは相互に関連していなくてもかまいません。私は成功せずにクラスを正しく分離するクリーンな方法を探していました。すべての変更(場合によってはマイナーな変更も)には、いくつかのファイルを介した変更が必要で、ほとんどの場合、それに関連しないファイルが必要です。ようやく機能するように見えるものがありますが、それをあまりにも切り離そうとしているので、あまりメリットがないために複雑さが増しています。これは私がそれをした方法です: 私のQuadTreeクラスは、ツリー以外のものを処理するべきではありません。しかし、ノードを作成するたびに、これらのノードにデータを関連付ける必要があります。これはQuadTreeクラスで行うためにクラスを汚染するため、QuadTreeとこれらのデータを作成することを仕事とするクラスの間で通信するためのインターフェースを追加しました。この時点で、私はそれを正しい方法で行っていると思います。疑似コード: class QTInterface { virtual void nodeCreated( Node& node ) = 0; virtual void nodeDestroyed( Node& node ) = 0; }; class QuadTree { public: QuadTree( ...., QTInterface& i ) : i( i ) {} void update( Camera camera ) { // .... i.nodeCreated( node ); // .... i.nodeDestroyed( …

3
ビルダーパターンがこのように実装されることが多いのはなぜですか?
多くの場合、(Javaでの)ビルダーパターンの実装は次のようになります。 public class Foo { private Foo(FooBuilder builder) { // get alle the parameters from the builder and apply them to this instance } public static class FooBuilder { // ... public Foo build() { return new Foo(this); // <- this part is what irritates me } } } ここにも例: …

2
Javaの文字列分割関数の複雑さは何ですか?
私の文字列はタイプであり"abacsdsdvvsg"、"a a a a a a a" 使用していますString[] stringArray = s.split("");か、または上記の分割のString[] stringArray = s.split(" "); 複雑さは何O(string length)ですか? PS:コードが指定されている場合、O(...)を計算する方法を知っています。ここでは分割関数のアルゴリズムがわかりません。
8 java  strings  java8 

1
カスタムClassLoaderを単体テストする方法は?
いくつかの理由で、私は子供優先ClassLoaderです。そのようなClassLoaderものはJDKには存在しないので、私はそれを書いています。これは私のユースケースの主要なコンポーネントであるため、徹底的にテストしてほしい。動作を壊さずに変更されないようにするために、私は非常に徹底して、テスト可能なすべてのものを自動的にテストしたいと考えています。 どうすればテストできますか?基本的な単体テストを行うにはどうすればよいですか?(特にsuper各メソッドに少なくとも1つの呼び出しがあるため)どこから始めればよいかわからず、開始するためのガイドラインを探しています。 私の主なアイデアは次のとおりです。何か問題がありますか? /src/main/resources/parent.jar child.jar ファイルparent.jarにcom.example.Exampleは、基本的なSupplier戻り値であるクラスが含まれています"parent"。ファイルchild.jarにcom.example.Exampleは、基本的なSupplier戻り値であるクラスが含まれています"child"。 の標準URLClassLoaderを作成しparent.jar、カスタムClassLoaderを使用してをロードしますchild.jar。それから私は、クラスをロードしたいcom.example.Exampleと、それは実際に戻っていますことを確認してください"child"代わりに"parent"。 より複雑なテストケースが考えられますが、開始するには確認が必要です。これで基本的なテストはこれで十分ですか?これは本当に単体テストでテストする必要があるのですか?そうでない場合、何ですか? これにはコードは必要ないと確信していますが、好奇心旺盛な方のために、こちらに示しておきます。 import java.io.*; import java.net.*; import java.util.*; class ChildFirstClassLoader extends URLClassLoader { ChildFirstClassLoader(ClassLoader parent) { super(new URL[0], parent); } @Override // Make this method available in this package. protected void addURL(URL url) { super.addURL(url); } @Override protected Class<?> loadClass(String name, boolean resolve) …

2
パッケージを最新の状態に保つための優れたNode.jsワークフロー?
私は最近、Node.jsでプロジェクトの開発を始めました。もちろん、現在使用しているパッケージは、新しく開始して最新バージョンを使用しているため、かなり最新の状態ですが、ほとんどのNode.jsパッケージのバージョン回転率がかなり高く、多くの場合、特定の機能は非推奨または削除されました。もちろん、セキュリティの脆弱性は修正されます。 ほとんどのパッケージはセマンティックバージョニング構文を使用して指定されている^1.2.3ため(変更を壊さないように、特定のメジャーバージョン番号を使用)、現在のメジャーバージョン以外の重要な更新は失われます。 依存関係を合理的に最新の状態に保つための賢明な方法は何ですか?たとえば、依存関係の更新を毎週ワークフローにチェックして、遅れをとらないようにする必要がありますか?そして、この理由から、必然的に新しいメジャーバージョンに更新する場合は、依存関係を最小限にして、重大な変更に対処する手間を最小限に抑えることをお勧めしますか?
8 node.js  npm 

1
セルフホスティングではなくIISまたはApache Tomcatを使用する理由
私は.NET開発者です。ASP.NET MVCフレームワークがセルフホスティング機能を提供し始めているのがわかります。それは(私にとって)とても理にかなっています。自己ホスト型のアプリケーションは、外部に依存することなく完全に動作します。 私が頭に浮かんでいる質問は、なぜ誰もが自己ホストしたくないのかということです。つまり、IISがセルフホスティングよりも優れている点はありますか?それ以外の場合は、Microsoftがasp.netコアとのIIS統合を作成する手間を省いたため、いくつかの利点があると確信しています。 質問を.NETに限定したくありません。だから、私は行くつもりです-なぜセルフホスティングの代わりにIISまたはApache Tomcatを使用するのですか?

1
プロジェクトの完了後、次のプロジェクトに進む前に何をしますか?
私はコンピュータサイエンスを研究し、ほぼ1年間、非常にアジャイルなJavaプロジェクトで単一の開発者として会社で働いています。プロジェクトはまもなく成功します(少なくとも私はそう願っています!)。 コア機能...は機能しており、start-requirementsに含まれていなかった他の機能も機能しています。不要な新機能についてはたくさんのアイデアがありますが、プログラムの使いやすさと機能性には役立ちます。 プログラムのいくつかの部分は非常にうまく機能しますが、他の部分には私があまり誇りに思っていないコードがあります... プロジェクトの開始以来、私は多くのことを学んだので、理論的にそれらの部分でより良いコードを書く方法を知っています。 問題:プロジェクトの後、何かをする時間があまりないため、ゼロから書き直すことは不可能です。そして、悪い部分だけを書き直すには、コア機能に深く入り込む必要があります->時間がかかります! 私の過ちから学び、次のプロジェクトをさらに良くする方法/戦略はありますか? プロジェクトの完了後、次のプロジェクトに進む前に他にすべきことはありますか?

2
gccでビルドするプロジェクトの個人コード分析にClangを使用するのは賢明ですか?
を使用してビルドしているいくつかのCプロジェクトに取り組み始めましたgcc。この選択はいくつかの理由で行われたと思います: アームの非常に早い段階でクロスコンパイルする必要がありました(私はそう思います)。 パフォーマンスは、何よりも重要なスペックです。 gcc 以前も今も簡単な最初の選択です。 私はその選択に異議を唱える理由はなく、とにかくそうする立場にはありません。 単一のプロジェクトのコードベースは比較的小さいです。すべてのプロジェクトは比較的クリーンなMakefile(現在更新中)でビルドされ、gcc -Wall -Wextraほとんど文句を言わず、最小限のテストが行​​われます。自動化された静的分析やコードのフォーマットは行われておらず、コードは構文的に一貫性がありませんが、非常に読みやすく、考え抜かれています。 コードのすべての行を一度に再フォーマットしたくないので、この回答の周りのどこかで説明されているように(特にコンテキストが実際にはそれほど悪くないため)行うつもりです:リファクタリングし、主に、トピックを扱うときはできるだけ再フォーマットしますただし、コードスタイルを意識しないでトピックを取り上げます。残念ながら、私はコードスタイルやコミットの追加チェックを課す立場にはありませんが、ファイルを変更するときは既存のコード規則を尊重する必要があるという同僚の感覚があるように感じます(ただし、現在の状態はわかっていますが)コードの魔法のようなことが起こりませんでした)、そして良いコードを書きたいという欲求。 これは、このような心構えでCでプログラミングするのが初めてであり、さまざまなコード分析ツールと書式設定ツールに非常に惹かれていclangます。 したがって、私の質問の要点は次のとおりです。それclangを使用clangしてビルドしているときに、ヒントに従ってフォーマットおよび分析ツールを使用すると問題が発生する可能性がありますgccか?たとえば、一部の警告は、内部表現gccが使用しないか、バイトコードclangが生成しgccないものから発生する可能性があります。 警告ヒントが意味をなすように、gccコンパイルパラメータ(主にターゲットアーキテクチャと最適化レベル)を自動的に渡す良い方法はありclangますか? 私が精通していることgccとそのエラー報告を追加します。私は、より適切な言葉でわかりやすい警告だけでなく、より多くの(関連する)警告とエラーを取得することに関心があります。したがって、1 日の終わりclangに構築するために、その内部表現に基づいて生成できる追加のヒントを信頼できない場合、私はこれを行うことにあまりgcc興味がありません。 私は多くのコンテキストを含めたので、どんな発言をしても、私が持ち出せなかった根本的な質問に気軽に答えてください。

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