ソフトウェア工学

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

3
ハードウェアチームに大きく依存しているソフトウェアチームに最適なソフトウェア開発モデルはどれですか。
ソフトウェア開発には、競合するベストプラクティスがいくつかあります。私が発見したことから、多くのチームがアジャイルプラクティスの恩恵を受けている場合があります。ただし、他のいくつかのケースでは、統一プロセスの使用はIBMなどの大企業によって支持されています。 私が見つけた共通のテーマは、主にソフトウェアを開発するチームにとってはうまく機能するように見えました。 私は、ソフトウェアが実行されているハードウェアを生産するチームが反対側にいるショップで働いている人々にとって何が最もうまくいったか知りたいです。たとえば、1つのチームが複数のカスタムハードウェアを搭載したクレートを組み立てます。一方、これらのクレートで動作するソフトウェアを開発する必要があります。この場合に最適に機能する開発モデル(アジャイル、スパイラルなど)が見つかりません。 どんな知恵もこの領域は高く評価されます。

3
コンテストにソフトウェアを提出すると、それは彼らの財産になりますか?
ゲームをコンペティションに提出しようとしていますが、ルールを確認すると、チャンクが私の注意を引きました。 すべてのエントリーはスポンサーの唯一かつ独占的な財産となり、承認または返却されません。スポンサーは、すべての結果と収益、およびエントリのすべての要素または構成要素(モバイルアプリ、デザインドキュメント、ビデオトレーラー、再生可能およびすべてのイラスト、ロゴ、機械、レンダリング、文字、グラフィックス、デザイン、レイアウト、またはその他の素材)、およびすべての著作権と更新および著作権の拡張。前述の制限なしに、各適格な参加者は、自分のエントリに対するすべての権利、権原、および利益をスポンサーに絶対的かつ取り消し不能に割り当てて譲渡し、スポンサーは権利を有し、他者に使用を許可することができます。コピー、サブライセンス、送信、変更、操作、公開、削除、複製、実行、配布、表示、およびその他の方法でのエントリの利用(およびその派生物の作成および利用)または一部には、スポンサーによって作成、開発、公開、または配布されたあらゆる種類または性質のアプリおよびその他の作品において、該当する参加者が権利を留保することなく、エントリーのコンポーネントのいずれかでスポンサーの名前で任意の国の商標として登録し、それに関するクレーム。スポンサーは、領土全体にわたって、現在知られている、または今後考案されるすべてのメディアにおいて、その唯一かつ絶対的な裁量により、エントリを変更、適応、変更、使用、組み合わせるなどの独占的権利を永続的に有するものとします。 、 したがって、ゲームはスポンサーの所有物になります。ただし、彼らはソースコードを要求しません。だから、私はまだソースコードの権利を所有していますか?そして、それが上記の競争に勝たない場合、私は彼らの商標なしで自分でそれを公開することができますか?私はソフトウェアの合法性に非常に慣れていないので、説明をお願いします。 私はソースさえも所有しない可能性があるので、ゲームコアエンジンを非常に制限のないライセンスでオープンソースソフトウェアにしてプロジェクトに含めることは可能ですか?それでも少なくともゲームエンジンは所有していますか?それともそのように機能しませんか?

