ソフトウェア工学

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

2
BSDライセンスプロジェクトへの貢献者からの著作権表示を管理する方法
LICENSEファイルには次のBSDライセンスがあります。 Copyright (c) 2006-2016 SymPy Development Team All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: a. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. …

3
Cの変数の「真の」サイジングはどの程度役に立ちますか?
Cのポジティブな機能(実際にはgcc、clangなどの実装の機能)として常に直感的に私を驚かせた1つのことは、実行時に独自の変数の隣に隠された情報を格納しないという事実です。つまり、たとえば「uint16_t」タイプの変数「x」が必要な場合、「x」が2バイトのスペースしか占有しないことを確認できます(そのタイプなどの非表示の情報は含まれません)。 。)。同様に、100個の整数の配列が必要な場合は、100個の整数と同じ大きさであることを確認できます。 しかし、より多くの私はそれが実際に持っている場合はより多くの私は疑問に思って、この機能のための具体的なユースケースを思い付くしようとしています任意のすべての実用的な利点を。私がこれまでに思いつくことができる唯一のことは明らかにそれがより少ないRAMを必要とするということです。AVRチップなどの限られた環境では、これは間違いなく大きなプラスですが、日常のデスクトップ/サーバーのユースケースでは、それはかなり無関係であるようです。私が考えている別の可能性は、ハードウェアへのアクセス、またはメモリ領域のマッピング(たとえば、VGA出力など)に役立つ/重要である可能性があることです... ... 私の質問:この機能なしでは実装できないか、非常に煩雑にしか実装できない具体的なドメインはありますか? PSより良い名前があるかどうか教えてください!;)

5
揮発性変数を宣言するとはどういう意味ですか?
多くの低レベルのプログラムは、しかし、私は一種のそれは何にとして困惑している、メモリマッピングなどのための種類の揮発性のキーワードを使用REALLYバックグラウンドで行います。つまり、コンパイラがメモリアドレスを「最適化しない」とはどういう意味ですか?
9 c++  c  low-level 

2
データ指向インターフェースへのプログラミング
次のスタイルで記述されたコードベースの一部があります。 // IScheduledTask.cs public interface IScheduledTask { string TaskName { get; set; } int TaskPriority { get; set; } List<IScheduledTask> Subtasks { get; set; } // ... several more properties in this vein } // ScheduledTaskImpl.cs public class ScheduledTaskImpl : IScheduledTask { public string TaskName { get; set; } public …

2
インターフェース分離の原則:インターフェースに大きな重複がある場合はどうすればよいですか?
アジャイルソフトウェア開発、原則、パターン、およびプラクティス:ピアソン新国際版: 場合によっては、クライアントの異なるグループによって呼び出されるメソッドが重複することがあります。オーバーラップが小さい場合、グループのインターフェースは分離したままにする必要があります。共通の関数は、オーバーラップするすべてのインターフェースで宣言する必要があります。サーバークラスは、これらの各インターフェイスから共通の機能を継承しますが、実装するのは1回だけです。 ボブおじさんは、少しの重複がある場合について話します。 大きな重複がある場合はどうすればよいですか? 私たちは持っていると言います Class UiInterface1; Class UiInterface2; Class UiInterface3; Class UiIterface : public UiInterface1, public UiInterface2, public UiInterface3{}; 間にかなりの重複がある場合、我々は何をすべきUiInterface1とはUiInterface2?

1
Pythonの結合は、結合するアイテムではなく、設計上の理由から、RubyやSmalltalkと比較してシンボルに焦点を当てているようです。
OOPの基礎の1つは、私たちが処理したい項目であるオブジェクトを持っていること、そしてそれらにメッセージを送信することだと思いました。 したがって、当然のことながら、アイテムのコレクションがあり、それらを1つの文字列に入れる必要があるため、次のようにします。 ["x", "o", "o"].join(" | ") # joining a tic-tac-toe row in Ruby (Smalltalkも同じ方法です)。これ" | "は、何らかの方法で、それを結合する方法の1つのトークンとしての議論と考えられています。それはすることができ" "、ゲームボードを簡素にする場合、あまりにも。したがって、結合要素" | "は、特に私たちが関心を持っているものではありません。特に重要または重要なのは、プログラムの主要なオブジェクトではありません。 Pythonがそれを使用する場合 " | ".join(["x", "o", "o"]) 何かについて議論をするために、私たちが議論にメッセージを渡しているように感じるのは、少し奇妙に感じます。多分Pythonはもっと手続き的ですか?参加する文字列に私たちに何らかの義務を果たすように伝えるには? 実装を保存して、joinコレクションクラスごとにを定義する必要がないようにするのですか?しかし、Rubyなどの任意のコレクションクラスに対して1回だけ記述することもできるというのは本当ではありません。 module Enumerable def my_join(joiner) self.inject {|a,b| a.to_s + joiner + b.to_s} end end (このようなものは、to_s各項目を呼び出しto_s、各クラスのに依存して独自の適切な処理を実行し、文字列に変換してから、それらを連結します)。そのため、文字列、ハッシュ、セットのそれぞれ、または私たちが持っているあらゆるコレクションクラスを実装する必要はありません。 または、Pythonは正しくOOPルートになりませんか?これは、使用len("abc")してtype([])の代わりに、"abc".len()または[].type()さえのpython3でもそれはそうです。Pythonは設計上の理由でこのようにしていますか?

