ソフトウェア工学

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

6
古いプログラマは姿を消した。別のプログラマーを雇おうとしています。これにどのようにアプローチしますか?[閉まっている]
閉じた。この質問は意見に基づいています。現在、回答を受け付けていません。 この質問を改善したいですか?この投稿を編集して事実と引用で答えられるように質問を更新してください。 6年前に閉鎖されました。 WordPressとBuddyPressを使って私のためにソーシャルネットワークプロジェクトに1年以上費やした後、私のプログラマーは、週ごとに報酬を受け取っていたにもかかわらず、全期間にわたって姿を消しました。はい、私はメールトラッカーを使用して確認し、私のメールを開いているのを確認したので、彼は死んでいませんが、彼は応答しません。彼は別の仕事を得たようです。なぜ彼はそう言うことができなかったのだろうか。そして、私は彼がやったことのない仕事のために彼に事前給料を支払った。 問題は、彼がコーディングしたほとんどの関数の完全なドキュメントを求めたことがないことです。そして、この1年以上の期間には多くの関数があり、それらのいくつかにはまだ修正しなかったバグがあります。今ではすべて混乱しているようです。 最初にすべきことは何ですか?どうすればいいですか? 最初にやるべきことは別のプログラマーを獲得することだと思いますが、プログラマーが問題なくすべての機能に取り組むことができるように、現在のすべてのコードを文書化することから始めましょう。 それが最初にすべきことですか?はいの場合、どうすればいいですか? このようなものに必要な標準的なドキュメントは何ですか?すべてのコードのドキュメントを作成してバグを修正するだけのプログラマを入手できますか、それともドキュメントは本当に重要ではありませんか? また、別の「個人」プログラマーを取得する方が良いと思いますか、それとも私のプロジェクトに割り当てられたプログラマーが消えた場合、別のプログラマーが彼の代わりになりますように、彼らのために働くプログラマーを持っている会社を取得しますか?これが最初に取るべきアプローチだと思います。

