ソフトウェア工学

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

6
オブジェクト指向のプラクティスを広める方法に関するヒント[非公開]
閉まっている。この質問はトピック外です。現在、回答を受け付けていません。 この質問を改善したいですか? 質問を更新することがありますので、上のトピックソフトウェア工学スタックExchange用。 4年前に閉鎖されました。 私は約250人の開発者がいる中規模の会社で働いています。残念ながら、それらの多くは手続き型の考え方に固執しており、実際にはアプリケーションに豊富なロジックが含まれている場合でも、一部のチームは大きなトランザクションスクリプトアプリケーションを常に提供しています。また、設計の依存関係を管理できず、最終的に別の多数のサービスに依存するサービスになります(クリーンな例 Big Ball of Mudの)。 私の質問は、この種の知識を広める方法を提案できますか? 問題の表面は、これらのアプリケーションのアーキテクチャと設計が貧弱であることです。別の問題は、あらゆる種類のテストの作成に反対する開発者がいることです。 これを変更するために私がやっていること(しかし、私は失敗しているか、変更が小さすぎます) 設計原則(SOLID、クリーンコードなど)に関するプレゼンテーションの実行。 TDDおよびBDDに関するワークショップ。 コーチングチーム(これには、ソナー、findbugs、jdependおよびその他のツールの使用が含まれます)。 IDEとリファクタリングの話。 私が将来することを考えているいくつかのこと(しかし、それらは良くないかもしれないと心配です) オブジェクト指向のエバンジェリストのチームを編成し、オブジェクト指向の考え方を異なるチームに広めます(これらの人々は、数か月ごとにチームを変更する必要があります)。 設計を批判し、改善を提案するために、設計レビューセッションを実行します(時間の制約のために改善が行われない場合でも、これは役立つと思います) 。 私がコーチするチームで見つけたのは、チームを離れるとすぐに、古いチームに戻るということです。私は彼らと一緒に多くの時間を費やさないことを知っています。通常は1ヶ月です。だから私がやっていることは何でも、それは固執しません。 この質問にフラストレーションがたまっているのは残念ですが、これを書く別の方法は、気が散るまで壁に頭をぶつけることでした。

5
「コンピュータープログラムの構造と解釈」という本は、Javaプログラマーにとって良い読み物ですか?[閉まっている]
現在のところ、この質問はQ&A形式には適していません。回答は事実、参考文献、または専門知識によってサポートされると予想されますが、この質問は議論、議論、世論調査、または広範な議論を求める可能性があります。この質問を改善し、場合によっては再開できると思われる場合は、ヘルプセンターをご覧ください。 7年前に閉鎖されました。 これは主観的であり、閉じられる可能性がありますが、コンピュータプログラムの構造と解釈を読むことが本当に役立つかどうかを知りたいと思いました。 コンピュータプログラムの構造と解釈 この本はJavaを使用していません。Javaを学びたかったというわけではありません。優れたプログラマーになるために読むのが役立つかどうか、そしてこの本から得られるものは何か、この本のその他の選択肢はJavaプログラマーにより適していますか?
14 learning  books 

4
パスワードのエントロピーを推定するにはどうすればよいですか?
パスワードの強度に関するさまざまなリソースを読んで、パスワードのエントロピーの大まかな推定値を提供するアルゴリズムを作成しようとしています。 できるだけ包括的なアルゴリズムを作成しようとしています。この時点では、擬似コードしかありませんが、アルゴリズムは次のことをカバーしています。 パスワードの長さ 繰り返されるキャラクター パターン(論理) 異なる文字スペース(LC、UC、数値、特殊、拡張) 辞書攻撃 以下をカバーしておらず、完全にカバーすべきではありません: 順序付け(このアルゴリズムの出力により、パスワードを厳密に順序付けることができます) パターン(空間) 誰でもこのアルゴリズムの弱点についての洞察を提供できますか?具体的には、アルゴリズムにパスワードを入力するとその強度が過大評価される状況を誰もが考えられますか?過小評価は問題ではありません。 アルゴリズム: // the password to test password = ? length = length(password) // unique character counts from password (duplicates discarded) uqlca = number of unique lowercase alphabetic characters in password uquca = number of uppercase alphabetic characters uqd = …