1
コマンドオブジェクトを適切なレシーバーに関連付けるにはどうすればよいですか?
プロジェクトに元に戻すとやり直しを実装するためにコマンドパターンを使用しようとしました public abstract class Command { protected Form Receiver { set; get; } protected HtmlElement Element { set; get; } abstract public void ReDo(); abstract public void UnDo(); public Command(Form receiver) { this.Receiver = receiver; } } class AddElementCmd : Command { public AddElementCmd(HtmlElement elem, Form receiver) : base(receiver) { …

2
UMLダイアグラムを使用してコードの編成方法を計画することが不適切なのはなぜですか?
そのため、はい、図が不適切な場合があります。彼らはいつ不適切ですか?それらを検証するためのコードなしでそれらを作成し、それらに従うことを意図している場合。アイデアを探求するために図を描くことには何の問題もありません。 アジャイルソフトウェア開発:原則、パターン、および実践-Robert C. Martin これは正確にはどういう意味ですか?UMLは、「ダイブイン」する前にコードを構造化する方法を計画するのに役立つように設計されていませんか?あなたが思いついた図に従わない場合、それを使用する意味は何ですか? コンテキスト:この章では、ボブおじさんがボウリングゲームのスコアキーパーのUML図を作成します。次に、UML図を調べずに、テスト駆動の方法でプログラムを開発します。結果のプログラムはUMLダイアグラムとは異なり、ボブおじさんは上記の結論に達します。

1
イベントソーシングは、書き込みがまれな場合のみですか?
私はイベントソーシングについて読んでいて、書き込みが非常にまれであるか、軍事レベルの監査が必要なエキゾチックな状況でのみ意味があるかどうかを自問するのをやめられません。 重要な使用法がある例外的ではないシステムでは、1日あたり数百から数千の書き込みが発生する可能性があり、たとえば、1年間の操作で100万回または2回の書き込み(つまりイベント)に変換されます。現在の状態を取得するためだけに数百万のオブジェクト(イベント)をマージすることは、従来のストレージからのまっすぐな読み取りと比較すると、ばかげた命題のように聞こえます。それでも、イベントソーシングは、最もパフォーマンスの高いシステムの背後にあります(LMAXなど)。 それで、私は何が欠けていますか?イベントストリームからの状態の復元は一般的に行われていますか?または、これを行う必要がほとんどなく、代わりに通常の操作(つまり、CQRSからのクエリストレージを使用)に別のストレージを使用し、例外的な場合(レプリケーション、監査など)にのみイベントから復元するという考えですか?

1
Javascriptでの巻き上げ===コンパイル?
最近の就職の面接で面白い視点に出会いました。 JavaScriptでのホイストとは、変数宣言と関数宣言をスクリプトの先頭に移動することです。このフェーズをコンパイルと呼ぶことができますか? Javascriptインタープリターには入力スクリプトに対する2つのパスがあり、最初のパスではホイストし、2番目のパスでは実際にスクリプトを実行するという事実を知っています。JavaScriptがインタプリタ言語であることを知っていたので、この質問は私を少し混乱させました。

1
PHPで文字列式を使用してデータセットを評価する
アプリケーションの一部の条件を更新する必要がありました。評価するデータセットがあり、アプリケーションで次のようにハードコードされています。 $arr = array( 'a' => 'apple', 'b' => 'orange', 'c' => 1, 'd' => 2, 'e' => 5, 'f' => 'green', 'g' => 'red', 'h' => 'yellow', ) $res1 = ($arr['a'] == 'apple') ? TRUE : FALSE; $res2 = (($arr['b'] == $arr['f']) && ($arr['c'] < $arr['d']) ? TRUE : …
9 php 

8
データベースからの誤ったnullエントリを防ぐための設計と実践
私のプログラムの一部は、データベース内の多くのテーブルと列からデータをフェッチして処理します。一部の列はである可能性がありますがnull、現在の処理コンテキストではエラーです。 これは「理論的には」発生しないはずなので、発生する場合は、不良データまたはコード内のバグを示しています。エラーの重大度は、フィールドによって異なりnullます。つまり、一部のフィールドでは処理を停止して誰かに通知する必要があり、他のフィールドでは処理を続行して誰かに通知するだけにする必要があります。 まれですが可能なnullエントリを処理するための優れたアーキテクチャまたは設計原則はありますか? ソリューションはJavaで実装できるはずですが、問題は言語にとらわれないため、タグを使用しませんでした。 私自身が持っていたいくつかの考え: NOT NULLの使用 最も簡単なのは、データベースでNOT NULL制約を使用することです。 しかし、データの元の挿入がこの後の処理ステップよりも重要である場合はどうなりますか?そのため、挿入がnull(バグまたは何らかの正当な理由のために)テーブルに挿入される場合、挿入が失敗しないようにします。プログラムのさらに多くの部分が挿入されたデータに依存しているが、この特定の列には依存していないとしましょう。そのため、挿入ステップではなく、現在の処理ステップでエラーが発生する危険を冒したいのです。それが、NOT NULL制約を使用したくない理由です。 単純にNullPointerExceptionに依存 常にそこにあると期待しているかのようにデータを使用し(実際にそうであるはずです)、結果のNPEを適切なレベルでキャッチします(たとえば、現在のエントリの処理は停止しますが、処理全体は進行しません) )。これは「フェイルファースト」の原則であり、私はしばしばそれを好みます。少なくともバグの場合、ログに記録されたNPEを取得します。 しかしその後、さまざまな種類の欠落データを区別する能力が失われます。たとえば、一部の欠落しているデータについては除外することができますが、他の場合は処理を停止して管理者に通知する必要があります。 null各アクセスの前に確認し、カスタム例外をスローする カスタム例外を使用すると、例外に基づいて正しいアクションを決定できるため、これは進むべき道のようです。 しかし、どこかで確認するのを忘れた場合はどうなりますか?また、私はコードを、まったくまたはほとんど期待されない(そしてビジネスロジックフローの一部ではない)nullチェックで混乱させます。 この方法を選択した場合、どのパターンがアプローチに最適ですか? 私のアプローチについての考えやコメントは大歓迎です。また、あらゆる種類の優れたソリューション(パターン、原則、私のコードまたはモデルの優れたアーキテクチャなど)。 編集: 別の制約があります。ORMを使用してDBから永続オブジェクトへのマッピングを行うため、そのレベルでnullチェックを実行しても機能しません(nullが害を及ぼさない部分で同じオブジェクトが使用されるため)。 。これまでに提供された回答の両方がこのオプションについて言及したため、これを追加しました。

4
このデータを保存する最も効率的な方法は何ですか?
私はいくつかの古いVBコードの書き換えを担当しています。私はそれがどのように機能するかを理解していますが、彼らがしたことを行うためのはるかに効率的な方法があるように感じます。それが何なのかわからない。これは、データ要件の点で私がする必要があるものと本当に似ている不自然な例です。 ユーザーは、GUIで車のメーカー、メーカー、モデル、色を選択する必要があります。次のような大きなテキストファイルがあります。 Ford Truck F150 red Ford Truck F150 blue Ford Truck F150 black Ford Truck F150 silver Ford Truck F250 red Ford Truck F250 green Ford Sedan Taurus red Ford Sedan Taurus green Ford Sedan Taurus white Ford... ... Subaru SUV Forester blue Subaru SUV Forester red Subaru SUV …

2
単体テストで注釈の存在を確認できますか?
抽象クラスとそのN個の拡張によって形成されるJavaクラス階層があります。抽象クラスには、@ Removeアノテーションが付けられたメソッドがあります。このアノテーションが削除されても例外がすぐに失敗することはありませんが、メモリ不足の例外が発生する可能性があるため、このアノテーションがリファクタリングで消えた場合は、できるだけ早く通知するようにしたいと思います。 私はGUTS(優れた単体テスト)を作成しようとしているので、テストでこの「技術要件」を文書化し、それを明記するテストケースを作成できると考えました。 しかし、これは機能ではなく、実装の詳細であり、メソッドの動作にはリンクされていません(メソッドは空である可能性がありますが、存在し、注釈が必要です)。 そのためのテストを作成しても大丈夫ですか、またはこの注釈の存在を確認する他の方法はありますか?

5
抽象化に依存することに重大な欠点はありますか?
私はこのウィキを安定した抽象化の原則(SAP)で読んでいました。 SAPは、パッケージの安定性が高いほど、抽象的である必要があると述べています。これは、パッケージの安定性が低い(変更される可能性が高い)場合、より具体的であることを意味します。私が本当に理解していないのは、これが事実であるべき理由です。確かにすべての場合において、安定性に関係なく、抽象化に依存し、具体的な実装を隠す必要がありますか?

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