I am testing a client server application.I am doing Black box testing.
I would like to know is there any way to determine the maximum possible test cases for a particular module so that module is almost 100% covered/tested.Can i use Cyclomatic Complexity if so how can get the flow graph from funtionality or requirement specs instead of going through the code.
When you want to know what you have covered of an application, first thing you need to know is what do you want to get covered: branches, decision points, conditions?
Depending on your coverage measurement, you will have more or less cases. So saying you have a 100% coverage is not enough. One should say a 100% coverage of <branches/decision points/...>.
As I know, Cyclomatic Complexity is typically something based on the code. I don't see how you could base this on functionality or requirement specs.
Cyclomatic Complexity really gives you the code coverage, which is determined by evaluating the various paths through the overall application. This is turn in turn can indicate the ultimate numbe of tests to be written. This number is only for the "Happy Path" tests, or the ones which prove that a function is operating properly, not the negative or boundary tests which validate limits and constraints of the application. Cyclomatic Complexity also does not perform well in nested control structures such as loops.
Your question is very clear and straight forward. If someone ask you to write test cases for an application, you want to quantify how many test cases you can write in order to say that, your test cases are complete!!!
My answer is, it is not possible to write 100% test cases to test your application. But you can write test cases to conver 100% functionality of your application.
Your testing include 2 parts. First part is the Positive test cases which just covers your requirements. You can refer your functional requirement document of SRS to write positive test cases. This has a limit. You can write as many number of test cases as your requirement.
Second part is negative test cases to find out the maximum bugs in your application. You can write infinite number of test cases to do that.
Then the question is, how can you write test cases and ensure that, you have written maximum negative test cases which are highly effective. To do this there are different types of test case design techniques for White Box and Black Box testing.
You can use any one of them or a combination of two or more. Mostly for a black box testing, you can adopt Equivalence partitioning. It is just a matter of partioning the input data in order to generate +ve and -ve test test results. You can also adopt Boundary value analysis, Basis Path Testing etc... There are a whole bunch of different test case design techniques. You can study some of them and implement in order to write very affective maximum possible test cases. Surely, it won't be 100%.