What are the advantages and limitations of using Formal Specifications?

I have researched through Internet the advantages and disadvantages that the use of formal specifications and specifically the C # Code Agreements could have. I have found several answers, but I could not identify the key points about the pros and cons, as I mentioned above. Could I have any help on that topic and some relevant source to help me?