ソフトウェア工学

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

6
本当に役立つUML図
UMLにはダイアグラムのジャングルがあります。 プロファイル図、クラス図、パッケージ図... ただし、(IMHであり、かつ経験不足ではない)Oでは、すべての図を実行するのはやり過ぎです。 したがって、どのUML図がWebコンテキスト、より具体的にはブログに適しているか(ゼロから作成したい)。 私がUMLダイアグラムを使用したからといって、コードが素晴らしくて見事であるとは限らないことを理解しています...

4
禁止されているサードパーティの方法について警告する
注:この質問は、JavaまたはC#で記述されたコードに関するものです。 私はいくつかの大規模なプロジェクトを管理しており、サードパーティ/ SDKのメソッドで問題(必ずしもバグではない)を発見し、代わりに使用する必要がある独自の拡張機能を作成しました。これらの方法を使用することは、このプロジェクトでは推奨されないことを開発者に覚えておいてください。 独自のライブラリを使用していた場合は、そのメソッドを簡単に削除したり、廃止/非推奨にしたりできますが、自分で作成していないライブラリに対してはそうすることはできません。 例として、2つのオーバーロードを提供するライブラリを使用します。 acme.calculate(int quantity_, double priceInUsDollars_); acme.calculate(int quantity_, string currencyCode_, double priceInCurrency_); 私たちは開発者が常に最初のものを使用して、私たち自身の標準的な為替レートシステムから米ドルで価格を得ることを望んでいます。そして、IDE(Eclipse / Visual Studio)が最初の開発者を使用するときに開発者に警告するのは良いことです。コンパイラの警告でも十分です。 今のところ、現状では、コードレビュー担当者にそのようなエラーを発見してもらう必要があります。ご覧のとおり、これは信頼できるアプローチではありません。 準備ができている1つの方法は、独自のチェックスタイルチェック(http://checkstyle.sourceforge.net/writingchecks.html)を記述することです。でも、何か使えるシンプルなものはないのかと思っていました。私が説明したようなIDE /コンパイラの警告を達成する方法を知っている人はいますか? IDE /コンパイラ以外のソリューションは大歓迎です。
9 java  c#  coding-style  ide 

4
JavaでのScalaのスケーラビリティ
私はScalaがJavaよりも並行性をうまく処理するという記事を読みました。 http://www.theserverside.com/feature/Solving-the-Scalability-Paradox-with-Scala-Clojure-and-Groovy ...スケーラビリティの制限は、特にJavaプログラミング言語自体に限定されますが、Javaプラットフォーム全体の制限ではありません... Javaのスケーラビリティの問題は新しい発見ではありません。実際、これらの問題に対処するために多くの作業が行われ、最も成功したプロジェクトの2つはScalaとClojureという名前のプログラミング言語です... ... Scalaは、Java言語の問題のあるスレッドとロックパラダイムを回避する方法を見つけています... これはどのようにして可能ですか?Scalaは、JavaからScalaにすべてのスレッドとロックの問題をもたらすJavaのコアライブラリを使用していませんか?

