ソフトウェア工学

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

4
TDDを使用した複雑なアルゴリズムの構築
私は毎日のプログラミングの練習でTDDを採用しようとしています。私は仕事でそれを非常に効果的に使用していますが、いくつかの複雑なアルゴリズムを使用している私の個人的なプロジェクトで問題を抱えています。 この質問をさせる特定のアルゴリズムは、拡張カルマンフィルターです。私が書いたコードに自信が持てないほど複雑ですが、分割するのが難しいほど単純です。 入力と予想される出力を使用してアルゴリズムのテストを作成することもできますが、中間のステップには自信がないため、途中でスラッシングとショットガンコーディングをたくさん行います。 合理的で複雑なアルゴリズムを使用してTDDを使用したことがある場合、アプローチは何ですか。
8 algorithms  tdd 

2
ユニットテスト、工場、そしてデメテルの法則
これが私のコードの仕組みです。サードパーティのショッピングAPIに保存されている、ショッピングカートの注文に似たものの現在の状態を表すオブジェクトがあります。私のコントローラーコードで、私は呼び出すことができるようにしたいです: myOrder.updateQuantity(2); 実際に、第三者にメッセージを送信するためには、第三者にも同様THISために固有のいくつかのことを、知っている必要がありorderID、かつloginID、アプリケーションの存続期間中に変化しないであろう。 私が作成したときにmyOrder、もともと、私は注射MessageFactory知っています、loginID。次に、updateQuantityが呼び出されると、Orderパスがを通過しorderIDます。制御コードは簡単に記述できます。別のスレッドがコールバックを処理し、Order変更が成功した場合は更新Orderし、変更が失敗した場合は変更が失敗したことを通知します。 問題はテストです。のでOrder、オブジェクトが依存するMessageFactory、それが必要MessageFactory実際返すようにMessageSを(それが呼び出すこと.setOrderID()例えば、上)、今私は非常に複雑に設定する必要がMessageFactoryモックを。さらに、「モックがモックを返すたびに妖精が死ぬ」ので、私は妖精を殺したくありません。 コントローラーのコードを単純に保ちながら、この問題を解決するにはどうすればよいですか?私はこの質問を読みました:https : //stackoverflow.com/questions/791940/law-of-demeter-on-factory-pattern-and-dependency-injectionしかし、それはテストの問題について話していなかったので助けにはなりませんでした。 私が考えたいくつかの解決策: どういうわけか、ファクトリメソッドが実際のオブジェクトを返す必要がないようにコードをリファクタリングします。おそらく、それは工場ではなく、MessageSender? のテスト専用実装を作成しMessageFactory、それを注入します。 コードはかなり複雑です。sscceでの私の試みは次のとおりです。 public class Order implements UpdateHandler { private final MessageFactory factory; private final MessageLayer layer; private OrderData data; // Package private constructor, this should only be called by the OrderBuilder object. Order(OrderBuilder builder, OrderData initial) { this.factory = builder.getFactory(); …

1
Pythonがクラスプライベートメンバーにダブルアンダースコアを使用する歴史的な理由は何ですか
Pythonでは、モジュールのプライベート関数または変数の名前は_fooです。それがクラスにプライベートである場合、それは名前__fooです。これらの動作の背後にあるメカニズムは異なりますが、それは質問にはほとんど関係がありません。 Python言語の設計中に、クラスのプライベートメンバー用に2つの下線文字が選択されたのはなぜですか?モジュールprivateのように、単一の下線を付けないのはなぜですか?なぜもっと目立つ他のキャラクターがいないのですか?(_と__の区別は難しい)。 ここにはある程度の歴史があると思いますが、見つけるのに苦労しています。なぜなら、なぜそれがそうであるのかではなく、それが何を意味するのかを説明するチュートリアルだからです。
8 python  history 

3
スクラムでのコミットメントを制限すると、自己満足につながりますか?
私の組織では、スクラムチームがすべてのストーリーを100%完成させることはほとんどありません。私はスプリントごとにコミットするストーリーを減らすことを提案しましたが、R&Dマネージャーは、そうする場合、人々はまだ作業を完了せず、それよりも少ないため、開発が遅くなると言います。彼はここで学生症候群が働いていると言います。 それについてどう思いますか?
8 scrum 

