Test etme, genellikle yazılımın amaçlandığı şekilde çalıştığını göstermeyi amaçlar, ancak hata ayıklama, bir yazılım uygulamasından hataları giderme işlemidir. Ancak, test etme yalnızca bir yazılım uygulamasının çalıştığını göstermekten daha karmaşık .
Büyük yazılım projeleri için testler, her bir aşamanın belirli bir amacı olan birkaç aşamaya ayrılabilir. Küçük projeler için, bazen test ve hata ayıklama aynı anda gerçekleştirilir.
Genel olarak, sınama, bir yazılım uygulamasındaki hataları bulmak içindir. Yazılımın, amaçlanan işlevselliğini, genellikle elde edilmesi zor olduğu için genellikle yüzde 100 işlevsellikten daha düşük olan belirli bir seviyeye ulaştığını ispatlamayı amaçlamaktadır. Test elle yapılabilir, ancak büyük projeler için süreci otomatikleştirmek nadir değildir.
Hata ayıklama, yazılımdaki hataları bulmak ve kaldırmak içindir. Bir hata diğerinden farklı olduğundan genellikle manueldir ve her hata için bir kez gerçekleştirilir. Çoğu durumda bir hata, bir yazılım uygulamasının gerçekte yaptıkları ile yapması gerekenler arasındaki farktır.
Hatalar mantıksal veya sözdizimsel olabilir. Bu hataları bulan özel programlara hata ayıklayıcı denir ve çoğu programlama ortamı yerleşik bir hata ayıklayıcı ile birlikte gelir.