ソフトウェア工学

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

10
単一責任原則を新しいコードに適用できますか/適用すべきですか?
原則は変更する1つの理由があるモジュールとして定義されます。私の質問は、確かにこれらの変更理由は、コードが実際に変更を開始するまでわからないということですか?ほとんどすべてのコードには、変更される可能性がある多くの理由がありますが、これらすべてを確実に予測し、これを念頭に置いてコードを設計しようとすると、非常に貧弱なコードになります。コードを変更する要求が入り始めたときにのみ、SRPの適用を実際に開始することをお勧めしますか?より具体的には、1つのコードが複数の理由で複数回変更された場合に、変更する理由が複数あることを証明します。変更の理由を推測しようとすると、非常に反アジャイルに聞こえます。 例は、ドキュメントを印刷するコードです。それをPDFに印刷するように変更する要求が来てから、ドキュメントにいくつかの異なるフォーマットを適用するように変更するために2番目の要求が行われます。この時点で、変更する理由(およびSRP違反)が複数あることを示す証拠があり、適切なリファクタリングを行う必要があります。

10
アーキテクトは自己組織化スクラムチームとどのように連携できますか?
多数のアジャイルスクラムチームを持つ組織には、「エンタープライズアーキテクト」として任命された少数の人々のグループもいます。EAグループは、品質と意思決定の遵守のためのコントロールおよびゲートキーパーとして機能します。これにより、チームの決定とEAの決定が重複します。 たとえば、チームはライブラリXを使用するか、SOAPの代わりにRESTを使用する場合がありますが、EAはそれを承認しません。 現在、これはチームの決定が却下された場合にフラストレーションにつながる可能性があります。十分に考えれば、EAの人々がすべての力を「つかむ」可能性があり、チームはやる気がなく、あまり機敏ではないという感じになります。 スクラムガイドこれはそれについて言いたいことがあります。 自己組織化:開発チームに、製品バックログをリリース可能な機能の増分に変換する方法を教えてくれる人はいません(スクラムマスターでさえも)。 それは合理的ですか?EAチームは解散すべきですか?チームは拒否するべきですか、それとも単に従うべきですか?

9
エラー処理-プログラムがエラーで失敗するか、黙って無視するか
ネットワーク経由でMIDIを送信するための簡単な小さなプログラムを書いています。私は、プログラムが伝送の問題や予測できない他の例外状況に遭遇することを知っています。 例外処理については、2つのアプローチがあります。次のようにプログラムを作成する必要があります。 何かがうまくいかないときは強打で失敗する か、 データの整合性を犠牲にして、エラーを無視して続行する必要がありますか? ユーザーはどのアプローチを合理的に期待しますか? 例外を処理するより良い方法はありますか? さらに、例外の処理に関する私の決定は、ネットワーク接続を処理しているかどうか(つまり、問題が発生することが合理的に予想できるもの)に影響されるべきですか?

