ソフトウェア工学

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

2
親への参照を持つノードを持つツリーはまだツリーですか?
ツリー内の各ノードの親を参照する場合、(定義により)まだツリーはありますか? ウィキペディアの定義は次のとおりです。 コンピュータサイエンスでは、ツリーは広く使用されている抽象データ型(ADT)またはこのADTを実装するデータ構造であり、リンクされたノードのセットとして表される子のルート値とサブツリーを持つ階層ツリー構造をシミュレートします。

3
実際には削除されない「削除済み」レコードのカスケード
このシナリオで人々が何をするかについていくつかのアイデアを得ようとしています。テーブルのあるシステムデータベース(SQL Server 2008 R2)があり、すべてのテーブルに "削除済み"と呼ばれるフィールドがあります。レコードが削除された場合は基本的にビットフィールドであり、レコードが0の場合は削除されません。フィールドはnull可能ではなく、そのデフォルトはもちろん0です。 データベースへの実際の削除は許可しないため、これを回避するには、ビットフィールド(Deleted)をtrueに設定します。このアプリケーションでは、次のようなクエリが作成されます。 SELECT blah FROM MyTable WHERE .. AND Deleted=0 基本的に、レコードをフィルタリングして、削除されていない行のみを取得します。私たちの問題は、カスケードする必要がある関連レコードです。人々は何を好むのでしょうか。サーバー側のコードでこれを行うと、レコードを削除したときに、関連するすべてのレコードが削除されます(削除済みビットフィールドがtrueに設定されます)。それとも、これはこのフィールドをチェックし、すべての関連レコードのビットフィールドを1に設定する必要があるトリガーでしょうか。 それとも、私たちは完全に間違った道を進んでいますか?
8 database 

6
アジャイル開発における「マイルストーン」の有用性
多くの課題追跡は「マイルストーン」と呼ばれるものをサポートしています。私はそれらの用途を見つけたことがありません。マイルストーンは、スケジュールされた大規模なプッシュを行う場合にのみ役立ちますが、新機能やバグ修正が完了したときに展開する場合には役立ちません。 マイルストーンを使用してアジャイル開発をいつ/どのように編成しますか?

