ソフトウェア工学

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

4
アジャイルプロジェクトでは、要件管理は長期的にどのように機能しますか?
アジャイルプロジェクトの短期的な要件管理は、私にとっては解決された問題のようです。 スクラムアングルから、新しい要件または既存の要件への変更がユーザーストーリーを通じて提供されます。また、EpicまたはFeatureの下にグループ化されたユーザーストーリーにより、より複雑な要件の配信が容易になります。 もちろん、ユーザーストーリーは技術的には要件文書ではありません。これは、機能の垂直スライスと呼ばれることが多いものにマッピングされる、管理可能な作業グループです。また、これらのストーリーの範囲は、承認基準(AC)を使用して明確に定義できます。 そのため、ユーザーストーリーは正式な要件ではありませんが、ユーザーストーリーを参照することで、ユーザーの基本的な要件をかなり明確に把握できます。短期的に。 プロジェクトが進行するにつれて、ユーザーストーリーの数が増加するため、短期間で言います。したがって、増え続けるストーリーのリストを閲覧して要件を見つけることは、時間の経過とともに効率が低下します。 この問題は、以前のストーリーを拡張したり、置き換えたり、さらには無効にするユーザーストーリーを検討するとさらに悪化します。 ここで、プロジェクトでの開発の反復間の2年のギャップを想像してください(本番環境で安定)。元のチームはなくなり、すべての知識も失われました。 元のチームがこれが起こるとわかっていた場合(たとえば、ビジネスの性質)、その後のチームを支援するためにどのような対策を講じることができましたか? 確かに、バックログはいくつかの情報を提供しますが、簡単に閲覧できる形式ではほとんどありません。 それでは、後続のチームがプロジェクトの状態を理解するために何ができるか、なぜそれがどのようにそこに到達したのかを含めて? 私の経験では、次のことはうまくいきません。 バックログを要件ドキュメントとして読み取ることができるように、以前のユーザーストーリーを削除または更新するバックロググルーミング。 ドキュメントスプリント。チームメンバーがシステムの現在の状態をド​​キュメント化するタスクを担当します。 動作テストによる文書化。このアプローチは、私が仕事に近づいているのを見た唯一のものです。残念ながら、コード化された動作テストはネーミング問題の犠牲になります。テストはシステムを適切に文書化するかもしれませんが、変動する開発者チームが同じドメイン用語、表現、スタイルに従ってテストを作成することはほとんど不可能です。 繰り返しますが、 長期的にアジャイルプロジェクトの要件をどのように管理しますか?

3
実際に開閉原理を遵守する方法
私は、オープンクローズド原則の意図を理解しています。変更せずに拡張しようとするように指示することで、変更中に既に機能しているものを壊すリスクを減らすことを目的としています。 しかし、この原則が実際にどのように適用されるかを理解するのに苦労しました。私の理解では、それを適用するには2つの方法があります。変更前と変更後: 前:できるだけ抽象化して「未来を予測する」プログラムを作成します。たとえば、将来システムにsが追加されたdrive(Car car)場合、メソッドは変更する必要 Motorcycleがあるため、おそらくOCPに違反します。ただし、この方法drive(MotorVehicle vehicle)は将来変更する必要性が低いため、OCPに準拠しています。 ただし、将来を予測し、システムにどのような変更が加えられるかを事前に知ることは非常に困難です。 変更後:変更が必要な場合、現在のコードを変更する代わりにクラスを拡張します。 練習#1を理解するのは難しくありません。しかし、適用方法を理解するのに苦労しているのは実践#2です。 例(YouTubeのビデオから取得しました):CreditCardオブジェクトを受け入れるクラスにメソッドがあるとします:makePayment(CraditCard card)。1日Voucherがシステムに追加されます。このメソッドはそれらをサポートしていないため、変更する必要があります。 そもそもメソッドを実装するとき、未来とプログラムをより抽象的な用語で予測することに失敗しました(たとえばmakePayment(Payment pay)、今、既存のコードを変更する必要があります)。 練習#2では、変更するのではなく拡張することで機能を追加する必要があります。どういう意味ですか?既存のコードを単に変更するのではなく、既存のクラスをサブクラス化する必要がありますか?コードの書き換えを避けるために、何らかのラッパーを作成する必要がありますか? または、原則は「機能を正しく変更/追加する方法」に言及するのではなく、「最初に変更を加える必要がないようにする方法」(つまり、プログラムを抽象化する方法)に言及していますか?

