Finding Reusable Modules Using Sparse Matrix Decompositions