8
新しいマイクロソフトテクノロジを学習/実装する理由[終了]
閉まっている。この質問はトピックから外れています。現在、回答を受け付けていません。 この質問を改善してみませんか? 質問を更新して、ソフトウェアエンジニアリングスタック交換のトピックになるようにします。 5年前休業。 私は中規模のソフトウェア開発者として大規模な医療機関で働いています。Microsoftテクノロジー(ASP.NETとSQL Server)を使用したIT業界で10年以上の経験があります。 カンファレンス、コードキャンプ、.netユーザーグループミーティングに行くと、MVC、LINQ、Entity Framework、WCF Webサービスなど、あらゆる種類の新しいツールとテクノロジについて耳にします。 asp.net 2.0の同じ古いものを使用するゾーン。データアクセスレイヤーに型指定されたデータセットを使用しています。私はマスターページでWebフォームと機能豊富なサーバーコントロールを使用しています。私は、アプリケーションが必要とするデータを取得するために、単純な古いSQLを使用し、型付きデータセットにクエリを作成する方法を知っています。 私のキャリアを通じて、私は自分のスキルセットで時代遅れにならないように常に敏感です。私が現在使用しているものは問題なく動作し、私の開発時間は高速です。しかし、もし私が解雇されるとしたら、インタビューで私が書いたMVCアプリの数を尋ねられるのではないかと心配しています。または、LINQまたはWCF Webサービスの使用方法。 いくつかの新しいテクノロジーについて見た会議、本、ビデオの数は関係ないことはわかっています...それを実装/使用する必要があるか、それがうまくいかないだけです。また、面接するマネージャーは気にしません誰かが何かをどれだけ読んでいるか、実際の使用と技術の経験のみ。 書く新しいプロジェクトがあります。私は上司のところに行って、私が知らないテクノロジーを学習/実装するためのプロジェクトに追加の時間を求めました。私たちの組織は、従業員が「学び、成長」し、教育を続けることを奨励しています。しかし、新しい何かを実装するためにもっと時間をかけるように頼むとき、私はいつも抵抗を感じます。私のマネージャーは、これらの新しいテクノロジーを実装するための具体的なビジネス上の理由を求めています。私にはビジネス上の理由はありません。私の理由は、時代遅れになりたくないからです。将来、他の開発者がプロ​​ジェクトをより保守しやすくなると言えるかもしれません。ある時点で、これらの古いテクノロジの使用をやめることができるからです。Linq / Entity Framework / MCVアプリのパフォーマンスは向上しますか?顧客(私がこのアプリを作成している部門のユーザー)が必要とするほど、そうですか?疑わしい。 私はこれに関するあなたの男の考えに興味があります。あなたの多くは、新しい技術を使用しようとすることで同様の苦境を持っていますか?テクノロジーの最前線にいるとは思えません。これらのテクノロジーを使用するために明らかにする「ビジネス上の理由」はありますか? 前もって感謝します!テキストの長い壁でごめんなさい。

5
プログラマはコードの背後にある拡張ロジックをどこで説明すべきですか?
私はC#でいくつかの定量ライブラリを開発しました。XMLDocコメントに関連する古典的な情報(メソッドシグネチャの基本情報を含む)だけでなく、メソッド内で使用されている数式も理解することが重要です。 したがって、コードに拡張ドキュメントを含めることができるようにしたいと考えています。これには、たとえば、ラテックスの数式、グラフなどを含めることができます。 そのような情報をAPIドキュメントに含める必要があると思いますか? または、例として開発ブログに含める必要がありますか? この種の目的で通常使用される一般的なツールはありますか?

4
Androidを初めて使用するユーザーのために、Android開発者サイトを読むための手順はありますか?[閉まっている]
閉まっている。この質問はトピックから外れています。現在、回答を受け付けていません。 この質問を改善してみませんか? 質問を更新して、ソフトウェアエンジニアリングスタック交換のトピックになるようにします。 5年前休業。 要約すると、私は本を購入できます。人々は「開発者サイトを読むだけ」と言います。テクノロジーの初期の学習ピースをスプーンで食べさせたいのです。 、議論されているセクションに直接結びついた例、明確な道など)。 私はAndroid開発の本を購入する必要はなく、Androidデベロッパーサイトを読むだけで十分だと思っています。知りたいことがすべて含まれているからです。私はそれを消防ホースから飲むように見ています。 しかし、私は基本を説明するのが好きな人の一人です。リファレンスドキュメントに落ちるのではなく、自分の知識を蓄積したい。また、カバーされているすべてのトピックまたはほとんどのトピックが表示されていることを確認します。フラグメントやコンテンツプロバイダーなどについて何も知らないので、間違ったものを開発するのは嫌です。 それで、それは素晴らしい本であり、どんな本よりも優れています(悪臭のある本は必要ありません)。本がレイアウトするのと同じ方法で提供される情報を取得するためにサイトをトラバースするにはどうすればよいですか?

6
準オープンソース独自のソフトウェアの用語はありますか?
たとえば、あるソフトウェアの新機能の開発を社内で続けたいが、以前のバージョンのソースコードを公開して、既存の公開機能まで含め、他の人々がソフトウェアを自分で使用および変更できるようにしたいとします。 、さらには開発ブランチに適用できる変更に貢献する可能性さえあります。 この種の配置に用語はありますか、そして既存のバージョン管理ツールとプラットフォームを使用してそれを達成する最良の方法は何ですか?

