ソフトウェア工学

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



8
コードのメンテナンス:一貫性を保つために新しいコードを拡張する際に悪いパターンを維持するかどうか?
プロジェクトの既存のモジュールを拡張する必要があります。私はそれが行われた方法が好きではありません(コピー/貼り付けられたコードのような、アンチパターンがたくさんあります)。多くの理由で完全なリファクタリングを実行したくありません。 したほうがいい: 次のメンテナーとの混乱を避け、コードベースとの一貫性を保つために、間違っていると感じたとしても、既存の規則を使用して新しいメソッドを作成しますか? または コードに別のパターンを導入している場合でも、私が気分が良いものを使用してみてください? 最初の回答後に編集された精度: 既存のコードは混乱ではありません。簡単に理解できます。しかし、良いデザインで回避できる多くの定型コードを導入しています(その結果、コードを追跡するのが難しくなるかもしれません)。私の現在のケースでは、古き良きJDBC(インボードのスプリングテンプレート)DAOモジュールですが、すでにこのジレンマに遭遇しており、他の開発者フィードバックを探しています。 時間がないので、リファクタリングしたくありません。そして、時間が経っても、完全に機能するモジュール全体にリファクタリングが必要であることを正当化するのは困難です。リファクタリングのコストは、そのメリットよりも重いでしょう。覚えておいてください:コードは乱雑でも複雑でもありません。そこにいくつかのメソッドを抽出して、ここで抽象クラスを紹介することはできません。それは設計上の欠陥です(極端な「愚かなシンプルを保つ」の結果だと思います) したがって、質問はそのように尋ねることもできます: 開発者として、あなたは簡単な愚かな退屈なコードを維持することを好みますか、またはあなたの場所で愚かな退屈なコードを行うヘルパーを持っていますか? 最後の可能性の欠点は、いくつかのことを学ばなければならず、完全なリファクタリングが完了するまで、簡単な愚かな退屈なコードを維持しなければならないことです)

12
予約語を避けるための意図的なスペルミス
良くも悪くも予約語になっている一般的な単語の意図的なスペルミスを含むコードをよく見ます: klassまたはclazzのためのクラス:Class clazz = ThisClass.class kount以下のためのカウント SQLで:count(*) AS kount 個人的には、これにより可読性が低下することがわかります。私自身の練習では、私はより良い名前が使用されていることができなかった、あまりにも多くのケースを発見していません- itemClassかrecordTotal。 クラスのJavaDocsの例は、パラメーターにこれを示しています。 public <U> Class<? extends U> asSubclass(Class<U> clazz) これは合理的なユースケースを示していますか?


3
Rubyのシンボルとは何ですか?
私は、Rubyの世界にはまったく馴染みがなく、Symbolsの概念に少し混乱しています。シンボルと変数の違いは何ですか?なぜ変数を使用しないのですか? ありがとう。
45 ruby 

1
アジャイルに関する標準的な本はありますか?
ソロ開発者として、私はアジャイルのようなプロセスを使用していると思いますが、私がやっていることを実際のアジャイルと比較し、自分のプロセスを改善できるかどうかを確認したいと思います。 アジャイルに関するベストプラクティス、方法論、およびその他の役立つ情報を説明するための事実上の標準である本はありますか?その本は特別なものですか?
45 agile  books 


