Noncommutative multiply- expand expression
Distribute[]
is a useful thing:
Distribute[(a + b) ** (c + d)]
a ** c + a ** d + b ** c + b ** d
The package NCAlgebra does exactly what you want.
NCExpand[(a + b) ** (a + b)]
(* a ** a + a ** b + b ** a + b ** b *)