ソフトウェア工学

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

2
NHibernateでリポジトリパターンが必要なのはなぜですか?
私はあなたの最初のNHibernateベースの公式アプリケーションを読んでいます。 チュートリアルはわかりやすくてわかりやすいですが、Repositoryパターンを使用する理由を知りたいと思います。 様々でAdd、Update、RemoveのメソッドProductRepositoryの実装は、コードはほとんど同じである-彼らはすべてのトランザクションを使用している、との違いは、「肉」、すなわちコールであるsession.Saveint型Add、メソッドsession.Deleteにremove方法。(ページはHTMLのアンカーを欠いていますが、のような関連するコードのページを検索することができpublic void Remove、public void Add) そのコードは「間違っていると感じる」だけです。 作者がリポジトリパターンを使用しているのはなぜですか-NHibernateを使用するためのデモンストレーションのためだけなのか、それとも必要なのか、またはその他の理由がありますか? 追伸 私のバックグラウンドはActiveRecordを使用したRuby on Railsからのものですので、NHibernateがどのように機能するか、またはどのように使用されるかを理解しようとしています。
13 c#  .net  nhibernate 

2
intellijがコードを自動フォーマットする方法をどのように変更しますか?[閉まっている]
閉まっている。この質問はトピック外です。現在、回答を受け付けていません。 この質問を改善したいですか? 質問を更新して、 Software Engineering Stack Exchangeのトピックになるようにします。 4年前に閉鎖されました。 IntelliJはJavascriptコードを使用して奇妙なフォーマットを実行します。この方法でフォーマットを停止する方法を見つけようとしています。jQuery関数をつなげると、次のような自動作成コードがインデントされます。 $('#something').focus(function() { /* Do some stuff */ }).blur(function() { /* this is where the cursor and closing braces end up */ }) 私はそれを次のように見せたいです: $('#something').focus(function() { /* Do some stuff */ }).blur(function() { /* cursor and closing braces indented normally */ }); …

2
技術的な「ドグマティズム」の扱い方
私は仕事を辞めて(他の国に移動するために)JavascriptとHaskell(いくつかのpython)でプログラミングすることがほとんどでした。人々は客観的で、ポジティブで、数学的でありながら、たくさんのことを成し遂げたので、私はそれが本当に好きでした。これは本当にプロフェッショナルなショップでした。 現在、私はAgile / XPショップで働いています。これは良いことですが、テクノロジーとライブラリーの選択に関しては、私たちはプロではないかもしれません。ソフトウェアを書くための私たちのアプローチは少し未熟で構造化されていないように感じます。私は私が提供された本を読もうとしていますが、彼らはこのスタイルを奨励しているようです(ugh)。多くの場合、Gitハブからライブラリを選択して、レビューなしで使用します。 たとえ一人の小さな仕事であっても、常に誰かと仕事をすることを強いられます。些細な反例によってルールを破ることができる場合でも、すべてに対して少し「速い」ルールがあるようです(その反例をあげるのを間違えて、口頭で攻撃されました)。これは州では普通ですか?この独断をどのように処理しますか?
13 ruby  haskell  agile 

