ソフトウェア工学

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

10
initialize(またはinit)の反対は何ですか?[閉まっている]
この用語はメソッド名として使用されます。このメソッドは、ユーザーインターフェイスの一部が非表示(または削除)になったときに呼び出され、値をデフォルトにリセットし、使用されなくなったオブジェクトを破棄するために使用されます。 可能な名前は次のとおりです。release、remove、dispose、clearなど。 どちらが最も適切だと思いますか?

11
コードレビューでは、レビュー担当者は常に問題の解決策を提示する必要がありますか?[閉まっている]
コードをレビューするとき、私は通常、問題を解決する方法について特定の推奨事項を作成しようとします。しかし、レビューに費やすことができる時間が限られているため、これは必ずしもうまく機能するとは限りません。これらの場合、開発者が自分で解決策を考え出した方が効率的です。 今日、私はいくつかのコードをレビューし、クラスが明らかにうまく設計されていないことを発見しました。特定のオブジェクトにのみ割り当てられ、他のオブジェクトには空白のままになっているオプションの属性がいくつかありました。これを解決する標準的な方法は、クラスを分割して継承を使用することです。しかし、この特定のケースでは、このソリューションは物事を過度に複雑にしているように見えました。私は自分でこのソフトウェアの開発に関わっていなかったため、すべてのモジュールに精通していません。したがって、特定の決定を下すのに十分な知識があるとは感じませんでした。 私が何度も経験した別の典型的なケースは、明らかに意味のない、または誤解を招くような関数、クラス、または変数名を見つけたが、自分で良い名前を思い付くことができないことです。 それで、一般的に、レビュアーとして、「このコードには欠陥があるので...違う方法でやる」と言ってもいいですか、それとも特定の解決策を考え出す必要がありますか?

17
ユニットテストの失敗が悪いと見なされるのはなぜですか?
一部の組織では、明らかに、ソフトウェアリリースプロセスの一部は単体テストを使用することですが、どの時点でもすべての単体テストに合格する必要があります。たとえば、すべてのユニットテストが緑色で合格していることを示す画面が表示される場合があります。 個人的には、これは次の理由からそうあるべきではないと思います。 これは、コードが完璧であり、バグが存在してはならないという考えを促進します。これは、実世界ではどのようなサイズのプログラムにとっても確かに不可能です。 失敗する単体テストを考えるのは意欲をくじくものです。または、修正するのが難しい単体テストを確実に考え出してください。 いずれかの時点ですべてのユニットテストが合格した場合、その時点でのソフトウェアの状態の全体像はありません。ロードマップ/目標はありません。 実装前に、事前に単体テストを書くことを思いとどまらせます。 単体テストに失敗したソフトウェアをリリースすることも、悪いことではないことをお勧めします。少なくとも、ソフトウェアのある側面には制限があることを知っています。 ここに何かが足りませんか?組織がすべての単体テストに合格することを期待するのはなぜですか?これは夢の世界に住んでいますか?そして、それは実際にコードの本当の理解を妨げていませんか?


16
ソフトウェア開発者として自分を売り込むには?[閉まっている]
これは、私たちのような技術分野の若者の間で頻繁に起こる問題であることに気づきました。 私たちのキャリアの初めには、雇用者に自分を売る方法がわからないだけで、ランダムな男#57(プログラマーですが、技術的にはあなたほど良くはありません)は、彼が昇給または昇進することになりますあなたよりも自分自身とコミュニケーションし、マーケティングする方法を知っています。多くの人がこれを過去に見たことがあると思いますし、将来的にはもっともっと多くのことを確信するでしょう。 知っているすべてのプログラミング言語とライブラリをリストする以外に、就職の面接や昇給を求めるときに指摘するのに、どのようなスキル/能力(技術的、またはその他の性質)が関連すると思いますか?

30
英語圏以外の国の人々は英語でコーディングしていますか?[閉まっている]
私はそれが(同僚によって)どこから来たとしても誰もが「英語でコードを書く」と言ったと聞きました。信じることは難しいと思いますが、ほとんどのプログラミング言語でサポートされている文字セットが比較的狭い場合は驚かないでしょう。 英語が第一言語ではない国で働いたことはありますか? もしそうなら、彼らのコードはどのように見えましたか?

5
Javaに末尾再帰の最適化がないのはなぜですか?
私が読んだことから:理由は、継承があるためにどのメソッドが実際に呼び出されるかを決定するのは簡単ではないからです。 しかし、なぜJavaには少なくとも静的メソッドの末尾再帰最適化がなく、コンパイラで静的メソッドを呼び出す適切な方法を強制しないのですか? Javaが末尾再帰をまったくサポートしないのはなぜですか? ここに問題があるかどうかはまったくわかりません。 JörgW Mittag 1が説明したように、提案された複製について: もう1つの質問は、TCOに関する質問です。これはTREに関する質問です。TREはTCOよりもはるかに単純です。 また、別の質問では、JVMがJVMにコンパイルしたい言語実装にどのような制限を課しているのかを尋ねます。この質問は、JVMによって制限されないJavaについて質問します。 Javaを設計する同じ人々。 最後に、JVMにはメソッド内GOTOがあり、TREに必要なのはそれだけであるため、JVMにはTREに関する制限さえありません。 1作成されたポイントを呼び出すためにフォーマットが追加されました。