2
例外階層設計
私の会社では、自分で設計し、インターフェイスとして指定するサーバーセントラルサービスを含むWebアプリケーションを構築しています。つまり、インターフェイスはアプリケーション固有であり、その後、時間の経過とともに変更される可能性があるサードパーティのライブラリを使用して実装されます。例外に関しては、サービスによってスローされる例外は、実装固有の例外ではなく、独自のアプリケーション固有の例外でなければならないことに気付きました。 さて、私は私たちの例外がどのように構造化され、相互に関連付けられるべきか疑問に思っています。 まず、一般的な例外について考えますMyAppException。この例外は、予期しない問題が発生したことを示しています。ユーザーにメッセージを表示して、問題が発生し、現在作業中であることを伝えることが最善の方法です。エラーは、データベースがクラッシュしたか、何か類似したものである可能性があります。この例外は、データベースを操作するすべてのメソッドからほとんどスローされます。 次に、例外を検討しますMyAppDuplicateException。この例外は、ユーザーがすでに存在するデータベースに何かを保存しようとしたことを示します。ここでは、より具体的なエラーメッセージを表示できます。この例外は、データベース行を挿入または更新するメソッドからのみスローされます。 アプリケーションにはMyAppDuplicateException、その他の予期しないエラー状況と同様のその他の例外を含めることもできます。例MyAppNotFoundExceptionなど... 今私の質問に: 他の例外は拡張する必要がありますMyAppExceptionか?実はその理由はわかりません。色んなところで見ただけで、目的があるのか​​なと思います。私が見るようにこれの欠点は、try / catch-statementがこの場合の特定の例外を気にする必要がないことです。それは単にトップの例外をキャッチすることができ、そのため、特定の例外を持っていることのほとんどのポイントであった特定のエラーを処理する必要はありません。 他の例外がない場合ではない拡張するMyAppException、すべきMyAppExceptionことjava.lang.RuntimeException?これは、コードを実行してそれをキャッチする必要はありません。例外のポイントは、何か不明なことが発生し、実行中のコードがそれを処理できるように期待されていないということだからです。リクエストのエントリポイントのコードには、キャッチMyAppExceptionしてユーザーにメッセージが表示されることを確認するtry / catchステートメントを含めることができます。 編集などの特定の例外をMyAppDuplicateExceptionチェックする必要があるかどうかは問題ではありません。チェックする必要があります。

2
ネストされたループは常にO(n ^ k)ですか?
別のループ内にループがあっても、内側のループが1回しか実行されないことがわかっている場合、このアルゴリズムはO(n ^ 2)のままですか? For i = 1 to n do For j = 1 to i do If (i==j) do For k = 1 to n {Do stuff} 2番目のループの反復ごとに1回iだけになるため、非常に内側のループは最大で1回実行されjます。これはまだn ^ 3ですか?

7
プログラミング中のリファクタリング
問題が発生した場合、特に性質が複雑な場合は、時間をかけて問題を解決するためのアプローチについて考えます。これにもかかわらず、よくあることは、ソリューションをプログラミングしているときに、見逃した問題の詳細について考え始め、それに応じてコードを調整することです。 結果は、リファクタリングする必要があるコードの混乱です。 私は「リファクタリング」をしたいのですが、簡単に聞こえますが、それを実行するのは本当に大変です。見逃した細部が小さい場合、すでに書いた内容を消去して本来の方法で書くのではなく、デザインに小さな更新を加えたくなります。 それは明白な答えのある質問のように聞こえますが、「あなたが行くにつれてリファクタリング」をよりよくするために使用するテクニックはありますか?これは良い原則であることは知っていますが、何度も何度も失敗します。

1
非営利のための非営利テクノロジー?
私はコミュニティに還元する方法を探していましたが、まだ自分に合ったものを見つけられなかったので、アイデアが思い浮かびました:非営利団体を対象とする非営利技術「会社」。 これらは存在しますか?私はいくつかのGoogle検索を行っており、営利企業によって作成された非営利団体を対象とするソフトウェア、または私がとんでもない金額であると私が信じるものに請求するソフトウェア、非営利団体向けの会議、および彼らが行う可能性のあるテクノロジーのみを見つけることができます使用-または、デジタルディバイドと、非営利団体がテクノロジーを重要であると見なしているが、それを採用するための資金や知識がないことについて不満を述べている記事。 疑似「ビジネスモデル」 「デジタルディバイド」を埋めるために非営利団体を直接対象とするオープンソースの501(3)(c)組織。ほとんどのサービスは無料で、カスタマイズにはコンサルティング料金がかかります。寄付は受け入れられ、政府の助成金が求められます。これにより、非営利団体はテクノロジーセクターの営利団体と歩調を合わせることができますが、費用はほとんどかかりません。おそらく最初に対象となる「産業」は、失業やフードバンクなどの主要な社会的ニーズを満たすものでしょう。

