Best way may be through object auditing. If you have auditing enabled, run this command:
CHGOBJAUD OBJ( <programname> ) OBJTYPE(*PGM) OBJAUD(*ALL)
Later, display QAUDJRN journal entries with journal code T and entry type ZR. The journal entry will show what program called the audited program, what the job name was, when it happened, etc.
If you have some tools like HAWKEYE and the source, that would do it for you.
If you have source, you can do a FNDSTRPDM
If you have no source. it gets more difficult.
You can do DSPPGMREF *ALL to an output file and scan for the program names.
Another option is to rename the program object. Some job will crash and that will tell you where it is used. Then you can rename the program object back to what it was and give the failing program an ‘R’. Not the best method, but I guarentee results