ソフトウェア工学

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

14
プログラムをゼロから完全に再構築した場合、ずっと改善したいという気持ちを常に避けることができますか?[閉まっている]
私はかなりの量のコーディングを学びましたが、それは常に科学環境(コンピューターサイエンスではない)で行われ、誰も私を正しい方向に導くことなく完全に独学で学びました。したがって、私のコーディングの旅は...面倒でした。ある種のプログラムを構築するたびに、最終的には、はるかにエレガントに、はるかに効率的に、そしてはるかに柔軟性があり、今後の管理が容易な方法でそれを実現できたことに気付きました。状況によっては、実際に戻って一から物を作り直したことがありますが、通常これは実際には実行できません。これまでの私のプログラムのほとんどは比較的小さいものでしたが、何かを作成するたびに大きなプログラムを完全に書き換えることは非常に面倒です。 私はただこれが普通の経験なのだろうか?そうでない場合、これをどのように防止しますか?事前に計画を立ててみましたが、コードを打ち出すまですべてを実際に予測することはできません。

12
テストがテストするコードとインラインで書かれていない理由はありますか?
最近、Literate Programmingについて少し読んで、考えさせられました...よく書かれたテスト、特にBDDスタイルの仕様は、散文よりもコードが何をするかを説明するのにより良い仕事をすることができ、大きな利点があります自身の精度を検証します。 テストするコードとインラインで記述されたテストを見たことはありません。これは、言語が同じソースファイルに記述されたときにアプリケーションとテストコードを簡単に分離する傾向がないため(そして誰も簡単にしなかったため)、または人々がテストコードをアプリケーションコードから分離するより原則的な理由があるからですか?

15
TDD Red-Green-Refactorおよびプライベートになるメソッドをテストするためのif / how
私が理解している限り、ほとんどの人は、プライベートメソッドを直接テストするのではなく、パブリックメソッドを呼び出してテストする必要があることに同意しているようです。私は彼らの要点を見ることができますが、「TDDの3つの法則」に従い、「赤-緑-リファクタリング」サイクルを使用しようとすると、いくつかの問題があります。例で説明するのが一番だと思います。 現在、ファイル(タブ区切りデータを含む)を読み取り、非数値データを含むすべての列をフィルターで除外できるプログラムが必要です。おそらくこれを行うためのシンプルなツールが既にいくつか用意されていると思いますが、TDDの練習をするのにすてきできれいなプロジェクトになりそうだと思ったため、最初から実装することにしました。 したがって、最初に、「赤い帽子をかぶる」、つまり、失敗するテストが必要です。私は、行内のすべての非数値フィールドを見つけるメソッドが必要だと考えました。だから、私は簡単なテストを書いて、もちろんすぐにコンパイルに失敗するので、関数自体の記述を開始し、2、3サイクル(赤/緑)前後に作業関数と完全なテストができました。 次に、ファイルを1行ずつ読み取り、最終的に削除する必要があるすべての列を収集するために各行で「findNonNumericFields」関数を呼び出す関数「gatherNonNumericColumns」を続行します。いくつかの赤と緑のサイクルがあり、作業機能と完全なテストが完了しました。 今、私はリファクタリングする必要があると考えています。私のメソッド「findNonNumericFields」は、「gatherNonNumericColumns」を実装するときに必要だと考えたために設計されたため、「findNonNumericFields」をプライベートにするのが合理的だと思われます。ただし、テストしていたメソッドにアクセスできなくなるため、最初のテストが中断されます。 だから、私はプライベートメソッドと、それをテストするテストスイートになります。多くの人がプライベートメソッドをテストすべきでないとアドバイスしているので、私はここで一角に自分を描いたように感じます。しかし、どこで正確に失敗しましたか? より高いレベルで始めて、最終的には私のパブリックメソッド(つまり、findAndFilterOutAllNonNumericalColumns)となるものをテストするテストを作成することもできましたが、それはTDDの全ポイントに少なくとも反すると感じます(少なくともボブおじさんによれば) :テストと本番コードの作成を絶えず切り替える必要があります。また、任意の時点で、すべてのテストが最後の1分以内に機能しました。パブリックメソッドのテストを書くことから始めた場合、プライベートメソッドのすべての詳細が機能するようになるまでに数分(または数時間、あるいは非常に複雑な場合は数日)があり、テストがパブリックをテストするためメソッドが渡されます。 じゃあ何をすればいいの?TDD(急速な赤緑リファクタリングサイクル)は、単にプライベートメソッドと互換性がありませんか?または、私の設計に欠陥がありますか?

