In the frothy drive to all things “agile” formal requirements management is often forgotten. Requirements management is core to the waterfall/spiral development process but is often overlooked by agile teams.
I believe that requirements management is a professional discipline that should be considered on a par with software programming and test. To my mind the best book on the topic is Managing Software Requirements, A Unified Approach by Dean Leffingwell and Don Widrig. This is no Dummies Guide, but a serious exposition of the discipline. I do not claim that the rigour of this approach is appropriate to all projects but if you’re interested in the topic you will find it very enjoyable read.
At the heart of requirements analysis is the identification of the structural and behavioural aspects of the system. The structural parts of the system are best represented by UML structure diagrams and the behavioural aspects by textual use cases. The best book on structural modelling is The Unified Modelling Language User Guide. The best book on textual use cases is Writing Effective Use Cases by Cockburn.
I am also very keen on UML sketching which is one of the most important skills in formal requirements analysis and the best way to actually get started using it, unfortunately there are no good books that I’m aware of on this topic (perhaps I should write one!) But if you would like to learn more about this area or any other requirements management topic just ask me.