12
ローカル変数(employeeCount、firstNameなど)の最初の単語に小文字を使用する理由は何ですか
すべての変数に適切な大文字小文字を使用しているため、他のプログラマーから多くの批判を受けています。たとえば、典型的なプログラマーはemployeeCount変数名に使用しEmployeeCountますが、私はを使用します。voidメソッド、returnメソッド、変数、プロパティ、定数など、すべてに適切な大文字小文字を使用します。Javascriptでもこの規則に従います。最後の1つは、人々のジミーを本当に擦ります。 この「非標準」の大文字と小文字の規則に従わない理由として挙げられる典型的な理由は、プロパティとvoidメソッドのために完全な適切なケースを予約する必要があるためです。値を返すローカル変数とメソッドには、のような小文字の最初の単語が必要int employeeCount = getEmployeeCount()です。 しかし、その理由はわかりません。 これに疑問を投げかけると、それが標準であるというarbitrary意的な答えを得るだけのようですです。答えが何であれ、それは通常、次のように常に要約されます。それに従うだけです。。任意の答えは決して私にとって十分ではありません。 Excel 97マクロをOffice IDEでプログラミングした初期の頃から、何かがローカル変数またはプロパティであるかどうかを判断するための大文字と小文字の規則は必要ありませんでした。これは、非常に直感的な命名規則を常に使用してきたためです。たとえば、GetNuggetCount()どこかに移動してすべてのナゲットのカウントを取得する方法を明確に提案しています。 SetNuggetCount(x)ナゲットのカウントに新しい値を割り当てることをお勧めします。 NuggetCountすべて単独で、単に値を保持しているプロパティまたはローカル変数を提案します。最後に、「ああ、それが問題だ。財産か変数か、それはどっち?」と言いたくなるかもしれません。それに対して、「本当に重要なのか?」と返信します。 tl; dr ;:変数または戻りメソッドの最初の単語に小文字を使用する客観的、論理的、非任意の理由は何ですか? 編集: MainMaの場合 このコードを回答の最初のコードサンプルに置き換えて、引数がどの程度維持されるかを確認します。 public void ComputeMetrics() { const int MaxSnapshots = 20; var Snapshots = this.LiveMeasurements.IsEnabled ? this.GrabSnapshots(MaxSnapshots, this.cache) : this.LoadFromMemoryStorage(); if (!Snapshots.Any()) { this.Report(LogMessage.SnapshotsAreEmpty); return; } var MeasurementCount = Measurements.Count(); this.Chart.Initialize((count + 1) * …

3
推定手法としてのPlanning Pokerの有効性に関する研究は行われましたか?
ポーカーを計画することでプロジェクトの見積もりの​​精度が向上するというのが一般的な意見ですが(この質問でその小さなサンプルが実証されています)、このテーマに関して明確な研究が行われていますか? 具体的には、ポーカーのプランニングが従来の推定手法よりも改善されることを示す非状況情報を探しています。

3
haskellには依存型がありますか?
Haskellには別の型よりも型をパラメーター化する機能が既にあることは知っています(C ++のテンプレートプログラミングに似ています)が、Haskellは値に対して型をパラメーター化することもできますか?依存型では、サイズnのベクトル、サイズn×mの行列など、整数でパラメータ化された型を使用できます。 そうでない場合は、なぜですか?また、将来サポートされる可能性はありますか?
20 haskell 

6
コードを書いて報酬を得るが、「プログラマーコンピテンシーマトリックス」のスコアが低い人は、別の種類の仕事を見つけるという倫理的な義務を負っていますか?[閉まっている]
閉じた。この質問は意見に基づいています。現在、回答を受け付けていません。 この質問を改善したいですか?この投稿を編集して事実と引用で答えられるように質問を更新してください。 5年前に閉鎖されました。 人々は「あなたが得意なことをしている仕事を見つける」ことを勧めますが、真実は、私がコードを書くこと以外には何も得意ではないと信じているということです。ただし、プログラムを設計または構成できるとは思いません。 誤解しないでください、私はフィズバズプログラムを書くことができないようなプログラマーではありません。私は、仕事を成し遂げる以外に何もできないプログラマーのようなものです。私が「最低限必要なことをする」という態度を持っているわけではありません。プログラマーとしての自分の限界を痛感しています。 たとえば、クイックソートアルゴリズムの実装は、暗記に頼ることによってのみ行うことができます(つまり、1日のかなりの部分を費やしてアルゴリズム全体をメモリにコミットしようとする動機を見つけた場合) 「うーん、わかりました、それは理にかなっています、ロジックを見ることができます...」)。 アプリケーションの構築と設計に関しては、私も無力だと感じています。私は最初は正しい答えを見ることができないので、10回のうち9回は後悔していると判断するだけです。 私はまだ同僚から仕事の昇進と賞賛を得ることができているので、他の人が必ずしも私の意見を共有しているわけではありません。客観的に言えば、私は単に「平均より少し上」のプログラマー以上のものを現実的に目指す学習能力も脳力も持っていません。 私は自分がより良い資格を持っている別の役割を見つけられないとかなり確信していても、より才能のある人々のための部屋を作り、自分に別の種類の仕事を見つける倫理的な義務があるのか​​疑問に思います。私の質問は、「平均的なプログラマーはチームに所属していますか?」です。
20 skills  ethics 

3
関数型プログラミングで効率を改善する方法は?
私は最近、Learn You a Haskell for Great Goodガイドを読んでいますが、練習として、それを使ってProject Euler Problem 5を解決したかったです。 1から20までのすべての数値で均等に割り切れる最小の正の数値は何ですか? 最初に、特定の数がこれらの数で割り切れるかどうかを判断する関数を作成することにしました。 divisable x = all (\y -> x `mod` y == 0)[1..20] 次に、以下を使用して最小のものを計算しましたhead: sm = head [x | x <- [1..], divisable x] そして最後に、結果を表示する行を書きました: main = putStrLn $ show $ sm 残念ながら、これを完了するには約30秒かかりました。同じことを1〜10の数字で実行すると、すぐに結果が得られますが、その場合も1〜20の場合の結果よりもはるかに小さくなります。 Cで以前に解決し、1〜20の結果もほぼ瞬時に計算されました。これにより、この問題をHaskellで解釈する方法を誤解していると思うようになります。私は他の人の解決策に目を通し、これを見つけました: main = putStrLn $ show $ …
20 haskell 

3
ソース管理が発明されたのはいつですか?
私は多くのバージョン管理システムを知っています:CVS、SVN、TFSなど... 私は最初の「リビジョン管理/バージョン管理システム」をグーグルで調べましたが、さまざまな矛盾する答えがありました。 ソース管理が発明されたのはいつですか?誰が発明したのですか?それは何と呼ばれていましたか?

1
C ++ 11のautoキーワードの動機と落とし穴(?)
私は最近auto、C ++ 11で、コンパイラが型を推測する必要のある変数をマークするためにキーワードを選択した理由を疑問に思いました。 auto x = 1; 以来 var 他のプログラミング言語(C#、Scala、JavaScriptなど)でより一般的なようです。 autoブレークの下位互換性の新しいセマンティクスを理解している限り(これはめったに使用されませんでしたが、C ++の以前のリビジョンでは異なる意味を持ちました。たとえばここを参照) 選択する特別な理由があるかどうかauto(var他のキーワードが有利かどうか)を尋ねたかったのです。C ++ 11標準がリリースされる前に、この問題について具体的な議論はありましたか? また、レガシーC ++コードをC ++ 11コンパイラで再コンパイルするときに注意すべき非互換性はありますか?

2
Yコンビネーターとテールコールの最適化
F#のYコンビネーターの定義は let rec y f x = f (y f) x fは、最初の引数として、再帰的サブ問題の継続を期待しています。yfを継続として使用すると、fが次の呼び出しに適用され、開発できることがわかります。 let y f x = f (y f) x = f (f (y f)) x = f (f (f (y f))) x etc... 問題は、先験的に、このスキームがテールコールの最適化を使用できないことです。実際、fで保留中の操作がある可能性があります。その場合、fに関連付けられたローカルスタックフレームを変更できません。 そう : 一方では、Yコンビネータを使用するには、関数自体とは明示的に異なる継続が必要です。 TCOを適用する必要がある場合は、fで保留中の操作はなく、f自体のみを呼び出します。 これら2つを調整する方法を知っていますか?アキュムレータトリックを使用したYや、CPSトリックを使用したYなど?それともそれができる方法がないことを証明する議論?

3
データで微妙な関係を表現するにはどうすればよいですか?
「A」は「B」および「C」に関連しています。このコンテキストによって、「B」と「C」が関連している可能性があることをどのように示しますか? 例: 最近のブロードウェイのプレイに関するいくつかの見出しがあります。 アル・パチーノ主演のデビッド・マメットのグレンガリー・グレン・ロスがブロードウェイにオープン 「グレンガリーグレンロス」のアルパチーノ:批評家はどう思いましたか? アル・パチーノがブロードウェイのターンで不振のレビューを獲得 劇場レビュー:グレンガリーグレンロスはそのスターを激しく売っています グレンガリーグレンロス; ねえ、誰がKlieg Lightsを殺したの? 問題: これらのレコードに対してファジー文字列一致を実行すると、人間の読者がより大きなデータセットのコンテキストからそれらを選択できたとしても、いくつかの関係が確立されますが、他の関係は確立されません。 #3が#4に関連していることを示唆する関係を見つけるにはどうすればよいですか?どちらも#1に簡単に接続できますが、相互には接続できません。 この種のデータまたは構造に(Googlable)名前はありますか?どのようなアルゴリズムを探していますか? ゴール: 千の見出し、自動的にこれらの5つの項目がすべてであることを示唆しているシステムを考えると、おそらく同じことについて。 正直に言うと、プログラムを作成してから長い時間が経ち、この問題を適切に表現する方法に途方に暮れています。(それが理にかなっている場合、私は知らないことを知りません)。 これは個人的なプロジェクトであり、私はPythonで書いています。ヘルプ、アドバイス、およびポインタを事前に感謝します!

5
最新のライブラリがOOPを使用しない理由
私は初心者レベルのC ++プログラマですが、言語の概念はかなりよく理解しています。SDLやOpenGLなどの外部C ++ライブラリを学習し始めたとき、驚いたことに、C ++の概念をまったく使用していないことがわかりました。 たとえば、SDLもOpenGLもクラスや例外を使用せず、関数とエラーコードを優先します。OpenGLでは、glVertex2fのような関数を見てきました。これは、入力として2つのfloat変数を取り、おそらくテンプレートとしてはより良いでしょう。さらに、これらのライブラリは時々marcosを使用しますが、マクロの使用が悪いことは一般的な合意のようです。 全体として、C ++スタイルよりもCスタイルで記述されているようです。しかし、それらはまったく互換性のない言語ですよね? 問題は、なぜ現代のライブラリは、それが書かれている言語の利点を使用しないのかということです。

4
オープンソースライブラリ、プロジェクト所有者はライセンスをより制限的に変更できますか?
ある会社が、オープンソースのMITライセンスでライブラリをリリースしました。 彼らが望むなら、ライバルがそれを使用できないように、彼らはライセンスを非常に制限するように変更することができましたか? これは以前のバージョンにどのような影響がありますか? 11月1日に他のライセンスに対して非常に制限されている場合、11月1日より前のすべてのバージョンはまだMITにありますか?

4
クライアントがとにかくそれを利用するのに十分に進歩していないとき、REST APIの「発見可能性」の必要性は何ですか?
私が見たさまざまな講演やRESTでスキャンしたチュートリアルは、「発見可能性」と呼ばれるものを強調しているようです。私の限られた理解では、この用語は、クライアントがアクセスできることを意味するようですhttp://URL-できることのリストを自動的に取得します。 私が理解できないのは、「ソフトウェアクライアント」は人間ではないということです。これらは、提供されたリンクをどうするかを正確に理解するための直感的な知識を持たない単なるプログラムです。Webサイトにアクセスして、表示されたテキストとリンクを理解し、それに基づいて行動できるのは人々だけです。 クライアントの人間の開発者が提示されたリソースを実際に実験しない限り、そのような発見可能なURLにアクセスするクライアントコードが実際に何もできないとき、発見可能性のポイントは何ですか?これは、ドキュメンテーションマニュアルで利用可能な機能のセットを定義するのとまったく同じように見えますが、異なる方向からだけで、実際には開発者のためにより多くの作業を伴います。なぜ、実際のRESTリソースの外部のドキュメントで実行できることを事前定義するこの2番目のアプローチが劣っていると考えられますか?
20 rest  api  hateoas 

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