一、通过手工测试无法做到覆盖所有代码路径;

二、许多与时序、死锁、资源冲突、多线程等有关的错误通过手工测试很难捕捉到;

三、在系统负载、性能测试时,需要模拟大量数据、或大量并发用户等各种应用场合时,也很难通过手工测试来进行;

四、在进行系统可靠性时,需要模拟系统运行十年、几十年,以验证系统能否稳定运行,也是手工测试无法模拟的;

五、如果有大量(几千)的测试用例,需要在短时间内完成,手工测试无法保证;

六、测试可以发现错误,并不能表明程序的正确性;

七、测试所有可能情况将遭遇“组合爆炸”问题

1.Win98, WinME, WinNT, Win2k, WinXP, WinXP TablePC Ed, WinXP MediaCenter Ed, Longhorn, etc

2.English, German, Japanese, Chinese, Arabic, Thai…

3.Office 97, Office2000, Office XP, Office 2003…

4.X86 32-bit, Intel 64-bit, AMD 64-bit, Alpha, MIPS…

5.SQL Server 6.5, SQL Server 7.0, SQL Server 2000…

6.Visual Studio 6, VS .NET, VS .NET 2003, Whidbey…

八、代码全部Code Path测试覆盖也几乎不可能

1.每一个if…else…或switch语句会把情况增加一倍

2.许多异常处理代码在正常使用中不会碰到

3.许多与时序,死锁,资源冲突,多线程有关的错误很难捕捉到

九、每一个产品都会有不同的版本外加各自的SP与QFE (Quick Fix Engineering, 又称Hot fix)

1.NT4, VS6 SP1~SP5, Windows 2000 SP1-SP4

2.VS .NET, SQL Server SP1 ? SP3

十、可重复使用的自动测试对产品未来版本与Service Pack的测试将有事半功倍的效果。