7
設計文書には、特定の設計に対する賛否両論の議論を含めるべきですか、それとも事実と理論的根拠に焦点を当てるべきですか?
私は現在、設計ドキュメントを更新して、将来の開発者向けに正しく最新のものにするためのプロセスを進めています。 現在、ドキュメントは事実のみに焦点を当てており、設計がどのようになっているかを示しています。提示された決定の根拠はありません。理論的根拠を把握することが重要だと思います。そうすることで、開発者は何かがそうである理由を知ることができます。すべての設計上の決定、特にプロジェクトに取りかかる前に下した決定に関するすべての理論的根拠を追加することはできませんが、この部門でできることをやっています。 ただし、いくつかの設計上の決定は、プロジェクトの要件を考えると、敬意を表して非常に貧弱な決定です。ただし、良いものもいくつかあります。 私の最初の考えは、将来のメンテナーの注意を集めるために、設計上の問題と潜在的な解決策またはこれらの問題の回避策についての議論を含めるべきだということでしたが、設計文書がこの種の議論と情報の場所であるかどうかはわかりません。他の人がこのシステムで作業し、ドキュメントを更新するので、デザインの「批評」が「このデザインを新しいものに引き裂く」ように雪だるまして欲しくありません。これは明らかに不適切です。 私のマネージャーがどちらの決定も支持するので、それは私次第です。私が取るアプローチに関係なく、作成されたドキュメントは公式にバージョン管理され、通常は開発作業を任される前にシステムで作業する開発者に提供されます。新しい開発者は、開発作業を開始する前に、特定のソフトウェアシステムに関連するドキュメントに慣れることが期待されています。 質問: 設計文書が未加工の事実(「これが設計」)と論理的根拠(「これが設計である理由」)に固執するか、設計上の問題となる可能性のある欠陥のない問題を指摘するために使用されるべきか将来の開発者? 設計ドキュメントを使用してこの情報をキャプチャする必要がない場合、どのタイプのドキュメントでそれをキャプチャする必要があり、その他は設計合理性、トレードオフ、および既知の問題(欠陥ではないため、欠陥を追跡するための議論)でキャプチャする必要があります他のツールを使用していますか?)

3
SOLID原則の適用
私は、SOLIDの設計原則にまったく慣れていません。私はそれらの原因と利点を理解していますが、SOLID原則を使用するための実践的な演習としてリファクタリングしたい小規模なプロジェクトにそれらを適用できません。完全に機能するアプリケーションを変更する必要はありませんが、とにかくそれをリファクタリングして、将来のプロジェクトの設計経験を積みたいと思います。 アプリケーションには次のタスクがあります(実際にはそれ以上のことですが、簡単にしましょう):データベーステーブル/列/ビューなどの定義を含むXMLファイルを読み取り、作成するために使用できるSQLファイルを作成する必要がありますORACLEデータベーススキーマ。 (注:なぜそれが必要なのか、なぜXSLTを使用しないのかなどについて議論することは控えてください。理由はありますが、トピックから外れています。) はじめに、テーブルと制約のみを見ることにしました。列を無視する場合、次のように記述できます。 制約はテーブルの一部(より正確にはCREATE TABLEステートメントの一部)であり、制約は別のテーブルを参照する場合もあります。 最初に、アプリケーションがどのように見えるかを説明します(SOLIDを適用しない): 現時点では、アプリケーションには、テーブルが所有する制約へのポインターのリストと、このテーブルを参照する制約へのポインターのリストを含む「テーブル」クラスがあります。接続が確立されるたびに、逆方向の接続も確立されます。このテーブルには、各制約のcreateStatement()関数を順に呼び出すcreateStatement()メソッドがあります。このメソッド自体は、名前を取得するために所有者テーブルと参照先テーブルへの接続を使用します。 明らかに、これはSOLIDにはまったく適用されません。たとえば、循環的な依存関係があり、必要な「追加」/「削除」メソッドといくつかの大きなオブジェクトデストラクタに関してコードが肥大化しました。 そのため、いくつか質問があります。 依存性注入を使用して循環依存関係を解決する必要がありますか?もしそうなら、Constraintはそのコンストラクタで所有者(およびオプションで参照される)テーブルを受け取るべきだと思います。しかし、単一のテーブルの制約のリストをどのように実行できますか? Tableクラスが自身の状態(テーブル名、テーブルコメントなど)とConstraintsへのリンクの両方を保存する場合、これらの1つまたは2つの「責任」は、単一責任の原則と考えられますか? ケース2.が正しい場合、リンクを管理する論理ビジネスレイヤーに新しいクラスを作成するだけですか?その場合、1は明らかに関連しなくなります。 「createStatement」メソッドは、Table / Constraintクラスの一部である必要がありますか、それともそれらを移動する必要がありますか?もしそうなら、どこへ?各データストレージクラス(つまり、テーブル、制約など)ごとに1つのマネージャークラスですか?または、リンクごとにマネージャークラスを作成します(3と同様)。 これらの質問に答えようとするたびに、どこかで輪になって走っています。 列やインデックスなどを含めると、問題は明らかにはるかに複雑になりますが、単純なテーブル/制約のことで手伝ってくれれば、残りは自分で解決できるかもしれません。

