ソフトウェア工学

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

5
任意/汎用のカテゴリノードを使用して、可変で多様なjtreeを作成するにはどうすればよいですか?
注:ここでコーディングのヘルプは必要ありませんProgrammers。理由があります。Javaの(単なる)理解ではなく、プログラムの計画/作成スキルを向上させたい。 ここでこのLARPゲームのスキルに基づいて、任意のカテゴリシステムを持つツリーを作成する方法を見つけようとしています。私の以前の試みは、スキルがカテゴリーでもあったかどうかについては愚かでした。それをコーディングしようとするのは面倒でした。自分のツリーを描くと、自分の「葉」だけがスキルであることに気付き、他のカテゴリにはカテゴリとしてラベルを付けました。 私が望んでいるのは、モデルとビューを分離しようとするツリーを作成し、任意の親に任意のタイプの子ノードを(編集/レンダリングの別の方法で)追加できるようにする方法です。 NBここにあるものはすべて、財産のように思える場合でも、スキルとして購入されます。エンドユーザーは、これを購買スキル(紙のATMで行う)と見なすため、同じページにすべて表示する必要があります。 ツリーの説明:ツリーは、ハードコードされた最高レベルのカテゴリ(武器、物理的および精神的、医療など)のセットで「生まれ」ます。このことから、ユーザーはスキルを追加できる必要があります。最終的に、彼らは「片手剣専門化」スキル(アイテムではない)を追加したいと考えています。そのためにはWeapons、選択One-handedした状態で「追加」をクリックし、その子に表示されるコンボボックスノードから選択し、もう一度追加をクリックして、表示されるその子ノードのテキストフィールドに名前を入力します。次に、もう一度追加をクリックして、そのリーフの「レベル」または「ティア」を追加/指定します。最初に習熟し、次に専門化(例えば)。 もちろん、別のスキルを購入する場合は、リーフへの完全に異なるルートです。武器の例で行ったように、ツリーの同じレベルにコンボボックスは必要なく、その背後にある他のロジックも必要になる場合があります。これは、プログラミングは言うまでもなく、頭を悩ませている問題です。一連のクラスを作成し、それらをどの順序でアタッチするかを指定せずに、すべてを適合させる方法。 この種のツリーをコードで記述するのに適したシステムは何ですか?私が見た他のすべてのJTreeの例には、予測可能なパターンがありますが、私の場合はそうではありません。これをすべて「リテラル」でコーディングする必要はありません。どのタイプ(コンボボックス、テキストフィールドなど)の子ノードの長いリストをどの親で許可する必要があります。抽象クラスを使用する必要がありますか?インターフェース? 上にリストされていない、異なる動作をする他のスキルを追加するときに、この種のオブジェクトのクラスターを拡張可能にするにはどうすればよいですか 使用する適切なシステムがない場合、この種のことを行う方法を決定するための適切なプロセスはありますか? 私の頭の中の歯車が回っています: 私はいつもする必要があります: 親を確認する 親に基づいてオプションを提供する 私はこの共通性のskillために、スキルとカテゴリの一般的なメソッドを定義/概説する何らかの抽象/インターフェイスクラスが必要だと考え始めています。(できれば)ルールとオプションをデータベースに入れて、そこから読み込めます。問題は、抽象メソッドまたはインターフェイスメソッドと、それを実装する方法との間の問題です。

