ソフトウェア工学

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

4
Javaで区切られた文字列を分割する最も簡単な方法
区切られた文字列で複数列のソート機能を提供するコンパレータを構築しています。私は現在、生の文字列をトークンに分割するための好ましい選択肢として、Stringクラスのsplitメソッドを使用しています。 これは、生の文字列を文字列配列に変換するのに最適な方法ですか?何百万もの行を並べ替えるので、アプローチが重要だと思います。 それはうまく動作するようで非常に簡単ですが、Javaでより高速な方法があるかどうかは不明です。 これが私のコンパレータでのソートの仕組みです: public int compare(String a, String b) { String[] aValues = a.split(_delimiter, _columnComparators.length); String[] bValues = b.split(_delimiter, _columnComparators.length); int result = 0; for( int index : _sortColumnIndices ) { result = _columnComparators[index].compare(aValues[index], bValues[index]); if(result != 0){ break; } } return result; } さまざまなアプローチのベンチマークを行った後、信じられないかもしれませんが、splitメソッドは最新バージョンのJavaを使用するのが最も速かったです。ここに私の完成したコンパレータをダウンロードできます:https : //sourceforge.net/projects/multicolumnrowcomparator/


2
C#プログラミング言語での変数の命名規則[終了]
休業。この質問は意見に基づいています。現在、回答を受け付けていません。 この質問を改善してみませんか?この投稿を編集して、事実と引用で回答できるように質問を更新してください。 6年前休業。 変数に関するC#のビデオを見ています。著者はメソッド内で変数を宣言し、次のように名前を付けました。string MyName = "James"; 私の質問は、.Net Frameworkが推奨する規則です。上記の例のようなパスカルケースですか、それともキャメルケースですか?

1
上司にVisual Studio 2012 Professionalの購入を説得する方法[終了]
閉まっている。この質問はトピックから外れています。現在、回答を受け付けていません。 この質問を改善してみませんか? 質問を更新して、ソフトウェアエンジニアリングスタック交換のトピックになるようにします。 6年前休業。 主な利点は、ReSharperやその他のアドオンの使用ですが、Visual Studio 2012 Professionalの購入について説得力のある議論を行う必要があります。現在、Visual Studio 2012 Express for Windowsを使用しています。それはかなり良いですが、過去に完全なProfessionalバージョンの使用から切り替えるのは難しいです。 これまでのところ、チームは次のリストをまとめています。 インターフェイス機能の抽出がありません。クリーンなSOLIDコードに非常に役立ちます。 アドオンのサポートはありません。StyleCopまたは生産性向上ツールをインストールできません。AnkhSvn、スペルチェッカー、生産性PowerTools、GhostDoc、正規表現エディター、PowerCommands。 例外アシスタントはExpressエディションで制限されています。これは大きな問題です。http://www.lifehacker.com.au/2013/01/ive-given-up-on-visual-studio-express-2012-for-windows-desktop-heres-why/を参照して ください 証明書の生成など、MSが提供するさまざまなツール。 ソースコードに基づいてテストプロジェクトを作成する可能性。 サーバー開発はC#で行うため、Webアドオンなどは役に立たない。 私が尋ねている理由は、人々が同じ立場にあったことを私は確信しているからです。どのようなアプローチを採用しましたか。また、上記のリストへの追加または修正について考えることができますか? おかげで、

5
Cでregisterキーワードが実際に役立つのはいつですか?
registerC でのキーワードの使用について混乱しています。通常、stackoverflowに関するこの質問のように、その使用は必要ないと言われています。 最新のコンパイラーのために、このキーワードはCで完全に冗長ですか、それともまだ有用な状況がありますか?はいの場合、registerキーワードの使用が実際に役立つ状況は何ですか?
10 c  keywords 