3
不良コードのコストを計算する
私は経営陣にリファクタリングへの努力を投資するよう説得するための議論を探しています。 Jiraを使用して作業を記録し、すべてのsvn-commitをjira呼び出しに関連付けます。 私のアイデアは次のことです。 実装が非常に悪いが頻繁に使用されるコードの領域を手動で見つけます。User-POVとDeveloper-POVの両方(バグ修正) JIRA-Issuesを含むsvn-commitsを取得します いくつかの基準(問題の種類、バージョン、優先順位など)に従って問題をフィルタリングします。 これらのバグに費やされた時間/努力を計算する リファクタリングの労力とリスクを推定する 数字を提示し、それを修正する努力を求めます。 これについてどう思いますか?そのような測定は有用であり、説得力があるでしょうか?長所と短所は何ですか?

9
アーキテクトの役割にとってJava認定は重要ですか?[閉まっている]
閉まっている。この質問はトピック外です。現在、回答を受け付けていません。 この質問を改善したいですか? 質問を更新して、 Software Engineering Stack Exchangeのトピックになるようにします。 4年前に閉鎖されました。 アーキテクトの地位にとってJava認定(SCJP、SCWCDなど)がどれだけ重要かを知りたい。Java開発の良い経験があり、アーキテクトレベルでのキャリアを追求したい人は、CVの認定が必要だと思いますか。彼が主任開発者の役割で働いたことがない場合はどうなりますか? あなたが建築家の地位のために私のインタビューを行っている場合。そして、私は5年間の経験を持つさまざまなチームでJava Web開発者として働いてきました。決してリードしないでください。そして、私は履歴書に認定バッジを持っています。 開発者は、チームでアーキテクトになるためのキャリアパスをどのように作成できますか?

5
学習体験のための新しいスクリプト言語を作成しますか?[閉まっている]
閉じた。この質問は意見に基づいています。現在、回答を受け付けていません。 この質問を改善したいですか?この投稿を編集して事実と引用で答えられるように質問を更新してください。 4年前に閉鎖されました。 私自身の個人的な学習経験のためにスクリプト言語を作成する価値はありますか? 私が尋ねる理由は、すでに非常に多くのプログラミング言語が利用可能であることです。私は、良い学習体験を提供する以外に、私の実際の使用は決してないことを知っています。ただし、スクリプト言語を学習体験として作成しようとすることには欠点があります。より「生産性の高い」何かをするためには多くの時間と労力が必要になります。 プログラミング言語(その目的、構文、哲学、インタープリターなどのドラフトの作成を含む)を作成することは、時間、労力、および学習経験に値するでしょうか?それとも、もっと恩恵を受けることができる他のプロジェクトはありますか?

