ソフトウェア工学

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

4
オープンソースプロジェクトの貢献によるコードを誰が正しく理解しているのでしょうか?
誰かが貢献するオープンソースプロジェクト(たとえばGPLライセンス)を開始する場合、プロジェクト全体のレベルで誰がこれらの貢献を所有しますか?新しいコードは元の作者の所有物になりますか、貢献者も作者になりますか? 進行中のプロジェクトに対する権利は誰にありますか?たとえば、2番目のライセンスでコードをリリースする権限を持つのは誰ですか?原作者のみ?寄稿者は個別にそれを行うこともできますか、または元の著者とすべての寄稿者と共同で決定を下す必要がありますか?

2
ファイル名の一部としてのバージョン番号
一部のソフトウェアには、ファイル名の一部としてバージョン番号が含まれていますが、他のソフトウェアには含まれていません。私は後者のタイプにもっと慣れており、それはより一般的だと思いますが、前者のタイプはjavascriptライブラリで時々見ます。たとえば、jQueryのファイル名はのjquery-2.1.0.js代わりに似ていますjquery.js。これらの種類のファイルを更新するたびに、これらのファイルを読み込む他のプログラムの場所を探し、それらが参照するファイル名を変更し、これらのライブラリの古いバージョンを手動で削除する必要があります。それは私にとって不便なので、ファイルの名前を変更してバージョン番号を除外し、ファイル名にバージョン番号を含めないようにします。 これらの数字は何らかのバージョン管理のためのものではないかと疑っていますが、いつどのように使用されるかは明確ではありません。 ファイル名にバージョン番号を含めることの長所と短所は何ですか? ソフトウェアまたは言語のどの領域がファイル名にバージョン番号を使用し、どの領域/言語が使用しないかについて事実上のコンセンサスはありますか?もしそうなら、その理由はありますか?

3
さまざまなAPIバージョンをサポートする方法
私はRest APIを書いていますが、さまざまなバージョンのサポートをどのように処理するのが最善か疑問に思っています。これにより、URIをV2またはV3として定義する方法を意味するのではなく、必要なコードを構成する方法を意味します。 同時に複数のバージョンをサポートします。V1&V2&V3 URIは同時に有効でなければなりません。一度にサポートされる量を制限するためにV4が来るとV1を廃止します。 可能な限りコードの重複を避ける 他のバージョンに影響を与えることなく、簡単な変更をバージョンに簡単に追加できます 取れるアプローチはほとんどないと思われます。 Gitを使用してバージョンを制御し、異なるバージョンのブランチを使用します(古いバージョンでは、基本的に新しい開発作業は行われません)。これは、最新バージョンのみがコードに含まれているため、コードの重複がないことを意味しますが、以前のバージョンは、廃止されるまで新しいバージョンのDBで動作する必要があります。 各バージョンが同じアプリケーションで処理され、完全に別個のコードパスを持つようにコードを複製しますが、これは多くの複製を意味します バージョン間で多くのコードを再利用しますが、1つのバージョンを変更すると以前のバージョンに影響を与える可能性が高くなるため、メンテナンスが難しくなります すべてのオプションには独自の問題があるように見えるため、この問題に対処するためのベストプラクティスはありますか?

4
4 + 1アーキテクチャビューモデルとUML間のマッピング
4 + 1アーキテクチャビューモデルがUMLにどのようにマッピングされるかについて、少し混乱しています。 ウィキペディアは次のマッピングを提供します。 論理ビュー:クラス図、コミュニケーション図、シーケンス図。 開発ビュー:コンポーネント図、パッケージ図 プロセスビュー:アクティビティ図 物理ビュー:展開図 シナリオ:ユースケース図 「オブジェクトライフサイクルコンセプトにおけるUMLシーケンス図の構造の役割」というペーパーは、次のマッピングを提供します。 論理ビュー(クラス図(CD)、オブジェクト図(OD)、シーケンス図(SD)、コラボレーション図(COD)、状態図図(SCD)、アクティビティ図(AD)) 開発ビュー(パッケージ図、コンポーネント図)、 プロセスビュー(ユースケース図、CD、OD、SD、COD、SCD、AD)、 物理ビュー(展開図)、および 上記の4つを組み合わせたユースケースビュー(ユースケース図、OD、SD、COD、SCD、AD)。 WebページUML 4 + 1 View Materialsは、次のマッピングを提示します。 最後に、ホワイトペーパー「UML 2で4 + 1ビューアーキテクチャを適用する」では、さらに別のマッピングを提供しています。 論理ビュークラス図、オブジェクト図、状態図、複合構造 プロセスビューシーケンス図、コミュニケーション図、アクティビティ図、タイミング図、相互作用概要図 開発ビューのコンポーネント図 物理ビュー展開図 ユースケースビュー、ユースケース図、アクティビティ図 さらに検索すると、他のマッピングも明らかになると確信しています。 通常、さまざまな人々が異なる視点を持っていますが、ここでなぜそうなのかわかりません。特に、各UML図は、特定の側面からシステムを説明しています。それで、例えば、なぜ「シーケンス図」はある著者によってシステムの「論理的見解」を記述すると見なされ、別の著者は「プロセス図」を記述すると見なされるのでしょうか? 混乱を明確にするのを手伝ってもらえますか?
15 architecture  uml  model  view 

