Is there an easy way to find the (number of) subgroups of a given group? Is there an easy way to find all subgroups of a given group? For example, say you had the dihedral group $D_{4}$ - is there a way to work out how many subgroups this has, or what they are, or can it only be done by trial and error or inspection?

I think the answer to the question "Is there an easy way to find all subgroups of a given finite group?" is no.
There are of course methods for doing this that are used by GAP and Magma, which are very effective for small and moderately large groups, but I would not describe them as easy. Also, as far as I am aware, none of the current implementations are complete algorithms, in the sense that they will not, even theoretically, work on arbitrarily large groups. The older methods required databases of perfect groups, which of course could only be complete up to some order.
The newer methods require knowledge of the maximal subgroups of all finite almost simple groups. This is still not completely known theoretically, although is is still a very active area of research. For a complete description, you would need to know (or understand) all irreducible modular representations of all almost simple groups. The maximal subgroups of the Monster sporadfic group are still not completely determined, but there are only a small number of uncertainties remaining.