3
優れたアーキテクト/マネージャー/主任開発者を作るのは何ですか?
私は小さなソフトウェア会社の主任開発者です。過去2年間で、私のチームは1人の開発者(私)から約9人のグループに成長しました。私たちのほとんどは非常に有能なシニアエンジニアであり(1人あたり20年以上ソフトウェアを構築した経験があります)、ほとんどの場合、手で持つ必要はほとんどありません。スクラムを使用して作業を管理し、通常は最小限の書面要件で多くのことを迅速に完了します。 チームが成長するにつれて、プロジェクト全体の技術的な監視を維持しながら、かなりの量の新しいコードを自分で作成することが困難になったため、自分の役割を調整する時が来ました。ほとんどの時間を開発に費やしていないときに、チームにとって最も役立つものにするにはどうすればよいですか? 私の目標は、開発者を追加することでグループをさらに成長させる(つまり、スクラム速度を上げる)ことです。そのため、単にチームに意思を課す「アーキテクチャポリス」になりたくありません。言い換えれば、私は不必要な官僚主義の層を追加することによって物事を遅くする男ではなく、物事がより良く働く/気分を良くする男になりたいです。それでも、私たちの主なリスクの1つは、すべてを同じページに保持するのに十分な構造を持たずにさらに人を追加すると、物事が制御不能になることです。 私の目標を達成するための最良の方法は何ですか?

2
償却分析?(最悪の場合の性能保証)
償却分析とは何ですか?また、プログラムで最悪の場合のパフォーマンス保証を達成するのにどのように役立ちますか? 私は、次のテクニックがプログラマーが最悪のパフォーマンス保証を達成するのを助けることができると読んでいました(つまり、私自身の言葉:プログラムの実行時間が最悪のキャストの実行時間を超えないことを保証します): ランダム化アルゴリズム(たとえば、最悪の場合、クイックソートアルゴリズムは2次ですが、入力をランダムに並べると、実行時間が線形であることが確率的に保証されます) 操作のシーケンス(分析では、データとクライアントが実行した操作のシーケンスの両方を考慮する必要があります) 償却分析(パフォーマンス保証を提供する別の方法は、すべてのオペレーションの合計コストをオペレーション数で割って追跡することにより、コストを償却することです。この設定では、平均コストを維持しながら、いくつかの高価なオペレーションを許可できますつまり、少数の高価な操作のコストを、その一部を多数の安価な操作のそれぞれに割り当てることで分散します) 著者は、償却分析を達成する方法の1つの例として、Stackの配列データ構造のサイズ変更の使用に言及しましたが、償却分析とは何か、実際にはどのようにできるかはまだわかりません最悪の結果を達成するために実装か(データ構造?アルゴリズム?) -キャストパフォーマンス保証

3
「一般的な」デバッグ方法に関する理論や書籍はありますか?[閉まっている]
閉まっている。この質問はトピック外です。現在、回答を受け付けていません。 この質問を改善したいですか? 質問を更新して、 Software Engineering Stack Exchangeのトピックになるようにします。 5年前に閉鎖されました。 私は多くのコンピューターサイエンスとエンジニアリングを読んで勉強しましたが、デバッグに関する本やデバッグ方法の理論はめったに見たこともありませんでした(確かに自分のデバッグ理論をいくつか開発しました)。 デバッグ理論や書籍はありますか?なぜですか?gdbを使用してデバッグする方法と、gdbの使用方法を読んで得た開発に関する最も役立つ情報を読むことができます。
12 debugging 

6
デバッグ:特定の修正が機能した理由の詳細を理解していますか?[閉まっている]
閉じた。この質問は意見に基づいています。現在、回答を受け付けていません。 この質問を改善したいですか?この投稿を編集して事実と引用で答えられるように質問を更新してください。 4年前に閉鎖されました。 デバッグ時に、いくつかの変更を行うことがありますが、これらの変更がプログラムのバグを修正する理由が100%わかりません。いくつかのバグが発生した理由と、特定の変更がそれらのバグを排除した理由について、すべての詳細を理解することが不可欠ですか?それとも、修正がなぜ機能したのかについての詳細を実際に知らずにプログラムを動作させることが開発者の間で一般的ですか?
12 skills  debugging  bug 

