ソフトウェア開発者の大企業は、プログラムのバグをどのようにチェックしますか?


15

ソフトウェア開発者の大企業がプログラムのバグをどのようにチェックするのかと思っていました。

彼らは複数のコンピューターでテストするだけですか?


13
それらを解放します。 (主な機関から出てくる...のバギーパイルによる判断)
11

彼らは非常に積極的な販売およびマーケティングキャンペーンを展開し、開発を他の国にアウトソースし、可能な限りバグを回避します。「予想外」に大きな市場シェアを失うまで。
ジョブ

なぜ大企業と中小企業とで違いがあると思いますか?
-JohnFx

回答:


30

Googleが使用する手法の一部を以下に示します。

  1. 信頼できるコードを作成する可能性が高い優秀な開発者を雇ってください。
  2. ユニットテストを頻繁に。
  3. コードレビューを使用します
  4. 継続的なビルドをセットアップして、統合の問題をキャッチします。
  5. 専用のQA部門があります。エンドユーザーをシミュレートする人テストと自動化プログラム(たとえばSeleniumを使用)の両方を意味します。
  6. 本番環境での監視を行い、物事の誤動作の証拠を見つけます。

バグを捕らえる上で効果の降順であると思われるものでこれらをランク付けしました。


2
悪い答えではありませんが、「QA」、「単体テスト」、「継続的なビルド」など、このような質問をする人にはわからない用語をたくさん使用します。定義にリンクするか、定義を与えるとよいでしょう。
ゲイブ

@gabe:使用されている用語へのポインターを追加しました。
btilly

3
+1-実際には、バグを検出するのが最も良い(つまり、時間と複雑さの点で最も安い)場合のかなり良い順序(1から6)です。
-ozz

1
多分、ユーザビリティテストもあります。単語の機能リクエストの90%が、すでに単語が持っている機能を対象としていましたが、ユーザーはそれらを見つけることができませんでした
jk。

@jk:その統計は誰ですか?引用してください。
JBRウィルキンソン

19

大企業には通常、Q / A部門全体があり、コードをテストし、コードが想定どおりに機能することを確認する責任があります。それは通常あなたが説明したように-多くのマシンをテストする多くの人々です。テストは自動化されることもあれば、自動化されないこともあります。品質保証-ウィキペディアをご覧ください

多くの場合、開発者自身が開発プロセス中にバグを見つけます。また、多くの場合、顧客はバグを最初に発見します。

私が現在働いているような中小企業は、アジャイルテストの実践を使用しています


1
うん、そしてQAの人々はテスト計画を立てます。
ジョブ

+1:これはまさに私たちのやり方です。テストチーム(私が担当)は、テスト計画を作成し、些細な単体テストを除くすべてのテストコードを作成します(開発者が作成します。義務ではありません)。受け入れ、統合、回帰に焦点を当てています。開発者がバグを見つけると、ログに記録して修正し、テストして自動化を記述します。
スティーブンエバーズ

18

規模はなく、会社の成熟度についてです :)貧弱な開発慣行を持つ大企業と、最先端にある小企業があります。

一般的に、成熟した開発チームは、次の1の活動に従事します。システムへの新しいバグの導入を最小限に抑え、2。既存のシステムのバグを見つけます。

ユニットテスト:これらは、メソッドが言うとおりに機能することを確認するための個々のメソッドの「ミニドライバー」です。これらは常に自動化されたテストです。

統合テスト:これらのテストは、システム内でより大きな機能ユニットが機能することを確認することを目的としています。これには、データベース統合またはサードパーティライブラリとの統合のテストが含まれる場合があります。これらも自動テストです。

受け入れテスト:受け入れテストは、ユーザーの要件をテストするために書かれています。これらは通常、「ハッピーパス」をテストするだけです。私のチームでは、これらのテストは、使用するように設計された機能をユーザーが使用しても問題がないことを示すように設計されています。手動でも自動でもかまいません。

機能テスト:これらのテストは受け入れテストに似ていますが、「不幸な道」もテストします。これらのテストは、それほど明白ではないシナリオをテストすることを意味します。手動でも自動でもかまいません。

回帰テスト:この用語を使用して、システムが顧客にリリースされる前にシステムの「完全なテスト」を行います。手動または自動。

ゴリラのテスト:(手動のみ)。これは、非常に賢い人間が意図的にアプリケーションを壊そうとするときの一種のテストです。

パフォーマンステストは、パフォーマンスが許容範囲内であり、時間の経過とともに低下しないことを確認することを目的としています。通常は自動化されています。

安定性テスト:これらのテストは、システムが長期にわたって安定したままであることを確認するように設計されています。自動化。

継続的インテグレーション:これは、コードを自動的にチェックアウトしてコンパイルし、自動テストを実行するシステムです。開発者がコードをコミットするたびに、より高速なテスト(ユニット、統合)が実行されます。他の一部は、夜間(受け入れ、機能)または毎週(パフォーマンス、安定性)実行します。

コードカバレッジレポート:テストされたコードの量を示します。テストカバレッジのないコードは、破損する可能性が高くなります。

コードを分析するさまざまなツール:これらは通常、潜在的なバグが発生しにくくするためにコードをリファクタリングする必要がある場所を示します。

ペアプログラミング:機能を提供するために協力する2人の開発者。「凝集ペアは、その部分の合計よりも優れています。」

最も重要なのは、自動化継続的な統合です。


会社の成熟度に反対-ソフトウェア開発の責任者が小規模/若い会社でも品質を気にし、そのメッセージがトップダウンで駆動されることは完全に可能です。エンジニアの成熟度、はい、それは可能です。
JBRウィルキンソン