8
最新のC ++はC#に取って代わりますか?Microsoftは開発者にC ++の採用を促していますか?[閉まっている]
最近のC ++の人気と、C#または他のCライクな言語からC ++への移行についての話を聞きます。 私はC ++ 11の機能について知っていますが、特にC#からC ++に移行した開発者からのあなたの経験を聞きたいです。 さらに重要なこととして、Microsoftは開発者にC ++の使用を促していますか?はいの場合、なぜですか?
91 c#  c++ 

7
動的型付けではどのような機能が許可されますか?[閉まっている]
私は数日前からPythonを使用していますが、動的型付けと静的型付けの違いを理解していると思います。私が理解していないのは、どのような状況下でそれが好ましいかということです。柔軟性があり読みやすいですが、実行時のチェックが多くなり、ユニットテストが必要になります。 柔軟性や読みやすさなどの非機能的な基準とは別に、動的型付けを選択する理由は何ですか?そうでなければ不可能な動的型付けで何ができますか?動的型付けの具体的な利点を示す具体的なコード例は何ですか?

9
従業員に「作業」GitHubアカウントの作成を依頼することをお勧めしますか?
会社のすべてのGitリポジトリをGitHubに移動しました。次に、プロジェクトに従業員を追加します。ほとんどの従業員はすでに個人的なGitHubアカウントを持っているので、仕事用の GitHubアカウントを作成するように依頼する必要があるのか​​と思っています。私がこれを行うことを考えている理由は、コードベースへの不正アクセスの可能性を減らすためです。なぜなら、彼らの個人アカウントはサイトでの個人活動を通じて十分に公表され、標的型攻撃の可能性が高まるからです。さらに、個人アカウントが危険にさらされたとしても、ハイジャック犯が会社コード全体にアクセスできるということにはなりません。これは従業員のために2つのアカウントを維持する負担をもたらすので、それが正しいアプローチであるかどうか、そしてそれが理にかなっているかどうか疑問に思っています。 更新 すべての有用な洞察力をありがとう。質問/回答の主観的な性質のため、またいくつかの異なる回答から最高のポイントを取得したため、回答を受け入れられたものとして設定しません。 この方法で進むことにしました。実際の理由から、仕事関連のGitHub電子メール通知を仕事用電子メールアカウントに送信する必要があることを従業員に思い出させます。したがって、作業用のGitHubアカウントを作成する方が理にかなっています。個人のGitHubアカウントを使用して仕事用の電子メールアカウントに接続する場合は、それで問題ありません。とにかく、従業員は書面でGitHubの使用に関連するいくつかの条件に同意する必要があります。これらはアカウントのセキュリティに関連しています:他のアカウントで使用されていない安全なランダムパスワードジェネレーターを使用して安全なパスワードを選択する、所有または管理されていないコンピューターを介してGitHubにアクセスしない、など。仕事のアカウントが彼らにとってより意味があるかどうかを自分で決めます。
91 github 

5
UTF-8よりもASCIIエンコードを選択する利点は何ですか?
ASCIIのすべての文字は、ストレージを増やすことなくUTF-8を使用してエンコードできます(どちらも1バイトのストレージが必要です)。 UTF-8には、「ASCII文字」を超える文字サポートの利点があります。その場合は、なぜ我々がします今までに UTF-8を超えるASCIIエンコードを選ぶのか? UTF-8の代わりにASCIIを選択するユースケースはありますか?

