Great question. There is unfortunately no way to access Field Sets metadata in Apex currently. Ideally this should be supported via a Apex describe call (something like Account.sObjectType.getDescribe().fieldSets().fieldsInFieldSet();). However, this is not currently supported. Therefore you do have to make sure that the SOQL query includes all the fields that could possibly be included in the Field Set.
I don't think you can access fieldsets via Apex at the moment. If you look at this blog post:
http://blog.sforce.com/sforce/2011/02/using-field-sets-in-spring-11.html
In a comment near the bottom the author states:
---
Great question. There is unfortunately no way to access Field Sets metadata in Apex currently. Ideally this should be supported via a Apex describe call (something like Account.sObjectType.getDescribe().fieldSets().fieldsInFieldSet();). However, this is not currently supported. Therefore you do have to make sure that the SOQL query includes all the fields that could possibly be included in the Field Set.
---