ソフトウェア工学

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


8
言語が急速に変わる場合、これは良いことと考えられますか?
急速に変化する言語(たとえば、毎年改善される言語)と、ゆっくり改善される言語を見てきました。 私の質問は、言語が急速に変わる場合、これはプログラマーにとって良いことですか、悪いことですか?プログラマーは言語で新しいことを学ぶのが好きですか、それとも既に知っていることを固守することを好みますか?

2
反復の途中で見積もりを変更しても大丈夫ですか?
4人の開発者のチームでアジャイル/スクラムの使用を開始しました。ストーリーの見積もりを行い、ストーリーを注文しました。製品バックログのプライミングストーリー。 まず、通常の1,2,3,5,8,13 ....の代わりに、1から5までの複雑さのポイントベースの推定から始めました。 いくつかのストーリーに取り組んだ後、4ポイントと推定されたストーリーの一部は2のみである必要があると感じましたが、2と推定されたストーリーはもっと複雑で、5と推定されるべきでした。知っている: 繰り返しの途中でストーリーの見積もりを変更しても大丈夫ですか? 通常の1,2,3,5,8,13 ....の代わりに1から5までの現在の推定ポイントを使用することは問題ありませんか? 私は個人的には両方のケースでノーであるべきだと感じていますが、自分の理解があまり明確ではないので自分をバックアップする必要があります(良い参考資料は良いでしょう!)