2
継続的統合ツールを選択するにはどうすればよいですか?[閉まっている]
閉まっている。この質問はトピック外です。現在、回答を受け付けていません。 この質問を改善したいですか? 質問を更新することがありますので、上のトピックソフトウェア工学スタックExchange用。 5年前に閉鎖されました。 ウィキペディアで統合サーバーのこのクールな比較表を見つけましたが、ツールを自分のニーズや興味に対してランク付けする方法が少し不確かです。チャート自体には、不明とマークされたボックスが多数あるようです。したがって、Wikipediaでチャートを更新することに満足しているなら、それも素晴らしいかもしれません。 最高のパフォーマンスを発揮する製品がいくつかあるので、4つまたは5つのオプションにすばやく絞り込むことができますか? 最大のユーザーコミュニティを持ち、現在進行中の機能強化と新しいツールとの統合が最も進んでいる製品はどれですか? オープンソースの提供は最高ですか、それとも自宅の一人のユーザーにとって大いに役立つ高品質のツールがありますか? 複数のシステム(プライマリデスクトップ、ローカルのみのホームネットワークサーバー、個人用および職場のノートブック、すべてに分散した複数の仮想マシン)を使用すると問題が発生し、それらをどのように管理できますか?

6
現在、ゲーム開発に使用されているテクノロジーは何ですか?[閉まっている]
現在のところ、この質問はQ&A形式には適していません。回答は事実、参考文献、または専門知識によってサポートされると予想されますが、この質問は議論、議論、世論調査、または広範な議論を求める可能性があります。この質問を改善し、場合によっては再開できると思われる場合は、ヘルプセンターをご覧ください。 7年前に閉鎖されました。 オンラインフォーラムでゲーム開発に関する質問をするたびに、線画アルゴリズムの学習、ビットレベルの画像操作、ビデオ圧縮解除などの提案が常に寄せられます。 しかし、God of War 3のようなゲームを見ると、このような低レベルのテクニックを使用してこれらのゲームを開発できるとは信じられません。 このようなゲームの素晴らしさは、(私にとって)わかりやすいプログラミング方法論に反しています。 ゲーム用ハードウェアに加えて、最近では本当に怪物です。したがって、開発者がより高いレベルの抽象化で作業することは理にかなっています。 ゲーム業界の最新の開発方法は何ですか?30〜35人の開発者(そのほとんどは管理とマーケティングの綿毛)のチームが、このような気が遠くなるようなゲームを作ることができるのはどうしてですか 質問が一般的すぎると思われる場合は、God of War 3のアーキテクチャを説明できますか?または、クローンをどのように作成しますか?客観的に答えられるべきだと思う。

5
プロジェクトが凍結-私の後の人々に何を残すべきですか?
ですから、私が取り組んでいるプロジェクトは今、無期限に凍結されます。プロジェクトが再びフリーズ解除された場合、そのプロジェクトが私または現在のチームのメンバーに割り当てられない可能性があります。実際、以前に凍結した後、プロジェクトを継承しましたが、プロジェクトの基本的なニーズを理解するのに役立つ前のチームには何も残っていなかったため、プロジェクトをよく知るために多くの時間を無駄にしました。私の質問は、私たちの後の人々がプロジェクトのニーズ、私たちがやったこと、なぜやったのかなどを最もよく理解するのを助けるために何をすべきだと思いますか。このプロジェクトで動作する他のトラックへのいくつかのトラック。 すでに行ったいくつかの手順: 技術文書(完全ではありませんが、少なくともいくつかあります)。 ソース管理システムの履歴。 プロジェクトのどの部分を改善する必要があるのか​​、そしてなぜそうするのかについての見積もり。 ユニットテストの束。 私たちがやったすべてのチケットで問題トラッカー(EDIT) 私たちがすでに準備していること、他に何ができるかについてどう思いますか?

9
Fanboysの取り扱い[終了]
閉まっている。この質問はトピック外です。現在、回答を受け付けていません。 この質問を改善したいですか? 質問を更新することがありますので、上のトピックソフトウェア工学スタックExchange用。 7年前に閉鎖されました。 私たちはおそらくこのような人に会ったでしょう。開発者は自分の言語が唯一の真の言語であり、それについて黙っていないことを知っているだけです。このような人のようにどのように対処しますか?私は誰かを怒らせたくありません(特に私の職場のファンボーイは上級開発者なので)。しかし、リポジトリに決して到達せず、他の誰も存在する必要がないというスローアウェイスクリプトを作成する必要がある場合は、自分で選択したスクリプト言語を使用できるようにしたいと考えています。 私はこれに対処しなければならなかったという考え: 笑って-「はい、たぶん言語Xが少し楽になりました。私はマゾだと思います!」 それに合わせて-新しい言語を選択することに伴う生産性の低下に耐えられないので、私はこれを避けたいと思います。 言語を隠す-クローゼットプログラマになり、スクリプトを作成するときや何かを自動化するときにモニターを隠す。 この状況に対して何を提案しますか?