5
リファクタリングするコードのテストを書くのはなぜですか?
私は巨大なレガシーコードクラスをリファクタリングしています。リファクタリング(私は推測する)はこれを支持します: レガシークラスのテストを書く クラスから一体をリファクタリングする 問題:クラスをリファクタリングしたら、ステップ1のテストを変更する必要があります。たとえば、以前は従来のメソッドにあったものが、代わりに別のクラスになる場合があります。1つの方法でしたが、現在はいくつかの方法である場合があります。レガシークラスの全体像が何か新しいものに抹消される可能性があるため、ステップ1で記述するテストはほとんど無効になります。本質的に、ステップ3を追加します。テストを大量に書き換えます。 リファクタリングの前にテストを書く目的は何ですか?それは自分自身のためにより多くの作品を作成する学術的な運動のように聞こえます。現在、このメソッドのテストを書いていますが、物事をテストする方法と、従来のメソッドがどのように機能するかについて詳しく学んでいます。レガシーコード自体を読むだけでこれを学ぶことができますが、テストを書くことは、その中に鼻をこすりつけることと、別のテストでこの一時的な知識を文書化することにほとんど似ています。したがって、この方法では、コードが何をしているのかを学ぶ以外にほとんど選択肢がありません。私はここで一時的なことを言いました。なぜなら、コードを完全にリファクタリングし、ドキュメントとテストのすべてがかなりの部分で無効になるためです。ただし、私の知識は残り、リファクタリングの新鮮さを保つことができます。 それがリファクタリングの前にテストを書く本当の理由ですか?コードをよりよく理解するのに役立ちますか?別の理由があります! 説明してください! 注意: この投稿があります:完全なリファクタリングの時間がないときにレガシーコードのテストを書くことは理にかなっていますか?しかし、「リファクタリングの前にテストを書く」と言いますが、「なぜ」とは言いません。

7
ほとんどが1つの正規表現で構成される大きな関数をリファクタリングする必要がありますか?[閉まっている]
閉じた。この質問は意見に基づいています。現在、回答を受け付けていません。 この質問を改善したいですか?この投稿を編集して事実と引用で答えられるように質問を更新してください。 5年前に閉鎖されました。 約100行にわたる関数を作成しました。それを聞いて、あなたはおそらく私に単一の責任について教えて、私にリファクタリングを促すように誘惑されるでしょう。これは私の本能でもありますが、問題は次のとおりです。関数は 1つのことを行います。複雑な文字列操作を実行し、関数の本体は主に1つの冗長な正規表現で構成され、文書化された多くの行に分割されます。正規表現を複数の関数に分割すると、実際に言語を切り替えているため、実際に読みやすさが失われ、正規表現が提供する一部の機能を利用できなくなるためです。ここに私の質問があります: 正規表現を使用した文字列操作に関しては、大きな関数本体は依然としてアンチパターンですか?名前付きキャプチャグループは、機能と非常に似た目的を果たしているようです。ところで、正規表現を通るすべてのフローのテストがあります。

1
チーム(OOプロジェクト)での作業はどのように機能しますか?[閉まっている]
閉じた。この質問はより集中する必要があります。現在、回答を受け付けていません。 この質問を改善したいですか?この投稿を編集するだけで1つの問題に焦点を当てるように質問を更新します。 5年前に閉鎖されました。 私はJavaで、非常にオブジェクト指向のスタイルで、自分でプログラミングしています。他のプログラマーと仕事をする機会がなかった(少なくとも私はプロではない)。 好奇心から、私は尋ねたいと思いました:プロジェクトでチームと働くことは、特にオブジェクト指向プロジェクトで働くとき、どのように働きますか? 分割タスクはどのように機能しますか?他のプログラマーが開発したものとうまく機能するものをどのように開発しますか? プログラマはいつ、どのように通信しますか? ありがとう

