ソフトウェア工学

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

2
「可能性が高い」および「可能性が低い」マクロの使用量は多すぎますか?
よく知られlikelyているunlikelyマクロとマクロは、コンパイラifが通常入力されるかスキップされるかを知るのに役立ちます。これを使用すると、パフォーマンスが多少(わずかに)向上します。 私は最近それらを使い始めましたが、そのようなヒントをどのくらいの頻度で使用すべきかわかりません。現在、エラーチェックで使用します。if通常はとしてマークされunlikelyます。例えば: mem = malloc(size); if (unlikely(mem == NULL)) goto exit_no_mem; それは問題ないように見えますが、エラーチェックはif非常に頻繁に発生し、その結果、上記のマクロが使用されます。 私の質問は、すべてのエラーチェックでマクロlikelyとunlikelyマクロを持っているのは多すぎるのifですか? 我々がそれに取り組んでいる間、彼らは他のどのような場所でよく使われますか? 私の現在の使用法では、リアルタイムサブシステムから抽象化するライブラリにあるため、プログラムはRTAI、QNXなどの間で移植可能になります。ただし、ほとんどの関数はかなり小さく、1つまたは2つの他の関数を直接呼び出します。多くはstatic inline機能です。 だから、まず第一に、それは私がプロファイルできるアプリケーションではありません。スタンドアロンアプリケーションではなくライブラリであるため、「ボトルネックを特定する」ことは意味がありません。 第二に、「これはありそうもないことを知っているので、コンパイラに伝えることもできます」というようなものです。私は積極的に最適化しようとしませんif。

2
「入力の取り消し」はどのように動作する必要がありますか?
Undo / Redoスタックを含むJavaアプリを実装しています。一部のアプリ(Mac OS XのTextEditなど)では、テキストを入力した後、[編集]メニューから[入力を元に戻す]を選択できます。私も自分のアプリにそのようなことを実装したいと思いますが、それがどのように振る舞うべきかについてのガイドラインを見つけるのに本当に苦労しています。 試行錯誤を繰り返して、TextEditのUndo Typingの動作についての私の推測は次のとおりです。 ユーザーが新しい文字を入力する(または削除キーを入力する)ときに、次のいずれかの状況が発生しない限り、元の[元に戻す]項目が元に戻すスタックの最上位にある場合、それをマージします 少なくとも15秒間非アクティブな状態が続いた後にユーザーが入力を続けた後は、常に新しい[元に戻す]項目を作成します。 ユーザーが長時間入力し、何らかの条件が満たされた後は、常に新しい[元に戻す]項目を作成します(これが時間ベースであるか文字数ベースであるかはわかりません)。 テキストを選択してから削除または上書きする場合は、常に新しい[元に戻す]項目を作成します(テキストを選択し、変更を加えずに元の挿入ポイントに戻って入力し続けても、トリガーされません) 実際には、Appleの戦略は機能しているように見えます(少なくとも私がタイプするときは機能します)が、最後のポイントで述べたように、私は実際にルールを理解することができませんでした。また、他のプログラムはMicrosoft Wordなどの異なる規則に従っているようです。Googleは、Undo Typingの実装に関するルールの定義済みリストを公開しておらず、その動作方法に関するベストプラクティスに遭遇していません。それで、それはどのように振る舞うべきですか?それとも、プログラマーの気まぐれ次第ですか? 編集:明確にするために、今は実装の詳細には興味がありません。特に、これを説明する信頼できる参照(ベストプラクティスやユーザーインターフェイスドキュメントなど)が存在するかどうか、または複数の製品にまたがってどのように実装されているかの説明について興味があります。

2
関数型リアクティブプログラミング—フェイは十分に表現力がありますか?
だから私はかなり多くのajax呼び出しとコールバックイズムの他の関与でかなり関与したjavascript / htmlクライアントをやっています。私はこの目的のためにFayを使用することを考えています。私はエルムを知っています。それを試してみて、FRPの要素が好きだった。今、私はフェイで同様の構造が可能かどうかを知りたいと思っています。 この時点でFayにFRPの具体的な例はありますか? 関連する技術: Arrowlets、javascriptの矢印付きFRP FlapJax、別のJavaScriptの代替 Bacon.js、javascriptのFRP Baconを使用した解決策の1つ。デモ。