15
OOPの時代にCがこれほど人気が​​あるのはなぜですか?[閉まっている]
私はCとC ++の両方で多くのコードを記述しましたが、CがJavaにやや遅れて2番目に人気のある言語になるとは思いませんでした。 TIOBEプログラミングコミュニティインデックス 私は、OOPのこの時代に、Cがまだとても人気がある理由について興味がありますか?人気のあるプログラミング言語の上位5つのうち4つは、「現代の」オブジェクト指向対応言語です。 さて、CでOOPをある程度使用できることに同意しますが、それはある種の苦痛で洗練されていません(少なくともC ++とはかなり違います)。それでは、何がCをそんなに人気にしているのでしょうか?効率ですか?低レベルである; すでに存在するライブラリの大部分または他の何か?

12
「ソフトウェアはハードウェアを置き換えることができます」というフレーズの意味は何ですか?
ハードウェア/ソフトウェアインターフェースおよびオペレーティングシステムに関する初心者向けコースでは、多くの場合、ハードウェアの一部をソフトウェアに、またはその逆に置き換える方が良いかどうかというトピックが出てきます。接続できません。

19
すぐにユーザーに見えない改善に価値が見られない管理に対処する
スケジュールのプレッシャーを理解できます。ユーザーは会社の生命線であるため、ユーザーを喜ばせたいと考えています。ただし、特定の変更により、今後すべてが簡単になることも事実です。残念ながら、私の組織の経営陣はそのような変化に対して本能的な抵抗を持ち、この抵抗は非常に強いため、長期的な改善の妨げになります。 たとえば、Appleは最近、iOSプログラム用の自動参照カウントを導入しました。これは、以前は使用する必要があった手動の保持/解放呼び出しを大幅に改善したものです。コードは記述しやすく、保守しやすいです。切り替え自体がクラッシュを引き起こす可能性があります。しかし、それらが解決されると、ランダムな奇妙なクラッシュの数は減少する可能性があります。 最近、上司に、自動参照カウントに切り替えたいと言いました。彼の応答は、目に見える改善に集中したかったということでした。この反応は、彼の上からの圧力、そしておそらくCEOからの圧力によって引き起こされた可能性があります。 同様の例がたくさんあります。一般的なスレッドは、何かを修正する必要があるが、修正の短期的な費用は短期的な利益を上回り、「短期」は「今後数週間以内」と定義されます。 状況をどのように処理すればよいですか? 編集:回答いただきありがとうございます。来てください。私の状況に関連しているため、マネージャーとCEOはどちらもプログラマーであることを明確にする必要があります。どうやら彼らのプログラマー側は他の圧力に圧倒されているようです。

5
これらのすべてのサービスで、どうすれば貧血にならないのですか?
ビジネスロジックの委任とカプセル化の境界はどこにありますか?委任すればするほど、貧血になります。ただし、委任は再利用とDRYプリンシパルも促進します。それでは、委任するのに適切なものと、ドメインモデルに残すべきものは何でしょうか? 例として、次の懸念事項を取り上げます。 認証。ドメインオブジェクトは、そのアクセス制御ルール(CanEditプロパティなど)を維持する必要がありますか、それともアクセスの管理のみを行う別のコンポーネント/サービス(IAuthorizationService.CanEdit(object)など)に委任する必要がありますか?それとも、2つの組み合わせにする必要がありますか?おそらく、ドメインオブジェクトには、実際の作業を実行するために内部IAuthorizationServiceに委任するCanEditプロパティがありますか? 検証。上記と同じ議論は検証に関するものです。誰がルールを維持し、誰がルールを評価する責任がありますか?一方では、オブジェクトの状態はそのオブジェクトに属している必要があり、有効性は状態ですが、すべてのドメインオブジェクトのルールを評価するために使用されるコードを書き直したくありません。我々は可能性があり、この場合の継承を使用して... オブジェクトの作成。ファクトリクラスとファクトリメソッド、インスタンスの「更新」。別のファクトリクラスを使用する場合、作成ロジックを分離してカプセル化できますが、オブジェクトの状態をファクトリに開くことを犠牲にします。これは、ファクトリが使用する内部コンストラクターを公開することでドメインレイヤーが別のアセンブリにある場合に管理できますが、複数の作成パターンがある場合は問題になります。そして、すべてのファクトリーが適切なコンストラクターを呼び出している場合、ファクトリーを持つことのポイントは何ですか? クラスのファクトリメソッドは、オブジェクトの内部状態を開く問題を排除しますが、静的であるため、別のファクトリクラスの場合のように、ファクトリインターフェイスの注入によって依存関係を解除することはできません。 永続性。ドメインオブジェクトがCanEditを公開し、承認チェックを実行する責任を別の関係者(IAuthorizationService)に委任する場合、同じことを行うドメインオブジェクトにSaveメソッドがないのはなぜでしょうか。これにより、オブジェクトの内部状態を評価して、カプセル化を中断せずに操作を実行できるかどうかを判断できます。もちろん、リポジトリオブジェクトをドメインオブジェクトにインジェクトする必要がありますが、これは少し気になりますが、代わりにドメインイベントを発生させ、ハンドラーが永続化操作を実行できるようにしますか? これでどこに行くのかわかりますか? Rockford Lhotkaは、CSLAフレームワークのクラスインチャージルートに進む理由について素晴らしい議論をしており、そのフレームワークには少し歴史があり、ドメインオブジェクトと並行するビジネスオブジェクトの彼のアイデアをさまざまな方法で見ることができます。しかし、良いDDDの理想にもっと忠実になろうとしているので、コラボレーションが過剰になりすぎるのではないかと思っています。 集約ルートのIAuthorizationService、IValidator、IFactory、およびIRepositoryで終わる場合、何が残っていますか?オブジェクトの状態をDraftからPublishedに変更するPublishメソッドを使用して、クラスを非貧血ドメインオブジェクトと見なすのに十分ですか? あなたの考え?