4
SQLおよびデータ操作機能を備えたTDD
私はプロのプログラマーですが、ソフトウェアエンジニアリングの正式なトレーニングを受けたことはありません。私は頻繁にここを訪れているので、可能な限りユニットテストを書く傾向に気づきました。私のソフトウェアがより複雑で洗練されているので、デバッグを支援するための自動化されたテストをお勧めします。 ただし、私の仕事のほとんどは、複雑なSQLを作成してから、何らかの方法で出力を処理することです。たとえば、SQLが正しいデータを返していることを確認するテストをどのように作成しますか?次に、データが制御されていなかった場合(たとえば、サードパーティシステムのデータ)、ダミーデータの連を手書きせずに処理ルーチンを効率的にテストするにはどうすればよいでしょうか。 私が考えることができる最良の解決策は、一緒にほとんどの場合をカバーするデータのビューを作成することです。次に、これらのビューをSQLに結合して、正しいレコードを返しているかどうかを確認し、ビューを手動で処理して、関数などが意図したとおりに動作しているかどうかを確認します。それでも、それは過度で薄汚いようです。特にテストするデータを見つける...

3
複合パターンを使用するか、ツリー構造を使用するか、3番目の実装を使用するかをどのように判断できますか?
「オブザーバー」タイプと「サブジェクト」タイプの2つのクライアントタイプがあります。それらは両方ともグループの階層に関連付けられています。 オブザーバーは、異なる階層全体で関連付けられているグループから(カレンダー)データを受信します。このデータは、データを収集しようとしているグループの「親」グループからのデータを組み合わせて計算されます(各グループは1つの親のみを持つことができます)。 サブジェクトは、関連付けられているグループにデータ(オブザーバーが受信するデータ)を作成できます。グループでデータが作成されると、グループのすべての「子供」もデータを持ち、データの特定の領域の独自のバージョンを作成できますが、作成された元のデータにリンクされます(私の特定の実装では、元のデータには期間と見出しが含まれますが、サブグループは、それぞれのグループに直接リンクされた受信者の残りのデータを指定します)。 ただし、サブジェクトがデータを作成するとき、影響を受けるすべてのオブザーバーがこれと競合するデータを持っているかどうかを確認する必要があります。つまり、理解できる限り、巨大な再帰関数を意味します。 したがって、これは、上下に移動できる階層を持たせる必要があるという事実に要約できると思いますし、いくつかの場所はそれらを全体として扱うことができます(基本的に再帰)。 また、私は単に機能するソリューションを目指しているわけではありません。比較的理解しやすく(少なくともアーキテクチャ的には)、将来的に追加機能を簡単に受信できる柔軟性を備えたソリューションを見つけたいと思っています。 この問題または同様の階層の問題を解決するための設計パターン、または実行すべき優れたプラクティスはありますか? 編集: 私が持っているデザインは次のとおりです。 「Phoenix」クラスは、適切な名前をまだ考えていなかったため、そのように命名されています。 しかし、これに加えて、グループを通じて特定のオブザーバーに関連付けられている場合でも、特定のオブザーバーに対して特定のアクティビティを非表示にする必要があります。 少しオフトピック: 個人的には、この問題をより小さな問題に切り詰めることができるはずだと感じていますが、それは私をどのように回避します。相互に関連付けられていない複数の再帰機能と、さまざまな方法で情報を取得する必要があるさまざまなクライアントタイプが関係しているためだと思います。本当に頭を包むことはできません。階層の問題をカプセル化する方法を改善する方向に誰かが私を導くことができれば、それを受け取ることも非常にうれしいです。

2
Djangoアプリケーション戦略
私は少し最近成長しているDjangoプロジェクトにしばらく取り組んできました。取り扱いを容易にするためにどの戦略を使用するかについて少し考えてきました。入力を行いたいことの1つは、アプリケーションをいくつかの小さなアプリケーションに分割する必要があるかどうかです。それにより、ビューとモデルファイルが小さくなり、懸念事項の一部が分離されます。 これに悩まされることの1つは、私のアプリケーションでは、アプリケーション間で使用されるいくつかのヘルパーメソッドがあることです。また、一部のモデルはアプリケーション間で共有/使用する必要があります。これは理にかなっていますか?これは、アプリをいくつかの小さなアプリに分割することで達成したいと思っていた懸念の分離にはうまくいきません。アプリケーション間でヘルパーメソッド、モデルなどを共有するための良いアプローチは何でしょうか?

