1. A method of debugging software comprising: obtaining a software module; obtaining a first input test vector; obtaining a bug list; generating a first output vector by applying said first input test vector to said software module; applying a comparison test to said first output vector to determine whether a bug exists in said software module; applying a module decomposition test to said software module when the result of said comparison test is positive; and appending said software module and said first input test vector to said bug list when the result of said module decomposition test is negative.