10
同僚にユニットテストを書くよう動機付ける方法は?[閉まっている]
私たちは約5年間生産されている大型製品に取り組んでいます。コードベースは動作しています。あまりよくありませんが、機能しています。新機能は実稼働環境に投入され、小さなQAでテストされます。バグは修正されています。しかし、私以外の誰もユニットテストを書いていません。この特別なバグ(テストケース)が二度と発生しないことを保証するために、単体テストを記述してバグを「追跡」する力を使用する人はいません。 私は経営陣と話しました。開発者と話しました。会社全体の全員と話をしました。みんな言う:「そう、もっとユニットテストを書かなければならない!」それは約一年前でした。それ以来、コミット前のコードレビュー(Gerrit)と継続的インテグレーション(Jenkins)の導入を強制しています。 ユニットテストについていくつかの会議を開催し、ユニットテストを書くことの利点も示しました。しかし、誰も興味がないようです。 Q1:同僚に単体テストを書くように動機付けるにはどうすればよいですか? Q2:個人コードの品質基準を遵守する意欲を維持するにはどうすればよいですか?(時にはイライラすることがあります!) PS:いくつかのイライラする事実(1年で到達): 単体テスト:1693 合計「サンプル単体テスト」:約50 完了:1521 編集:私はあまりにも期待していますか?その最初の職場であり、ベストを尽くそうとしています。 編集2:すべての答えに基づいて、私は自分のために小さなチェックリストを作成しました。私はプライベートで2人の開発者と話をしました。 そのうちの1人は、テラスティンが言ったように、彼がユニットテストに本当に不快であると私に言った。彼は「もっとプロフェッショナルになりたい」と言ったが、キックスタートが必要だ。彼はまた、すべての開発者とのユニットテスト会議(約9〜11日)は良かったと言いましたが、あまりにも混雑していました。えー 批評家もいますが、それから学びます。(tdd kataミーティングに関する以下の回答を参照してください!) もう1人は、単体テストの作成には興味がないと言いました。彼は自分の仕事が給料に十分であると考えています。彼はそれ以上の努力をしたくありません。私は全く言葉を失いました。典型的な9-5「労働者」。 来週は他の開発者と話をします。 素晴らしい回答(これまでのところ)とサポートに感謝します。ほんとうにありがとう!私は多くを学びました、ありがとうございました!

17
ユーザーインターフェイスクラスをコマンドラインインターフェイスに置き換えることができると考えるアーキテクチャを設計することは良い考えですか?
コード完了ページ25では、通常のユーザーインターフェイスクラスをコマンドラインクラスで簡単に置き換えることができるとよいと言われています。 テストの利点を知っていて、それがもたらす問題についてはどうでしょうか? この余分な作業は、Webプロジェクトとモバイルプロジェクトにとって本当に成果がありますか?中小規模のプロジェクトはどうですか。同じルールが適用されますか?設計がより複雑になる場合はどうしますか?

18
コーディングの深部にいる間に開発者が中断されるべきではない理由を素人に説明する方法は?[閉まっている]
私の質問の2番目の部分、「なぜコーディングの深部にいる間、開発者が中断されるべきではないか」を考慮すると、それは賢い人々によって何度も議論されてきました。SOの共同創設者であるJoel SpolskyでさえあるHeckは、「ゾーンに入る」および「ゾーンからノックアウトされる」こと、そして複雑な作業に参加するときに生産性を達成するのに平均15分かかる理由についてブログ投稿を書きました。ソフトウェア開発関連のタスク。だから、その理由が確立されたと思います。 私が興味を持っているのは、BeansについてBeanを知らない人にそれをすべて説明する方法です(つまり、ソフトウェア開発を意味します)。妻、職場の経理担当の変な男、またはSkypeで30分ごとに「Wazzzzzzup ?!」でpingを送信する長年の友人に、すべての中断が仕事に与える影響がはるかに大きいことを伝える方法彼らがあなたの時間からかかった明らかな30秒。空白の凝視や友好的な虐待の標的になりたくない限り、「短期記憶で多くの変数名をジャグリングしなければならない」などの文で説明できないことは明らかです。 攻撃的、エリート的、または技術的になりすぎることなく、すべてを非開発者に明確に理解できる方法で説明できるようにしたいと思います。 編集:素晴らしい洞察力をくれたみんなに感謝します。EpsilonVectorの答えは、彼の類推が私の本来のニーズに最も近いものであったため、受け入れました。「眠りに落ちる」説明は攻撃的でも技術的でもありません。ほとんど誰もがそれに関連することができます。時間の。