26
最も心を曲げるプログラミング言語ですか?[閉まっている]
より合理的にあなたが最も心曲げであることがわかります一般的なプログラミング言語、? 私は多くのポッドキャストのプログラミングを聞いており、今後予定されている重要な新しい言語を習得するために少し時間をかけています。私は必ずしもBrainFuckについて話しているわけではありませんが、どのプログラミング言語が一般的なプログラミングパラダイムに挑戦する言語だと思いますか? 私にとっては、1990年代にいくつかの機能およびロジック(たとえばProlog)プログラミングを行ったので、そこで何か特別なものを見つけたとは言えません。 私はその専門家には程遠いですが、今日でも私にとって最も心を痛めるプログラミング言語はPerlです。ではないので、「Hello World」の実装が困難であるのではなく、最も困難な解決策のいくつかは私の頭をクリアするので、詩的に、私は離れて私の端末から外部に歩かなければならないことを分解することができることをそんなに字句柔軟性があります。私は商用ソフトウェアの実装を販売する可能性が高いと言っているのではなく、Perlがそれほど有名であるという明確な理由があるというだけです。基本的な本のリストをご覧ください。 それで、あなたのより良いプログラミングと実践を促進するあなたの心を曲げる言語は何ですか?

10
あなたが受け入れることについてリベラルであるかどうか…?
[免責事項:この質問は主観的ですが、事実や反射によって裏付けられた回答を得ることを希望します] 誰もがロバストネスの原則について知っていると思いますが、通常はポステルの法則によって要約されます: 送信する内容には慎重になります。あなたが受け入れるものに寛大であること。 普及している通信プロトコルの設計では、これは理にかなっているかもしれません(簡単に拡張できるようにすることを目標としています)が、HTML / CSSへのアプリケーションは完全に失敗し、各ブラウザが独自のサイレント調整を実装していると常に考えていました検出/動作。複数のブラウザで一貫したレンダリングを取得することはほぼ不可能です。 ただし、TCPプロトコルのRFCでは、特に明記されていない限り、「サイレント障害」を許容できると考えています。これは、控えめに言っても興味深い動作です。 ソフトウェアトレード全体でこの原則が適用されている他の例があります。開発者に噛み付いたために、頭の一番上から定期的に表示されます。 Javascriptセミコロン挿入 C(サイレント)組み込み変換(切り捨てられなかった場合はそれほど悪くないでしょう...) 「スマート」動作の実装を支援するツールがあります。 名前に一致する表音アルゴリズム(Double Metaphone) 文字列距離アルゴリズム(レーベンシュタイン距離) しかし、このアプローチは、技術に詳しくないユーザーを扱う場合やエラー回復のプロセスでユーザーを支援する場合には役立つかもしれませんが、ライブラリ/クラスインターフェースの設計に適用するといくつかの欠点があることがわかります。 アルゴリズムが「正しい」と推測するかどうかはやや主観的であるため、最小驚きの原則に反する可能性があります。 実装がより難しくなり、バグを導入する機会が増えます(YAGNIの違反?) 「推測」ルーチンを変更すると古いプログラムが破損する可能性があり、リファクタリングの可能性をほぼ最初から除外するため、動作が変更されやすくなります。 そして、これが私を次の質問へと導いたものです。 インターフェイス(ライブラリ、クラス、メッセージ)を設計するとき、堅牢性の原則に傾いていますか? 私自身は非常に厳しい傾向があり、インターフェイスで広範な入力検証を使用しています。
45 design 

20
個人プロジェクトのバグをどのように追跡しますか?[閉まっている]
自社開発プロジェクトの欠陥追跡プロセスを再評価する必要があるかどうかを判断しようとしています。過去数年間、TODOコード内のタグを使用して欠陥を実際に追跡し、特定のビューでそれらを追跡しています(適切なタグ付けシステムを備えたEclipseを使用しています)。 残念ながら、私はこのシステムが持続不可能かどうか疑問に思っています。私が見つけた欠陥は通常、私が取り組んでいるコードの断片に関連しています。すぐに理解されないバグは忘れられるか、無視される傾向があります。私は妻のために、ほぼ9か月間重大な欠陥があったアプリケーションを作成しましたが、修正するのを忘れ続けています。 個人的なプロジェクトの欠陥を追跡するためにどのようなメカニズムを使用していますか?特定のシステム、またはそれらに優先順位を付けて管理するプロセスがありますか?

