different testing types: unit testing integration testing functional testing end-to-end testing automation testing