5
CC-NC-NDに基づいてライセンスされたコードの作成者は、商用のクローズドソースソフトウェアでそれを使用できますか?
エンドユーザーによる拡張を簡素化するために、コードの一部をオープンソースにする必要があるプロジェクトに取り組んでいます。 私が欲しいのは、コードの一部を公開するnpmモジュールを作成して、ユーザーが製品の拡張機能を(JavaScriptで)構築できるようにすることですが、このコードが商用またはその他の開発に使用されないことを保証したい私の製品の拡張機能の横にある仕事。 Creative Commons Attribution NonCommercial NoDerivsライセンスが適していると思いました。 私の問題:缶私は、このコードの作者として、商用クローズドソースのアプリケーションでそれを使用しますか? 免責事項:これは法的な問題の一種であることは承知していますが、あなたの考えを説明してください。ありがとう。
8 licensing 

4
組み込みシステムデバイス用のスクラム
当社では、一括通知に使用する新製品をお届けする予定ですので、組込みソフトウェアプロジェクトであり、SCRUMを製品のフレームワークとしてご利用いただきます。 製品のバックログの記録を開始しました。私が理解したことに基づいて、製品のバックログは各アイテムのビジネス価値を反映する必要があります。組み込みソフトウェアの性質は、SPI、UART、イーサネット、WIFIなどのマイクロコントローラー用のドライバーを作成するために大量の時間を消費する多くの技術的詳細があることです。 たとえば、システムは通知のためにメッセージを再生することで音を出しているので、メッセージを再生することがビジネス上の価値であることは明らかですが、この目標を達成するために、どのような方法でもない要件を書き留める必要があります。 SPI、MP3デコーダーチップドライバー、SDカードドライバー、そして最後にFATなので、以前のすべてのドライバーには、製品バックログに書き込む必要がある要件があります。サブ要件。 これらはクライアントのビジネス価値を反映していません。製品のバックログをどのように作成するのですか?

2
ソリューションアーキテクト向けカンバンボードに関するフィードバック[終了]
休業。この質問には、より焦点を当てる必要があります。現在、回答を受け付けていません。 この質問を改善してみませんか?質問を更新して、この投稿を編集するだけで1つの問題に焦点を当てます。 6年前休業。 始める前に、先取りの謝罪をする必要があります。 この投稿で使用している用語や語彙の一部が明らかに間違っている可能性が非常に高いため、重要な側面の一部を完全に誤って解釈している可能性もあります。私はこれが初めてなので、批判的になりすぎないでください。建設的なフィードバックを歓迎します。;) バックグラウンド 現在、200名の開発部門をマルチメソッドから「アジャイル」に移行しています。理由、理由、長所、短所は、この質問の範囲をはるかに超えています。 この開発部門には、正式に「ソリューションアーキテクト」と呼ばれる10人で構成されるアーキテクチャサービスチームが含まれています。実際には、それらはソリューションだけでなく、プロジェクトのすべての技術アーキテクチャ面(つまり、ハードウェア、ソフトウェア、セキュリティ、ガバナンスなど)をカバーする技術者です。また、開発チームに特別な機能(コードレビュー、標準ガイダンスなど)と幅広いビジネス(入札への技術的インプット、顧客の要件の事前契約技術プレビュー)を提供します。 この移行の一環として、私は、建築サービスチームが責任を負う作業活動を把握するために、かんばんボードを作成する任務を負っていました。開発/コーディングチーム用の無数のサンプルボードがありますが、アーキテクチャ用に見つけることができるものはありません。だから私は様々なソースから取って「何か」を作成しました、それについての真のフィードバックを本当に感謝します。 また、これは開始点/進行中の作業としてチームに提示されることにも注意してください。それは彼らのボードであり、私は彼らにそれを所有してほしいと思っています。 これまでのところ私はこのようなものを持っています メインボード メインボードは、すべてのアクティブ/バックログプロジェクトを保持する場所です。すべてのアクティブな作業はこのボードで行われます。これは、毎日の建築スクラムで簡単にレビューされ、毎週の終わりにさらに詳細なレビューが行われます。 ------------------------------------------------------------------------ | Evaluation | Implementation | Ad- Hoc | | Todo | Doing | Done | Todo | Doing | Done | Todo | Doing | Done | ------------------------------------------------------------------------------- Person | | | | | | | …