3
GPLライセンスはどのライセンスに基づいてライセンスされていますか?
実際のGPLライセンス(つまり、「ほとんどのソフトウェアおよびその他の実用的な作品のライセンスは設計されています...」という言葉を含むテキスト)は文書です。したがって、何らかの著作権の下にあると思いますか? このライセンスはどのライセンスの下でライセンスされていますか? つまり、自分のプロジェクトにGPLライセンスの本文を含める(そして、おそらく二次的著作物を作成する)場合、私にはどのような制限がありますか?
14 gpl  copyright 

8
コーディング前の概念と設計:これはいくらですか?[閉まっている]
閉じた。この質問は意見に基づいています。現在、回答を受け付けていません。 この質問を改善したいですか?この投稿を編集して事実と引用で答えられるように質問を更新してください。 5年前に閉鎖されました。 私は学校で学び、適切なコーディングを行う前に、優れた開発方法論には構想と設計が必要であることを他のどこでも読みました。 それは初心者プログラマにとっても新しい情報ではありません。しかし、いくつかのプログラミング言語で開発を始めて以来、最初からすべてを設計して構想することができなかったため、これは良いアドバイスかと思います。 つまり、私は常にデザイン、構想、プログラミングを溶かしました。私は世界で最悪の開発者ですか、それとも私たちが学校で学ぶアイデアはただの古い無意味な宗教教義ですか? これまでに経験したこともプログラミングしたこともないものを、どのように考えて設計することができますか?それはばかげていませんか?プログラミングは、代わりに構想と設計をリードしませんか?

1
デフォルトのコンストラクタを使用できなくすることは問題ありませんか?
デフォルトのコンストラクターについて具体的に尋ねる コンストラクターがオブジェクトのすべてのデータを初期化する場合、適切な初期化なしでは使用できないクラスを作成すると、デフォルトのコンストラクターが役に立たなくなるわけではありませんか?考慮してください: // A class for handling lines in a CSV file class CSV_Entry { private: unsigned num_entries; std::string string_version; std::vector<std::string> vector_version; ...etc public: CSV_Entry(); CSV_Entry(const std::string& src_line); // returns a vector copy of the original entry std::vector<std::string> get_vector_snapshot(); } int main( void ) { ...etc CSV_Entry example = CSV_Entry(); …

