ソフトウェア工学

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

8
無限線形バイナリストレージがあると仮定して、0から無限大までの整数を表す適切なスキーマですか?
スキーマに0から始まる整数を制限なしで表すことを望みます(無限線形ストレージへのアクセスを想定)。 以下は、0から255までの数値を表すことができるスキーマです。 ストレージの最初のバイト(アドレス0)を使用して整数を格納します。 ここで、255より大きい数値を表現したいとします。もちろん、整数を表すために1バイト以上を使用することもできますが、それが固定数である限り、最終的に、元のスキーマ。 これは、タスクを実行できる別のスキーマですが、おそらく効率的ではありません。 ある種の一意の「数値の終わり」バイトを使用し、前のすべてのバイトを使用して数値を表します。明らかに、この「数値の終わり」バイトは数値表現のどこにも使用することはできませんが、これは(256の代わりに)255を基数とする番号付けシステムを使用して実現できます。 しかし、それは遅く、おそらく非効率的です。低い値でうまく機能し、適切にスケーリングできる、より優れたものが欲しいです。 基本的に、それはUUIDシステムです。再設計することなく、理論的に何年、何千年、何百万年も使用できるように拡張できる、高速に実行できるUUIDシステムを作成できるかどうかを知りたいです。
10 storage  numbers  uuid 

4
クロスプラットフォームライブラリを作成するにはどの言語を使用すればよいですか?[閉まっている]
この投稿を改善してみませんか?この質問に対する詳細な回答を提供します。これには、引用と、回答が正しい理由の説明が含まれます。詳細が不十分な回答は編集または削除される場合があります。 休業。この質問には、より焦点を当てる必要があります。現在、回答を受け付けていません。 この質問を改善してみませんか?質問を更新して、この投稿を編集するだけで1つの問題に焦点を当てます。 5年前休業。 SyncML解析ライブラリ(UIなし)を構築します。これは、ライブラリのメソッドによって供給される、ホストアプリケーションによって提供される情報に基づいてメッセージを構築できる必要があります。また、ライブラリは、ホストアプリケーションのメソッドへのコールバックを実行できる必要があります。 これをコンパイルして、可能な限り多くのプラットフォーム(Windows、Windows Phone 7 OS、OSX、iOS、Linux、Android、BlackBerry)で利用できるようにしたいと考えています。基本的に、できるだけ多くのプラットフォーム。 優先事項は、これをモバイルデバイスで使用できるようにすることです。 質問: どの設定を使用する必要がありますか?(プログラミング言語、コンパイラ、IDEなど) これらの異なるプラットフォーム用にこのライブラリをコンパイルするにはどうすればよいですか、またどのように接続しますか? 他の情報はありますか?例:クロスプラットフォーム開発の主題をカバーする記事? この種のクロスプラットフォームプロジェクトはこれまでに行ったことがないため、正しい方向に導くために利用できる情報があれば歓迎します。 私自身、C#/。NETおよびObjective-Cの経験があります。

5
一部の言語でタブではなくスペースの使用が推奨されるのはなぜですか?[閉まっている]
休業。この質問は意見に基づいています。現在、回答を受け付けていません。 この質問を改善してみませんか?この投稿を編集して、事実と引用で回答できるように質問を更新してください。 5年前休業。 たぶん私はこれだけですが、タブではなくスペースを使ってインデントする人を困らせることはほとんどありません。タイピングはタイピングSpaceSpaceSpaceSpaceよりも簡単で直感的Tabですか?確かに、タブの幅は可変ですが、スペースよりもインデントスペースの方がはるかにわかりやすくなっています。同じことがバックスペースにも当てはまります。1回または4回バックスペースしますか? Pythonのような言語でタブの上にスペースを使用することが推奨されるのはなぜですか?

1
ORM POCOはドメインエンティティを置き換えますか?
これは、この質問にいくぶん似ていますが、より広義です。 一般的には、EF 4.1のようなオームズはPOCOSをサポートし、それは今あなたのドメインエンティティを持ってしても意味がないことがデータベースに永続化されたオブジェクト? EF 4やLinq-to-SQLなどの古いORMでは、「データベースオブジェクト」が自動生成され、データベースに密結合されていたため、重要なアプリケーションの場合、より堅牢でインテリジェントなドメインエンティティにマッピングされていました。就職。 新しいORMを使用して堅牢なドメインエンティティを構築し、そのドメインエンティティとDBMSの間のマッピングを提供するだけのデータレイヤーを作成するという考えはありますか? 書面では、これが常に目標であると感じていますが、少なくとも.NETの世界では、利用可能なツールを使用して(簡単に)簡単に実現することはできません。