1
@JBRWilkinson:会社が「成熟」することの意味について話し始めることができると思います。私はそれが年齢に関係していることを示唆するつもりはありませんでした。「知恵」に似ています。スタートアップは、わずか1〜2年前であっても、成熟しているか、賢明である可能性があります。
c_maker

4

それは会社と開発する製品に依存します。

まず、多くの企業は、コードレビューや必須のリンティング(自動化されたバグ検出ツール)などのコーディングプラクティスを実施して、リポジトリに入力されるエラーの量を減らします。多くの企業もユニットテストを採用しています。これは私が働いている場合です(Google)。コードがチェックインされると、すべてに対してテストが実行され、新しいエラーが発生しないことが確認されます。

第二に、多くの企業には、行動の検証を担当するQA部門があります。これは特に金融業界でよく見られます(ミスが高額で検証ルールが複雑な場合)が、リコールが高額なユーザーに製品を販売する企業(Intel、Microsoftなど)にも存在します。

第三に、可能な場合はいつでも企業がドッグフーディングを行い(自分のユーザーに社内で製品を使用させる)、限定ベータ版をリリースします。この段階で多くのエラーが検出されます。たとえば、Microsoftで働く人々は、外部にあるものよりも新しいバージョンのOfficeとWindowsおよびDevStudioを使用します。その後、限られたユーザーグループまたは契約企業がそれをサンプリングします。同様に、Googleでは、リリース前にGMailとドキュメントの内部バージョンを使用しています。ゲーム会社は、製品やサーバーの負荷などをテストするためにオープンベータを組織しています。


1

もちろん、答えは「それは垂れ下がっています」ですが、私はこれまでで最大のプロジェクトからサンプルを提供します。

基本セットアップ:BizTalkで大量のデータを処理するためのバックエンドソフトウェア。

最初の防衛線はユニットテストです。私たちの場合、これらはソース管理にチェックインされたすべてに対して毎日実行され、通常、それらのいくつかはチェックイン前に開発者によって手動で実行されました。単体テストは主に開発者によって作成されましたが、テスターに​​よる追加のテストで修正されることもありました。

次のステップは、毎週のVirtual PCビルドで、テスターは各コンポーネントの仕様ドキュメントに基づいて、データフローに対して一連の主に自動化されたエンドツーエンドのテストを実行しました。

その後、同じVirtual PCに本物に非常に近いビジネスデータが追加され、特定のユースケースで再度テストされました。

次に、Virtual PCを他の部門の他のシステムコンポーネント(ほとんどが仮想)と組み合わせて、データフローの最後までデータを入力するユーザーからのエンドツーエンドテストに基づいた統合テストサイクルを実施しました。

別のトラックでは、システムプロバイダーによってインストールパケットがテストされ、本番環境に正しくインストールされたかどうか、または何かが失敗した場合にロールバックできるかどうかが確認されました。

実稼働環境にインストールした後、全体の安定性をテストするために負荷テストとストレステストを実行しました(10個のBizTalkサーバー、8個のSQL Server、およびXMLアクセラレータなどのその他の特殊なハードウェアで実行する場合は、軽視しないでください)そして専用のアーカイブ-もちろんすべてがクラスター化されています)。

すべてのテストに満足したら、コードを実稼働しました。コードのバグを修正するのに非常に大きな遅延が発生し(テストサイクル全体で4〜6週間など)、これらのテストをすべて実行するのは高価ですが、全体的な安定性はかなり良好でした。実際、私が今まで見た中で最高です。繰り返しますが、毎日数百万ドルの価値があるシステムでは、それは非常に重要です。要件は異なる場合がありますが、それが私たちのやり方であり、機能しました。


1

元の質問は、提供された非常に詳細な回答のほとんどよりも概念的に一般的なようです。

より高いレベルから見てみましょう(あまり詳細ではありません)。ソフトウェアは、誰か(個人、会社、その他)の特定のニーズに対応するために開発されています。

これらのニーズは、ソースコードに実装される(建設段階で)個々のストーリー/要件にマッピングする必要があります。

ストーリー/要件を明確に定義することは、品質保証(QA)チーム(実際のソフトウェアテスター)が最終コードを検証し、実行されたときにそれらのストーリーと要件の要求に対応するために不可欠です。そのため、QAチームはその検証を行うための「テストケース」を作成します。

QAチームにリリースされたコードはテストされ、バグが特定されます。さまざまな種類と重大度のバグ。これらのバグは追跡され、開発者はそれらを割り当てて、最終的に修正を行います。

現在、仮想マシンを使用すると、1人のテスターが同じ実際のハードウェアで異なる環境を実行できます。ただし、QAフェーズ専用のコンピューターが必要になる場合があります。

全体的なプロセスを(おおよそ)理解するのに役立つことを願っています。


0

まあ、私は皮肉を言うのは嫌いですが、特定の「デバイス」オペレーティングシステムでの未解決のバグの数により、会社が大きく豊かになればなるほど、より多くのバグを作成してエンドユーザーに配信できるようになります。ソフトウェアが動作し、かっこよく見えるなら、とにかくそれをリリースするだけです。マネージャーが準備ができていると思うなら、準備ができています。そのとき、本当に厄介なバグが木工品から出てきて、エンドユーザーはモルモットになります。10年ほど後、ほとんどのバグが解決され(そしていくつかは適切な対策のために追加され)、会社は次の大きなアイデアに移行する準備が整います。

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