6
フォールバック用のネストされたトライキャッチの代替
オブジェクトを取得しようとしている状況があります。ルックアップが失敗した場合、フォールバックがいくつかあり、それぞれが失敗する可能性があります。したがって、コードは次のようになります。 try { return repository.getElement(x); } catch (NotFoundException e) { try { return repository.getSimilarElement(x); } catch (NotFoundException e1) { try { return repository.getParentElement(x); } catch (NotFoundException e2) { //can't recover throw new IllegalArgumentException(e); } } } これはひどくいです。nullを返すのは嫌いですが、このような状況ではより良いですか? Element e = return repository.getElement(x); if (e == null) { e = repository.getSimilarElement(x); …

7
メソッドを呼び出すためだけにオブジェクトを頻繁に作成している場合、コードのにおいですか
次のようなコードがたくさんあるコードベースを継承しました。 SomeDataAdapter sda = new SomeDataAdapter(); sda.UpdateData(DataTable updateData); そして、sdaは二度と使用されません。 これらのメソッドは、実際には静的クラスメソッドである必要があることを示すコードの匂いですか?

3
特定の機能を実装したソースコードを見つける方法 [閉まっている]
閉じた。この質問はより集中する必要があります。現在、回答を受け付けていません。 この質問を改善したいですか?この投稿を編集するだけで1つの問題に焦点を当てるように質問を更新します。 4年前に閉鎖されました。 デスクトップアプリケーションで、どのコードが特定の機能を実装しているかを特定するためのテクニックは何だろうと思っていました。 私はジュニア開発者であり、ウェブプログラミングを中心にプロのプログラミング経験しかありません。Webでは、これを行うのが簡単です。たとえば、ブラウザツールでボタンを「検査」し、クリックすると何が行われているかを確認できます。そして、完全なソースコードがあると仮定して、呼び出しの階層をドリルダウンできます。 しかし、デスクトップアプリケーションでこれをどのように行うのでしょうか?少なくとも、完全なコードベースに飛び込む必要はありませんか?

4
パッチは顧客にとって悪い兆候ですか?[閉まっている]
閉じた。この質問は意見に基づいています。現在、回答を受け付けていません。 この質問を改善したいですか?この投稿を編集して事実と引用で答えられるように質問を更新してください。 5年前に閉鎖されました。 オフィスでは、あまりにも頻繁にパッチをリリースしていた長い期間を抜け出しました。その期間の終わり近くに、私たちは平均して週にほぼ3つのパッチを実行していました。 これは開発者にとって非常にやる気を起こさせることに加えて、私は顧客がこれについてどう思うだろうかと思っていました。私は自分で質問をし、頻繁に更新されるソフトウェアを知らなかったと結論付けました。ただし、最も近いケースについては、パッチはかなり迅速に適用されるため、あまり気にしません。 これらのパッチを受け取った顧客は、互いに大きく異なります。他の人があまり気にしないパッチを本当に待っていた人もいましたが、全員同じパッチを手に入れました。顧客のソフトウェアを更新する時間は30秒未満なので、時間に関する問題はないと思います。ただし、ログアウトする必要があります。 より詳細に私の質問:更新プログラムを頻繁に受信者に「否定的な」メッセージを与えていますか? もちろん、顧客に尋ねることはできますが、私はその立場にいるわけではなく、「眠っている犬を目覚めさせたい」とも思いません。 PS:質問を改善するためにできることがあれば、コメントを残してください。

4
アプリケーションをそのフレームワークに疎結合することは可能ですか?
Webアプリケーションを開発しているとしましょう。私の最初の選択肢は、Fat-Free Framework(F3)およびMVCパターンでPHPを使用することです。来年、Zend Frameworkに切り替えるか、ASP.NET MVCに切り替えることを決定するかもしれません。フレームワークに疎結合されるような方法でアプリケーションを設計しようとするのは理にかなっていますか、それともフレームワークがあまりにも統合されすぎて現実的ではありませんか? 私が尋ねる唯一の理由は、最近の仲間との会話の中で出てきたからです。仲間は、私のパイを空からF3に疎結合するというアイデアを批判しました。

5
実装の前にインターフェイスAPIを作成する必要がありますか?
私は最近、より「組織化された」プログラミングを掘り下げてきましたが、実装ではなくインターフェイスにプログラミングする必要があることを学んでいます。それを念頭に置いて、可能であれば実装を記述する前に、インターフェイスでプロジェクトを「スケッチ」する方が良いでしょうか? サードパーティのライブラリ(Lidgrenなど)を使用する場合は、これらをインターフェイスでラップし、IOCコンテナを介して解決する必要がありますか、それともインターフェイスに公開してもかまいませんか?

4
エラー抑制は悪い習慣ですか?
ここで私が確信していないコードについて質問したところ、誰かが「ところで、恐ろしいコード:エラー抑制記号(@)を多く使用しています」と答えました。 これが悪い習慣である理由はありますか?のようなもので: $db=@new mysqli($db_info) or die('Database error'); 、カスタムエラーメッセージのみを表示できます。エラーを抑制しないと、次の典型的なPHPメッセージが表示されます。 警告:mysqli :: mysqli():php_network_getaddresses:getaddrinfo failed:そのようなホストは不明です。中にいくつかの\ファイル\パス上のライン6 「データベースエラー」も同様です。 エラー抑制は常に悪いですか、もしそうなら、上記について具体的に何が悪いですか? 更新:私が使用している実際のコードは次のとおりです。 or error('Datatabase error', 'An error occurred with the database' . (($debug_mode) ? '<br />MySQL reported: <b>' . $db->error . '</b><br />Error occurred on line <b>' . __LINE__ . '</b> of <b>' . __FILE__ . '</b>' …

6
多くの言語が名前付きパラメーターをサポートしないのはなぜですか?[閉まっている]
閉じた。この質問は意見に基づいています。現在、回答を受け付けていません。 この質問を改善したいですか?この投稿を編集して事実と引用で答えられるように質問を更新してください。 6年前に閉鎖されました。 関数を呼び出すときに、次のように書くことができれば、コードの読み取りがどれほど簡単になるかを考えていました。 doFunction(param1=something, param2=somethingElse); 欠点は考えられませんし、コードがずっと読みやすくなります。配列を唯一の引数として渡し、配列キーをパラメーター名として使用できることはわかっていますが、それでも読み取りは難しくなります。 私が見逃しているこの欠点はありますか?そうでない場合、なぜ多くの言語がこれを許可しないのですか?

3
コマンドラインアプリケーションで色を使用するのが適切な場合
現在、私はCでコマンドラインアプリケーションを呼び出していbtcwatchます。これには、-Cビットコインの現在の価格とで事前に保存された価格を比較する引数として受け取ることができるオプションがあります-S。このオプションの出力例は次のとおりです。 $ btcwatch -vC # -v = verbose buy: UP $ 32.000000 USD (100.000000 -> 132.000000) sell: UP $ 16.000000 USD (100.000000 -> 116.000000) ジレンマは、文字列UPまたはDOWN文字列に色を使用するかどうか(それぞれ緑と赤)です。私が知っているほとんどのコマンドラインアプリケーション(gitを除く)は、出力の色から離れています。以下のための私の願望ではbtcwatch(の使用を見て、非常に「標準」であることをgetopt色がこのような状況では場違いに見える場合のMakefile、など)を、私はわかりません。

3
整数シーケンスの検索
かなり複雑な検索の問題があり、それをなんとか次の説明にまとめました。私はグーグル検索を行ってきましたが、問題にきれいに適合すると思われるアルゴリズムを見つけることができませんでした。特に、任意の整数をスキップする必要があります。たぶんここの誰かが私に何かを指し示すことができますか? 整数Aのシーケンスを例にとります(1(2 3 4)) さまざまな整数のシーケンスを取り、それらのいずれかがそのようなAに一致するかどうかをテストします。 Aには、テストされたシーケンス内のすべての整数が含まれます テストされたシーケンスの整数の順序はAで同じです テストシーケンスにないAの整数は気にしません 最初のものだけでなく、一致するすべてのテストシーケンスが必要です。 例 A = (1 2 3 4) B = (1 3) C = (1 3 4) D = (3 1) E = (1 2 5) BはAと一致します CはAと一致します 順序が異なるため、DはAと一致しません EはAにない整数を含むため、Aとは一致しません この説明が十分に明確であることを願っています。私ができた最善の方法は、テストシーケンスのツリーを構築し、Aを反復処理することです。整数をスキップできるようにする必要があると、多くの失敗した検索パスにつながります。 ありがとう いくつかの提案を読んで、私はあまりにも曖昧にしたいくつかの点を明確にしなければならないと感じています。 繰り返し数が許可されます。実際、これは単一のテストシーケンスがAに一致することを許可するため、非常に重要です。 A =(1234356)、B =(236)、一致は-23 --- 6または-2--3-6のいずれかです 少なくとも数千の非常に多数のテストシーケンスがあると予想され、シーケンスAの最大長は20になる可能性があります。したがって、反復することで各テストシーケンスを1つずつ一致させることは非常に非効率的です。 これが明確でない場合は申し訳ありません。
14 algorithms 

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