4
どちらを選択するか:XML属性またはサブノード?
データベースからXMLとしていくつかのデータをエクスポートしたい。たとえば、Personはage、nameおよびその他のプロパティを持つことができます。 XML形式を定義するには、2つの選択肢があります。 選択肢#1: <Persons> <Person> <Age>16</Age> <Name>Richard</Name> </Person> <Person> <Age>34</Age> <Name>Eric</Name> </Person> ... </Persons> 選択肢#2: <Persons> <Person Age="16" Name="Richard"/> <Person Age="34" Name="Eric"/> ... </Persons> それでは、サブノードまたは属性の定義の違いは何ですか?そして、それぞれの選択肢の利点は何ですか?
15 xml 

5
一部のチームメンバーは、スプリント計画に積極的に参加していません
一部のチームメンバーは、作業する可能性が最も高いストーリーが議論されるまで待ってから参加します。それ以外の場合、彼らは自分の携帯電話で遊ぶだけで、耳を傾けません。 どういうわけか私はこの立場を理解しています。Sprintでの開発に役立つとは思われない機能に関する議論を聞くのはなぜですか? 何をすべきだと思いますか?
15 agile  scrum 

5
ディスレクシアの影響を最小限に抑えるために、IDEにどのような変更を加えることができますか?
私はプログラムをし、ディスレクシアです。私のビジョンは素晴らしいです。私はシンボルの処理が不十分であり、視覚的思考者です。 私がコーディングするとき、私は自分が犯すエラーに予測できないほど気付かないので、普通の人よりも遅いです。私はpythonを学んでおり、テキストのみの開発環境は多くの視覚的ストレスを引き起こします。Wingwareを使用していますが、これは多少役立ちますが、指定された時間内に割り当てを完了できません。 私に役立つ宿泊施設を提案してもらえますか? どのような適応が私に役立つでしょうか? この種のエラーを自動的に検出、強調表示、修正する方法はありますか? 校正、私は私が見たいと思うものまたは何か身近なものを見ます。タイプミスに気づかず、行をスキップするなど、テスト中にバグが発生します。コピー&ペーストでも、行を見逃してエラーを引き起こす可能性があります。 マージンからマージンへのテキストのブロックは、いくつかの色の組み合わせがそうであるように私に頭痛を与えます 私はテキストをシンボルとして処理するのではなく、数字の桁が異なる場所に移動するように回転、転置できるオブジェクトとして、「123」、「132」、文字「pddq」、私。私はこれらをトリッキーだと思います-同じ形が回転して反射しました。