2
次のイテレーターがこのイテレーターより優れている点は何ですか?
私はJava / C#イテレータを直接操作することはあまりありませんが、「次の」方法でイテレータを設計する理由は何だろうといつも思っています。 開始するには、イテレータを移動する必要があります。データがあるかどうかを確認するには、次の要素があるかどうかを確認する必要があります。 私にとってより魅力的なコンセプトはthis-iteratorです。これは最初から「始まる」ので、この状態を確認できるとしましょうisValid。したがって、コレクション全体のループは次のようになります。 while (iter.isValid()) { println(iter.current()); iter.next(); } ここで次の要素があるかどうかを確認するために、そこに行き、状態が有効かどうかを確認します。 YMMVですが、とにかく-このイテレーターよりも次のイテレーター(Java / C#など)の利点はありますか? 注:これは、言語の設計に関する概念的な質問です。
8 c#  java  iterator 

2
UIアプリケーションの匿名クラスに関するベストプラクティス
ユーザーインターフェイスベースのJavaプログラムで作業する場合、動作を特定のアクション(ボタンのクリックなど)に関連付ける1つの方法は、匿名クラスを使用することです。以下の例では、GUIフレームワークはSWTですが、SwingまたはAndroid UIコンポーネントでも同じ問題があります。つまり、私のプログラムの構造化です。 MenuItem sampleMenuItem = new MenuItem(popupMenu, SWT.NONE); sampleMenuItem.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent event) { doSomething(); // handle all table entries for (int i=0; i<10; i++) { doSomething2(); } doSomething3(); doSomething4(); } }); もちろん、上のサンプルのコードの量はすでにロジックを含む専用クラスの作成を保証していると主張する人もいます。これは、Sonarの「匿名クラスは行が多すぎてはならない」という規則によっても示唆されています。 興味深いことに、このルールは次のことも指定しています。 squid:S1188-Javaでのクロージャーのサポートを待つ間、匿名クラスは、専用クラスを作成せずに動作を注入する最も便利な方法です。ただし、これらの匿名内部クラスは、動作が数行で実行できる場合にのみ使用してください。より複雑なコードでは、名前付きクラスが必要です。 ただし、Javaにはまだクロージャーが到着していないため、私の質問は次のようなエレガントな解決策があるかどうかです。 あらゆる種類の欠点(再利用が制限されている、コード内の移動が遅い、など)がある匿名クラス内で一連のコードを書く 膨大な数の専用クラスを作成し、それ自体が非常に限られた機能しか持たない可能性があります(つまり、オーバーエンジニアリングなど)。 私の質問を拡張します。JavaベースのUIアプリケーションのこの側面に関するベストプラクティスは何ですか?確立されたパターンはありますか?

1
DDD:ドメインモデルファクトリデザイン
ドメインモデルファクトリを実装する方法と場所を理解しようとしています。Company集計を、それをどのように行ったかのデモとして含めました。 私は最後に私の設計決定を含めました-それらの点に関するコメント、提案、批評をいただければ幸いです。 Companyドメインモデル: public class Company : DomainEntity, IAggregateRoot { private string name; public string Name { get { return name; } private set { if (String.IsNullOrWhiteSpace(value)) { throw new ArgumentOutOfRangeException("Company name cannot be an empty value"); } name = value; } } internal Company(int id, string name) { Name …

1
使用するテストフレームワークを決定するにはどうすればよいですか?
状況はこれです。 私は小さな政府ITプロジェクトのジュニア開発者です。継続的な統合や自動テストフレームワークはありません。しかし、アイデアはこの種のものを開発すること/私たちの開発環境を改善することです。 この製品はデータ処理アルゴリズムであり、Webアプリケーションを介してエンドユーザーに情報を表示します。 そのため、WebアプリケーションのJavaScriptを変更する作業がたくさんあります。そのため、JavaScriptの単体テストを実装したいと考えています。 このスタックオーバーフローの質問を見て、javascriptのいくつかの異なるユニットテストフレームワークの概要を説明しました。 問題は、どのフレームワークを使い始めるかをどのように決めるのですか? テストフレームワークを選択するための基準のリストは何ですか? それらをすべて試すのは現実的ですか? フォーラムなどの使用方法について、フォーラムなどをよく読んでください。

3
オブジェクト指向プログラミング言語は「集合コンストラクター」をサポートしていますか?
いくつかのオブジェクトが互いに依存している場合があるため(たとえば、循環参照が含まれている場合)、したがって、構築後に新しいオブジェクトがいくつかの集合的制約を満たすことを確認する1つのアトミック操作の一部としてオブジェクトを作成すると便利だと最近検討しました。 これを行うには、複数のオブジェクトを作成できるコンストラクターを用意します。次に、プログラマーはすべてのコードを単一のコンストラクターに配置し、オブジェクトo 1、...、o nが作成されると、それらが必要なすべての制約を満たすようにします(たとえば、新しいオブジェクト間のすべてのリンクが既に配置されています)。私は そのような機能について聞いたことがなかったので、私は集合コンストラクターという用語を自分で作り上げましたが、この概念の受け入れられた名前がおそらく存在するかもしれません。 では、この種のコンストラクタをサポートするプログラミング言語はありますか?そうでない場合、アイデアはすでに試されていますか?

3
発送とは?それは動的な解決を意味しますか?
私の知る限り、ディスパッチという用語は、単にメソッドの解決と呼び出しを意味します。静的でも動的でもかまいません。多くの人が静的ディスパッチや動的ディスパッチなどの用語を使用しているのを見ました。 私を混乱させるのは、いくつかの不可解な説明もあるということです。マルチディスパッチとは何かを理解しようとしていましたが、それはパラメータタイプによってサブプログラムを選択するだけのようです。私がそれを正しく理解していれば、静的マルチディスパッチと動的マルチディスパッチの両方が存在する可能性があり、C ++は無料の関数を介して複数のディスパッチを提供していると言えます。 しかし、複数のディスパッチに関するウィキペディアの記事によると、C ++には複数のパラメーターによる関数の動的解決がないため、C ++には複数のディスパッチはありません。そして、私はCommon Lispの例とC ++のオーバーロードされた関数との間の概念的な違いを本当に得ていません。マルチディスパッチという用語が動的ディスパッチを意味しない限り、私は概念的な違いを見つけることができないからです。そして、私は派遣が本当に何であるかを混乱させていることに気づきました QAエントリのマルチディスパッチと関数のオーバーロードも確認しましたが、ディスパッチという用語は基本的に動的であることを前提としているようです。それも私を混乱させます。 ディスパッチという用語の正しい意味は何ですか?動的な解決を意味しますか?この用語は明確に定義されているのですか、それとも単なる従来のものですか?何が欠けていますか?

4
複数のWebサイトでデータを共有するにはどうすればよいですか?
複数のウェブサイトでデータを共有するためのシンプルなシステムを開発しようとしています。それらのほとんどはPHPで開発されていますが、一部はWordpress / Drupalで開発されています。冗長な情報が複数のWebサイトに分散しているため、複数のWebサイトで情報を個別に更新する必要があるという問題が発生しています。 静的なページでも共有データを取得できるソリューションを提供しようとしています。これが私の提案するアーキテクチャです: 私はこれを学術機関のために行っています。データは、単純な料金体系から学問的な方針までさまざまです。たとえば、学費を考えてみましょう。 学費-> ug、卒業生、薬局...各学部には、キャンパス外、キャンパス内、通勤者ごとに分類された料金体系があります。 "Undergraduate": { "metaid": "0770", "Offcampus": { "FeesItems": { "comprehensive": { "label": "Comprehensive Fees", "value": "2,141" } } } } moustacheを使用するフロントエンドの場合、jsを含めて、以下のような値を取得して値を取得するだけです。 <td>{{Undergraduate.Offcampus.FeesItems.comprehensive.label}} </td> <td>{{Undergraduate.Offcampus.FeesItems.comprehensive.value}}</td> 私の質問: このデザインはスケーラブルですか? データ所有者にデータを編集する権限を与える方法は? SQLにデータを保存する方法は?

3
文法、レクサー、パーサーに関する説明
背景情報(5月スキップ):提供されているDSLの文法を設計する必要があるuniで設定されたタスクに取り組んでいます。文法はBNFまたはEBNFでなければなりません。他にも、文法の語彙ルールと構文解析ルールについて評価されています。たとえば、ルールが言語サブセットに適しているかどうか、これらのルールがどれほど包括的であるか、ルールがどれほど明確であるかなどです。 私が理解していないのは、これらのルールがBNFで定義された文法でカバーされているかどうかです(これは私たちにとって新しいトピックです)。 質問:BNFまたはEBNFのいずれかで定義されている特定の言語の文法には、字句解析 または構文解析、あるいはその両方のルールが含まれていますか?(またはこれらは他の場所で指定する必要がありますか?) また、何が字句規則と考えられますか?そして、何が解析ルールと考えられますか?

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