2
表現力とプロダクションバグ率に相関する、プログラミング言語ランタイムのメモリ消費量の比較研究はありますか?[閉まっている]
閉まっている。この質問はトピックから外れています。現在、回答を受け付けていません。 この質問を改善してみませんか? 質問を更新して、ソフトウェアエンジニアリングスタック交換のトピックになるようにします。 5年前休業。 多くの比較研究があり、1つの言語または別の言語を使用して構築されたアプリケーションのランタイムパフォーマンスに関しては、オンラインで入手できます。企業によって駆動されるものもあれば、学術的なものもあれば、個人的な実験報告だけのものもあります。 また、次のようなプログラミング言語とそのツールの副作用に関する比較研究のかなりのシェアを得ています。 ビルド時間、 ポストプロダクションバグ検出の可能性、 表現力、 等... しかし、私は最近、他の何よりもプログラムのメモリ消費量にますます困惑しています。これは、ムーアの法則が生のパフォーマンスに関して私たちの側にある一方で、他のボトルネックがより重要であることに気づくようになったという事実から来ている可能性があります。それと、ハードウェアを頻繁に更新することはあまりありません。「古い」もの(4 GBのRAMを搭載した2005〜2006年の3.6 GHz Pentium 4を読んでいます)があるため、それらからすべてのジュースを搾り出すために大きなトラブルを経験することを私に要求します(OS、UIの選択、サービスとデーモンの微調整、タスクなどに使用するアプリケーションの選択...)。非常に正直に言うと、ときどき起動しtopたりprocexp、最も無害なプログラムが使用しているメモリを見て涙を流したりします。 私は上記の方向に押し続け、基本的に自分自身と使用するプログラムを制限しようとすることでこれに対処できます(その理由から、私はcliプログラムを非常に愛しています)、しかし、私は考えるしかありませんたぶん私たちはそれを間違っているのです。 現代的なニーズのための現代的なツール もちろん、高水準言語は間違いなくより優れており、それらの重荷の価値を正当化します。いくつかの設計上の選択は、多くのツールチェーンで、当時は十分な(またはおそらく意図された)理由で行われました。共有ライブラリ、メモリモデル、プリプロセッサ、タイプシステムなど...しかし、最新のハードウェアでは、他のものよりも実行可能性が高いものもあるので、この問題に関するいくつかの深刻な研究に興味があります。 ですから、私の質問は、ベンチマークゲームなどの言語の基本的なランタイムメモリ消費量の比較に焦点を当てたペンダントがあるのでしょうか。 さらに、これを他のパラメーターと相互参照するいくつかの研究がありますか(たとえば、この記事が他の基準についてもベンチマークゲームに基づいて行ったのと同様)。

