  A $(v,k,t)$ {\em covering design}, or {\em covering}, is a family of
$k$-subsets, called blocks, chosen from a $v$-set, such that each $t$-subset is
contained in at least one of the blocks. The number of blocks is the covering's
{\em size}, and the minimum size of such a covering is denoted by $C(v,k,t)$.
This paper gives three new methods for constructing good coverings: a greedy
algorithm similar to Conway and Sloane's algorithm for lexicographic
codes~\cite{lex}, and two methods that synthesize new coverings from
preexisting ones. Using these new methods, together with results in the
literature, we build tables of upper bounds on $C(v,k,t)$ for $v \leq 32$, $k
\leq 16$, and $t \leq 8$.%