4
ファイル形式を作成する適切な方法はありますか?
C#.NETで記述したアプリケーション用に独自のファイル形式を作成して、保存情報を保存し、おそらくプロジェクトの資産を保存します。何らかの方法でこれを行う方法の基準はありますか?私は単純に行っていたSerializeバイナリに私のオブジェクトとどのようにファイルを解析するために私に言うだろうヘッダを作成します。これは悪いアプローチですか?

3
LINQはどのような問題領域のために作られていますか?
C#のStack Overflowに投稿された質問を見るたびに、LINQの問題を解決する少なくとも1つまたは2つの回答が投稿されます。通常、非常に高い評価を得ている人々は、プロのようにLINQを使用しているようです。 だから私の質問は、どの問題ドメインがLINQを使用することになっていますか? サイドノートにも:それを避けるべき目的はありますか?データセットのサイズはLINQクエリのパフォーマンスに影響しますか?

6
システム自体の実装よりも機能テストの実装に多くの時間を費やしていますが、これは正常ですか?
基本的に、3つの主要なプロジェクトがあり、そのうちの2つはWebサービスで、もう1つはWebアプリケーションです。機能テストでWebサービスをできる限りカバーすることに満足していますが(3つのプロジェクトすべてに適切な単体テストがあります)、Webアプリケーションの機能テストの実装には多くの開発者時間がかかります。多くの場合、ユニットテストを含めてテスト対象の機能を実装するのにかかる時間は2回、場合によってはそれ以上になります。 マネージャーのポリシーは、ビジネスクリティカルではない場合(つまり、新しいCRUD)でも、追加するすべての機能をテストすることです。 すべてのWebサービス機能をテストすることに同意します。手動でテストするのは難しく、また、このテストは高速で実行され、実装するのにそれほど時間がかかりません。 それでは、システムコードの作成、単体テスト、QAチケットの修正よりも、機能テストの作成に多くの時間を費やすことの価値は何でしょうか。これは正常ですか?重要な機能についてのみ機能テストを作成し、重要な機能がない場合にQAに回帰テストを行わせてはいけませんか? 注:医療ソフトウェアやNASAソフトウェアを開発しているわけではありません。

4
ソロプロジェクトで機能のクリープを回避するにはどうすればよいですか?
だから私は2011年から2012年までずっと取り組んでいるプログラムを持っていますが、最後のリリースは2011年 12月でした。私は積極的に取り組んでいますが、機能クリープはそのい頭を誘い、今では未完成の機能に関する大量の情報で満たされています。 悪い点は、機能を実装するときに新しい機能が忍び寄るということです。将来、機能のクリープを回避して、1年以上で実際にリリースできるようにするにはどうすればよいですか。 このプロジェクトはiOSに基づいており、以前は各iOSバージョンの更新に関するリリースがありましたが、最後のリリースは5.1(2011)で戻ってきました。安定したリリースサイクルを取り戻せるようにしたいのですが、難しすぎることがわかりました。

2
RESTful APIでコマンドパターンを実装する
私はHTTP APIの設計を進めており、できればできるだけRESTfulにするようにしています。 機能がいくつかのリソースに広がるアクションがいくつかあり、いつか元に戻す必要があります。 これはコマンドパターンのように思えますが、どのようにリソースにモデル化できますか? DepositActionのようなXXActionという名前の新しいリソースを紹介します。 POST /card/{card-id}/account/{account-id}/Deposit AmountToDeposit=100, different parameters... これにより、実際に新しいDepositActionが作成され、そのDo / Executeメソッドがアクティブになります。この場合、201 Created HTTPステータスを返すことは、アクションが正常に実行されたことを意味します。 後でクライアントができるアクションの詳細を確認したい場合 GET /action/{action-id} Update / PUTはここでは関係ないため、ブロックする必要があります。 そして、アクションを元に戻すために、私は DELETE /action/{action-id} 実際に関連オブジェクトのUndoメソッドを呼び出し、そのステータスを変更します。 やり直しが1回だけで満足だとしましょう。やり直す必要はありません。 このアプローチは大丈夫ですか? 落とし穴、それを使用しない理由はありますか? これはクライアントのPOVから理解されていますか?