5
スケーラブルで副作用のない統合テストを作成する方法は?
私の現在のプロジェクトでは、副作用のないスケーラブルな統合テストを作成するための優れたソリューションを思いつくのに苦労しています。副作用のないプロパティに関する少しの明確化:それはほとんどデータベースに関するものです。テストが完了した後、データベースに変更が加えられるべきではありません(状態は保持されるべきです)。スケーラビリティと状態保存は一緒にならないかもしれませんが、私は本当にもっと良い解決策を求めています。 一般的な統合テストを次に示します(これらのテストはデータベース層に影響を与えます): public class OrderTests { List<Order> ordersToDelete = new ArrayList<Order>(); public testOrderCreation() { Order order = new Order(); assertTrue(order.save()); orderToDelete.add(order); } public testOrderComparison() { Order order = new Order(); Order order2 = new Order(); assertFalse(order.isEqual(order2); orderToDelete.add(order); orderToDelete.add(order2); } // More tests public teardown() { for(Order order : ordersToDelete) order.delete(); …

8
分散コンピューティングとは正確には何ですか?[閉まっている]
閉じた。この質問はより集中する必要があります。現在、回答を受け付けていません。 この質問を改善したいですか?この投稿を編集するだけで1つの問題に焦点を当てるように質問を更新します。 5年前に閉鎖されました。 分散コンピューティングを正確に構成するものは何ですか?また、並列化/コンカレントコンピューティングとどのように違いますか? リソースへのアクセスを同期しようとする複数の並列スレッドでミューテックスとセマフォを使用することは、分散コンピューティングの領域で問題になりますか?


3
「マネージャー」クラスの使用を減らす方法に関するヒント/アドバイスは?
プログラムの設計に「マネージャー」クラスが多すぎるとコードの匂いがして、不要な複雑なレイヤーが追加されると聞きます。私にとって、人々が意味のあるコンテキストからオブジェクトを操作および制御するためにマネージャークラスを使用したいのは理にかなっていますが、ソリューションをそれらなしで機能させる方法を理解することは混乱する可能性があります。 マネージャークラスを可能な限り避けるべきですか?また、これらのマネージャーを削除できる一般的な/一般的なケースの代替回避策を実装する方法について、どの記事/論文を読むべきですか?

7
TFSからGitへ
私は.NET開発者であり、ソース管理ソフトウェアとしてTFS(チーム基盤サーバー)を何度も使用しています。TFSの優れた機能は次のとおりです。 Visual Studioとの良好な統合(だから私はほとんどすべてを視覚的に行う;コンソールコマンドはなし) 簡単なチェックアウト、チェックインプロセス 簡単なマージと競合解決 簡単な自動ビルド 分岐 ここで、Gitをオープンソースプロジェクトのバックボーン、リポジトリ、およびソース管理として使用したいと思います。私のプロジェクトは、C#、JavaScript、またはMySQLを使用したPHP言語、またはストレージメカニズムとしてのSQL Serverデータベースです。 この目的でgithub.comのヘルプを使用し、そこでプロファイルを作成し、Git用のGUIをダウンロードしました。ここまではとても簡単でした。 しかし、私はこれ以上先を行くことにほとんど詰まっています。次のようないくつかの単純な(本当に単純な)操作を行いたいだけです。 Gitでプロジェクトを作成し、ラップトップのフォルダーにマッピングする ファイルとフォルダーのチェックアウト/チェックイン 競合の解決 それが今私がする必要があるすべてです。しかし、GUIはユーザーフレンドリーではないようです。GUIにはそのConnect To...ようなものがあり、プロジェクトのリストが表示されることを期待しています。1つを選択すると、TFSプロジェクトを探索するのと同じように、そのプロジェクトのファイルとフォルダーのリストが表示されますVisual Studioで。次に、ファイルを右クリックして、check-in...またはcheck-outそのようなものを選択できるようにします。 私は多くを期待していますか?TFSのようにGitを簡単に使用するにはどうすればよいですか?ここで何が欠けていますか?

11
一般的にシステムがスタックを廃止し、メモリ管理にヒープを使用する方が効率的ですか?
スタックで実行できることはすべてヒープで実行できるようですが、ヒープで実行できるすべてがスタックで実行できるわけではありません。あれは正しいですか?次に、簡単にするために、特定のワークロードでパフォーマンスが少し低下したとしても、1つの標準(つまり、ヒープ)を使用する方が良いのではないでしょうか。 モジュール性とパフォーマンスのトレードオフを考えてください。これはこのシナリオを説明する最善の方法ではないことを知っていますが、一般的に、パフォーマンスが向上する可能性がある場合でも、理解と設計の単純さはより良い選択肢になると思われます。
14 memory 

5
FP思考に慣れている人は命令型コードをどのように読むべきですか?
私は約5か月前に大学を卒業し、過去4か月間地元の新興企業で働いています。大学にいる間、私はHaskellやF#などを自分で勉強しました。私たちは大学でJavaを教えられましたが、すぐに関数型プログラミングに触れるようになり、命令型プログラミングよりもはるかに多くの時間を費やしました。その結果、私の脳は機能的思考のために配線されています。私が参加した会社はPythonを使用しており、コードは非常に重要です。私は命令型コードを読むのに非常に苦労しています。変異を追跡することはできません。for-if-else-for -...のネストが4レベルを超える深さになると、コードで何が起こっているかを完全に把握できなくなります。さらに、Pythonは動的言語であるため、コードには型がありません。それ' コードベースの一部(おそらく「適度に複雑な」)を理解しようとしてから数週間が経ちましたが、これまでのところ理解できるほどの進展はありませんでした。そのコードを理解する方法についての実用的なテクニックをいくつか教えてください。前もって感謝します! 編集: コードに実際にはあまりコメントがなく、名前もあまり直感的ではないことを言及する必要があります。

12
条件文のこの使用はアンチパターンですか?
作業中のレガシーシステムでこれをよく見ました。次のような機能があります。 bool todo = false; if(cond1) { ... // lots of code here if(cond2) todo = true; ... // some other code here } if(todo) { ... } つまり、関数には2つの部分があります。最初の部分は何らかの処理(ループ、副作用などを含む可能性があります)を実行し、その途中で「todo」フラグを設定します。2番目の部分は、「todo」フラグが設定されている場合にのみ実行されます。 物事を行うのはかなりlyい方法のように思えます。実際に時間をかけて理解したほとんどのケースは、フラグの使用を避けるためにリファクタリングできると思います。しかし、これは実際のアンチパターンであるか、悪いアイデアであるか、それとも完全に受け入れられるものですか? 最初の明らかなリファクタリングは、2つの方法に分割することです。ただし、私の質問は、ローカルフラグ変数を作成し、複数の場所に潜在的に設定し、後でそれを使用して次のコードブロックを実行するかどうかを決定する必要があるかどうか(現代のOO言語)についてです。

6
PHPがWebサーバーで頻繁に使用されるのはなぜですか?[閉まっている]
閉じた。この質問は意見に基づいています。現在、回答を受け付けていません。 この質問を改善したいですか?この投稿を編集して事実と引用で答えられるように質問を更新してください。 4年前に閉鎖されました。 W3Techsによると、私のWebサーバーはWebサーバーの76.9%と同様にPHPを使用しています。 http://w3techs.com/technologies/overview/programming_language/all 私がPHPを使用する理由は、Webサーバーで他の人がPHPを使用しているのを見ることから生まれた慣性です。PHPがWebサーバー上でユビキタスになる理由は何ですか? (この質問は次の質問に似ていますが、異なる方向に向かっていることに注意してください:なぜJavaは最新のWebアプリケーション開発に使用されないのですか?)

3
ソフトウェアの品質を決定するために、ハルステッドの複雑さの尺度を適用する作業はありますか?
1977年、Maurice Howard Halsteadは、ソフトウェアシステムの複雑さの尺度を導入しました。これには、プログラムの語彙、プログラムの長さ、音量、難易度、努力、モジュールの推定バグ数の測定が含まれます。ウィキペディアによると、難易度は、プログラムの読み取りまたは書き込み時のプログラムの理解の難易度に関連しており、努力は、アプリケーションのコーディングに要する時間(時間=(努力/ 18)秒)に変換できます。 データと計算がソフトウェア開発の何らかの側面に関係しない限り、測定は役に立ちません。ただし、特定の値以上の難易度が統計的に有意な欠陥の増加や、難易度とコードの読み取り時間の関係につながる傾向があることを示す作品は見つかりませんでした(Nの難易度は平均M時間を費やしますコードベースを理解する)または品質を決定するのに役立つ事実の後の時間を計算できることの分析(特に書く時間はすでに測定値として記録されているはずなので)特にHalsteadのバグ推定(Wikipediaには記載されていません)に興味があります-アプリケーションのバグの数はVolume / 3000またはEffort ^(2/3)/ 3000で推定できます。 私は2つのことを探しています: 誰もが実際のアプリケーションでHalsteadのソフトウェア複雑度測定を使用してソフトウェア品質を評価しましたか?もしそうなら、どのようにそれらを適用し、有用で、有効で、かつ/または信頼できる測定であることが判明しましたか? ソフトウェアの品質に適用した場合のHalsteadの複雑さの測定の有効性(または無効性)を検討する調査、分析、またはケーススタディの形式で学術研究はありますか? ソース行コード(SLOC)を使用してボリューム、難易度、努力、時間、バグのハルステッドメトリックに類似した何かを計算することを実証する調査、分析、またはケーススタディの形式の学術研究はありますか?Volumeは単にSLOCカウントに対応し、Difficultyは循環的複雑度(およびおそらく他の指標)に対応する可能性があると思われます。また、SLOCで努力、生産性、または時間を測定することは、誤解を招く可能性があることをよく知っています。

11
コンパイラーがコードを壊したかどうか、そしてそれがコンパイラーだったらどうすればよいかを知るにはどうすればよいですか?
あるレベルの最適化でコンパイルすると、C ++コードが機能しない場合があります。それは、コードを壊す最適化を行っているコンパイラかもしれませんし、コンパイラが感じることなら何でもできるようにする未定義の振る舞いを含むコードかもしれません。 より高い最適化レベルでのみコンパイルされたときに壊れるコードの一部があるとします。コードまたはコンパイラーであるかどうか、またコンパイラーである場合はどうすればよいですか?

5
業界で「最終」キーワードがほとんど使用されないのはなぜですか?[閉まっている]
閉じた。この質問は意見に基づいています。現在、回答を受け付けていません。 この質問を改善したいですか?この投稿を編集して事実と引用で答えられるように質問を更新してください。 6年前に閉鎖されました。 final数年前にJavaでキーワードのパワーを発見したので、読み取り専用の変数を簡単に確認できるため、コードをより読みやすくするのに役立ちました。また、JITを少し強化することもありますが、これは非常に限定的なものですが、特にAndroidプラットフォームなどの組み込みデバイスを対象とする場合は害はありません。 しかし、何よりも、変更に対する設計の堅牢性を高め、コードベースを変更する必要がある場合に他のコミッターを導くことに貢献します。 ただし、JDKソースコードの一部を参照しているときに、クラス、メソッド、または変数のいずれについても、このキーワードにつまずくことはありませんでした。私がレビューしなければならなかったさまざまなシステムにも同じことが当てはまります。 理由はありますか?内部からすべてを可変にするのは一般的な設計パラダイムですか?
14 java  final 

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