11
データベースレイヤーにアプリケーションロジックを配置することに対する、またはそれに対する議論は何ですか?[閉まっている]
ほとんどのソフトウェア開発者は、アプリケーションロジックをアプリケーションレイヤーに保持することを望んでおり、おそらくここに保持するのが自然であると感じるでしょう。データベース開発者は、トリガーおよびストアドプロシージャとして、アプリケーションロジックをデータベース層に配置したいと考えているようです。 個人的には、アプリケーション層にできるだけ多くの層を残して、層のデバッグを容易にし、層の責任を分離しておくことを好みます。 これについてどう思われますか。また、データベースレイヤーに実装しても問題ない、またはすべきでないものは何ですか? 編集この質問は、DBAの観点からdba.seでもカバーされています。Programmers.seとdba.seの対象者とバイアスは異なるため、将来の読者は、自分に最適なものを決定する前に両方の回答を確認することをお勧めします。

2
役割ベースのアクセス許可ベースのアクセス制御
私は、アクセス制御(認可)に関して、ロールとパーミッションの固有のトレードオフを理解しようとしています。 与えられたものから始めましょう:私たちのシステムでは、パーミッションはきめ細かいアクセス単位です(「リソースXの編集」、「ダッシュボードページへのアクセス」など)。役割は 1+権限のコレクションになります。ユーザーは 1+役割を持つことができます。これらの関係(ユーザー、ロール、権限)はすべてデータベースに保存され、必要に応じてその場で変更できます。 私の懸念: (1)アクセス制御のためにロールをチェックすることの「悪い」ところは何ですか?代わりにアクセス許可を確認することでどのような利点が得られますか?言い換えると、これらの2つのスニペットの違いは次のとおりです。 if(SecurityUtils.hasRole(user)) { // Grant them access to a feature } // vs. if(SecurityUtils.hasPermission(user)) { // Grant them access to a feature } そして: (2)このシナリオでは、ロールはどのような有用な価値を提供しますか?1つ以上のアクセス許可をユーザーに直接割り当てることはできませんか?ロールはどのような抽象化の具体的な価値を提供しますか(特定の例を挙げられますか)?

8
例外オブジェクトをスローする代わりに返す正当な理由はありますか?
この質問は、例外処理をサポートするオブジェクト指向プログラミング言語に適用されることを意図しています。説明目的でのみC#を使用しています。 通常、例外は、コードがすぐに処理できない問題が発生したときに発生catchし、別の場所(通常は外部スタックフレーム)の句でキャッチされることを目的としています。 Q:例外がスローおよびキャッチされず、メソッドから単純に返され、エラーオブジェクトとして渡される正当な状況はありますか? この質問は、.NET 4のSystem.IObserver<T>.OnErrorメソッドが次のことを示唆しているために思いつきました。例外はエラーオブジェクトとして渡されます。 別のシナリオ、検証を見てみましょう。私が従来の知恵に従っているとしましょう。したがって、エラーオブジェクトタイプIValidationErrorと、ValidationException予期しないエラーの報告に使用される別の例外タイプを区別しています。 partial interface IValidationError { } abstract partial class ValidationException : System.Exception { public abstract IValidationError[] ValidationErrors { get; } } (System.Component.DataAnnotations名前空間は非常に似たようなことをします。) これらのタイプは次のように使用できます。 partial interface IFoo { } // an immutable type partial interface IFooBuilder // mutable counterpart to prepare instances of above type { …

8
locごとのバグの平均数は、異なるプログラミング言語で同じですか?[閉まっている]
コード行ごとのバグ/欠陥の平均数は、さまざまなプログラミング言語で「一定」であると言われています。Rubyの10 KLOCには、c ++の10 KLOCと同じ数のバグがあります。同じ機能を記述する行の数が少なくなるため、引数は通常、表現力のある言語の使用を促進するために使用されます(python / ruby​​ over c ++ / assemblyなど)。 誰がこの主張がどこから来たのか知っていますか?高レベルの言語はバグの減少につながりますか?

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