1
Floyd-Warshall、Dijkstraのアルゴリズム、Bellman-Fordアルゴリズムの違いについては正しいですか?
私は3つを研究しており、それらからの推論を以下に述べています。それらを十分に正確に理解しているかどうかを誰かに教えてもらえますか?ありがとうございました。 ダイクストラのアルゴリズムは、単一のソースがあり、あるノードから別のノードへの最小パスを知りたい場合にのみ使用されますが、このような場合は失敗します Floyd-Warshallのアルゴリズムは、すべてのノードのいずれかがソースになる可能性がある場合に使用されるため、ソースノードから宛先ノードに到達する最短距離が必要です。これは、負のサイクルがある場合にのみ失敗します (これは最も重要なものです。つまり、これは私が最も確信していないものです:) 3.Bellman-Fordは、ソースが1つしかない場合のダイクストラのように使用されます。これは負の重みを処理でき、その動作は1つのソースを除き、Floyd-Warshallの動作と同じですか? 見る必要がある場合、対応するアルゴリズムは次のとおりです(提供:ウィキペディア): ベルマンフォード: procedure BellmanFord(list vertices, list edges, vertex source) // This implementation takes in a graph, represented as lists of vertices // and edges, and modifies the vertices so that their distance and // predecessor attributes store the shortest paths. // Step 1: initialize graph …

3
経験豊富なプログラマーでない場合、オープンソースプロジェクトを開始することの欠点は何ですか?[閉まっている]
閉じた。この質問は意見に基づいています。現在、回答を受け付けていません。 この質問を改善したいですか?この投稿を編集して事実と引用で答えられるように質問を更新してください。 4年前に閉鎖されました。 製品を構築するためのアイデアはたくさんあります。問題は、私がプロとしての仕事の経験が1年未満であり、現在制作しているものに基づいて将来否定的に判断されることを恐れていることです。私のコードが良いかどうかはわかりません。 私はどのコーディングパターンにも精通していません。私が知っているのは、機能する製品を構築することだけです。将来のプロジェクトのためにgithubに公開プロファイルを作成したいので、コメントが十分にあり、最適化され、クリーンであることを確認するように努力します。 これらは、一般に公開されることを恐れているものです。 私のコードは高度に最適化されていない可能性があります。 偶然に仕事を終わらせる特定のライブラリまたは関数の誤った使用。 コーディングパターンを知らない、または従わない。 多くのバグ/コーナー、エッジケースを考慮しない スレッドの安全性、マルチスレッドプログラミングの同時実行性の問題など、特定の概念の基本的な理解と適用の欠如。 もっと経験を積むまで、ローカルでプライベートに作業を開始するか、それともビルドを続けるべきでしょうか。ここでの間違いが、長期的に私のキャリアの見通しに悩まされることを望まない。

3
関数an + bがO(n ^ 2)およびΘ(n)に属するというステートメントを説明してください。
私は線形関数を持っているとしましょうf(n)= an+b、この関数がO(n 2)に属していることを証明する最良の方法は何Θ(n)ですか? ここでは数学的な厳密さは必要ありません。プログラマーの回答が必要です。説明の論理的な方法。 これがまさに数学のQ&AではなくプログラマーのQ&Aに質問を投稿しなかった理由です。

1
iOSアプリ開発用のコードの整理
私はiOSプラットフォーム用のアプリを開発してきましたが、これまでずっと、ファイル(.h、.m、.mm)を整理するというひどい仕事をしてきたことに気づきました。iOSプロジェクトのファイルの整理に関して、業界標準やベストプラクティスはありますか? 私のファイルには、カスタムクラス(View Controllerの横)、カスタマイズされたView Controller、サードパーティのコンテンツ、iOS 5.0以降でのみ動作するコード、以前のバージョンで動作するコードが含まれています。私が探しているのは、他の人(または今後数年のうちに私)がこれを見て、そこにある複数のファイルで迷子にならないように、物事を整理するソリューションです。

