There are many ways: Truth tables are certainly one, but that one is always an exponential-size effort. Another approach is to compute a ROBDD, and then to enumerate the paths from the root node to the 1-leaf; each path is a conjunction of possibly negated variables and denotes a variable assignment. Using a disjunction of the paths gives you another DNF. And there is also the way to use Boolean algebra to rewrite a given formula to DNF which is also sometimes a fast solution. Yet another way is to compute the CNF of the negation, and to negate that again to make it a DNF.

In general, there is no best way, it always depends on the given formulas.