6
変数が使用される場所の近くで宣言するのはなぜですか?
変数はできる限り使用に近い場所で宣言する必要があると人々が言うのを聞いたことがあります。分かりません。 たとえば、このポリシーでは、これを行う必要があることを示唆しています。 foreach (var item in veryLongList) { int whereShouldIBeDeclared = item.Id; //... } しかし、これは確かに新しいintものを作成するオーバーヘッドがすべての反復で発生することを意味します。使用した方がいいでしょう: int whereShouldIBeDeclared; foreach (var item in veryLongList) { whereShouldIBeDeclared = item.Id; //... } 誰か説明してもらえますか?
10 c#  .net  variables 

9
ユーザー登録のための合理的で安全なパスワード要件は何ですか?
これは、UPSから入手したパスワードパッケージです(パッケージステータスのチェック用)。 パスワードの長さは8〜26文字にする必要があります。小文字、大文字、数字、特殊文字、スペースの3つ以上の文字タイプを含める必要があります。パスワードには、ユーザーID、名前、または電子メールアドレスが含まれていない場合があります。(SSO_1007) 私は実際にこのパスワードを生成するために多少脳を壊さなければなりませんが、それだけでなく、最も重要なことに、3日後にはこのパスワードが何であるか忘れてしまうことでしょう。ユーザーはそれほど幸せではありません。パスワードのリセットは頻繁に行われる可能性があります。ユーザーは、必要がない限り、サイトの使用を避けようとするでしょう。 ウェブサイトをセットアップするときの合理的で安全なパスワードポリシーとは何ですか?企業によっては、ハッカーがパスワードを100万回以上試行するのを恐れている可能性があるため、「特殊文字、小文字、大文字」の要件をすべて追加していますが、アカウントをオフにするか、単にパスワードを使用して、ユーザーが30回または100回試行した場合にパスワードのリセットを要求する または、ユーザーが30回試行した後、毎回5秒の遅延を追加しますか?その場合、それらの特殊文字はそれほど必要ありません。

3
どうやって協力者を探しますか?[閉まっている]
閉まっている。この質問はトピックから外れています。現在、回答を受け付けていません。 この質問を改善してみませんか? 質問を更新して、ソフトウェアエンジニアリングスタック交換のトピックになるようにします。 6年前休業。 私は、ソフトウェア/アプリ/ものについて、多かれ少なかれオリジナルの、多かれ少なかれクールなアイデアの終わりのない流れを心に留めているようです。時々、自分のアイデアの実装を始めることにします。数時間後、私は私が構築しようとしているもののまともな、多かれ少なかれ動作するプロトタイプになってしまいます。その後、目覚まし時計が鳴り響き、私は地獄のように疲れて現実の世界に戻らなければなりません。ほとんどの場合、私が始めたものは永遠に未完成のままです。時々、それは大丈夫です。正直なところ、それはつらい思いです。 しかし、私はGitHubのようなサイトがあり、他にも多くのプログラマーがいることを理解しています。プロジェクトへの協力に興味のある人を見つけるために、アイデア、提案、概念、または大まかなコードを投稿できる場所はありますか? 編集:私は「通常の方法」を知っています。自分で一定期間開発を続け、コードをオープンソース化し、開発ブログ、IRC、または他のどこにでもプロジェクトについて言及します。最終的に他を引き付けます。 私が探しているのは、プロジェクトの初期段階で他の開発者(異なる専門分野の開発者など)とつながる場所です。

1
サンプルデータを使用してアルゴリズムを適切に文書化する方法
アルゴリズムのドキュメントには何を含める必要があるのでしょうか。従うべき適切なガイドラインが見つかりません。含めることを心に留めています アルゴリズムの要約 アルゴリズムの説明 フローチャート 疑似コード 入力データセットのサンプル(複数) 出力データ 単体テスト 実験 クライアントは次のような文書を要求します。自社の数値に自信を持たせるとともに、プロセスを見込み顧客に説明して、計算をチェックおよび検証するための手順を踏んでいることを顧客に説明します。 そのようなドキュメントはどのように見えますか?(PDFの例) このドキュメントに何を追加しますか? 私が列挙したものはそれで良いですか、またはこれはどういうわけか異なって文書化されるべきですか? このようなドキュメントサンプルをGoogleでどのように検索しますか?

3
設計パターンとリファクタリングを意図的に練習するにはどうすればよいですか?[閉まっている]
閉まっている。この質問はトピックから外れています。現在、回答を受け付けていません。 この質問を改善してみませんか? 質問を更新して、ソフトウェアエンジニアリングスタック交換のトピックになるようにします。 4年前休業。 私は「パターンへのリファクタリング」という本を読んでいて、パターンをリファクタリングして使用する新しい方法を意図的に練習しなければスキルが上がらないので、どうしたらスキルを練習できるのかと考えていました。 しかし、事務処理では、各タスクをできるだけ早く完了する必要があります。ほとんどの場合、プロジェクトのデザインとアーキテクチャは私が管理しているのではなく、既存のコードと同様のスタイルに従うしかありません。悪いデザインのプロジェクトがあることもありますが、デザインスキルが私よりも優れている別の開発者もいて、彼はプロジェクト全体をリファクタリングする計画をすでに持っているので、私は彼の計画に従っています。練習する機会を得るにはどうすればよいですか?

5
コードプロジェクトに関連付けられたドキュメントを保存する最良の方法は何ですか?
ソフトウェア開発に関連するドキュメントはたくさんあります。これらには、要件、設計ドキュメント、外部PDF、顧客ファイル、テスト手順などが含まれます。現在、これらのドキュメントは場所(wiki、「ネットワーク上の場所」、ローカル開発者のハードドライブ(!)、そしてさらに悪い場所)。 それらを追跡する最良の方法は何ですか?開発にはビジュアルスタジオ(2010)を使用しており、プロジェクトに非開発者が実際にいないため、それらをVS "ソリューション"内に保存して、ソース管理され、すべての開発者が普遍的にアクセスできるようにします。 ただし、VSは実際にこれを行うように構築されていないようです。ドキュメントファイルを編集する場合、ビルドプロパティが[なし]、[コピーしない]でセットアップされている場合でも、VSはソフトウェアを再構築してから再度実行する必要があります。ソリューション内に「ドキュメントプロジェクト」を作成する方法はありません。(これには空のC#プロジェクトを使用します)。Visual StudioとWord / Excelフラットは、ソース管理がうまく機能しません。チェックインされたファイルを表示して、最初にファイルを閉じてプロジェクトに移動し、変更を行う前に手動でチェックアウトしないと、変更を行うことはできません。遅くても退屈な作業です。 とにかくこれは私たちのチームが考え出した最高のものですが、私は本当にもっと良い(無料の)ソリューションがあったらいいのにと思います。


5
モバイル開発-開発ハードウェアの入手-ベストプラクティス?
私はスマートフォンの開発に乗りたいと思っていますが、現在プラットフォームにはかなりの数の選択肢があります。(iOS / Android / WebOS / Bada / Symbian / MeeGo / WindowsMo​​bile / JavaME) コードとデバイスの全体的な機能をテストするための開発用ハードウェアが欲しいのですが。 開発およびテスト用のハードウェアを入手または借用するための最良の方法は何ですか?すべての会社とプラットフォームに適用される経験則はありますか? この状況では、私は単一の開発者です。このプロセスはスタートアップにとって変わりますか?ハッカースペース?中小企業ですか?大企業ですか?
10 hardware  mobile 

9
ハードコードされた値と防御的な設計対YAGNIの削除
最初に少し背景を説明します。Age-> Rateからルックアップをコーディングしています。年齢層は7つあるため、ルックアップテーブルは3列(From | To | Rate)で7行になります。値はめったに変化しません-それらは3年間同じままであった法定レート(最初と3列目)です。このテーブルをハードコーディングせずに保存する最も簡単な方法は、CSVを含む単一のテキスト値として、グローバル構成テーブルのデータベースにあると考えました(「65,69,0.05,70,74,0.06」は、 65-69および70-74の階層が格納されます)。比較的簡単に解析して使用できます。 次に、これを実装するには、新しいテーブル、それをラップするリポジトリ、リポジトリのデータレイヤーテスト、CSVをテーブルに展開するコードの単体テスト、ルックアップ自体のテストを作成する必要があることに気付きました。このすべての作業の唯一の利点は、ルックアップテーブルのハードコーディングを回避することです。 ユーザー(現在、ルックアップテーブルを直接使用している-ハードコピーを見る)と話すとき、「レートは決して変わらない」という意見がほとんどです。明らかにそれは実際には正しくありません-レートは3年前に作成されただけであり、過去に「決して変化しない」という変化の傾向があったため、これを防御的にプログラミングするには、ルックアップテーブルを絶対に保存しないでくださいアプリケーション。 YAGNIだと思う時を除いて。私が実装している機能は、レートが変更されることを指定していません。レートが変更されても、レートが変更されることはめったにないため、メンテナンスが考慮されることすらありません。また、レートの変更と更新されたアプリケーションとの間に遅延があった場合に影響が及ぶほどの重要な機能ではありません。 ルックアップをハードコーディングしても値が失われることはほとんどないと判断し、この特定の機能への私のアプローチについてあまり心配していません。私の質問は、専門家としてその決定を適切に正当化したかどうかです。値をハードコーディングすることは悪い設計ですが、アプリケーションから値を削除するという面倒を見ると、YAGNIの原則に違反するようです。 編集質問を明確にするために、私は実際の実装について心配していません。私は、素早く悪いことをして、YAGNIと言って正当化できるか、または最も防御力のある、努力の行き届いたアプローチをとることができるか心配しています。プロのプログラマーとして、欠陥があるとわかっている設計を実装するという私の決定は、単にコスト/利益分析に帰着しますか? 編集個人のデザインの選択に帰着すると思うので、すべての回答は非常に興味深いものでしたが、@ Corbinと@EZ Hartが私が質問で考慮していなかったことを提示するので、最良の回答があったと思います。 データベースに移動することによる「ハードコードされた値の正しい削除」と、ハードコーディングを使用した「YAGNIの効率的な適用」の誤った二分法。ルックアップテーブルをアプリの構成に追加する3番目のオプションがありましたが、これは正しい方法のオーバーヘッドを発生させず、YAGNIの効率がありません。私たちは通常、どちらか一方または両方の決定に限定されず、コスト/利益の決定に帰着します。 コード生成により、ハードコードされた値をデータベースに移動するオーバーヘッドを削減できます。また、CSVをテーブルに処理するという過度に設計された決定も削除されます。これにより、ルックアップメソッドの基本的な要件が変更された場合、生成されたコードに長期的なメンテナンスの問題が追加される可能性があります。これはすべて費用対効果分析に影響を与えるだけであり、その自動化が利用可能だったとしたら、このようなものをハードコーディングすることさえ考えていなかっただろう。 @Corbinの答えを正しいとマークしています。これは、開発コストの想定を変更するためです。近い将来、いくつかのコード生成ツールを武器に追加する予定です。
10 design 

6
非常にスケーラブルなアプリケーションのデータベースとしてSQL Serverを使用することをお勧めしますか?
Facebookの規模のWebサイトを作成することを計画しているとしましょう(もし私がWebサイトの名前を引用するなら、なぜFacebookではないのでしょうか!)。このようなアプリケーションのデータベースとしてSQL Serverを使用することをお勧めしますか? 私がこの質問をしているのは、私の多くの同僚が、SQLサーバーではそのようなアプリケーションを使用するべきではないと言っているからです。代わりにOracleまたはMySQLを好みます。

5
すべての再帰関数を反復でコーディングできますか?[閉まっている]
休業。この質問には、より焦点を当てる必要があります。現在、回答を受け付けていません。 この質問を改善してみませんか?質問を更新して、この投稿を編集するだけで1つの問題に焦点を当てます。 5年前休業。 再帰の利点は何ですか? 一部のプログラミング言語は末尾再帰を最適化できますが、一般的な用語では、再帰は通常のループよりも多くのリソースを消費します。 いくつかの再帰関数の反復バージョンを持つことは可能ですか?

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