3
自動UIテストを介してどの機能をテストする必要がありますか?
最近、コンサルタントに、機能が自動化されたUIテスト(Selenium、コード化されたUIなど)でしかテストできない場合、根本的なアーキテクチャの問題があると言われました。このステートメントは少し極端かもしれませんが、UIテストが自動化されたテストスイート全体のごく一部を構成するという点で、テストピラミッドと同じラインに沿っています。 それでは、どのような機能に自動UIテストが必要ですか?優れたアーキテクチャを備えたシステムには、UIテストでしか検証できない機能が残っていますか、それともこれらのテストは単体テストとサービステストの「バックアップ」としてのみ機能しますか?

5
ASCII文字列をどのように少ないバイト数に圧縮しますか?
私は、他のデバイスにメッセージを送信する独自​​のプロトコルを備えた組み込みデバイスで作業しており、送信されたパケットを解析するアプリケーションを作成しています。各パケットは8バイトを運びます。プロトコルは、最初のバイトがヘッダーで、残りの7バイトがデータであると定義されています。 特定のID文字列を渡そうとしていますが、ID文字列は8文字(ASCII)であるため、7バイトに収まりません。 私の同僚が私に言ったのは、元の文字列の8バイトのASCII文字列を整数(10進数)に変換し、その4バイトを送信するということです。彼らは、4バイトから元の文字列を取得できるはずだと言った。これに頭を包むのに苦労しています。 「IO123456」のようなID文字列がある場合、それは0x49 0x4f 0x31 0x32 0x33 0x34 0x35 0x36のASCIIです。それを整数に変換して4バイトで圧縮すると、元の文字列を取得できます?何かが足りないのですか、同僚が間違っていますか?これは本当に奇妙な質問であると理解していますが、これは私にはまったく意味がありません。
12 strings  ascii  byte 

1
Java 8で関数型を削除する理由
JDK 8 Lambda Expert Group(EG)がJavaプログラミング言語に新しい関数タイプを含めないことにした理由を理解しようとしています。 メーリングリストを調べると、関数型の削除に関する議論のスレッドが見つかりました。 文の多くは私にとって曖昧です。おそらくコンテキストがないためであり、場合によっては型システムの実装に関する知識が限られているためです。 ただし、このサイトで安全に定式化できると思われるいくつかの質問があり、それらの意味をよりよく理解するのに役立ちます。 メーリングリストで質問をすることはできますが、スレッドは古く、すべての決定がすでに下されているので、私は無視される可能性があります。とりわけ、これらの人がすでに計画で遅れていることがわかります。 関数型の削除をサポートし、SAM型の使用を推奨するという彼の答えで、Brian Goetzは次のように述べています。 具体化なし。関数型を具体化することの有用性について長いスレッドがありました。具体化しないと、関数の型はぐらついています。 彼が言及しているスレッドが見つかりませんでした。今、私は、構造関数型の導入がJavaのほとんど名義型システムに特定の複雑さを暗示しているかもしれないことを理解できます。理解できないのは、具体化されたSAM型の具体化の違いです。 彼らは両方とも同じ具体化の問題の対象ではありませんか?関数型が具体化の観点からパラメータ化されたSAM型とどのように異なるかを誰もが理解していますか? 別のコメントで、ゲッツは次のように述べています。 タイピングには、名義型と構造型の2つの基本的なアプローチがあります。名義のアイデンティティはその名前に基づいています。構造型のアイデンティティは、それが構成されているものに基づいています(「int、intのタプル」または「intからfloatへの関数」など)。ほとんどの言語は、ほとんど名義的またはほとんど構造的です。「辺り」を除いて、名義型と構造型をうまく組み合わせた言語は多くありません。Javaはほぼ完全に名義です(いくつかの例外を除きます:配列は構造型ですが、下部には常に名義要素型があります;ジェネリックには名義型と構造型も混在しており、これは実際には多くのソースの一部ですジェネリックに関する人々の苦情の報告。)構造型システム(関数型)をJavaに移植する s名義型システムは、新しい複雑さとエッジケースを意味します。関数型の利点はこれだけの価値がありますか? 型システムの実装の経験がある方。彼がここで言及しているこれらの複雑さやエッジケースの例を知っていますか? 正直に言って、JVMに完全に基づいているScalaのようなプログラミング言語が、基盤となるプラットフォームの具体化の問題があっても、関数やタプルなどの構造型をサポートしていると考えると、これらの申し立てに混乱します。 誤解しないでください。関数型はSAM型よりも優れているべきだと言っているのではありません。彼らがこの決定をした理由を理解したいだけです。

