ソフトウェア工学

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


4
実際の開発環境なしで自信を持って開発する
私は最近、いくつかのサードパーティ製の「エンタープライズ」システムとその周辺での作業を伴うプロジェクトに雇われました。私が想像するのは、実稼働環境の十分に忠実なレプリカを構築するために必要な天文学的なコストと労力であるため、実際の開発環境を持つ見込みは、ごくわずかにしか見えません。 これはもちろん理想的ではありません。明るい面では、このような複製不可能な環境にソフトウェアを安全にテストおよび展開している人々がいるはずであり、おそらく彼らの足跡をたどることができるでしょう。 このような状況に効果的に対処する人はどのようにそれを行うのでしょうか?

3
RFCや同様の文書はどのように読むのですか?[閉まっている]
閉じた。この質問には、詳細または明確さが必要です。現在、回答を受け付けていません。 この質問を改善したいですか?詳細を追加し、この投稿を編集して問題を明確にします。 4年前に閉鎖されました。 RFC: Request for Comments(RFC)は、インターネットエンジニアリングタスクフォース(IETF)によって発行された、インターネットおよびインターネットに接続されたシステムの動作に適用可能な方法、動作、研究、または革新を説明する覚書です。 この「RESTビデオ入門」の最後に、RFC2616とRFC3986が参考資料として記載されています。ビデオを見た後、私はそれらのドキュメントをグーグルで検索し、タイトルが示すように、それらの使用方法がわからない。それらをすべて読んでメモを取りますか、何かを理解できないか問題が発生した場合の参考としてそれらを使用しますか?

2
開始点、距離、角度を使用して新しい座標を見つけます
さて、ポイント座標があります。 var coordinate = { x: 10, y: 20 }; 今、距離と角度もあります。 var distance = 20; var angle = 72; 私が解決しようとしている問題は、開始座標から角度の方向に20ポイントを移動したい場合、新しい座標がどうなるかを見つけることができますか? 私はこれを行う方法を知っていたので、答えはサイン/コサインのようなものを含むことを知っていますが、それ以来式を忘れました。誰でも助けることができますか?

5
扱いにくいドメイン固有のオブジェクトの名前付けのガイダンス?
私は化学システムをモデリングしていますが、列挙内の要素/アイテムの命名に問題があります。 私が使用すべきかどうかはわかりません: 原子式 化学名 省略された化学名。 たとえば、硫酸はH2SO4で、塩酸はHClです。 それら2つでは、合理的に一般的であるため、おそらくアトミック式を使用します。 しかし、Na2SiF6であるヘキサフルオロケイ酸ナトリウムのような他のものがあります。 その例では、原子式は(私には)それほど明白ではありませんが、化学名は恐ろしく長いです: myEnum.SodiumHexaFluoroSilicate。一貫した命名パターンを持つ短縮された化学名を安全に思い付くことができるかどうかはわかりません。 enum要素に名前を付けることで対処しようとしている問題がいくつかあります。 1つ目は読みやすさで、長い名前では問題が発生します。 2つ目は、新しいメンテナー向けのコードを簡単に選択できることです。ここでは、短い名前が問題を示しています。 次の問題は、事業主が通常完全な化学名を参照することですが、常にではありません。「一口」の化学物質は、その式で呼ばれます。 最後の懸念は、それが一貫していることを確認することです。どちらを使用するか覚えておくことができないので、私は混合命名規則を望んでいません。 メンテナンスの観点から、上記の命名オプションのどれをご覧になりますか?その理由は何ですか? 注:線の下にあるものはすべて補足です。明確化資料。動揺しないでください。主な質問は、厄介なオブジェクトの命名に関するものです。 アトミックオプション public myEnum.ChemTypes { H2SO4、 HCl、 Na2SiF6 } 化学名オプション public myEnum.ChemTypes { 硫酸、 塩酸、 ヘキサフルオロケイ酸ナトリウム } この質問に関するコメントからの追加の詳細を次に示します。 コードの対象者は、化学者ではなくプログラマーだけです。 私はC#を使用していますが、実装言語を無視する場合、この質問はより興味深いと思います。 私は10-20の化合物から始めており、最大で100の化合物を持っているので、可能なすべての化合物について心配する必要はありません。幸いなことに、これは固定ドメインです。 列挙型は、一般的/一般的な化学計算を容易にするためのルックアップのキーとして使用されます。つまり、式はすべての化合物で同じですが、化合物のプロパティを挿入して式を完成させます。 たとえば、化合物の質量(グラム)からモル数を計算する場合、モル質量(g / mol)が使用されます。FWIW、モル質量==モル重量。 一般的な計算の別の例は、理想気体の法則と特定気体定数の使用です。 サンプル関数は次のようになります。 public double GetMolesFromMass(double mass_grams、myEnum.ChemTypes chem) { double …

