Break out tests into the various kinds of test, i.e.
- unit tests that are written along with application code
- integrated tests that test dependencies
- performance tests that test both response and volume
- manual tests
and think about what is needed for your business, for your industry. A new startup with little funding will do quite different testing from Facebook.
Also, think about the testing pyramid:
ui
Integrated
Performance & Load
Individual Unit Level
You should have a few high level ui cases but hundreds or thousands of low level unit cases (that mock and stub out actual services). In terms of test duplication between level, I actually expect ALL high level integrated tests to, in some ways, duplicate what is covered by low level unit tests. For example a user registering on the site and making a purchase might be one end-to-end ui test, however it will use a number of pieces of code that have unit tests to achieve this.
Time to run is also a factor. You should have unit test suites that run in under 5 minutes. Unfortunately many companies have test suites that run for 2 or 4 or even 24 hours. This means they now have technical debt that can cripple them if not addressed. Addressing this will mean major culture changes and it will be really hard. They have lost control of their process and they now have a serious problem.