How can you find all subgroups of a certain group? For example, how can how find all subgroups of $S_3$? How can you ensure that your answer includes all of them? 
Note: I want to know if there is a universal method to find all subgroups for a single given group. I'm not only asking how to find all subgroups for $S_3$.
 A: No such method exists for arbitrary groups. However, if you restrict to finite groups you can simply write down all possible sets of elements and then for each set work out if it is a subgroup. You can do this in finite time. Although "finite time" may be a rather long time, even for $S_3$...
But anyway, for small groups we can try to get something quick enough for "practical purposes" by doing clever things. So, put the identity and inverses manually in each set and then discard all sets of size which do not divide the order of your group. So here, $S_3$ has order $6$ so you only care about sets of size $1, 2, 3$ or $6$. Counting the number of elements and then discarding is quicker than deciding if each set is closed under products. However, even when doing all this this algorithm is still slow...noticeably quicker for small numbers, but slow all the same...
But anyway, a worked example:
$S_3=\{1, (12), (13), (23), (123), (132)\}$
Possible sets, whilst being clever and making sure the identity is in each set and that each set is closed under inverses:
$$\begin{align*}
&\{1\}\\
&\{1, (12)\}\\
&\{1, (13)\}\\
&\{1, (23)\}\\
&\{1, (123), (132)\}\\
&\{1, (12), (123), (132)\}\\
&\{1, (13), (123), (132)\}\\
&\{1, (23), (123), (132)\}\\
&\{1, (12), (13), (123), (132)\}\\
&\{1, (12), (23), (123), (132)\}\\
&\{1, (13), (23), (123), (132)\}\\
&\{1, (12), (13), (23), (123), (132)\}
\end{align*}$$
Then, discard the sets of order not dividing $6$,
$$\begin{align*}
&\{1\}\\
&\{1, (12)\}\\
&\{1, (13)\}\\
&\{1, (23)\}\\
&\{1, (123), (132)\}\\
&\{1, (12), (13), (23), (123), (132)\}
\end{align*}$$
Quickly check that these are closed under multiplication (they are because all subgroups of $S_3$ are cyclic). Thus, these are all our subgroups.
Note that in general you will have to discard some subsets at the final step. For example, in $\mathbb{Z}_4\times\mathbb{Z}_2$ you will discard the set $\{(0, 0), (1, 0), (3, 0), (0, 1)\}$.
A: For this particular example, the group is small enough that you can deduce that every proper subgroup is cyclic (by Lagrange), so you can just go through each element and figure out which elements generate which subgroups.
As far as a general method goes, no, there really isn't one.  Finding subgroups is not an easy problem.
In general, your goal is usually to find all subgroups up to conjugacy, as from there recovering all subgroups is easy.  Here is a discussion on some of the ways people have thought to do that.  You can see that it is not a trivial issue.