5
継続的な統合-毎回デバッグとリリースをビルドしますか?
各プロジェクトのデバッグおよびリリースバージョンをビルドするために継続的インテグレーションサーバーを設定するときの標準的な方法ですか?ほとんどの場合、開発者はデバッグモードのプロジェクト構成セットを有効にしてコードを記述し、異なるライブラリパス構成、コンパイラー定義、またはデバッグ/リリース間で異なるように構成された他の項目があり、それらが異なる動作をする可能性があります。 各プロジェクトのデバッグとリリースの両方をビルドするようにCIサーバーを構成しましたが、考えすぎているのではないかと思います。私の仮定は、迅速なフィードバックを得ることができる限りこれを行うことであり、それが発生したら、おそらくリリースを夜間ビルドにプッシュします。これにアプローチするための「標準的な」方法はありますか?

1
提案された変更の潜在的なレビュー担当者を特定するツール
入力として提案されたパッチとgitリポジトリを受け取り、開発者がパッチをレビューするのに最適な候補であることを識別するツールはありますか?git履歴を使用して、変更されるコードのファイル/セクションで最も経験のある作成者を特定します。 編集:ユースケースは、大規模なオープンソースプロジェクト(OpenStack Compute)であり、マージの提案が出てきて、よく知らないコードのチャンクにマージの提案が表示され、他の誰かの名前を提案されたレビュー担当者のリスト。これにより、その人は、マージ提案を見るための通知を受け取ります。

2
HATEOAS REST APIの「無効な操作」ステータスコード
HATEOAS APIでは、可能な状態遷移を表すリンクが返されます。適合クライアントはそれらのリンクを取得してたどるだけですが、不適合クライアントが提供されたリンクをたどるのではなくURIを構築している場合、返される最も適切なステータスコード/応答は何でしょうか? 400は、応答本文のいくつかの情報と一緒に機能します-これは私たちが現在行っていることです 403リクエストが機能しない可能性があることを意味するため、間違っていると思いますが、将来的にリンクが使用可能になる可能性があります 404はもっともらしいようです-この時点ではリソースは存在しません 人々はどう思いますか?条件付き要求は古い応答(結果として412sなど)に基づいて要求を処理できることを知っていますが、これは少し異なる状況です。 更新: これらのタイプの無効な操作に対する正しい応答は404であることがわかりました。リクエストの構文が正しい場合、有効なリソースに送られますが、ビジネスルールに違反しています。次に、いくつかの不自然な例を示します。 クライアントが、互いに20%以内でなければならない2つの数値を提供できるとしましょう。 クライアントがいくつかの計算を経た数値を提供できるとしましょう。その結果は、提供された元の数値が正しくなかったことを示しています。 400はこれらの正しい応答ですか?