2
Javaの同時実行性に関するこれらの高度/不公平なインタビューの質問はありますか?[閉まっている]
現在のところ、この質問はQ&A形式には適していません。回答は事実、参考文献、または専門知識によってサポートされると予想されますが、この質問は議論、議論、世論調査、または広範な議論を求める可能性があります。この質問を改善し、場合によっては再開できると思われる場合は、ヘルプセンターをご覧ください。 7年前に閉鎖されました。 以下は、Javaの並行性を知っていると言っているインタビュー対象者に最近尋ねた質問です。 「メモリの可視性」の危険性-JVMがモニターによって保護されておらず宣言されていない変数に対する特定の操作を並べ替える方法volatile。1つのスレッドが別のスレッドによる変更を認識できないようにする方法。通常、このハザードが存在する場所にコードNoVisibilityを表示し(例:Goetz et alの「Java Concurrency in Practice」のリスト3.1 の例)、何が問題なのかを尋ねることでこれを要求します。 volatile宣言された実際の変数だけでなく、変数がvolatile変更する前にスレッドによって行われた変数への変更にも影響することを説明しvolatileます。 なぜvolatile代わりに使用するのsynchronizedでしょうか? wait()およびで条件変数を実装しますnotifyAll()。を使用する理由を説明しますnotifyAll()。条件変数をwhileループでテストする必要がある理由を説明します。 私の質問は-これらは適切であるか、Javaの並行性を知っていると言う人に尋ねるには高度すぎるのでしょうか? そして、私たちがそれに取り組んでいる間、Javaの並行性で働いている誰かがJavaガベージコレクションの平均以上の知識を持っていると期待されるべきだと思いますか?

4
TDDを使用して初期APIを正しく取得する方法
私はTDDでの最初の試みであるので、これはかなりばかげた質問かもしれません。私はそれがもたらす自信とコードの一般的な構造が大好きでしたが、1クラスのおもちゃの例よりも大きなものに適用し始めたとき、私は困難に直面しました。 ある種のライブラリを作成しているとします。あなたはそれが何をしなければならないか、それがどのように実装されるべきかについての一般的な方法を知っています(アーキテクチャ上)、しかしあなたはあなたがコードとしてあなたのパブリックAPIに変更を加える必要があることを「発見」し続けます。おそらく、このプライベートメソッドを戦略パターンに変換する必要があり(テストでモックされた戦略を渡す必要があります)、おそらく責任をあちこちに置き忘れて、既存のクラスを分割する必要があります。 既存のコードを改良する場合、TDDは非常に適しているように見えますが、最初からすべてを記述する場合、テストを作成するAPIは、事前に大きな設計を行わない限り、少し「ぼやけ」ます。シグネチャ(およびその部分の動作)が変更されたメソッドで既に30のテストがある場合はどうしますか?それは一度追加すると変更する多くのテストです。
12 tdd 

6
オブジェクト指向デザイン、トーナルハーモニーのモデリング方法
コード、音階、ハーモニーを分析するプログラムをC ++ 11で書き始めました。私が設計段階で抱えている最大の問題は、音「C」が音、コードのタイプ(Cmaj、Cmin、C7など)、およびキーのタイプ(Cmajor、Cminorのキー)であることです。間隔(マイナー3、メジャー3)でも同じ問題が発生します。 私は、プログラム内のすべての「シンボル」の基本クラスである基本クラスであるトークンを使用しています。例えば: class Token { public: typedef shared_ptr<Token> pointer_type; Token() {} virtual ~Token() {} }; class Command : public Token { public: Command() {} pointer_type execute(); } class Note : public Token; class Triad : public Token; class MajorTriad : public Triad; // CMajorTriad, etc class Key : …

