バグ修正や機能追加によってソフトウェアに混入することがあるものは？
バグ
バグ 
 バグ修正や機能追加によってソフトウェアに新たなバグが混入してしまうことを防ぐには、既存機能が仕様通り正常に動作することを保証するための単体テストを自動化してリグレッションテストの機会を増やすことが挙げられる。この開発手法はテスト駆動開発と呼ばれ、リファクタリングやアジャイルソフトウェア開発の要となっている。
プログラミング 
 可能な限り避けたいものではあるが、プログラムにはバグ (bug) の混入が避けられない。場合によっては仕様にバグがあることもある（もっとひどい場合には標準規格のようなものでもバグがある）。デバッグ (debug) とはバグを取る作業であり、プログラミングの過程に必要なものとして見積りなどでは含めておかなければならない。 閏秒 
 2012年7月1日のうるう秒では、Linux のカーネルのスレッド関係のバグにより、Java や MySQL など各種プログラムで、高負荷になったり異常な動作をしたりした。これにより、VPSなどの共有系のサーバーが過負荷になった。また、au、mixi、Gawker、StumbleUpon、Yelp、foursquare、LinkedInなど世界中の様々なインターネットサービスで障害が発生した。Linux カーネル 2.6.29 で修正したはずであったが、実際は、それよりも古いカーネルにバグ修正を加えたものではなく、それよりも新しいカーネルに未知のバグが存在しており、問題が発生した。 C++ 
 C言語の標準規格であるC99やその後継C11ではこうした非互換性の一部が解決されており、codice_2形式のコメントや宣言とコードの混在といったC++の機能がC言語でサポートされている。その一方でC99では、可変長配列、複素数型の組み込み変数、指示初期化子、複合リテラルといった、C++でサポートしていない数多くの新機能が追加された。C99で追加された新機能の一部はC++11に反映され、C++14に対してもC99やC11との互換性を向上される提案が行われた。また、可変長配列や複素数型などのC99に追加された機能の一部はC11でオプションとなった。 ソフトウェア設計 
 ソフトウェア設計者やアーキテクトは、設計上の問題が既存の解決済みの問題と同じであると気づくことがある。よくある問題についての解法のテンプレート（あるいはパターン）をデザインパターンと呼ぶ。過去に評価済みのデザインパターンの利用によって、ソフトウェア開発工程が加速される。 Adobe_Creative_Suite 
 Creative Suiteでは、個々のソフトウェアの開発はAdobe Acrobatを除き、統合パッケージ製品の発売に合わせる形で行われるようになり、各ソフトウェア間の連携が強化されデータのやりとりが容易に行えるようになった。またそれぞれのバージョン表記もCSのバージョンに合わせ変更・統一された。 カーネル 
 全てではないが、多くのオペレーティングシステム (OS) はカーネルを内包する。ハードウェアとソフトウェアの間の通信を管理するソフトウェアとしてのカーネルは、性能、メモリ効率、セキュリティ、プロセッサのアーキテクチャなどが複雑に絡んだ問題への妥協的解答である。 C++ 
 コンパイラ開発者の裁量で決められる範囲を確保するため、C++標準化委員会は名前修飾や例外処理などの実装に依存する機能の実装方法を決定しないことに決めた。この決定の問題は、コンパイラが異なるとオブジェクトファイルの互換性が保証されない点である。特定の機種やOSでコンパイラの互換性を持たせ、バイナリレベルでのコード再利用性を高めようとするABIのような非標準の規格もあり、一部のコンパイラではこうした準規格を採用している。 プログラミング 
 デバッグには統合開発環境 (IDE) が使われることが多い（Visual Studio、NetBeans、Eclipseなど）。独立したデバッガ（gdbなど）も使われている。 C++ 
 C++はCにクラスのサポートを追加しただけでなく、さらに次のような多種多様な機能を持っており、言語仕様は大変複雑である。言語処理系すなわちコンパイラの実装も、Cなどと比べて難易度が非常に高い。 デスクトップ環境 
 メタファーの純粋さを守るよりも利便性を高めるのが重要であるため、デスクトップメタファーは実装によっては様々な拡張がなされている。そのため、ゴミ箱やファイルキャビネットが何故か机の上に出現することになった。また、メニューバーやタスクバーといった機能は実世界の机とは対応していない。