Should code be made visible to the tester ?

This question arose to me when I was suffering very badly, thinking of the influence of a particular task to the application. I felt every time that these test cases are not sufficient..I have to create more test cases.After testing those, again the same kind of feeling ..(the term 'deja vu' is suitable :-) )
I feel, "Yes, why not!". Now to explain why I strongly support we need to consider all the ill-affect of not giving access of the code to the tester.
Tester's life revolves around the test cases. Let it be any testing type..functionality, regression, re-testing so on..
If we want to cover all the details of a particular test we will have infinite number of testcases.
Even if you are very much experienced in that application you are prone to waste some amount of extra time for testing a particular change, because you are unaware where the code is changed, what are the sections getting affected by this change, and hence clueless about what to test which results in the 'Deja vu' experience I explained above.
Now lets say, the code is accessible to the tester and the tester can view the code change, if it is in a particular function you can search the entire codebase for that function call and check out where all it is getting called and depending upon the tester can plan how to proceed the testing. The severity of the task or the change is directly proportional to the number of times that particular function is getting called.
As the code is visible to tester a better, effective, cleaner and precise the test cases become, which leads to saving of lot of time and frustration of the tester.
Now there is a confusion here..is this a whitebox testing type ??
That depends on the perspective of the tester. If he is interested in the internal business logic and more concentrated on the naming or say the coding conventions or the loops and conditions involved in the code he is doing white box testing.
If the tester is satisfied by the boundary of the change associated with the task or the scope of the code change and creates his testcases keeping them into consideration. Then what the tester does is a blackbox testing.