1
最善の方法:既存のTeam Foundation Server(TFS)ソリューションを再構築する
私の部署では、ユニファイドコミュニケーションサーバー用にいくつかの小さなアドオンを開発しています。バージョン管理と分散開発では、Team Foundation Server 2012を使用します。 ただし、すべてのアプリケーションとライブラリに対応する大規模なTFSソリューションは1つだけです。 主な解決策 用途 アプリ1 アプリ2 アプリ3 外観 図書館 Lib 1 Lib 2 道具 「アプリケーション」パスには、すべての主要なアプリケーションが含まれています。これらは互いに依存していませんが、ライブラリと外部プロジェクトに依存しています。 「外部」パスには、アプリケーションとライブラリで参照される外部DLLが含まれています。 ライブラリパスには、一般的に使用されるライブラリ(UIテンプレート、ヘルパークラスなど)が含まれています。これらは互いに依存せず、ライブラリおよびツールプロジェクトで参照されます。 ツールパスには、セットアップヘルパー、更新Webサービスなどのヘルパープログラムが含まれています。 さて、この構造を変更したい理由はいくつかあります。 サーバービルドは使用できません。 そのようなソリューション構造で、スプリント、障害などでTFSスクラム管理を管理するのは不快です。 すべての開発者は、ソリューション内のすべてのプロジェクトに常にアクセスできます。 Visual Studioで誤って[F6]を押した場合、完全なビルドが長すぎます... このソリューションで何を変更しますか?それらのプロジェクトをより小さなソリューションにどのように分割し、それらのソリューションをどのように構成すべきですか 最初のアプローチは、アプリケーション、ライブラリ、およびツールごとに1つのTFSプロジェクトを作成することです。しかし、たとえばApp 2に常に最新バージョンのLib 1が含まれていることを確認するにはどうすればよいですか?Lib 1の変更を監視し、Libが変更されたらすぐにApp 2を手動で更新する必要がありますか?または、何らかの方法でVisual Studioに常に外部プロジェクトの最新バージョンを常に使用させることができますか? 編集: TFSには、1つのTFSチームプロジェクトを含むTFSチームプロジェクトコレクションが1つだけあります。チームプロジェクトには、1つの大きなVisual Studioソリューションが含まれています。このソリューションには、複数のVSプロジェクトを含む複数のフォルダー(上記の構造を参照)が含まれています。 私の質問は今、どのように再編成しますか: TFSチームプロジェクト VSプロジェクト

4
データベースをモデル化するときに弱いエンティティを使用する必要があるのはいつですか?
これは基本的に、弱いエンティティとは何かに関する質問ですか?それらをいつ使用する必要がありますか?どのようにモデル化する必要がありますか? 通常のエンティティと弱いエンティティの主な違いは何ですか?ドメイン駆動設計を行う場合、脆弱なエンティティは値オブジェクトに対応しますか? ここでトピックに関する質問を続けるのを助けるために、人々がこれらの質問に答えるために使用できるウィキペディアから取られた例です: この例でOrderItemは、弱いエンティティとしてモデル化されましたが、通常のエンティティとしてモデル化できない理由を理解できません。 もう1つの質問は、注文履歴(つまり、ステータスの変更)を追跡したい場合、それは通常のエンティティまたは脆弱なエンティティでしょうか?

5
唯一のロジックがガードである単体テストメソッドは便利ですか?
次のような方法があるとします。 public void OrderNewWidget(Widget widget) { if ((widget.PartNumber > 0) && (widget.PartAvailable)) { WigdetOrderingService.OrderNewWidgetAsync(widget.PartNumber); } } 私のコードにはそのようなメソッドがいくつかあります(非同期Webサービス呼び出しの前半分)。 それらを単体テストでカバーすることが有用かどうかを議論しています。はい、ここにはロジックがありますが、それはガードロジックにすぎません。(つまり、Webサービスの呼び出しを許可する前に、必要なものがあることを確認します。) 私の一部は、「あなたはそれらをユニットテストできることを確認しますが、それは時間の価値がありません」と言います(私はすでに予定より遅れているプロジェクトにいます)。 しかし、私の反対側は、もしあなたがそれらを単体テストしないで、誰かが衛兵を変えれば、問題があるかもしれないと言います。 しかし、私の最初の部分は、誰かがガードを変更した場合、あなたは彼らのためにもっと仕事をしているだけだと言います(ガードとガードのユニットテストを変更しなければならないからです)。 たとえば、私のサービスがウィジェットの可用性をチェックする責任を負う場合、そのガードをこれ以上望まないかもしれません。単体テスト中の場合は、2つの場所を変更する必要があります。 私は両方の面で賛否両論を見ています。だから私は他の人が何をしたかを尋ねると思った。
12 c#  unit-testing 

