The [[ ]] test syntax is both more flexible and less error-prone:
[[ $foo = 'Hello '* ]]
re='foo.*bar'; [[ $var =~ $re ]]
[[ $foo =~ "$substring" ]]
[[ a = b && ( c = d || e = f ) ]]
The better behaviour around quoting and empty expansions alone makes this worthwhile.
Taking advantage of the additional capabilities is going to require a little more effort: