1. A method of testing a concurrently operating computer program, the method comprising the steps of: providing an original computer program for execution as a plurality of threads under a memory model that includes a global heap having a global variable, said threads comprising respective thread instructions, thread-local heaps, said thread-local heaps having thread-local heap variables; duplicating said global variable as a duplicated thread-local heap variable of said thread-local heap of one of said threads; modifying said thread instructions of said one thread to define a modified thread such that an execution of said modified thread instructions manipulates said duplicated thread-local heap variable to produce a manipulated thread-local heap variable, wherein modifying said thread instructions comprises randomly or pseudorandomly rescheduling by reordering said thread instructions, and inserting synchronizing instructions in said one thread, wherein an execution of said synchronizing instructions forces said manipulated thread-local heap variable to be copied to said global variable to thereby establish a synchronized global variable, and wherein an access of said synchronized global variable by an execution of another thread defines an interleaving between said one thread with said other thread; and executing said modified thread and at least said other thread of said computer program to expose a concurrent flaw in operation of said computer program.