3
Windows 7でのWindows Phone 8開発-それは可能ですか?[閉まっている]
閉まっている。この質問はトピック外です。現在、回答を受け付けていません。 この質問を改善したいですか? 質問を更新して、 Software Engineering Stack Exchangeのトピックになるようにします。 5年前に閉鎖されました。 Windows 7マシンにWindows Phone 8 SDKをインストールしようとしていて、「Windows 8でのみサポートされています」というメッセージが表示されました。実際にVisual Studio 2012でPhone 7.5アプリを開発したかったのですが、7.1 SDKでは不可能なことだったので、8 SDKで十分だと思いました。 8 SDKがリリース時に物議を醸すのに十分ではなかったかのように、一般的に入手可能になった今、Windows 8のみで利用可能にするという恐ろしい決断のように思えます。 Metro UIのために、Windows 8をインストールするか、少なくとも近い将来にインストールします。 だから、Windows 7でWindows Phone 8を開発するための回避策を知っている人、または少なくとも7.5でVisual Studio 2012を使用して開発している人はいますか?

5
開発者にプロジェクト管理を行わせるソフトウェアマネージャー
私は組み込みシステム会社で働くソフトウェア開発者です。プロジェクトマネージャーがいて、プロジェクトの全体的なスケジュール(電気、品質、ソフトウェア、製造など)を担当しているため、ソフトウェアスケジュールは非常に短いです。 私の上司であるソフトウェアマネージャーもいます。彼は、ソフトウェアのスケジュール、設計文書(高レベルおよび低レベルの設計)、SRS、変更管理、検証計画とレポート、リリース管理、レビュー、そしてもちろんソフトウェアの作成と保守をさせてくれます。 ソフトウェアチーム全体(10人のメンバー)に対応するテストエンジニアは1人だけであり、常にいくつかのプロジェクトが進行中です。 私はこれらのドキュメントを作成するのに80%の時間を費やしています。私の上司はプロセスのバックグラウンドから来ており、必要なのはソフトウェアを改善するためのより良いドキュメントであると考えています。 彼はデザインが最重要であると考え、コーディングは「デザインを書き留める」だけで、それほど長くはかからず、「ハードウェアの準備ができる前にすべてのコードを書く」必要があります。 分散モデルとのコラボレーションが簡単だと彼に言った後でも、中央バージョンと分散バージョンコントロールの違いを理解していません。 コードを理解していないため、すべてのバグとその提案された解決策を理解したいと考えています。 検証は開発者が行い、検証はテスターが行うべきだと考えています。ただし、検証では実装が正しいかどうかのみをチェックし(単体テストは作成せず、スケジュールでは考慮されません)、検証はブラックボックステストであるため、単体テストはありません。 私は本当に混乱しています。 これらすべての文書を管理する責任はありますか?本質的に、ソフトウェアプロジェクト管理を行っているような気分になります。技術文書は問題ありませんが、開発者がスケジューリング/計画を立てるべきではないと考えています。 私はドキュメントの作成が本当に好きではありません。問題を解決してコードを書きたいです。私の経験では、設計ドキュメントの作成はある程度までしか役に立ちませんが、コードの改善や高速化の解決策になることはありません。 上司はより良い製品を作ることを本当に気にせず、経営者の目には良いマネージャーになることだけに関心があると思います。 私に何ができる?今年は3か月間実際のコーディングを行い、残りはドキュメントの作成とクライアントからのバグレポートの待機に費やしました。


1
オブジェクト指向のパラダイムが主流になるのに長い時間がかかったのはなぜですか?
この質問を読んで、かなり最近のことについて考えさせられました。オブジェクト指向言語。最初のものがいつ作成されたのかわかりませんが、なぜ彼らが主流になるまでにそれほど時間がかかったのですか? Cは非常に人気を博しましたが、後にオブジェクト指向C ++になりませんでした(数十年後)。 90年代以前の主流言語はオブジェクト指向ではありませんでした オブジェクト指向は、ほぼ同時期にJavaとC ++を使用するようになりました さて、私の質問、なぜこれにそれほど時間がかかったのですか?Cが元々オブジェクト指向言語として考えられていなかったのはなぜですか?C ++の非常に小さなサブセットを使用しても、コア言語に大きな影響は及ばなかったのに、なぜこのアイデアは90年代まで普及しなかったのでしょうか?

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