6
constストレージはどのように機能しますか?(項目2、スコットマイヤーズの効果的なC ++)
16ページのItem2(#definesよりもconsts、enums、およびinlineを優先する)で、Scottは次のように述べています。 また、優れたコンパイラは整数型のconstオブジェクトのストレージを確保しませんが... 分かりません。たとえば、constオブジェクトを定義すると、 const int myval = 5; その後、コンパイラは値5を格納するために(intサイズの)メモリを確保しなければなりません またはconstデータは特別な方法で格納されていますか? これは私が思うコンピュータストレージの問題です。基本的に、コンピューターはconstオブジェクトをどのように格納して、ストレージが確保されないようにしますか?

5
偽の友人?C ++、C#、Javaと比較したCのキーワード「静的」
私にとって、staticC でのキーワードの使用、およびC#やJavaなどの言語の使用は、"to be"(英語)や "bekommen"(ドイツ語)(=英語で "to get")などの「偽の友達」です。 C staticでは、関数または変数には、同じソースファイル内の関数を介してのみアクセスできます。これはprivate、C ++、Java、およびC#の関数とメンバーに相当します。 C ++では、JavaとC#staticは、メソッドがクラスインスタンスのメンバーではないことを意味しますが、事実上、C関数と名前空間に似ています。 私見これら2つの概念はかなり異なるので、なぜC ++以降のJavaおよびC#の設計者はstaticその動作のキーワードを選択したのですか?見落としている論理的な接続はありますか? 編集 私は知っstaticていprivateます、CではC ++ と同様の方法でアクセシビリティを管理しませんが、そのように使用できます、https://stackoverflow.com/a/1479639/124983を参照してください

3
Webブラウザはどのようにパスワードを保存しますか?
現在のWebブラウザー(またはモバイルメールクライアントと一般的なソフトウェア)はユーザーパスワードをどのように保存しますか?パスワードの保存に関するすべての回答は、パスワード自体ではなく、ハッシュのみを保存する必要があると述べています。しかし、後でパスワードをプレーンテキストで必要とすることがわかっているときに、弱い暗号化(既知のキー)を使用せずにそれらをプレーンテキストで保存することなく、パスワードを保存するための最良の手法を見つけるためにWebを検索するのに苦労しています。ユーザーにマスターパスワードを要求しません。何か案は?

5
機能要件-動詞に基づく表現を使用しますか?
質問 要件ドキュメントの機能要件では、動詞に基づく表現を使用する必要がありますか? 環境 学校の割り当て、チームでの作業、SDLCによる作業。要件ドキュメントが作成され、設計に取り掛かりました。 問題 要件のドキュメントには、アプリの機能と呼ばれるもの、つまり機能要件の一覧が列挙されています。その中には、「何を」ではなく「どう」だと思いますが、今、デザインに取り組もうとすると、デザインの一部が時期尚早に規定されているような気がします。 私はこれを前にやったことがありません!私にとっては、「何を」ということを厳密に扱うべきです。 現在の例 仕事がオムレツを作ることであるふりをします。リスト:卵を割る、ボウルに割り込む、スクランブルなど; どのように領土に線を越えます。そのトラックに沿って、次のような表現も作成します。作成、生成、リスト、計算、決定、検証など-基本的に動詞。現在、部分的に動詞に根ざしている要件のリストがあります。 オムレツの要件ドキュメントについての私の考えは、2つの卵、xオンスのハム、xオンスのベーコン、xオンスのモンテリージャックチーズ、xオンスのコリアンダーなどなどです。何も(名詞) 。 経験があれば、要件ドキュメントを完成させる前に、発言した可能性があります。

3
n層アプリケーションにアプリケーションサービス層を導入するタイミング
私は、データベースからデータをフェッチし、UIに表示し、ユーザー入力を取り込んでデータベースに書き戻すことを主な目的とするWebベースのアプリケーションを開発しています。アプリケーションは、産業用強度アルゴリズムの処理を実行することはありませんが、ピーク時に非常に多くのヒットを受け取り(後述)、1日を通して変化します。 レイヤーは、典型的なプレゼンテーション、ビジネス、データです。データ層はデータベースサーバーによって処理されます。ビジネス層には、tcp経由でデータベースサーバーにアクセスするためのDALコンポーネントが含まれます。これらの層を層に分ける必要がある選択は次のとおりです。 プレゼンテーション層とビジネス層は同じ層に保持できます。 単独で別の層にあるプレゼンテーション層と、別の層にあるビジネス層。 選択肢2の場合、ビジネスレイヤーは、httpまたはtcpを介してWCFサービスを使用してプレゼンテーションレイヤーからアクセスされます。 ビジネスレイヤーで重い処理が行われていることはないので、上記のオプション1に傾いています。同じ理由で、新しい階層を追加してもネットワーク遅延が発生するだけだと思います。ただし、スケールアップまたはスケールアウトする必要がある場合のスケーラビリティに関しては、どちらが良い方法ですか?このアプリケーションは、1時間あたり最大600万人のユーザーをサポートできる必要があります。各ユーザーセッションには妥当な量のデータがあり、ユーザーの設定やその他の詳細が保存されます。ページレベルのキャッシュも使用します。

2
Java Fat-Jar ArchiveとしてLGPLライブラリを含むソフトウェアバンドル
仕事では、多くの外部依存関係があるJavaアプリケーション(私たちが作成した)のソフトウェアバンドルをデプロイしています。そのほとんどはLGPLであり、BSDライセンスのサードパーティライブラリはJARアーカイブとして配布されています。 現在、Mavenアセンブリプラグインによって作成された単一のJava Fat jarアーカイブとして配布されるソフトウェアのテストクライアントをデプロイしています。 すべての依存関係を抽出する それらを単一のjar-archiveとして再バンドルします すべてのクラスファイルが抽出され、独自のアプリケーションで単一のJARファイルにバンドルされます。同じ名前を持っているため、一部のファイル、主にLICENSE.txtファイルが上書きされることにも気付きました。 これが正しく、LGPLライセンスに準拠しているかどうか疑問に思っています。ソフトウェアを配布するより良い方法は何でしょうか?この特定のパッケージはどのように最適に編成されますか? ソースコードをソースファイルに直接組み込んだり、バイナリファイルを変更したりすることはありませんでした。ライブラリのソースコードは製品全体に付属しています。(これは、内部で使用されるソフトウェアであり、顧客やその他には展開されていませんが、問題ではないと思います。) PS:Stack Overflowで同じ質問をしたところ、ここで質問するよう提案されました。
8 java  deployment  lgpl 

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