ソフトウェア工学

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

3
型コードをクラスで置き換える(リファクタリング[Fowler]から)
この戦略では、次のようなものを置き換える必要があります。 public class Politician { public const int Infidelity = 0; public const int Embezzlement = 1; public const int FlipFlopping = 2; public const int Murder = 3; public const int BabyKissing = 4; public int MostNotableGrievance { get; set; } } と: public class Politician { public MostNotableGrievance …
9 c#  refactoring 

1
プロローグ並列処理
効率を向上させるために「プログラム」を機能的に分解できるプロローグインタープリターはありますか? 並列処理によってCに近い速度に到達するプロローグインタープリター(典型的なCプログラマーが「見ることができない」種類)についての研究があることは知っています。誰かがこのトピックについてもっと知っていますか?

1
IntelliJとMavenコンパイル
Hibernate jarを必要とするプロジェクトがあります。 それらをpom.xmlの依存関係として追加すると、Mavenはプロジェクトを適切にコンパイルします。 ただし、IDEでは、Hibernate APIへのすべての注釈と呼び出しが未解決(赤)としてマークされます。 IntelliJでそれらを解決できるようにするにはどうすればよいですか? Build ProjectをクリックしたときにMavenを使用する方法はありますか?(Ctrl + F9) また、IntelliJ内のファセットの概念と混同しています。それらが必要ですか、永続化アシスタントを有効にするJPAファセットなどとしましょう...またはMavenに処理を任せるオプションがありますか?

7
バグのためにケースを再度開く必要がありますか、それともバグを新しいケースとして開く必要がありますか?
現在、私の職場では、さまざまなWebアプリケーションのすべての機能とバグを管理するためにFogBugzを使用しています。 Webアプリケーションの1つに新しい機能を追加すると、新しいケースが作成されます。たとえば、「CSVアップロードフォームの作成」です。 次に、私が費やした時間を記録してケースに取り組みます。このケースが完了したら、それを解決すると、ケースオープナー(通常はプロジェクトマネージャー)に割り当てられ、ケースマネージャーがケースを閉じます。 この機能にバグがある場合、プロジェクトマネージャーがケースを再度開き、バグの箇条書きリストを付けてケースを割り当てます。 私の意見では、これらの箇条書きのバグは個別のバグケースとして開く必要があると思います。そうすることで、追跡が容易になり、元の機能ケースのメモが散らからないようになります。 私のマネージャーは、機能に費やされた合計時間をすべて1つの場合に計算する方が簡単であると述べることに同意しません。 さらに、機能の参照番号が1つしかないため、クライアントの混乱が少ないと考えています。ただし、これは元のケースの完了後なので、バグは別のケースとして処理する必要があることを強調します。 バグは新しいケースとして再開する必要があると私は言っていますか?そして、これを管理するそれぞれの方法の長所/短所は何ですか?

3
データベース(MySql)で機密データを分離する方法
ユーザーの個人的な病気に関する情報を含むデータベースを設計する必要があります。 DBのテーブルの列を実装するためのアプローチは何ですか?情報を暗号化する、2つの異なるDB内でデータを分離する、1つは機密データ用、もう1つは機密データ用ではない、または両方または別のアプローチですか?

5
継承を停止するのはいつですか?
むかしむかし、継承についてStack Overflowで質問しました。 私はチェスエンジンをOOPファッションで設計すると言った。だから私はピースの抽象クラスからすべてのピースを継承しますが、継承はまだ続きます。コードで表示させてください public abstract class Piece { public void MakeMove(); public void TakeBackMove(); } public abstract class Pawn: Piece {} public class WhitePawn :Pawn {} public class BlackPawn:Pawn {} プログラマーは私の設計を少しエンジニアリングよりも見つけており、色付きのピースのクラスを削除し、以下のようなプロパティメンバーとしてピースの色を保持することを提案しました。 public abstract class Piece { public Color Color { get; set; } public abstract void MakeMove(); public abstract void …

1
TDDを使用して簡単な機能をコーディングするにはどうすればよいですか?
基本的にTDDの要点があります。私はそれが便利で、MSTESTフレームワークの適切なコマンドを持っていることを売りました。しかし、これまでのところ、これを主要な開発方法として使用するように卒業することはできませんでした。ほとんどの場合、コンソールアプリをテストドライバーとして書くための代理として使用します(私の従来のアプローチ)。 私にとって最も便利なのは、回帰テストの役割を吸収する方法です。 さまざまなテスト可能な動作を明確に分離するものはまだ何も構築していません。これは、私が知っている画像のもう1つの大きな部分です。 したがって、この質問は、次の開発タスクのために最初に何を書くかについてのポインタを尋ねることです。プロデューサ/コンシューマの方法でタスクの実行をカプセル化するコードを作成したいと思います。 このコードを書いた後、私は立ち止まり、この質問を書くことにしました(今回、実際にTDDを実際に使用できるかどうか疑問に思いました) コード: interface ITask { Guid TaskId { get; } bool IsComplete { get; } bool IsFailed { get; } bool IsRunning { get; } } interface ITaskContainer { Guid AddTask(ICommand action); } interface ICommand { string CommandName { get; } Dictionary<string, object> Parameters { get; …
9 c#  tdd 

6
「多すぎる」設計を行うことなく、スプリント計画中に有効な時間の見積もりをどのように提供しますか?
私のチームはスクラムに慣れてきていますが、ほとんどの人は非アジャイルまたは「疑似」アジャイル手法に慣れています。私たちにとって最大のハードルは、効率的なスプリント計画会議を実行することです。この会議では、バックログ項目をタスクに分割し、時間を見積もります。(私はVS2010スクラムテンプレートの用語を使用しています。どこかで間違った単語を使用した場合はお詫びします。) タスクにかかる時間を把握しようとすると、コードレベル(テーブルレイアウト、インターフェイスなど)で機能を設計するという罠に陥ることがよくあります。 。 ここはそのようなデザインをするのに適した場所ではないと私は確信しています。スプリント中にこれらの設計会議のタスクをスケジュールする必要があります。ただし、タスクの意味のある推定値を他にどのように作成するかを理解するのに苦労しています。 実践的な習慣/テクニックなどはありますか?機能の実装計画を知らずに、機能の所要時間を判断するため 設計が完了した後で時間の見積もりが大幅に変更される場合、事前にスプリントバックログを適切に予算化するにはどうすればよいですか? 編集: 明確にするために、コメント/回答のいくつかは非常に有効ですが、私は間違った質問に対処すると思います。 私たちがやっていることは正しくなく、このデザインのスプリントに時間を組み込む必要があることはわかっています。概念的には、すべての開発者がそれを理解しています。また、スクラムの経験を持つチームメンバーを招いて、雑草に入ってしまった場合でも順調に進んでいます。 問題は、この設計プロセスを実行しないと、何かの具体的な時間の見積もりを提供することが難しいことに気づいていることです。私たちは常に「このように設計すると8時間かかるかもしれませんが、代わりにこれを別の方法で行う必要がある場合、約32時間かかりますが、書き始めたらそれほど悪くはないかもしれません。 ...」 また、これから作業する歴史的な速度が得られれば、このプロセスはより良くなると思いますが、私たちが使用しているテクノロジーやアーキテクチャパターンの多くは、私たちにとって新しいものです。しかし、非常に間違っている可能性のある見積もりが、このプロセスの適応の自然な部分である場合は、それを受け入れるように自分自身を調整する必要があります:)
9 scrum 

2
廃止されたコードを段階的に廃止するためのベストプラクティスは何ですか?
廃止されたメソッドを段階的に廃止する必要があります。私はその[Obsolete]属性を知っています。マイクロソフトには、これを行うための推奨されるベストプラクティスガイドがありますか? これが私の現在の計画です: A.開発者がプロ​​ジェクトへの新しい参照を追加する必要があるため、新しいアセンブリを作成したくありません。これを行う必要がある場合、上司や同僚から多くの悲しみを得ることが期待されます。また、複数のアセンブリバージョンを維持しません。最新バージョンのみを使用しています。このプラクティスを変更するには、展開プロセスを変更する必要があります(これは大きな問題です(FinalBuilderの代わりにTFSで物事を行う方法を人々に教え、FinalBuilderをあきらめるようにする必要があります)。 B.古いメソッドを廃止するようにマークします。 C.実装が変更されているため(メソッドシグネチャではない)、オーバーロードを作成するのではなく、メソッドの名前を変更する必要があります。したがって、適切な方法をユーザーに知らせるために、[Obsolete]属性にメッセージを追加する予定です。この部分は私を悩ませています。私が行っている唯一の変更は、接続文字列からメソッドを分離することです。しかし、私は新しいアセンブリを追加しないので、これを回避する方法はありません。 結果: [Obsolete("Please don't use this anymore because it does not implement IMyDbProvider. Use XXX instead.")]; /// <summary> /// /// </summary> /// <param name="settingName"></param> /// <returns></returns> public static Dictionary<string, Setting> ReadSettings(string settingName) { return ReadSettings(settingName, SomeGeneralClass.ConnectionString); } public Dictionary<string, Setting> ReadSettings2(string settingName) { return ReadSettings(settingName);// IMyDbProvider.ConnectionString …
9 .net 

2
どのオープンソースPHPプロジェクトに「完璧な」OOPデザインがありますか?[閉まっている]
現在のところ、この質問はQ&A形式には適していません。回答は事実、参考文献、専門知識によって裏付けられると期待していますが、この質問は、議論、議論、投票、または拡張ディスカッションを求める可能性があります。この質問を改善でき、再開できると思われる場合は、ヘルプセンターにアクセスしてください。 8年前休業。 私はOOPの初心者であり、例を挙げて学ぶのが一番です。 この質問は、コーディングのベストプラクティスを学ぶためにどのScalaオープンソースプロジェクトを勉強すべきかと似ていますが、PHPであると言えます。 私はSymfonyが最高の「アーキテクチャ」(それが正確に何を意味するのか私が知っているふりはしません)だけでなく、Doctrine ORMを持っていると聞きました。これらのプロジェクトのソースコードを読んだり、使用されているパターンを推測したり、新しいトリックを学んだりするのに何ヶ月も費やす価値はありますか? Zendのコードベースを同化して好むWebページの数が同じであることを確認しました(必要と思われる場合はリンクを提供します)。 ベテランのOOP開発者が喜びの涙を流すような他のプロジェクトを知っていますか? ここでは、実用性と使用範囲はまったく問題ではないことを付け加えておきます-ただやりたいだけです。 私よりも開発者によって優れていると思われるコードベースを持つプロジェクトを選択してください。 プロジェクトの機能を実現するコードを記述します。 結果を比較し、わからないことを学ぶようにしてください。 基本的に、学術的関心のコードベース。何かおすすめはありますか?

12
ソフトウェアエンジニアリングは他のエンジニアリング分野よりも専門的であることをどのように説明しますか?[閉まっている]
現在のところ、この質問はQ&A形式には適していません。回答は事実、参考文献、専門知識によって裏付けられると期待していますが、この質問は、議論、議論、投票、または拡張ディスカッションを求める可能性があります。この質問を改善でき、再開できると思われる場合は、ヘルプセンターにアクセスしてください。 8年前休業。 私は、優れたソフトウェアエンジニアはどのソフトウェアテクノロジでも開発でき、特定のテクノロジの経験は優れたソフトウェアの構築に関係ないと主張する人と協力しています。彼のアナロジーは、あなたが言っている製品を製造する組立ラインを構築する方法を知るために、あなたが構築されている製品の知識を持っている必要がないということでした。 「上手くいけば、すべてが上手だ」というような目で見られるのは賛辞ですが、ある意味では、「Codemonkey、ゴー・スリング・コード」のように、職業を簡単にすることもできます。特定のソフトウェアフレームワークの経験がなければ、トラブルにすぐに巻き込まれる可能性がありますが、それは重要です。 私はこれを説明しようとしたが、彼はそれを購入しなかった。これに関する私の見解や考えは、私の経験が1つのことですべてのものに変換されるわけではないことを説明するのに役立ちますか?

4
コーディングの前に機能を知ることはどのくらい重要ですか?
私は、開発作業がオフショアされているソフトウェア開発会社で働いています。オンショアチームがサポートを担当し、クライアントと直接話します。クライアントと直接話をすることはありません。オンショアチームのクライアントと直接話をするだけです。 要件が発生すると、オンショアチームがクライアントと話し合い、要件ドキュメントを作成して通知します。要件を検討した後、設計ドキュメントを作成します(従来のウォーターフォールモデルに従います)。 しかし、プロセス全体で1つの問題があります。オフショアチームまたはオンショアチームの誰もアプリケーションの機能を完全に理解していません。私たちは、複雑な注文処理、カタログ管理、キャンペーン管理などのアクティビティを処理する大きな複雑なWebアプリを知っています。要件が明確ではないため、設計ドキュメントに取り組んでいます。次に、オンショアチーム、オフショアチーム、クライアント間で一連の質問/回答を行ったり来たりします。コードから機能を理解するように言われることがよくあります。しかし、コードベースが巨大であり、単純なメニュー項目を理解することさえ、数週間ではなくても数日かかるため、通常、それは現実的ではありません。クライアントに知識を伝えるよう伝えましたアプリケーションについてですが、役に立ちません。設計ドキュメントが完全でない場合や要件が明確でない場合でも、マネージャーからコーディングを開始するように指示されることがよくあります。要件の明確な部分をコーディングすることから始めて、残りの部分を待ちます。 これは通常、展開を1か月遅らせます。極端なケースでは、開発と本番環境でのエラーは非常に少なくなりますが、クライアントはそれを求めていなかったと言います。これは非難ゲームと一連の変更要求を開始し、非常に異なる何かを開発することになります。 私の質問は、アプリの機能を完全に知らない場合、どのように開発作業を行うかです。 更新 開発の方法論は本当に私の選択ではなく、私のチームのリーダーではありません。それはそれが始まった方法です。アジャイルの利点について人々に伝えようとしたが、役に立たなかった。その上、私のチームはアジャイル環境で作業するために必要な考え方を持っているとは思いません。

4
GUIプログラミングの信号+スロットモデルの実用的な代替手段はありますか?
今日のGUIツールキットの大部分は、Signals + Slotsモデルを使用しています。それを開拓したのは、QtとGTK +でした。 ご存知のように、ウィジェットまたはグラフィカルオブジェクト(場合によっては表示されないものも)がメインループハンドラーに信号を送信します。次に、メインループハンドラーは、そのウィジェット/グラフィカルオブジェクトに割り当てられたイベント、コールバック、またはスロットを呼び出します。通常、virtualすべての事前定義された信号を処理するために、ツールキットによってすでに提供されているデフォルト(およびほとんどの場合)のイベントハンドラーがあります。そのため、開発者がすべてのメッセージに対してメインループ全体とハンドラー全体を記述する必要がありました。 (WINAPIを考えてください)、開発者は新機能を実装するために必要な信号についてのみ心配する必要があります。 現在、私が知る限り、このデザインはほとんどの最新のツールキットで使用されています。Qt、GTK +、FLTKなどがあります。JavaSwingがあります。C#には言語機能(イベントとデリゲート)さえあり、Windowsフォームはこの設計で開発されました。実際、過去10年間で、このGUIプログラミングの設計は、一種の未記述の標準になりました。それは生産性を高め、より優れた抽象化を提供するためです。 しかし、私の質問は: 現代のGUIプログラミングにとって並列または実用的な代替設計はありますか? つまり、Signals + Slotsデザインは、町で唯一の実用的なデザインですか?他のデザインでGUIプログラミングを実行することは可能ですか?代替設計に基づいて構築された最新の(できれば成功し、人気のある)GUIツールキットはありますか?

5
従来のプロジェクト開始後のアジャイル開発の紹介
約一年半前、私はアジャイル開発をしていると主張する職場に入りました。私が学んだことは、この場所はいくつかのアジャイルプラクティス(毎日のスタンドアップ、スプリントの計画、スプリントのレビューなど)を採用しているが、原則(ジャストインタイム/十分に良いメンタリティ、失敗を早期に公開する、リッチなコミュニケーション)を採用していないことです。 私は今、チームをより機敏にすることを任されており、開発者とビジネスチームから完全に賛同できることを確信しています。パイロットプログラムとして、15か月の要件収集を完了し、110ページの分析と設計ドキュメント(「石で書かれた」と見なされる)があり、最後にアクセスできないプロジェクトが与えられました。ユーザー(実際に製品を使用しないユーザーのマネージャーで構成される委員会のみ)。 私は小さく始めて、最初の5つのスプリントに期待される成果物のリスト(将来のスプリントは未定義のまま)、最初のスプリントの目標のリストを与え、最初のスプリントの目標を満たすのに十分なユーザーストーリーを取得するためにA&Dドキュメントを分析しました。 それ以来、彼らはなぜすべてのスプリントのすべての要件がないのか、なぜ私が3番目のスプリント(もっと重要だと考えているが最初のスプリントの成果物に基づいている)の作業に着手していないのかと尋ねてきました。 2つのスプリント)そして、私のITチーム全体が忙しい作業または私たちとは無関係であると考えるさらに多くのドキュメントを求めています(ユーザーマニュアルを前に書く、すべてのスプリントのすべてのデータフィールドを前にドキュメント化するなど) 「前払い」作業)。 これは私にとって新しいプロジェクトマネージャーとしてはかなり大雑把でしたが、ストーリー管理のスクラムバン、ペアプログラミング、顧客に受け入れテストを(要件ドキュメントの一部として)提供してくれるなど、効果的に実装した改善点があります。 。 だから私の質問は: 抵抗力のあるビジネスに変更をより効果的に導入するにはどうすればよいですか? ビジネスにアジャイルの利点を示すためにIT側に導入できる他のプラクティスはありますか? 文書化の負担は私たちを苦しめています-ビジネスはそれをリスクとしてではなくリスク管理戦略としてまだ見ています。文書化の懸念と要求を緩和するために何ができるか(具体的には、文書化の量とそのすべてに対する事前のニーズ)。 私たちは私たちのビジネスとは別の建物にあり、約3ブロック離れています。彼らは、プロジェクトに参加している人に、同じ場所に他のプロジェクトに取り組むことはできません。建物。" 彼らは私たちがいつもそこに行って質問をまとめることを期待しています。そうすればすべてを一度に尋ねることができ、その人の時間を「絶え間ない中断」で無駄にしないでください。彼らからより豊かなコミュニケーションを得るために私たちは何ができるでしょうか? 追加のアドバイスもいただければ幸いです。 ありがとう!

6
2000年代のソフトウェアソリューションですが、すべてにパッチを適用するか、再作成する必要がありますか?
ある会社が現在利用しているシステムと、それをどうするかについて話し合った。 同社はさまざまなカートンディスプレイを製造しています。このシステムは、クライアント、注文、価格を追跡するために開発されました。システムが作成されてから多くのことが起こりましたが、システムは、マネージャーが説明したように、「ロックされている」と「問題がある」ので、私は「動的ではない」と「不安定」と解釈しています。 システムに関するいくつかの情報 2000年頃に開発されました かなり小規模なシステム、2〜5人のユーザー、6つのフォーム、平均量のデータを含む最大8つのテーブル 初期のVisual Basicに基づいて構築された、ドラッグアンドドロップデザインで作成されたフォーム。インターフェイスは基本的にメニューといくつかのフォームを備えた単なるウィンドウです MSSQLデータベース(SQL2005サーバー)を使用してデータとクエリ用のODBCドライバーを格納し、データがこのシステムの前にExcelから移行され、Excelの前に手動で処理され、計算され、記述された ユーザーはMicrosoft XP環境(およびそれ以上)で作業します 彼らの主な問題は、価格を調整および計算できない、新しいカートンタイプなどを正しく追加できない、サーバー上のデータにアクセスできない(または、方法がわからない)ため、もう正しくできないことです。 私は3つの可能な解決策を提案しました 現在のシステムにパッチを適用しようとする 新しい新しいインターフェースを作成します(できれば、同様の環境、VB.netまたはVBベース) 非常に小さなシステムであることを考慮して、Excelソリューションに戻します さらに多くのオプションがあるかもしれませんが、これらは私が考えることができるものです。 私の質問は 私は何を勧めるべきですか、そしてなぜですか? これらの代替案の長所と短所は何ですか? 他の(おそらくより良い)代替案はありますか?

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