8
ソースコードを持っていないプログラムの出力を変更する方法
私たちの会社には、数学的な計算を行う小さなプログラム(.exe 500Kbサイズ)があり、最終的にはワークフローを続行するために使用するExcelスプレッドシートに結果を出力します。 列、間隔の形式を変更し、ExcelスプレッドシートでVBAロジックなどを追加しますが、このプログラムではこのパラメーターを構成できないため、変更する唯一の方法は.exeを分解/リバースエンジニアリングすることです プログラミングされた言語が誰にもわからないのは、私たちが知っている唯一のことです: 20年以上前に開発 10年前に退職した開発者 GUIアプリケーション スタンドアロンで実行 サイズ500Kb この種の問題に対処するためのオプションはありますか?リバースエンジニアリングが唯一のオプションですか、それともより良いアプローチがありますか?

18
プログラマーが去る理由[閉鎖]
プログラマが仕事を辞める理由と、辞める理由があなたの今の仕事に再浮上したかどうかを調べることに興味がありますか? 単に報酬、場所に任せる理由は、上司/同僚、認識不足または退職/新しいキャリアパスが嫌いです。 更新:私はプログラマーとテスターのチームに責任があり、私のチームが去る動機となるものをよりよく理解し、できればそのような問題に対処することを試みます。
89 management 

19
東のプログラマは、西のプログラマをどのように見ていますか?
この質問の残り半分:西側のプログラマーは東側のプログラマーをどのように見ていますか? 東のプログラマが西のプログラマをどのように見ているかを見るのも同じくらい興味深く、重要だと思います。 世界の東部(インド/中国/フィリピン)は、主に西側の世界(米国およびヨーロッパ)にアウトソーシングサービスを提供していると見られています。 オフショアチームの一員として働いた経験はありますか?はいの場合、どうでしたか? 西洋のプログラマーに関する一般的なアイデアや意見はありますか(例:彼らは協力しているか、時間通りに納品しているか、質の高い仕事をしているのか?)
89 teamwork  culture 

26
数学はプログラミングとどう関係しますか?[閉まっている]
ソフトウェア開発の卒業証書を始めたばかりです。今、私たちは基本的なJavaなどから始めています(そのため、あなたは言うかもしれません)。 数学はコーディングに関係していると聞き続けていますが、それはどうですか?数学とプログラミングがどのように連携するか、または互いに依存していることを示す一般的な例は何ですか? 私は自分の質問があいまいであることをおizeびします。コードモンキーの学生として踏み込んでいる世界の大まかな考えをつかみ始めているところです...

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