A program required to be tested in practice often has no available source code for some reason and how to adequately test such a program is still an open problem. In this paper, we describe a formal specification-based testing approach to tackle this challenge. The principal idea is first to formalize the informal requirements into formal operation specifications that take the interface scenarios of the program into account, and then utilize the specifications for test case generation and test result analysis. An example and case study of applying the approach to an IC card system is presented to illustrate its usage and analyze its performance.