4
関数内での内部スコープブロックの使用は悪いスタイルですか?
以下のリスクがあるいくつかの(かなりまれな)ケースがあります。 再利用を目的としていない変数の再利用(例1を参照)、 または、別の変数の代わりに変数を使用して、意味的に近い(例2を参照)。 例1: var data = this.InitializeData(); if (this.IsConsistent(data, this.state)) { this.ETL.Process(data); // Alters original data in a way it couldn't be used any longer. } // ... foreach (var flow in data.Flows) { // This shouldn't happen: given that ETL possibly altered the contents of `data`, it is …

3
コンピュータにソーティングネットワークなどの専用ハードウェアが付属していないのはなぜですか?
私たちのやり方をプログラミングする代わりに、「ソート」などの一般的なタスクの仕様を作成して、環境にコンパイルして、ハードウェアを最大限に活用させてみませんか?このようにして、ソートネットワークなどの新しい専用ハードウェアを搭載したコンピューターを出荷でき、既存のコードで自動的に動作します。

2
数字で始まる文字列を表す適切な名前付け
Windowsのいくつかのカメラメタデータを見るFile Propertiesと、(さらにいくつかの)2つのProperties名前付き焦点距離と35mm焦点距離があります。 私はこれら2つを利用するソフトウェアを開発していますProperties。これまでのところ、最初のProperty名前FocalLengthを作成しましたが、他の名前の適切な名前を見つけることができません。 私が考えている_35MmFocalLengthかThirtyFiveMmFocalLength、私はより良い提案があるかもしれないと思います。 何か案は?

7
CとC ++のコードを混在させるべきではないと思います。これは問題ですか、どのように修正しますか?
背景/シナリオ 純粋にCでCLIアプリケーションの作成を開始しました(「Hello World」またはそのバリエーションではない、最初の適切なCまたはC ++プログラム)。途中でユーザー入力(文字配列)の「文字列」を操作していて、C ++文字列ストリーマーオブジェクトを発見しました。これらを使用してコードを保存できることがわかったので、アプリケーションで使用しました。これは、ファイル拡張子を.cppに変更し、g++ではなくでアプリをコンパイルしたことを意味しますgcc。これに基づいて、私はアプリケーションが技術的にC ++アプリケーションであると言います(ただし、コードの90%以上はCと呼ばれるもので記述されていますが、二つ)。これは、約900行の単一の.cppファイルです。 重要な要素 私はプログラムを無料で(お金のように)自由に配布し、すべての人が使用できるようにしたいと考えています。私の懸念は、誰かがコードを見て、以下の影響について何かを考えることです: ああコーディングを見て、それはひどいです、このプログラムは私を助けることができません 潜在的にそれができるとき!もう1つの問題は、コードが効率的であることです(イーサネット接続をテストするためのプログラムです)。アプリケーションやその出力のパフォーマンスを著しく妨げるほど非効率なコードの部分があってはなりません。ただし、特定の関数、メソッド、オブジェクト呼び出しなどのヘルプを求めるときのスタックオーバーフローの問題だと思います。 私の質問 (私の意見では)CとC ++を混在させるべきではないのですが。それをすべてC ++で書き直そうとする必要がありますか(これにより、新しいC ++テクニックを使用して圧縮できるCスタイルで何かをコーディングした可能性があるC ++オブジェクトとメソッドを実装することを意味します)、または文字列ストリーマーオブジェクトとすべてをCコードに「戻し」ますか?ここに正しいアプローチはありますか?私は迷っていて、このアプリケーションを大衆の目に「良い」状態に保つ方法についてのガイダンスが必要です。大衆の目には、それを使用して利益を得るでしょう。 コード-更新 ここにコードへのリンクがあります。約40%のコメントです。流暢になるまで、ほぼすべての行にコメントします。ただし、リンクしたコピーでは、ほとんどすべてのコメントが削除されています。これで読みづらくならないことを願っています。誰もがそれを完全に理解する必要がないことを望んでいます。致命的な設計上の欠陥を作った場合でも、それらを簡単に識別できることを願っています。また、Ubuntuデスクトップとラップトップをいくつか書いています。コードを他のオペレーティングシステムに移植するつもりはありません。
10 c++  c 

2
分岐予測の最適化に適したコードはどれですか?
分岐予測、およびコンパイラー最適化の影響を考えると、どのコードが優れたパフォーマンスを提供する傾向がありますか? bRareExceptionPresentはまれな状態を表すことに注意してください。ロジックの通常のパスではありません。 /* MOST COMMON path must branch around IF clause */ bool SomeFunction(bool bRareExceptionPresent) { // abort before function if(bRareExceptionPresent) { return false; } .. function primary body .. return true; } /* MOST COMMON path does NOT branch */ bool SomeFunction(bool bRareExceptionPresent) { if(!bRareExceptionPresent) { .. function primary …

3
オープンソース、著作権、および些細なバグ修正
開発者がクローズドソースの商用アプリケーション用のライブラリを開発したとしましょう。彼らはオープンソースコミュニティに還元したいので、たとえばGPLの下でこのライブラリを公開しますが、独自のアプリケーションで引き続き使用します。彼らは著作権を保持しているので、それは問題ありません。 これで、GPLバージョンのユーザーがバグを見つけて修正し、元の開発者にパッチを提出します。私が理解しているように、このバグ修正をクローズドソースアプリケーションで使用するには、開発者が送信者からの許可を持っている必要があります。提出者が拒否した場合、開発者はクローズドソースバージョンのバグを修正する別の方法を見つける必要があります。 しかし、バグ修正自体が本当に簡単な場合はどうでしょうか?変数を適切に初期化したり、nullポインターをチェックしたりしますか?エラーの説明が与えられれば、半分の有能なプログラマーがほんの数分で見つけて修正できる何か?このパッチはまだ著作権で保護されていますか?または、元の開発者が提出者の同意なしに、クローズドソースアプリケーションに同じ修正を実装できますか? 注:これは実際には架空のシナリオであり、「私の「友人」がこの問題を抱えている」質問の1つではありません

6
CoffeeScriptと名前付き関数
他の場所では、CoffeeScriptの名前付き関数の用語について議論が生じています。特に誰かがこのようなものを参照しました: foo = -> console.log("bar") 名前付き関数として。しかし、CoffeeScriptのすべてが匿名関数であり、名前付き関数がないことに反対しました。これは確かに真実です。CoffeeScriptには、変数に格納できる関数式しかありません。しかし、これを名前付き関数と呼ぶのが間違っていることを意味しているとは思いません。 私が見ると、名前が付けられた関数なので、名前付き関数です。確かに、他のいくつかの言語が名前付き関数を持っているのと同じように名前付き関数ではありませんが、名前付き関数と呼ぶのは不適切ではないほど近いと思います。そうでないと主張することは、つまらないことのようです。 これは名前付きの関数ではないと主張することは単なるつまらないことだと思って、昼食に出かけますか?

5
ライブラリとしてgccを使用する方法はありますか?
誰でも次のように機能するソリューションを知っています。 #include <stdio.h> #include <gcc.h> /* This .h is what I'm looking for. */ int main (void) { /* variables declaration (...) */ /* The following line is supposed to be equivalent to: * $ gcc main.c -o main */ results = gcc_compile_and_link("main.c", "main"); /* Now I want to use …
10 c++  c  gcc 

6
RESTサーバーに対するRESTクライアントのテスト。フィクスチャーを行うには?
単体テストを作成するときは、フィクスチャを使用するのが一般的です。テスト可能なデータが少ないため、次のように言えます。1.すべてのクライアントにWilly Wonkaを含めます。2.クライアント3を削除し、クライアントにWilly Wonkaが含まれないようにします。 単体テストではそれで問題ありません。セットアップ/ティアダウンを使用して、フィクスチャを再ロードするか、トランザクションをロールバックします。したがって、テストの作成、更新、削除はトランザクション内で行われます。新しい一時データは、そのテストの間だけ保持され、その後リセットされます。 しかし、RESTサーバーをRESTクライアントから分離した場合はどうでしょうか。 RESTクライアントが正しく読み取っているだけでなく、正しく作成、更新、削除されていることを確認します。 リモートテストRESTサーバーに対してこれを行う方法の例や提案を見つけることができませんでした。 フィクスチャのみを提供するテストRESTサーバーがあるとします。HTTPの完全なステートレスの性質は、「BEGIN TRANSACTION」と「ROLLBACK TRANSACTION」または「RELOAD FIXTURES」タイプのメッセージを送信するのが難しいことを意味しますよね? 私はこれを最初にしたくないので、これについて別の考え方が必要だと感じています。 助言がありますか?
10 unit-testing  api  rest 

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