7
ドキュメントの劣化-対処方法
重要:ソースコードのドキュメントに問題はありません。これは通常のコード監査に属し、最新の状態に保たれます。私たちの問題は、開発者のドキュメント(または、必要に応じて「外部」)、プログラマーからプログラマーへのブログのような小さなヒントです。 ウィキのようなシステムを使用して、プログラマーのドキュメントを作成します。プログラマーのためにプログラマーが書いた記事は、特定のコードがどのように機能するかをもう少し詳しく説明しています。これらのWikiページには通常、次のものが含まれます。 APIの各部分の設計決定の背後にある動機(たとえば、この特定のサードパーティライブラリがこの方法で何かを行うことを望んでいるため、このotherいことをしました。 特定の一般的なタスクを処理する方法の説明(たとえば、適切なアプリケーションスタイルを参照し、レジストリコンポーネントに自分自身を登録し、他のコンポーネントによって自動的に「スキャン」されるために何らかのインターフェースを実装する必要がある些細なポップアップを表示する) 良い習慣(主観的なもの、実際にこのようなものを書き留めます) 環境設定、必要なツールとそのセットアップ 一般に、主にサイズとブログ投稿/記事のような性質のために通常のコード文書に適合しないコードの記述に関連するもの。 問題 このシステムを導入することは数か月前には良い考えのように思えましたが、最近では解決するよりも多くの問題を引き起こしているように感じます。例えば: 人々は記事を書きます...しかし、コードが変更されると、Wikiの更新はめったに続きません 急いで誰かが書いたスクラッチ記事の多くは、そのように残しました 記事のリクエストは通常​​プロジェクトリーダーからのものですが、正確性や構成についてはほとんど検証されていません。 通常の劣化。コードは変更されましたが、wikiは変わりません。誰かが次に情報を探すとき、彼が通常見つけるのは、時代遅れの低品質のものの束です-そして、何が起こっているのか、彼が見つけたものが正確であるのか、(さらに悪いことに)その一部であるのか疑問に思っています。そして、助けになるはずだったものが、逆になります。 現時点では、プロジェクトリーダーを含め、人々は問題を認識しているようですが、明らかにそれで何かをすることに煩わされる人はいないようです(または、もっと面白いことがあります)。 私の最初の考えは、それをすべて忘却の中に投げ込むことでした(時代遅れの「ヒント」に何回か噛まれた後)。しかし、それは極端すぎるかもしれません。いくつかの情報は注意する価値があり、時々読むことをお勧めしますが、問題は依然として同じです。「最新」にどのように対処しますか?ソースコードに何らかの形でリンクされていますか(したがって、ファイルの更新バージョンがチェックインされると、記事の作成者はコード/記事を修正する必要があるかもしれないと通知されます)?指定された人は、毎日の基本でそれを「見守っていますか」?定期的なクリーンアップを行いますか?

2
Persistence-Ignorantオブジェクトは遅延読み込みを実装できますか?
永続性無知は、単一の責任原則のアプリケーションです。実際には、ドメインオブジェクト(DO)に永続性に関連するコードを含めるべきではなく、ドメインロジックのみを含める必要があります。 a)これは、下位層(つまり、永続層)に接続するコードが、ビジネスロジック層の他のクラス(OC)のドメインモデルの外側にあることを意味すると思いますか? b)の下で、私の仮定した場合)正しいこと、そしてDOたとえば、Customer、決してなどの方法が含まれていませんGetCustomersかGetCustomerByID? c)a)およびb)の下での私の仮定が正しく、Customerドメインオブジェクトがそのプロパティの一部に遅延読み込みを使用すると仮定すると、ある時点でCustomer内部ロジックがOCに連絡し、次にOCが遅延データを取得する必要があります。しかし、遅延データを受け取るためにOCCustomerに連絡する必要がある場合、ドメインオブジェクトに永続性に関連するロジックが含まれていないことを主張することはできません。 ありがとうございました jkohlheppへの返信 1)クラスはビジネスロジック層に含まれているOrderProviderと思いCustomerProviderますか? 2)b)の下での私の仮定が正しいというあなたの返事から集めますか? 3) ...いくつかの非公開注文フィールドが入力されているか、それがヌルであるかを確認します。nullの場合... しかし、私が知る限り、ドメインコードがプライベートorderフィールドに入力されているかどうかを確認する必要があるとすぐに、もしそうでない場合はOrderProviderに問い合わせると、すでにPIの原則に違反していますか?!

