Functional vs. Non-functional: Main Categories of Software Testing