2
どちらが良いですか:選択文字列パラメータを持つゲッターの束または1つのメソッド?
私たちの知識領域には、素足で圧力記録プレートの上を歩く人々が含まれます。センサーデータで人間の足が認識されると、「Foot」クラスのオブジェクトを生成する画像認識を行います。 足のデータに対して実行する必要がある計算がいくつかあります。 さて、どのAPIの方が良いでしょう: class Foot : public RecognizedObject { MaxPressureFrame getMaxPressureFrame(); FootAxis getFootAxis(); AnatomicalZones getAnatomicalZones(); // + similar getters for other calculations // ... } または: class Foot : public RecognizedObject { virtual CalculationBase getCalculation(QString aName); // ... } 今、私が思いつくことができる多くの賛否両論がありますが、どれが最も重要かを本当に決めることはできません。これはエンドユーザーアプリケーションであり、当社が販売するソフトウェアライブラリではありません。 何かアドバイス? 最初のアプローチのプロには次のようなものがあります。 KISS-すべてが非常に具体的です。APIですが、実装も同様です。 強く型付けされた戻り値。 このクラスを継承するのは簡単です。上書きすることはできず、追加するだけです。 APIは非常に閉じられており、何も入れられず、オーバーライドされることもありません。 いくつかの短所: 新しい計算がリストに追加されるたびに、ゲッターの数が増えます APIは変更される可能性が高く、重大な変更が導入された場合、新しいAPIバージョンであるFoot2が必要です。 他のプロジェクトでクラスを再利用する場合、すべての計算が必要になるとは限りません …

6
JSコードをhtmlファイルまたは外部ファイルに配置する方が良いでしょうか?
1ページのWebサイトを設計している場合、JSコード用の外部ファイルを作成するのが良いのでしょうか、それともHTMLコードに入れるのが良いのでしょうか?ロードするためにページ上にそれをより速く置いていますか?コードに対するユーザーの要求を拒否するようにアクセス許可を変更できますが、htmlページは引き続きコードを呼び出すことができますか?
15 javascript 

7
これはgotoステートメントを正当化しますか?
私はこの質問に少し前に出くわしました、そして私はそこから材料のいくつかを引き出しています:「break n」コンストラクトの名前はありますか? これは、二重にネストされたforループから抜け出すようにプログラムに指示する必要がある人々にとって、不必要に複雑な方法のようです。 for (i = 0; i < 10; i++) { bool broken = false; for (j = 10; j > 0; j--) { if (j == i) { broken = true; break; } } if (broken) break; } goto文は悪魔だと言うのが好きな教科書を知っています。私はそれらが好きではありませんが、これは規則の例外を正当化するのでしょうか? nネストされたforループに対処する答えを探しています。 注:「はい」、「いいえ」、またはその中間のいずれで回答しても、完全に近い考え方の回答は歓迎されません。特に答えが「いいえ」の場合は、正当で正当な理由を提供してください(とにかくStack Exchangeの規制からそれほど遠くない)。

4
フェノトロピックプログラムの設計
最近、Jaron Lanierが「フェノトロピックプログラミング」というアイデアを思いつきました。 考え方は、統計を利用して、通常「古典的な」プログラムを壊滅的にクラッシュさせる小さなエラーを選別するコンピュータープログラムで、シングルポイントインターフェイスの代わりに「表面」インターフェイスを使用することです。 2行の説明は次のとおりです。 Jaronによれば、「プロトコルの遵守である現在のソフトウェアのアイデアと、パターン認識について議論しているアイデアとの本当の違いは、私たちが作成している種類のエラーに関係している」 「ソフトウェアの考え方や作成方法を変えることはありません。プロセッサがどれほど高速になっても、約1,000万行を超えるコードを書くことはありません。」 少し長い説明はこちらです。さらに長い説明はこちらです。 だから、質問は、人々が選ぶ傾向がある明らかなロボットの支配者の意味を過ぎて見て、「フェノトロピックプログラム」を実際にどのように設計して書くのでしょうか?
15 design  program 

4
不安定な浮動小数点計算を識別する方法は?
数値では、不安定なスキームを識別し、その安定性を改善できることが非常に重要です。不安定な浮動小数点計算を識別する方法は? 私は多くの数値スキームが連携する非常に複雑なシミュレーションに取り組んでおり、その弱点を特定するための方法論を探しています。私は微分方程式を含む物理モデルに取り組んでいます。プロセス全体の概観は次のとおりです。 (準備手順)物理的観測Pを収集します。 シミュレーションの初期パラメーターを決定します。この用途我々は、パラメータのパラメータ空間ルックで歩く最適化アルゴリズム、Cは、いくつかの誤差関数ように、E(F(C)、P)が最小化され、Fは、パラメータの一部由来の量です。 シミュレーションエンジンのプラグC。これはEDPのオイラースキームであるため、各タイムステップで、動的を駆動する項を計算し(それぞれが複雑な関数であり、不安定になる可能性があります)、次を計算するためにこれらの動的項をオイラースキームに供給します状態。これは数千の時点で続きます。 シミュレーションの最後に、最終状態Sの関数Proof(S)を計算し、観測量から推定されるいくつかの量Require(P)と比較します。これは、結果の正式な証拠ではなく、妥当性チェックです。 また、複雑な操作の塔(オイラースキーム内、Proof内の動的な用語の計算)を見ています。そして、「不良部品」を認識して修正したいと思います。 精度が低下した浮動小数点数のソフトウェア実装を使用すると、数値スキームの不安定性が拡大し、異なる実装間の比較が容易になると推測します。これは、この質問を調査する一般的な手法ですか?Bochsとして仮想マシンを使用して、プログラムを変更せずにこれを達成することは可能ですか? 安定性の問題に適切に対処するために、数値手順の一般的な入力を対象とすることが許容される場合があります。そのため、その入力でうまく機能するように調整できます。典型的な入力のサンプルが与えられると、いくつかの中間結果をスヌーピングし、それらの統計プロファイルを準備することが可能です。繰り返しますが、これは安定性の問題を研究する一般的な手法ですか?これには仮想マシンが便利ですか?

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