2
ロブ・パイクが「ゴーは作曲について」と言うとき、彼は正確に何を意味しますか?[閉まっている]
閉じた。この質問は意見に基づいています。現在、回答を受け付けていません。 この質問を改善したいですか?この投稿を編集して事実と引用で答えられるように質問を更新してください。 5年前に閉鎖されました。 より少ないから指数関数的に C ++とJavaが型の階層と型の分類に関するものである場合、Goは合成に関するものです。

1
例外処理のベストプラクティスまたは推奨事項 [閉まっている]
閉まっている。この質問はトピック外です。現在、回答を受け付けていません。 この質問を改善したいですか? 質問を更新して、 Software Engineering Stack Exchangeのトピックになるようにします。 5年前に閉鎖されました。 私のプログラムの主な問題は、コード構造/組織とエラー処理の2つだと思います。Code Complete 2を読んでいますが、潜在的な問題を扱うために読むものが必要です。 たとえば、Webサイトで、ユーザーがjavascriptを介してデータを改ざんした場合にのみ何かが発生する可能性がある場合、そのことについて記述しますか?また、いつエラーをキャッチしませんか?入力として文字列とintを期待するクラスを作成し、それらが文字列とintではない場合、それを確認しますか、それとも間違ったパラメーターを渡した呼び出しメソッドにバブルさせますか? これはここでの単一の回答では答えられない広範なトピックであることを知っているので、私が探しているのは、適切な例外処理の実践を教えるとして一般に受け入れられている本またはリソースです。

3
IValidatableObjectと単一の責任
ビューモデルでIValidatableObjectを実装し、カスタム検証を追加できるようにするMVCの拡張ポイントが気に入っています。 このコードを唯一の検証ロジックにして、コントローラーを無駄のないものにしようとしています。 if (!ModelState.IsValid) return View(loginViewModel); たとえば、ログインビューモデルはIValidatableObjectを実装し、コンストラクターインジェクションを介してILoginValidatorオブジェクトを取得します。 public interface ILoginValidator { bool UserExists(string email); bool IsLoginValid(string userName, string password); } ビューモデルにインスタンスを注入するNinjectは、実際には一般的な慣行ではないようです。 これは良いアプローチですか?より良いものはありますか?

2
1つの実行可能ファイル内のすべてのユニットテスト、またはそれらを分割しますか?
ライブラリなどの1つのソフトウェアのテストを作成する場合、すべてのユニットテストを1つにコンパイルするのが好きですか、それとも複数の実行可能ファイルに分けるのが好きですか? 私が求めている理由は、現在CUnitを使用して、作業中のライブラリをテストしているためです。テストは個別のスイートに分割され、1つの実行可能ファイルにコンパイルされ、障害の印刷出力が完成します。現在、そのライブラリのビルドシステムはCMake(名前にもかかわらず、CUnitとはほとんど関係ありません)であり、独自のテストフレームワークCTestが付属しています。CTestを使用すると、テストとして機能する実行可能ファイルのリストを登録できます。 自動テストの実行にCTestを使用するかどうかを考えています。ただし、これには、これまでに作成したテストを別々のコンパイルターゲットに分割する必要があります。そうしないと、テストの選択的な実行など、CTestsの高度な機能の一部を実際に利用できません。 これは、どのツールを使用するか、それらの処理と規則の問題であることがわかりますが、それとは別に、単一のテスト実行可能ファイルを個別のテスト実行可能ファイルよりも好む他の理由はありますか?またはその逆?

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