10
可変変数を使用せずに有用なJavaプログラムを作成する方法
私は読んでいた関数型プログラミングについての記事をどこライター状態 (take 25 (squares-of (integers))) 変数がないことに注意してください。実際、3つの関数と1つの定数しかありません。変数を使用せずにJavaで整数の2乗を書いてみてください。おそらく、それを行う方法はありますが、それは確かに自然なことではなく、上記の私のプログラムほど読みやすくはありません。 Javaでこれを達成することは可能ですか?最初の15個の整数の2乗を出力する必要がある場合、変数を使用せずにforループまたはwhileループを記述できますか? Mod通知 この質問は、コードゴルフコンテストではありません。関係する概念を説明する(理想的には以前の回答を繰り返さずに)答えを探しています。さらに別のコードだけではありません。

4
「複合」ゲッター/セッターVS個別メソッドの利点は何ですか?
これは、「jQueryからの」「結合された」ゲッター/セッターメソッドと呼ばれるものです。 var foo = $("<div>This is my HTML</div>"), myText; myText = foo.text(); // myHTML now equals "This is my HTML" (Getter) foo.text("This is a new value"); // The text now equals "This is a new value") これは、個別の(理論的な)メソッドを使用した同じロジックです。 var foo = $("<div>This is my HTML</div>"), myText; myText = foo.getText(); // myHTML …

4
リレーショナルデータベースで列挙型をどのように表す必要がありますか?
私は自分の会社で作業しているデバイスで発生するトランザクションを追跡するリレーショナルデータベースの開発に取り組んでいます。デバイスで発生する可能性のあるトランザクションにはさまざまなタイプがあるため、メインレコードテーブルの1つに「trans_type」フィールドがあります。私のグループは、このフィールドの型を整数にし、列挙型として扱うことにしました。私の直感では、このフィールドを文字列にしてデータベースのデータをより読みやすく使いやすくすることをお勧めします。私の同僚は、これが価値以上のトラブルを引き起こすのではないかと心配しているようです。文字列の比較はコストがかかりすぎるため、タイプミスの可能性はあまりにも大きな障壁です。 したがって、あなたの意見では、本質的に列挙値であるリレーショナルデータベースのフィールドを扱うとき、このフィールドを整数または文字列にする方が設計上の判断が優れていますか?または、私が見落とした他の選択肢はありますか? 注:明示的な列挙型は、使用しているデータベースではサポートされていません。そして、このデータベースとのインターフェースとなる開発中のソフトウェアはC ++で書かれています。

3
ファーストクラスのライブラリを出荷しています。知っておく必要がある落とし穴はありますか?
私は自分のキャリアで「ファーストクラスライブラリ公開」の成果を解き明かそうとしているWeb開発者です。コミュニティの経験を活用して、可能な限りスムーズに進むための提案や推奨事項があるかどうかを確認したいと思います。知っておく必要のある詳細や落とし穴はありますか?ビルドプロセスについて何か特別なことはありますか? 私がいる場所は次のとおりです。 ライブラリはユニットテストされており、約97%のコードカバレッジがあります。 APIは十分に文書化されており、インテリセンスサポートのxmlドキュメントが作成されています パブリック/プライベートクラスアクセサーが正確かつ正しいことを確認しました。すべてのゲッター/セッターについても同じことが言えます エラー処理は私が望んでいるほど優雅ではありませんが、私は締め切りに間に合っており、今のところ「それがうまくいく」ことを受け入れています わかりやすいログはありません。Debug.Writelineが広く使用されていました...最近、これが私の経験不足を反映していることがわかりました:( あなたのアドバイスは大歓迎です! ライブラリはレポートの生成に使用されます。標準の帽子-読み取り専用データベースに接続し、計算を実行し、データをフォーマットし、応答ストリームに出力します。 私は、辞めたプログラマーの一人を補うためのフリンジリソースとしてタップされ、このタスクは「歯を切る」プロジェクトとして私に与えられました。クラスライブラリは、プロダクションコードを記述するときに使用する社内の他のプログラマ向けにリリースされる予定です。

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