1
CSRFセキュリティのトークン更新はどのくらいの頻度で行う必要がありますか?
背景から始めるために、この投稿はCSRFトークンについてJeff Atwoodが述べたものです。このページで、彼は続けて言っています: さらに強力ですが、より複雑な防止方法は、サーバーの状態を活用することです。つまり、クライアントに送信するすべてのHTMLフォームに対して一意のランダムキーを生成(およびタイムアウト付きで追跡)します。Stack Overflowでこのメソッドのバリアントを使用して、大きな成功を収めています。 しかし、この投稿自体では、Jeffはトークンをいつ、どのように更新する必要があるかについて決してコメントしていません。 私が取り組んでいるWebアプリで同様のテクニックを使用していました。それはこのように動作します: ユーザーがPOSTサーバーにデータを送信するたびに、csrfトークンが送信されます。 このCSRFトークンは、ユーザーのセッションで暗号的に強力なCookieに保存されます。 トークンが有効な場合は、ユーザーのリクエストが処理され、逆の場合も同様です。 リクエストが有効な場合は、サーバー側の古いトークンを破棄し、新しいトークンを作成します。サーバーからの応答には、次の要求で使用される新しいcsrfトークンが含まれています。ページ上のすべてのフォームの古いトークンが新しいトークンで更新されるため、次のリクエストが適切に処理されます。 トークンを更新してからPOSTリクエストするのが賢明ですか、それともユーザーがGETリクエストを行ったときにのみ更新を行い、次のGETリクエストが行われるまで同じトークンを保持する必要がありますか?

9
アプリを使用するためにユーザーに登録を要求する必要がありますか?
ですから、これまで取り組んできたアプリをリリースするのに非常に近づいており、統合するサーバーでユーザーを登録できます。そのため、ユーザーがアプリを使用する前にアプリに登録する必要があるかどうか疑問に思いました。アプリは機能の登録を「必要とする」ことはありません(ただし、ユーザーのデータをクラウド内のアカウントに保存できる将来の更新についてはいくつかのアイデアがあります)が、それでもリストを用意しておくと便利です登録ユーザー。 ユーザーに登録を要求する必要があると思う理由の1つは、アプリが初めて起動したときに、ユーザーが私のプライバシーポリシーと利用規約に同意する必要があるためです。したがって、登録画面を作成した場合は、ユーザーを法的な言葉で攻撃するよりも、簡単でわかりやすいかもしれません。 しかし、ユーザーに登録を要求すると、一部のユーザーに費用がかかると思います。一度アプリをダウンロードしたところ、登録を求められましたが、怠惰でした。それは登録を要求することに対する正当な恐れですか? ありがとう! 編集: 明確にするために、登録が必要だった場合、どの情報を収集する必要がありますか:名前、電子メール、パスワード?その他?そして、私たちはそれらを電子メールでまったくスパムしないでしょう。また、非常に強力なプライバシーポリシーがあり、すべてのデータを安全に保存します。

4
ネガティブユーザーストーリーをフォーマットするにはどうすればよいですか?
正式なユーザーストーリースタイルに従います。 として<user>、私は<goal>そうしたいです<benefit>。 私たちのチームは、システムの所有者がユーザーにマイナスの影響を与える何かをしたいという要望がある場合、表現することに困難を感じました。 任意の例として、所有者がメールをチェックするたびにシステムが顧客に請求することを望んでいるとしましょう。 ユーザーストーリーの正式なスタイルに従って、次のように記述します。 顧客として、システム所有者が収入を増やすことができるように、メールをチェックするたびに請求されたいと思います。 明らかに、顧客は請求されることを望んでいません。物語は読みにくくなり、言語は事実を妨げています。 要件はどのように異なる形で記述できますか?

2
ソースコードで完全修飾クラス名を使用する理由は何ですか?
私は最近、開発者がソースコードで完全修飾クラス名とインポートしたクラス名の両方を使用するコードに出くわしました。 例: import packageA.Foo; public class Example { public packageB.Bar doSomething() { final Foo foo = new Foo(); ... } } ソースコードのクラスに完全修飾名を使用したい唯一の理由は、2つの異なるパッケージに同じクラス名があり、2つを区別するために完全修飾名が必要な場合だと私は思っていました。私が間違っている?

