Finding subgroups computationally

Hello, I am having problems finding a (reasonably) efficient algorithm to find subgroups of a given group (for which nothing [Abelian, cyclic, prime-order, etc.] can be assumed).

The only method I can think of is to check for closure on every possible subset of the group whose order divides the order of the group.

This obviously becomes unusable for larger order groups, so can anybody describe or provide a link to a better algorithm if such an algorithm exists?

Thanks!