1
ファイルリーダーをテストするにはどうすればよいですか?
私はいくつかのファイル形式のプロジェクトに取り組んでいます。一部の形式は.xsdsによって指定され、他の形式はそれぞれのWebサイトのドキュメントによって指定され、一部はドキュメントのないカスタムの社内形式です。ムワハハハハ。 どうしたの? ファイルリーダーをテストしたいと思いますが、これを実行する方法が完全にはわかりません。アプリケーションのフローは次のとおりです。 file.___ ===> read by FileReader.java ===> which creates a Model object どこFileReaderインタフェースがあります public interface FileReader { public Model read(String filename); } Modelファイルが読み込まれたときに移入された属性の数を持っています。次のように見えます public class Model { List<String> as; List<String> bs; boolean isAPain = true; // ... } 私は何を試しましたか? 私の唯一のアイデアは、各ファイル形式のファイル「ジェネレーター」を作成することでした。これらのジェネレーターは基本的に、いくつかの変数(たとえば、ファイルで生成するコメントの数)を受け取り、サンプルファイルを出力してから読み込み、結果Modelを最初にファイルの生成に使用した変数と比較するビルダーです。 ただし、これにはいくつかの問題があります。 生成されるファイルは、実際のファイルのようには見えません。ジェネレーターはコンテキストをまったく認識しません。 私が手動で変数を設定しているので、ジェネレータがエッジケース用に生成したかどうかを認識するのは困難です。この方法は、1ダースのサンプルファイルを作成するよりもましです。 これを行うためのより良い方法はありますか? 編集:それは私が実際に意味するものなので、ユニットを統合に変更しました。 EDIT2:これは私が言及したエッジケースの例です。 各ファイルは、頂点とエッジで構成されるグラフを表します。これらの頂点とエッジはさまざまな方法でアタッチできます。 v1 …

5
矛盾するプログラミングのアドバイスを調整する:何かを機能させて反復するか、コーディングする前に実際に考える
私は、修士号の中間にある数年のプロの経験を持つ中級プログラマーです。プログラミングを学ぶ際に、一見矛盾していると思われる2つのアドバイスをよく耳にしました。 最初のアドバイスは、何かをすばやく動作させ、それがどのように機能するかを(プロトタイプまたは非公式のテストを介して)確認し、バージョンを改善し、再び機能する方法を確認し、再び改善し、それが完了するまでサイクルを繰り返すことでした。これは「スパイラル開発」と呼ばれることもあれば、「早期リリース、頻繁にリリースする」と表現されることもあります。 2番目のアドバイスは、コードを記述する前にプロジェクトを実際に検討することでした。 私は両方の方法で成功しており、それぞれの哲学に同意すると言うでしょう。 しかし、今では、完了方法がわからないはるかに複雑なプロジェクト(分散アプリケーションやパフォーマンス駆動型グラフィックプログラミングなど)に取り組み始めています。 これらのプロジェクトについてはどうすればいいですか? コーディングを開始して、(プラットフォーム/メソッド/言語/アーキテクチャ)を学習しながら学習しますか?それとも、IDEを開く前にコーディングを控えて大量の調査/読み取りを行いますか? これらの矛盾したプログラミングのアドバイスをどのように調整しますか?

1
ErlangとGoの並行プログラミング、CSPとアクター間の客観的な違いは?
私はErlangとGoプログラミング言語での並行プログラミングを検討していました。私の発見によると、それらはそれぞれアクターモデルとCSPを使用しています。 しかし、それでも私はCSPとアクターの客観的な違いは何かと混乱していますか?それは単に理論的に異なるだけで同じ概念ですか?

12
メソッドは構文糖衣以上のものをオーバーロードしていますか?[閉まっている]
閉じた。この質問は意見に基づいています。現在、回答を受け付けていません。 この質問を改善したいですか?この投稿を編集して事実と引用で答えられるように質問を更新してください。 5年前に閉鎖されました。 メソッドは多型の型をオーバーロードしていますか?私には、同じ名前と異なるパラメーターを持つメソッドを単に区別しているように思えます。だから、stuff(Thing t)およびstuff(Thing t, int n)これまでのコンパイラとランタイムが懸念している限り全く異なる方法です。 呼び出し側では、異なる種類のオブジェクトで異なる動作をする同じメソッドであるという幻想を作成します-多態性。しかし、それは幻想に過ぎません。実際stuff(Thing t)とstuff(Thing t, int n)まったく異なる方法だからです。 メソッドは構文糖衣以上のものをオーバーロードしていますか?何か不足していますか? 構文糖の一般的な定義は、純粋にローカルであるということです。コードの一部をその「甘くされた」同等物に変更する、またはその逆の意味は、プログラムの全体的な構造に影響を与えないローカルな変更を伴います。そして、メソッドのオーバーロードはこの基準に正確に適合すると思います。例を見てみましょう: クラスを考えてみましょう: class Reader { public String read(Book b){ // .. translate the book to text } public String read(File b){ // .. translate the file to text } } 次に、このクラスを使用する別のクラスを考えます。 /* might not be the …

4
データベースの設計が不十分なリレーショナルデータベース駆動型アプリケーションでより良いオブジェクト指向コードを作成する方法
私は主に、すべてのページに複数のテーブルとそれらのテーブルに適用されるフィルターがある類似したページの束で構成されるJava Webアプリケーションを作成しています。これらのテーブルのデータは、SQLデータベースから取得されます。 私はmyBatisをORMとして使用していますが、データベースの設計が貧弱で、mybatisはデータベース指向のツールであるため、私の場合はこれが最良の選択ではないかもしれません。 データベースの設計が貧弱であるため、クエリが非常に異なる可能性があるため、類似したものに対して異なるクエリを作成する必要があるため、多くの重複コードを記述していることがわかりました。つまり、クエリを簡単にパラメータ化することはできません。これは私のコードに伝播し、単純なループでテーブルの列に行を入力する代わりに、次のようなコードがあります: 取得Aデータ(P1、...、PI); get B Data(p1、...、pi); Cデータの取得(p1、...、pi); Dデータの取得(p1、...、pi); ... そして、異なる列を持つ異なるテーブルがある場合、これはすぐに爆発します。 また、ページ内のhtml要素へのオブジェクトのマッピングである「ウィケット」を使用しているという事実も複雑さを増しています。そのため、私のJavaコードはデータベースとフロントエンドの間のアダプターになります。これにより、ロジックが混在した大量の配線、定型コードが作成されます。 正しい解決策は、ORMマッパーを、dbへのより均質なインターフェースを提供する追加レイヤーでラップすることでしょうか、または私が書いているこのスパゲッティコードを処理するより良い方法はありますか? 編集:データベースに関する詳細情報 データベースは、主に電話情報を保持しています。貧弱なデザインは以下で構成されています: ドメインの知識とは関係のない人工キーを主キーとして持つテーブル。 一意のトリガー、チェック、または外部キーは一切ありません。 さまざまなレコードのさまざまな概念に一致する一般的な名前のフィールド。 条件が異なる他のテーブルと交差することによってのみ分類できるレコード。 文字列として保存される数値または日付である列。 まとめると、散らかった/怠zyなデザインです。

7
モジュール式プログラミングは計算時間に影響しますか?
誰もがコードをモジュール化する必要があると言っていますが、より少ないメソッドではなく、より大きなメソッドを使用するよりも多くのメソッド呼び出しを使用すると効率は低下しませんか?その点で、Java、C、またはC ++の違いは何ですか? 特にグループでは、編集、読解、理解が簡単になります。それで、コードの整頓の利点と比較して、計算時間の損失は重要ではありませんか?
19 java  c++  c  efficiency 

3
MITなどのGPL互換ライセンスは、コピーレフト条項の対象にならずに、GPLプログラムでどのように使用できますか?
現在、商用コンテキストでのアプリケーションのGPLライブラリに対するリンクの可能性と影響を調査しています。 私が理解したGPLから、アプリケーションが内部で使用されている限り、そのコードをリリースする義務はありません(たとえコピーが管理下の子会社に移動されたとしても)。 私が理解していないのは、FAQからの次の点です: ライブラリが(LGPLではなく)GPLの下でリリースされている場合、それを使用するソフトウェアはGPLまたはGPL互換ライセンスの下にある必要があるということですか?はい。実際に実行されるソフトウェアにはライブラリが含まれているためです。 GPL互換ライセンスを見てみると、それらのいくつか(ブーストライセンスなど)がコードのリリースを課しているようには見えません。これを使用すると、コードを公開する義務を尊重することなく、GPLライセンスに準拠できる状況が作成されます(あまり信頼できないようです)。 (注:ブーストの下でライセンスされたAdobe Photoshopのコンポーネントがあり、コードはオンデマンドで利用できるとは思わない) 最も合理的な説明は、私が何かを見逃しているということです...私がどこでミスをしたか教えてください。
19 licensing 

2
Scalaの他のすべてのタイプのサブタイプは何でもない
私は、Martin Oderskyのscalaを使った関数型プログラミングのコースを受講していますが、今のところ、意味が合わない2つのことを学びました。 Scalaは多重継承をサポートしていません Nothing 他のすべてのタイプのサブタイプです これら2つのステートメントは共存できませんが、これはどのように行われますか?そして、「他のすべてのタイプのサブタイプ」の意味は正確に何ですか 編集1 ではScalaのAPI、Nothingとして定義されているabstract final class Nothing extends Any...ので、どのようにそれは他のクラスを拡張することができますか?

5
作業中の開発環境で過去のプロジェクトを維持する効果的な方法は?
過去のプロジェクトを実行したいときはいつでも、それを見つけることができるようになり、実行できるようにすべてをセットアップするまでに時間がかかることがわかりました。 たとえば、Linuxで作成したpythonプロジェクトがあり、Linuxに簡単にインストールできるソフトウェアパッケージに依存していますが、使用しているLinux VMはもうありません。私の他のプロジェクトのいくつかは、Webサーバー構成、PATH変数、sdk、IDE、OSバージョン、デバイスなどの他の変数に依存しています。 誰かがこの問題を処理する効果的な方法を持っていますか?今のところ、ソースコードのバックアップを維持することだけに関心がありますが、動作中の開発環境を再構築することは難しく、動作中の開発環境を維持することも困難です。

3
QT-C ++対Generic C ++およびSTL [非公開]
閉まっている。この質問はトピック外です。現在、回答を受け付けていません。 この質問を改善したいですか? 質問を更新して、 Software Engineering Stack Exchangeのトピックになるようにします。 5年前に閉鎖されました。 Ubuntu QQで最近C ++をブラッシュアップしています。すべてのQtフレームワーク、特にGUIの構築が大好きです。過去数年にわたってPyQtを使用していたとき、私はこれに非常に精通しました。 PyQtを使用する場合、QtでC ++を使用する場合に、より顕著な問題がいくつかありました。Qtには、Qt固有のC ++の拡張機能が多数あります。C ++とSTLについてまったく知識がなくても、C ++を使用してQtアプリケーションを作成することができます。 すぐに再び求人市場に出なければならないかもしれませんが、C ++のポジションを検討したいのですが、Qtに縛られすぎると、かつては手ごわいものだった汎用C ++で動作する能力が制限されます長い休眠状態でさびています。 Qtを避けるべきですか?GUIの構築にWxWidgetsまたはGTK ++を使用した方が良いでしょうか? 一般的なC ++とSTLの使用を許可/要求する、使用するのに最適なGUIフレームワークは何ですか?GUIフレームワークなどに関して、C ++プログラマーとしてどのように自分を最も市場性の高いものにするのでしょうか。
19 c++  qt  stl  gtk  pyqt4 

4
コードで数学ロジックを文書化する
まれですが、コードに数学ロジックを含める必要があります。使用される概念はほとんど非常に単純ですが、結果のコードはそうではありません-不明な目的を持つ多くの変数、およびそれほど明白ではない意図のある操作。コードが判読不能または保守不能であることを意味するのではなく、実際の数学の問題よりも理解が難しいというだけです。私は理解が最も難しい部分にコメントを付けようとしますが、それらをコーディングするのと同じ問題があります- テキストには数学の表現力がありません。 複雑なコードの一部、できればコード自体の背後にあるロジックを説明する、より効率的で理解しやすい方法を探しています。私はTeXを検討しました-ドキュメントを書き、コードとは別に生成します。しかし、それから私はTeXを学ぶ必要があり、ドキュメントはコード自体にはありません。私が考えたもう1つのことは、紙/ホワイトボードに書かれた数学表記、方程式、図の写真を撮り、それをjavadocに含めることです。 より簡単で明確な方法はありますか? PS 変数に(のtimeOfFirstEvent代わりにt1)わかりやすい名前を付けると、実際にはコードがより冗長になり、読みにくくなります。

3
関数呼び出しのセマンティクスを表すためにスタックを使用する代替策はどれですか?
通常、関数呼び出しは通常スタックを使用して実装されることを知っています。フレーム、リターンアドレス、パラメータ、ロットがあります。 ただし、スタックは実装の詳細です:呼び出し規則は異なることを行う場合があります(x86 fastcallは(一部の)レジスタを使用し、MIPSとフォロワーはレジスタウィンドウを使用するなど)、最適化は他のこと(インライン化、フレームポインターの省略、テールコール最適化..)。 確かに、多くのマシン(JVMやCLRのようなVMだけでなく、PUSH / POPなどを備えたx86のような実際のマシン)に便利なスタック命令が存在するため、関数呼び出しに使用すると便利ですが、場合によっては可能ですコールスタックが不要な方法でプログラムする(ここでContinuation Passing Style、またはメッセージパッシングシステムのアクターについて考えています) だから、私は疑問に思い始めていました:スタックなしで関数呼び出しセマンティクスを実装することは可能ですか、それとも異なるデータ構造(キュー、おそらく、または連想マップ)を使用して良いですか? もちろん、スタックは非常に便利な(ユビキタスである理由があります)が、最近私は不思議に思う実装にぶつかりました。 言語/マシン/仮想マシンで行われたことがあるかどうか、知っている人はいますか?その場合、顕著な違いと欠点はどれですか? 編集:私の直感は、異なるサブ計算アプローチが異なるデータ構造を使用できるということです。たとえば、ラムダ計算はスタックベースではありません(関数の適用の考え方は簡約によってキャプチャされます)が、実際の言語/マシン/例を見ていました。それが私が尋ねている理由です...

3
グラフのプロット線の色を選択するためのアルゴリズムは何ですか?
プロットラインのRGBまたはHSVカラーを生成し、視覚的に隣人と区別できるようにするために、プログラムで実装できるアルゴリズムまたはルールに興味があります。 プロの地図作成には、地図上の隣接する2つの国が同じ色にならないようにするアルゴリズムまたはルールがあることを知っています。Microsoft Office Excelは、プロットラインに適した濃淡/陰影(赤、青、紫/オレンジ)を選択していると考えることもできます。 これが私が話していることの例です-黒の背景に12行の色を生成する必要があります。ここの色は、WebセーフRGBカラーコードを使用して手動でハードコーディングしました。これらの線が重なったときに問題が発生します-紫、やや濃い紫、または紫を見ているかどうかを判断するのは困難です。これらのようなプロットラインの色を生成するためのより良いアルゴリズムを探しています。 以下は、jQueryのFlotプロットライブラリを使用した例です。グラフの色が連続して表示されています。
19 algorithms  color 

5
自分に割り当てられた3つ以上のバグを頭の中に入れておくことができないのは普通ですか?また、1,000行のスパゲッティコードを理解することはできませんか?
私は古いコードベースに取り組んでいます... 完璧ではありませんが、どちらの環境にもありません。私の人生で見た最悪のコードベースではありませんが、まだ多くの問題があります。ユニットテストはありません。コードが数千行以上あるメソッド。基本的なオブジェクト指向の原則の誤解; 等 コードを維持するのが痛い。 変数を全面的に再利用して、ひどく記述されたメソッドの何千行もデバッグする必要があるたびに、私は完全に失われます。 私がやったいくつかの修正やリファクタリングは、アプリケーションの他の場所にバグを導入しました。 ドキュメンテーション、テスト、または観察可能なアーキテクチャがなく、不適切な名前のメソッドと組み合わせて、使用可能な作業メモリをすべて使い果たしたと感じています。変更する必要があるコードを理解するために覚えておく必要のある他のすべてのことをする余地はありません。 職場での絶え間ない中断は私を邪魔し、私を遅くします。 バグ追跡システムがなければ、一度に2つまたは3つ以上のタスクを思い出すことはできません。週末にかけてすべてを忘れます。 私の同僚も同様の問題を抱えていないようです。 彼らは私よりもはるかに速く、ひどく書かれたメソッドをデバッグすることができます。 コードベースを変更するときよりもバグが少ない。 20種類のファイルで数千行のコードを読み取る必要がある場合でも、コードを変更するために必要なすべてを非常によく覚えているようです。 彼らは、電子メール、呼び出し中の電話、周りで話している人々、および彼らに質問する他の人々によって邪魔されていないようです。 TFSを使用しているので、彼らは既に持っているバグ追跡システムを使いたくありません。彼らは行うべきすべてのタスクを覚えていることを好みます。 なぜこれが起こるのですか?ひどく記述されたコードを長時間操作するときに開発者が習得する特定のスキルですか?私の相対的な悪いコードの経験の欠如は、これらの問題/感情に貢献していますか?記憶に問題がありますか?

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