4
例外処理は分野横断的な懸念事項ですか?
例外処理とログ記録の両方の懸念は、どちらも横断的な関心事であるという点で、ほとんど違いは見られません。どう思いますか?メソッドが実装しているコアロジックとインターリーブするのではなく、単独で個別に処理すべきではありませんか? 編集:私が言いたいことは、私の意見では、メソッドの実装には実行の成功パスのロジックのみを含める必要があり、例外は他の場所で処理する必要があるということです。これは、チェック済み/未チェックの例外に関するものではありません。 たとえば、言語は次のような構造を使用して、完全にチェックされた方法で例外を処理します。 class FileReader { public String readFile(String path) { // implement the reading logic, avoid exception handling } } handler FileReader { handle String readFile(String path) { when (IOException joe) { // somehow access the FileInputStram and close it } } } 上記の概念言語では、クラスのreadFileが例外をスローしていないため、FileReader handlerがない場合、プログラムはコンパイルされません。そのため、ハンドラーを宣言することで、コンパイラーはハンドラーが処理され、プログラムがコンパイルされることを確認できます。FileReader FileReader このようにして、チェック済みおよび未チェックの例外問題の両方の長所、つまり堅牢性と可読性が得られます。

8
Web開発のためのCLとPythonの選択
私はJavaのバックグラウンドから来ており、Paul Grahamによるこの小さなエッセイを読んだ後、仕事をスピードアップするために新しい言語、つまりCommon Lispを採用することを考え始めました(私はWeb開発者です)。 現在、ペットプロジェクトを書いていますが、将来のビジネスプランがいくつかあります。ポールはエッセイで「秘密兵器」としてLISPについて語っています。この声明が10年後に真実かどうかはわかりませんが、つま先をすてきなCLチュートリアルに浸したところ、LISPがWeb開発に優れているようです。 また、PaulはPythonを、私が実際によく知っている素晴らしい選択肢として言及しています。私の質問は、将来のWebプロジェクトのためにどれを選ぶべきですか? 私が考えていたこと: デスクトップアプリケーションを開発するつもりはないので、好きな言語を選択できます。 pythonは非常に大きなコミュニティを持っているようですので、lispと比べてより多くのライブラリ/フレームワークがあります lispには他のどこにも見つからない機能(マクロなど)があることがわかりました 私はほとんど単独で、または他の1-2人のプログラマーと仕事をしていますが、Lispの知識を持つ人を見つけるのは難しい場合があります それで、あなたはどう思いますか?

7
Delphi XE2はプラットフォーム間でどのように機能しますか?[閉まっている]
閉まっている。この質問はトピック外です。現在、回答を受け付けていません。 この質問を改善したいですか? 質問を更新して、 Software Engineering Stack Exchangeのトピックになるようにします。 4年前に閉鎖されました。 だから私はDelphi XE2について少し読んでいて、おそらくワールドツアーに行くでしょう今月中にシカゴで、誰も答えられない場合はこの質問。 私が疑問に思うのは、私のDelphiコードがMacでどのように実行されるのかということです。プログラムを実行するために、他に何かを実行する必要がありますか(仮想マシンなど)。

3
ROT13はどこで使用しますか?
vimのドキュメントを読んでいて、ショートカットがあることに気付きました。たとえば、g?wROT13を使用して次の単語を変換します。また、PythonファイルのエンコーディングをROT13に変更できることも知っています。 ここに私の質問があります:なぜですか?Django FUNserverのようないたずらプログラムを除けば、それほど有用ではないようです。
13 encryption 

9
C ++でのIBMアセンブラー+ COBOLの書き換え
私は1972年に書かれたレンタルシステムで実行されているレンタカー会社のレンタルエージェント/マネージャーとして働いています。ちょっとした背景として、このプログラムから毎日対処しなければならない狂気の短い例を以下に示します。 レンタルエージェントは、1つの画面での印刷がACTフィールドで「MXC」を使用することを覚えておく必要があります(すべてが短いコードに基づいています)。これは「MaXimum display on a Contract」を意味し、別の画面ではPR(PRint) ACTIONフィールドですが、いくつかの画面はPT(PrinTの場合)フィールドでYを使用し、さらに別の画面はPRT(PRinTの場合)フィールドでYを使用しますが、さらに別の画面ではユーザーがEnterキーを押す必要があります(ただし、文字、それは改行文字であるため、数字パッドで入力する必要があります)、F8、異なるが関連する画面には単にF8が必要です、一部の画面にはPRinT用のフィールドがありますが、実際にはフィールド何もせず、いくつかのプロンプトを通過した後、印刷が自動的に行われ、さらに多くの画面にPRINT Y / Nというラベルのフィールドがあります。これは、別の場所が既に書類を提出している業務ではデフォルトでYになり、別のディーラーが書類を必要とする業務ではNになります。 私はこれよりも良い仕事をすることができると決めたので、これを更新する決定を下す会社の人に連絡することにしました。最終的に、このプログラムを担当するITのVPに連絡します。私は彼から少し情報を入手し、私のレンタカー会社がIBMメインフレームアセンブラーで書かれたCOBOLを少し混ぜたレンタルプログラムを持っていることを知りました。とにかく彼に私の履歴書をメールしてください(何かが開いた場合)。 これは私の質問につながります。 最初は技術的です。将来、保守性を向上させるという考えで、アセンブリ言語よりも高いレベルの言語で書き直すことを考えています。私の経験分野はC ++なので、それは私にとって明らかな選択です。私は最近、私が話した人がチームが一生懸命働いたと言われているという記事を読んだので、プログラムを更新する簡単な方法を切に必要としています。 -桁のロケーションコード(4ではなく)と8桁の車番号(7ではなく)。更新に関する私の哲学は、このような悲惨な状況であっても、Joelの方針に沿っています:http : //www.joelonsoftware.com/articles/fog0000000069.html要するに、再書き込みは以前のすべてを捨てるのではなく、増分する必要があります新鮮に始めます。 IBMアセンブリをC ++と統合する簡単な方法はありますか?ある場合、どうすればよいですか?私はasmキーワードを漠然と認識していますが、それを使用するのが最適なのか、それとも何か他のことをするのが最適なのかわかりません。そのような計画はお勧めしませんか?私はg ++とGNU makeを使用してLinuxでほとんどの作業を行っているので、それに固有の回答は歓迎されますが、絶対に必要ではありません(どのようなビルドシステムがないのかわからないので、ほとんど何もありません)。 2番目の質問はより政治的です。切り替えを行う必要があることをこの会社に説得するにはどうすればよいですか?理論上のコスト削減は莫大です(私の見積もりによれば、会社はプログラムとやり取りする方法を学ぶためのトレーニングコストの増加だけで年間余分に数百万ドルを無駄にしています)が、私の提案された変更はおそらくすべての現在のプログラマーは、仮に彼らが制定されたとしても仕事を終えているので、変化に対する大きな構造的抵抗があります。 編集:会社が既に持っているものを変更する理由が、私にとって最良の解決策のように思える理由を説明しなければなりません。ただし、これはプログラムの怪物であるため、他の提案を受け入れています。プログラミングの仕事をしたことがないので、間違った分析を修正してください。 まず、既製のソリューションがあります。 この種のことについてのいくつかの中間レベルのマネージャーとの私の話から、新しいシステムに切り替えることの主な懸念の1つは、何十年も会社にいて、今までシステムに慣れている忠実な従業員の大多数です。持っているものを変更できる場合は、現在のインターフェイスを一種の「互換モード」に維持できます。ユーザーは既に現在のシステムを使用するためにログインする必要があるため、ユーザーが(この変更を行った後)初めてログインするときに設定をアクティブ化する機能を追加できます。 「クラシック」インターフェースまたは「新しい」インターフェース。それを可能にする既成のソリューションを見つける方法はありません。 私の会社も私たちが使用するソフトウェアを所有しています。私たちはそれをライセンスしません。これは、私が現在話している経営陣は、実際に私に変更を許可することができる人と同じであることを意味します。サードパーティのソリューションでは、使用する製品を開発した会社から必要な権利を確保することに加えて、会社から承認を得なければならないため、ハードルが追加されます。また、これは会社に「彼らの」製品をあきらめて他の製品を使用するよう説得することを必要とします。これは、私たちが持っているものを更新しようとするよりも大きなハードルのようです。 最後に、将来を見据えて、ユーザーインターフェイスを改善し、いくつかのバグを修正したいだけではありません。これらの「緊急」問題を更新した後、テクノロジーに関連する会社の基本的な方法を更新したいと考えていました。この種の問題に1〜2年費やした後、私の計画は経営陣に戻り、より劇的な変化を提案することでした。会社が運営している多くの方法がありますが、それらは現在使用していない技術によって根本的に改善される可能性があります。たとえば、各リージョンはほぼ同じように動作します。地元の主要空港は、自動車を配送する中心的なハブです。これらは主に必要に応じて送信されます。ただし、空港はすべての操作のホームベースとして使用されます。彼らは1台の車で2人を私の場所に送り、必要のない1台の車を私たちから受け取ります。その後、彼らが入った車と、彼らが取り戻しているもの(空港から32マイル)を持って空港に戻ります。その後、2台の車で5マイル離れた場所に到着し、1台を降ろしてから、もう1台の車で空港に戻ります。たとえ私たちが送り返した車が私たちの近くで必要な同じ種類の車であっても、彼らはこれを行います。私は約2年前から会社に勤めていますが、自動車不足の最も極端な緊急事態(これまで約3回)で、彼らがこれから逸脱しているように見えます。すべての地域で働く4人を、どの車がどこに行くかを決定する自動スケジューリングシステムに置き換え、必要な場所にすべての車を届けるために最短時間+マイル+ドライバーを必要とする経路を見つけようとしますより高いレベルの修正の例は、いつか追加したいと思っています。 ただし、これらすべてを提案することに不安を感じる前に、インターフェイスの更新などの小さなタスクを実行することで、会社とコードベースの足掛かりをつかむことが役立つと思います。アウトソーシングなどのソリューションは、この可能性を排除します。

7
アジャイルプロジェクトの資金調達
私が働いている会社は、一時的に多くの人に滝の「喜び」を経験したアジャイルプロジェクト管理戦略に向かっています。これの鍵は、厳しい納期を守ることとは対照的に、機能を提供することに重点を移すことです。 開発プロセスとクライアントの関係は、アジャイルを通じて培われた反復リリースによって確実に改善されましたが、プロジェクトの資金調達戦略に同じ理論的根拠を適用することはいくぶん困難になっています。クライアントは、アジャイルのような概念に慣れていないことが多く、「準備ができたら準備ができている」と彼らが考えるものに大きな懸念を表明しています。 アジャイルプロジェクトの資金調達に関する人々の考えや経験を聞きたい 編集: 私は、アジャイル手法の長所と短所を私に説明するように人々に求めているのではなく、アジャイルは「準備ができたら準備ができます」と同等であると信じていないことを強調したい、これはアジャイル開発プラクティスを提唱する際に私が携わったクライアント/ビジネス。 私が興味を持っているのは、ビジネスクライアント/関係に定着している「従来の」ウォーターフォール予算編成方法と、より進歩的な開発手法との対立を解決した経験と、その進化をサポートするために採用した予算戦略です。
13 agile 

10
就職活動の際に、求人に関する注意を引くもの[非公開]
現在のところ、この質問はQ&A形式には適していません。回答は事実、参考文献、または専門知識によってサポートされると予想されますが、この質問は議論、議論、世論調査、または広範な議論を求める可能性があります。この質問を改善し、場合によっては再開できると思われる場合は、ヘルプセンターをご覧ください。 8年前に閉鎖されました。 私が働いている小さな会社は現在、少数の優秀なプログラマーを探しています。求人情報をいくつかの場所に投稿し、ローカルユーザーグループの掲示板にアクセスしましたが、実際には何も返されていません。 開発者として、求人のどの要素があなたに反応させるでしょうか: 会社名(つまり、マイクロソフト、オラクル、または当社の業務ラインBAE、ボーイング、ロッキードマーティン)。 作業の種類(これは一種の明白なようですが、RORやJavaなどのようになります) 作業環境 使用されているコンピューター(MacBook PRO全員) 給与範囲 その他 雇用市場全体を考えると、履歴書さえも受け取れないと考えるのは少し難しいです。私たちはホットマーケット(DCエリア)にいますが、まだ少し難しいようです。
13 recruiting 

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