5
PHPで任意精度の算術関数を使用する必要があるのはいつですか?
私の同僚は、帯域幅の計算にBinary Calculator関数を使用しています。テラバイトと同じくらい、割り振り時にパーセンテージが分割されます。バイトを失うことがないように、彼のこれらの関数の使い方は正しいようです。彼は今、すべてにそれらを使用しているようですが。 マニュアルは言うだけです: 任意精度の数学のために、PHPは文字列として表される任意のサイズと精度の数値をサポートするBinary Calculatorを提供します。 どのくらいのサイズですか?本当に必要ですか?PHPのデフォルトのフロートはどのくらいの大きさですか?これまたは覚えておくべきことに関して何か良いアドバイスはありますか?
9 php 


17
CSのマスターをネガティブとしてカウントしますか?[閉まっている]
現在のところ、この質問はQ&A形式には適していません。回答は事実、参考文献、専門知識によって裏付けられると期待していますが、この質問は、議論、議論、投票、または拡張ディスカッションを求める可能性があります。この質問を改善でき、再開できると思われる場合は、ヘルプセンターにアクセスしてください。 8年前休業。 開発者へのインタビューの経験では、Comp Sciでマスターを達成した候補者は、マスターを持たない人よりも平均して悪いプログラマーである傾向があると感じています。 それは私だけですか、それとも他の人がこの現象に気付いていますか?もしそうなら、なぜそうなのでしょうか? 更新 私は思慮深いコメントに感謝します。私が行っている比較では、もっとはっきりしているべきだったと思います。同じ時期に大学を卒業した2人の候補者を考えると、修士号を取得した人は、業界ですべての時間を費やした人よりも平均して悪いプログラマーのようです。

1
プロファイリングツールが使用できない場合、プログラムのパフォーマンスを最適化するにはどうすればよいですか?
現在、パフォーマンスを改善したいOpenGlプログラムに取り組んでいます。パフォーマンスは大丈夫ですが、強力な専用GPUでは理想的ではありませんが、統合グラフィックス(<10 fps)ではひどいです。通常のプログラム(CPUベース、OpenGlまたは他のGPU APIなし)では、プログラムでプロファイラー(おそらくCLionに組み込まれているもの)を実行し、ほとんどの時間を費やしている場所を確認してから、より良いアルゴリズムで作業しますそれらのエリアの場合、またはそのエリアが呼び出される量を減らす方法を見つけます。 OpenGlプログラムでこの手法を使用すると、メインスレッド(最適化したいスレッド)でのプログラムの時間の大部分(約86%)がOpenGlドライバーの.soファイルに費やされていることがわかります。さらに、プログラムの実行中のCPU使用率は非常に低いですが、GPU使用率は95%から100%の間で停止します。これらの情報を総合すると、ボトルネックがGPUにあるため、最適化する必要があることがわかります。 ここで問題が発生します。ただし、プロファイラーを使用して私の最適化を導く通常のテクニックは、特定のGPUプロファイラーがないと機能しません。そのため、GPU処理時間が費やされている場所を教えてくれるプロファイラーを見つけるために、いくつかの調査を行いました。リモートで使用できるものは何も見つかりませんでした。すべてがWindowsのみ(Linuxのみを実行しており、プログラムはまだWindowsに移植されていません-ずっと先までは移植されません)であるか、更新されていないか、および/またはこのプロジェクトです。 そのため、私は質問します。関連するプロファイラーが存在しない場合、プログラムのパフォーマンスをどのように最適化できますか?問題がどこにあるのかを推測し、そこから最適化を試みましたが、最適化(錐台カリング)によってGPUの作業が約半分になっていることが確認できたとしても、違いはありませんでした。良い答えは、Linux上のOpenglに適用可能なプロファイリング手法を提供するか、プロファイラーなしで機能する手法を提供することです。

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