5
TDDに従うことは必然的にDIにつながりますか?
テスト駆動開発(TDD)、依存性注入(DI)、および制御の反転(IoC)をすべて同時に行うことを学びました。TDDを使用してコードを記述するとき、クラスのコンストラクターで常にDIを使用します。これは、TDDをどのように学んだかによるものなのか、それともTDDの自然な副作用なのか疑問に思っています。 だから私の質問は次のとおりです:TDDプリンシパルに従って、外部サービスに依存しない単体テストを書くことは必然的にDIにつながりますか?

7
C#は、C ++よりも「自分にぶら下がるロープ」を提供しますか?[閉まっている]
現在のところ、この質問はQ&A形式には適していません。回答は事実、参考文献、または専門知識によってサポートされると予想されますが、この質問は議論、議論、世論調査、または広範な議論を求める可能性があります。この質問を改善し、場合によっては再開できると思われる場合は、ヘルプセンターをご覧ください。 7年前に閉鎖されました。 Joel Spolskyは、C ++を「自分を吊るすのに十分なロープ」と見なしました。実際、彼はScott Meyersによる「Effective C ++」を要約していました。 それは基本的に、C ++は自分を吊るすのに十分なロープであり、さらに数マイルのロープ、そしてM&Mを装った自殺薬がいくつかあるという本です... 私は本のコピーを持っていませんが、本の多くはランタイムがあなたのためにそれらの問題を管理するので、C#で意味がないと思われるメモリ管理の落とし穴に関連する兆候があります。 私の質問は次のとおりです。 C#は、注意深いプログラミングによってのみC ++で回避される落とし穴を回避しますか?その場合、どの程度、どのように回避されますか? C#には、新しいC#プログラマーが知っておくべき、新しい異なる落とし穴がありますか?もしそうなら、なぜC#の設計によってそれらを回避できなかったのでしょうか?

2
Curiosityのパケット構造とは何ですか?
NASAの惑星間ネットワークの場合、パケットはどのように見えますか?これは明らかに冗長プロトコルの一種であり、受信機に保存され、バックアップが組み込まれています。パケット構造または通信プロトコルに関するドキュメントはありますか。14分間の通信に及ぶ必要がありますか?

3
誰かが私にC#のコーディング規約を説明できますか?
私は最近Unity3Dを使い始め、主にC#でスクリプトを書き始めました。私は通常Javaでプログラミングしているので、違いはそれほど大きくありませんが、正しいコースにいることを確認するためにクラッシュコースを参照しました。 ただし、C#に対する私の最大の好奇心は、メソッド名の最初の文字を大文字にすることです(たとえば、Java:getPrime()C#:GetPrime()aka:Pascal Case?)。これには正当な理由がありますか?私はクラッシュコースのページから、明らかに。たとえば、Javaが使用します。 注:言語には独自のコーディング規約があることは理解していますが(Pythonの方法はすべて小文字で、この質問にも当てはまります)、なぜ標準に正式化されないのか理解できませんでした。

9
大規模な密結合クラスを分割する方法は?
私は、2k行を超えるコード(および成長中)の巨大なクラスをいくつか持っており、可能であればリファクタリングして、より軽くてクリーンなデザインにしたいと考えています。 それが非常に大きい理由は、主にこれらのクラスがほとんどのメソッドがアクセスする必要があるマップのセットを処理し、メソッドが互いに非常に接続されているためです。 非常に具体的な例を挙げServerます。着信メッセージを処理するというクラスがあります。それはのようなメソッドを持っているjoinChatroom、searchUsers、sendPrivateMessage、これらの方法のなどすべてがマップする操作などusers、chatrooms、servers、... チャットルームに関するメッセージを処理するクラス、ユーザーに関するすべてを処理するクラスなどがあればいいかもしれませんが、ここでの主な問題は、ほとんどのメソッドですべてのマップを使用する必要があることです。これらがすべてServerこれらの共通マップに依存しており、メソッドが互いに非常に関連しているため、今のところそれらはすべてクラスに固執している理由です。 クラスChatroomsを作成する必要がありますが、他の各オブジェクトへの参照があります。クラスは、他のすべてのオブジェクトへの参照などを使用して再びユーザーになります。 私は何か間違ったことをしているような気がします。

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