I am a software tester and have seen and met many software testers like me who want to make a accurate judgement about a test case if it has passed or failed. The obvious answer and the correct one is - compare the specification output of system to output that is observed for the test case being executed. Interesting thing to note here is that there are other influencing factors to change the decision of the tester.
Common factors include:
• Design discussion that is part of tester's knowledge base.
• Testing similar products and its output for somewhat similar test case.
• Heuristic output prediction that comes due to experience. e.g. if I have been testing many years I think you know the answer.
• Statistical characteristics judgement. e.g. I know this test case will work because it has worked most of the time.
• Changing product specs that influences comparison of results of one test execution to another.
• A model based approach is used because tester wants to be subjective and expect specific output set for specified input data set.
In all cases the tester is a voice of customer. I conclude that a better method is if tester and subject matter experts are two different people one working towards software specifications only and other towards functional specifications only.