2
OOCSS / BEM / SMACSSアーキテクチャ
この記事では、フロントエンドコードを整理するために取り組んできました。BEM / SMACSSの記事を参照し、次に他の記事を参照します。 私は本当にベストプラクティスが何であるかを理解しようとしています...私はこの "標準"を決定するために数日を持ち、それから高優先度/高可視性/限られたタイムラインプロジェクトを実行する必要があります。そのため、アプリと同じように拡張できる基盤から始めたいと思います。 segment... という名前のコンポーネントがあるとすると、segments1ページあたり最大10 個のページが作成されます。それぞれsegmentが同じ基本クラスを共有します。ただし、特定のものsegmentsには修飾子があります(異なる背景色)。さらに、(BEMアプローチの)各ブロック内の要素にも修飾子があります。実例を示すために、ここに簡単な実装を示します(単一の要素のみで、arrowサイト全体にはそれぞれ4〜5個の要素がありますsegment)。 .segment__arrow { position: absolute; bottom: -24px; left: 50%; margin-left: -11px; background-position: center no-repeat; height: 21px; width: 21px; z-index: 2; } .segment__arrow--orange { @extend .segment__arrow; background-image: url('/images/arrow_orange.png'); } .segment__arrow--white { @extend .segment__arrow; background-image: url('/images/arrow_white.png'); } したがって、これは単一クラスのアプローチです。 <div class="segment__arrow--white"> ... </div> または、マルチクラスアプローチを使用することもできます。 .segment__arrow { …

5
Accessをデータベースとして使用することの欠点はありますか?
Microsoft Accessの複数のテーブルにデータを保存するアプリケーションを継承しました。Access DBはストレージにのみ使用され、すべてのデータ処理はアプリ(VB.net)によって処理されます。 これは良い習慣ですか?私は同様のアプリをゼロから構築する必要があり、「通常の」プラクティスが何であるかわかりません。 私はさまざまな形式で質問をグーグルで試し、多数の結果(このフォーラムの多くを含む)をチェックしましたが、すべての質問は、単にデータストレージに使用するのではなく、Access内でプログラミングしている場所に関連しているようです。 私はもっ​​と具体的になると思いますが、SQL Server Expressまたは同様のものがより良いオプションになると思います。 -あなたが原因類似した質問を有することに、この記事を読んでいる場合は、下に@DanielBによって提供されるこのリンクをチェックアウト/programming/694921/ms-access-mdb-concurrencyを

4
抽象ファクトリパターンはスケーリングしますか?
私はまだここでデザインパターンを理解しようとしています。抽象ファクトリパターンを学習した後、このパターンはうまくスケーリングしないことに気付きました。抽象ファクトリー・パターンのUMLダイアグラムを見てください。 新しい「AbstractProductC」を作成する必要がある場合は、ConcreateFactory1とConcreateFactory2の両方の実装に影響を与える「AbstractFactory」に抽象メソッド「CreateProductC」を追加する必要があります。 ここでの私の質問は、Abstract Factoryパターンはまったくスケールしますか(または)私はここで間違った方向に考えていますか? 前もって感謝します

2
住所をデータベースに保存する:国際的なアプリにはどのような構造を使用すればよいですか?
海外のユーザーにデータベースを使用してもらいますが、米国以外でメールシステムがどのように動作するのかわかりません。 「都市」、「州」、「国」、そして「郵便番号」の概念は、階層が2レベルしかない場合でも階層をキャプチャするのに十分ですか(都市/国)。

1
WCFのバージョン管理、名前付け、エンドポイントURL
WCFサービスとメインLib1を持っています。 たとえば、Save Profile Serviceがあるとします。WCFはクライアントからデータ(事前に定義されたデータコントラクトを含む)を取得し、それをメインクラスLib1に渡し、応答を生成してクライアントに送り返します。 WCFメソッド:SaveProfile(ProfileDTOプロファイル) 現在のバージョン1.0 ProfileDTOには、次のUserName Password FirstName DOBがあります(文字列yyyy-mm-dd)CreatedDate(文字列yyyy-mm-dd) 次のバージョン(V2.0) ProfileDTOには、次のUserName Password FirstName DOB(UnixTimeStampの場合)CreatedDate(UnixTimeStampの場合)があります。 バージョン3.0の ProfileDTOには次のものがあります(ユーザー名とパスワードの長さの検証が変更されています)UserName Password FirstName DOB(UnixTimeStampの場合)CreatedDate(UnixTimeStampの場合) 簡単に言うと、各バージョン1の間でDataContractとワークフローが変更されています。WCFサービスとメインクラスLib1のメソッドに名前を付けるにはどうすればよいですか?2.開発と保守を容易にするために、特定のパターンを使用する必要がありますか?3.バージョンごとに異なるエンドポイントが必要ですか? 上記の例では、「SaveProfile」という名前のメソッドがあります。「SaveProfile1.0」、「SaveProfile2.0」などのメソッドに名前を付ける必要がありますか。バージョン「3.0」と「4.0」の間で変更がない場合、メンテナンスが困難になります。メンテナンスを容易にするのに役立つアプローチを探しています
8 wcf  versioning 

4
インデント/空白についてはどの程度厳しくすべきですか?[閉まっている]
休業。この質問は意見に基づいています。現在、回答を受け付けていません。 この質問を改善してみませんか?この投稿を編集して、事実と引用で回答できるように質問を更新してください。 6年前休業。 私たちの開発プロセスは次のとおりです タスクのコーディング->他の誰かのQAコードとドキュメント->タスクはトランクにマージされます。 最近、インデントと空白の問題のために、同僚がコードQAの合格を拒否しています。 これらの問題の例を次に示します(構文はSAS)。 追加の空白: %if &syserr gt 0 %then %goto err; /*last line of code*/ /* Footer area*/ 余白の余分な行、およびproc sort内でインデントされていない: /* End Of header * * * * * * * * * * * * * * * * * * * * * * …

1
複数のAPI、または「chooser」パラメーターを持つ1つのAPI?
データソースの上にビジネスロジックを追加するWebサービスがあるとします。このサービスの各APIはほとんどのように見えます-一連の制約が与えられた場合、これらの制約を満たすデータソースからのアイテムを提供します。APIからデータソースの「ビュー」を取得したと言えます。 ここで、時間の経過とともに、データソースに対してさまざまな種類のビューを返すように求められます。「十分に異なる」ビューごとに新しいAPIを追加するか、ギアを切り替えて、目的のビューの種類を指定するパラメーターを取得するgetFooDataView()APIを提供するオプションがあります。どちらの方法に行くかを決定するために、いくつかの競争圧力があります。 あなたのサービスの既存の大きなクライアントは怠惰であることを好み、データの新しいビューが必要なときに新しいAPIまでコーディングする必要はありません。 ただし、一部のリクエストパラメータ(制約)は一部のビューでのみ意味があり、他のビューでは意味がありません。「XYZビューが必要な場合は、 "foo"パラメータを設定すると、APIコントラクトを緩くする必要があります。一部のビューではそうであるとしても、 "foo"を必須パラメーターにすることができないという残念な副作用があります。 新しいクライアントがサービスを活用したいというケースはますます増えています。どちらがより混乱するかを決定することはできません-異なるがより厳密に定義されたAPIと、パラメーターのどの組み合わせが本当に必要なものを提供するかを知る必要がある1つのAPIを選択する必要があります。 これを抽出するために、既存のAPIのバリエーションとは対照的に、何かが独自のAPIである必要があるという線を描くのはいつですか?2人のクライアントの要求を意味的に区別する理由については、協力しなければならない人によって見方が異なるため、この問題についてコンセンサスを得るのは難しい場合があります。また、将来のクライアントがサービスを利用するのが極端に難しくならないようにする必要もあります。この種の選択を行うためのいくつかのベストプラクティスは何ですか?

3
大規模なソフトウェア会社がコードを文書化またはリファクタリングしないのは一般的ですか?[閉まっている]
休業。この質問は意見に基づいています。現在、回答を受け付けていません。 この質問を改善してみませんか?この投稿を編集して、事実と引用で回答できるように質問を更新してください。 6年前休業。 私は大規模なソフトウェア会社で働き始め、100万行を超えるコードのプロジェクトに割り当てられました。これはクライアント(社内プロジェクトではなく)に販売されるプログラムスイートの一部であり、必要に応じてソースコードを購入できます(ただし、それに関連する追加料金が発生することはまれです)。彼らは何年にもわたってソフトウェア設計を行っており、現在の製品は近い将来に継続することを目的としています。 驚いたことに、何百万行ものコードがドキュメントにほぼ完全に欠けています。さらに、コードの一部の領域は非常に厄介であり、理解しやすくなるようにリファクタリングを使用できる場合があります(たとえば、プログラミング言語の改善が10年ほど前に行われ、コードの大部分が大幅に増加します)バグが発生しにくいことは言うまでもありません)。これを修正するための努力はなさそうで、私が取り組んでいる部分が抵抗に遭遇したためにそうするようにとの私の申し出は、明確な答えを得ることはできませんでした。 これらのプラクティスは、ソフトウェア業界の大企業で一般的ですか?それとも、リファクタリングやドキュメントが不足しているという点で私の会社はユニークですか? 補遺:いくつかのコメントに基づいて、私が探しているものを明確にしたいと思います。私の会社には技術的な負債があることを理解していますが、これは悪いことです。これが原因で私の会社が悪化しているかどうかを判断するのではなく、このドキュメントの欠如とリファクタリングへの抵抗が、私が持つプログラミングの世界での現実であるかどうかを知りたいだけです。私がそれで働き続けるならば対処するために。

4
依存データ構造を最新に保つにはどうすればよいですか?
構文解析ツリー、抽象構文ツリー、および制御フローグラフがあり、それぞれが前のものから論理的に派生しているとします。原則として、解析ツリーがあれば各グラフを作成するのは簡単ですが、解析ツリーが変更されたときにグラフを更新する複雑さをどのように管理できますか?私たちはツリーがどのように変更されたかを正確に知っていますが、管理が難しくならない方法で変更を他のツリーにどのように伝播できますか? 当然ながら、依存グラフは最初のグラフが変更されるたびに最初から再構築するだけで更新できますが、依存グラフの変更の詳細を知る方法はありません。 現在、この問題を解決する方法は4つありますが、それぞれに問題があります。 従属ツリーのノードはそれぞれ、元のツリーの関連ノードを監視し、必要に応じて自身と元のツリーノードのオブザーバーリストを更新します。これの概念的な複雑さは困難になる可能性があります。 元のツリーの各ノードには、それに依存する従属ツリーノードのリストがあり、ノードが変更されると、従属ノードにフラグを設定して、従属ノードの親を含め、ダーティとしてマークします。ルートに。変更のたびに、依存グラフを最初から作成するアルゴリズムとよく似たアルゴリズムを実行しますが、クリーンノードをスキップして各ダーティノードを再構築し、再構築されたノードが実際にダーティノードと異なるかどうかを追跡します。これも注意が必要です。 元のグラフと従属グラフの間の論理的な接続を、おそらく宣言型言語を使用して設計された制約のリストのようなデータ構造として表すことができます。元のグラフが変更された場合、違反している制約と違反を修正するために依存ツリーをどのように変更する必要があるかを見つけるためにリストをスキャンするだけで、すべてデータとしてエンコードされます。 既存の依存グラフがないかのように、依存グラフを最初から再構築し、既存のグラフと新しいグラフを比較して、どのように変化したかを確認できます。違いを検出するために利用できるアルゴリズムがあることを知っているので、これが最も簡単な方法であると確信していますが、それらはすべて非常に計算コストが高く、原則として不要と思われるため、このオプションは意図的に避けています。 この種の問題に対処する正しい方法は何ですか?確かに、このすべてをほぼ簡単にするデザインパターンがなければなりません。この一般的な説明のすべての問題に対して適切な解決策があると便利です。このクラスの問題には名前がありますか? この問題が引き起こすトラブルについて詳しく説明しましょう。この問題は、プロジェクトの2つの部分がグラフを操作するたびにさまざまな場所で発生します。各グラフは、ソフトウェアの実行中に変化する同じものの異なる表現です。これはインターフェースのアダプターを作成するようなものですが、単一のオブジェクトまたは固定数のオブジェクトをラップする代わりに、任意のサイズのグラフ全体をラップする必要があります。 私がこれを試す度に、私は混乱して維持不可能な混乱に終わります。オブザーバーの制御フローは、複雑になると追跡が困難になる可能性があります。あるグラフを別のグラフに変換するアルゴリズムは、通常、レイアウトが明確で複数のクラスにまたがっていない場合に追跡するには十分な注意が必要です。問題は、元のグラフが変更されているときに、単純で単純なグラフ変換アルゴリズムだけを使用する方法がないように見えることです。 当然のことながら、通常のグラフ変換アルゴリズムを直接使用することはできません。ゼロから開始する以外の方法で変更に対応できないためです。代わりの方法は何ですか?おそらく、アルゴリズムは継続渡しスタイルで記述できます。この場合、アルゴリズムの各ステップは、ビジターのように、元のグラフのノードのタイプごとにメソッドを持つオブジェクトとして表されます。次に、さまざまな単純なビジターを組み合わせてアルゴリズムを組み立てることができます。 別の例:JPanelsとレイアウトマネージャーを使用して、Java Swingの場合と同じようにレイアウトされたGUIがあるとします。複雑なレイアウトマネージャーの代わりにネストされたJPanelsを使用することでそのプロセスを簡略化できるため、レイアウト目的でのみ存在し、それ以外の場合は無意味なノードを含むさまざまなコンテナーのツリーになります。ここで、GUIの生成に使用されたものと同じツリーがアプリケーションの別の部分でも使用されていると想定しますが、ツリーをグラフィカルにレイアウトする代わりに、抽象表現ツリーをフォルダーのシステムとして生成するライブラリーを操作します。このライブラリを使用するには、レイアウトノードを持たないバージョンのツリーが必要です。レイアウトノードを親ノードにフラット化する必要があります。 もう1つの見方:可変ツリーを操作するというまさにその概念は、デメテルの法則に違反しています。構文解析ツリーや構文ツリーが通常のように値である場合は、実際には法律違反にはなりませんが、その場合は何も最新の状態に保つ必要がないため問題はありません。それで、この問題はデメテルの法則に違反した直接の結果として存在しますが、ドメインがツリーまたはグラフの操作に関するものであるように思われる場合、一般的にどのようにそれを回避しますか? 複合パターンは、 1つのオブジェクトにグラフを回すとデメテルの法則に従うための素晴らしいツールです。ある種類のツリーを別の種類のツリーに効果的に変換するために複合パターンを使用することは可能ですか?抽象構文木や制御フローグラフのように機能するように、複合解析ツリーを作成できますか?単一責任の原則に違反せずにそれを行う方法はありますか?複合パターンは、クラスが彼らが触れるすべての責任を吸収する傾向がありますが、おそらくそれは戦略パターンと何らかの形で組み合わせることができます。

4
MongoDBがスケーリングできる簡単な例が必要ですが、リレーショナルデータベースで問題が発生します[終了]
休業。この質問には、より焦点を当てる必要があります。現在、回答を受け付けていません。 この質問を改善してみませんか?質問を更新して、この投稿を編集するだけで1つの問題に焦点を当てます。 5年前休業。 私はMongoDBの使い方を学んでいるだけで、他のプログラマーと話し合うときに、従来のRDBMSと比較してNoSQLが優れた選択肢である理由の簡単な例が必要です。 たとえば、大量のトラフィックを含むブログは関係的に表すことができますが、パフォーマンスのチューニングとテーブル間の結合が必要になります(完全な非正規化が使用されていると想定)。一方、MongoDBでは、1つのコレクションから直接取得して同じ効果を得ることができます。 しかし、私が他のプログラマーから得ている反応は、「なぜそれをリレーショナルに保ち、後で簡単なキャッシングを追加しないのか」です。 MongoDBが実際に輝き、リレーショナルデータベースがはるかに速くフォールオーバーするという、それほど単純な例はありませんか?プロジェクト/システムが小さければ小さいほど、意見の不一致の余地が少なくなるため、優れています。 ブログの例の複雑さの線に沿った何かが本当に役立つでしょう。 ありがとう。

6
スクラムでタスクを推定する方法は?
ユーザーストーリーのバックログがあり、それぞれにストーリーポイントの推定数があるとします。今、スプリント計画を実行しています。 これで、ストーリーはタスクに分解されるはずであり、多くのスクラムリソースは、各タスクを人時間で推定する必要があることを示唆しています。この時点ではすべての質問についてチームが話し合っているため、タスクの見積もりに1分以上かかることはありません。ただし、タスクは1日より長くすべきではないため、8人の開発者による3週間のスプリントを想定すると、120タスクを意味し、見積もりにのみ2時間かかることは、私には少し多く思えます。 経験豊富なチームがタスクの見積もりをスキップまたはショートカットできることは知っていますが、まだその段階ではないとしましょう。 あなたの経験では、スプリントにはいくつのタスクがあり、それらすべてを推定するのにどれくらいの時間がかかりますか?(それらの半分だけを見積もることはあまり意味がありませんか?) 明確化: 答えはスプリントの長さとチームのサイズに依存するので、8人の開発者と3週間と仮定します。 言及された数値は経験則である可能性がありますが、それらがオフの場合(たとえば、より多くのタスク、それぞれを推定するために必要な時間の短縮)でも、推定には約2時間かかります。それで、おそらく質問は「計画会議の何パーセントが純粋なタスク推定のために予約されるべきであり、そして私たちがより良いことをすべきではないのか」であろう。

3
Pythonアプリケーション用のブラウザベースのGUI [終了]
休業。この質問には、より焦点を当てる必要があります。現在、回答を受け付けていません。 この質問を改善してみませんか?質問を更新して、この投稿を編集するだけで1つの問題に焦点を当てます。 6年前休業。 コマンドラインのpythonアプリケーション用のウェブ/ブラウザベースのGUIを作成したいと考えています。目標は、このGUIを作成するためにHTML / JSテクノロジーを利用することです。アプリケーション自体として、LinuxとWindowsで実行する必要があり、インターフェースはlocalhostからのみアクセスできます(インターネットに公開されません)。GUIには5〜10ページが含まれます。 HTML / JSを含む従来のデスクトップGUIは必要ありませんが、一連のHTMLファイルと、それらとアプリケーションの間にある種のコントローラーが必要です。 また、ページ全体を更新せずに、GUIでデータを読み込んで印刷できるように、非同期プログラミング(ajaxのような)を利用したいと思っています。私はおそらくそのためにjQueryを使用しますが、他にもいくつかあります。 これをどのように設計することをお勧めしますか?ここではパフォーマンスは重要ではありません。私はむしろ、信頼性、移植性、シンプルさを考えています。 私は軽量のPython HTTPサーバー/フレームワーク(CherryPyなど)を使用することを考えています。後でPythonテンプレートシステムを使用することもできます(最初は数ページになります)。 編集: 私はこれを構築するためのアイデア/推奨事項を探していますが、ブラウザ/ウェブベースのGUIに代わるものではありません。

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