12
Cが「オブジェクト指向」言語と見なされないのはなぜですか?
Cには、オブジェクトと見なすことができる「構造」などの独自の準オブジェクトがあるようです(通常は高レベルの方法で考えられます)。 また、Cファイル自体は基本的に別個の「モジュール」ですよね?モジュールも「オブジェクト」のようなものではありませんか?C ++に非常に似ているCが、C ++が高レベルの「オブジェクト指向」である低レベルの「手続き型」言語と見なされる理由について混乱しています *編集:(説明)なぜ、どこで、「オブジェクト」が何のために、そして何のために線が引かれているのか?

19
TDDが機能する理由 [閉まっている]
最近、テスト駆動開発(TDD)が大きくなっています。プログラマーSEやその他の会場で、さまざまな問題の解決策として推奨されることがよくあります。なぜ機能するのだろうか。 エンジニアリングの観点から見ると、2つの理由で困惑しています。 「書き込みテスト+合格するまでリファクタリングする」アプローチは、信じられないほどアンチエンジニアリングに見えます。たとえば、土木技師が橋の建設にそのアプローチを使用したり、車の車の設計者を使用すると、非常に高いコストで橋や車の形状を変更することになり、その結果、よく考え抜かれたアーキテクチャのないパッチアップされた混乱になります。「リファクタリングまでのパス」ガイドラインは、多くの場合、アーキテクチャ設計を忘れ、テストに準拠するために必要なことをすべて実行することを義務付けられています。つまり、ユーザーではなくテストが要件を設定します。このような状況で、結果の良い「虚偽」、つまり正しいだけでなく、拡張性、堅牢性、使いやすさ、信頼性、安全性、安全性などの最終結果をどのように保証できますか?これは、アーキテクチャが通常行うことです。 テストでは、システムが機能することを保証できません。そうでないことを示すだけです。言い換えれば、テストは、テストに失敗した場合にシステムに欠陥があることを示しますが、すべてのテストに合格したシステムは、テストに失敗したシステムより安全ではありません。ここでは、テスト範囲、テスト品質、およびその他の要因が重要です。「すべてがグリーン」な結果が多くの人々にもたらす誤った安全感情は、民間および航空宇宙産業では非常に危険であると報告されています。テスト戦略として」。多くの場合、テスト戦略はチェックされません。または、誰がテストをテストしますか? 要約すると、私は「テスト」ビットよりもTDDの「ドリブン」ビットに関心があります。テストはまったく問題ありません。私が得られないのは、それを行うことで設計を推進することです。 ソフトウェアエンジニアリングのTDDが優れた実践である理由と、ソフトウェアの場合に上記で説明した問題が関連性がない(または関連性が十分でない)理由を含む回答をご覧ください。ありがとうございました。
92 testing  tdd 

22
OOPが難しいのはなぜですか?[閉まっている]
オブジェクト指向言語(Java)を使い始めたとき、私はほとんど「クール」になり、コーディングを始めました。OOPについて多くの質問を読んだ後、つい最近まで本当に考えたことはありませんでした。私が得る一般的な印象は、人々がそれに苦しんでいることです。私はそれを一生懸命だとは思っていないし、天才だとは言わないので、何かを見逃したか、誤解したに違いないと思っています。 OOPの理解が難しいのはなぜですか?理解するのは難しいですか?

15
単体テストを有効にするために、最初からコードを設計する必要がありますか?
現時点では、ユニットテストを許可するようにコード設計を変更することはコードのにおいであるのか、それともコードのにおいをせずにどの程度できるのかについて、チームで議論が行われています。これは、他のすべてのソフトウェア開発会社に存在するプラクティスを導入し始めたばかりだからです。 具体的には、非常に薄いWeb APIサービスが用意されます。その主な責任は、Web要求/応答をマーシャリングし、ビジネスロジックを含む基盤となるAPIを呼び出すことです。 1つの例は、認証方法の種類を返すファクトリの作成を計画していることです。インターフェースを継承する必要はありません。具体的なタイプ以外のものになるとは思わないからです。ただし、Web APIサービスを単体テストするには、このファクトリをモックする必要があります。 これは本質的に、(コンストラクターまたはセッターを介して)DIを受け入れるようにWeb APIコントローラークラスを設計することを意味します。つまり、DIを許可するためだけにコントローラーの一部を設計し、そうでなければ必要のないインターフェースを実装することを意味しますこの方法でコントローラーを設計する必要を避けるために、Ninjectのようなサードパーティのフレームワークがありますが、インターフェイスを作成する必要があります。 チームの何人かは、テストのためだけにコードを設計することを渋っているようです。単体テストを行うには妥協が必要だと思われますが、彼らの懸念をどのように和らげるかはわかりません。 明確にするために、これはまったく新しいプロジェクトであるため、コードを変更して単体テストを有効にすることではありません。ユニットテスト可能になるように記述するコードを設計することです。

3
他の誰かが記入するために書かれた未実装コードの用語はありますか?
プログラミングエクササイズ、定型的な生成、ジュニアプログラマが実装するタスクにガイドレールを置くなどで、プログラマに未実装のコードが表示され、「空白を埋める」ように指示されることがあります。たとえば、コンパイルはできるが失敗する単体テスト、または空のメソッドを含むクラス宣言。 この慣習に共通の用語はありますか?

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