Do you need to use special tools, like RequisitePro or Kintana?
No but anything that gives you a hierarchical view, rooted at requirement under review, of a network of requirements (with status history, requirement history, see-also links, and notes attached to sets of requirements) and makes updating status and editing requirements transactional, on a big project is helpful.
Can traceability be implemented just through documentation or design artifacts?
Potentially. Something is traceable if it is determined to be such in the view of the sponsor and persons conducting any audits.
Should each version control change identify the requirement(s) being addressed?
Code check-in comments should contain:
- Identifier of requirements communications / documents containing requirements related to checkin
- Identifier of specific points being addressed in requirements (if the document has several points)
- Narrative explaining whether going towards or away from meeting the requirement points (if not simply "FOLLOWING REQUIREMENT")
- Programmer-perspective description of action taken
eg: "R129 #1-12,15: Added main controller"
(...meaning a reference to for example an ProjectX-Requirements-R129.doc or Requirements-1.doc revision 129 points 1-12 and 15.)
This is the ideal form but in practice lots of mistakes will be made. The team lead needs to check whether the comments are right and encourage accuracy.
Having one ref to identify a requirements communication (eg document version) and a single flat decimal numbering system starting from one and unique within a document helps enormously with conciseness and ease when discussing and specifying multiple requirement points at once.
If you are being really formal a team admin needs to enter corrected check-in comments in a more structured form into another system. So in a very formal setup the check-in comments are like "draft 1" or "day-to-day version" of the traceability but another data-entry system will form the master management version.
The checkin can have just a change request number in place of the requirements reference, if the change request itself includes that requirements tracing information.
Having said all that generally speaking I've found entering detailed requirements tracing data in source code control systems to be a waste of time. Unless your shop is centred on traceability above all else, using umbrella change request IDs to represent building activity for the big areas of required functionality, side by side with regular change request IDs for bug fixes, and having the source code system reject check-ins without valid change request IDs is usually the best way to go.
Should each module/class/function identify the requirements it fulfills? If so, then how?
Only if the management data this generates is expected to be used. Formal mapping should not be done in the source code itself (ie not in source code comments) as numbering systems, cetegorisation and overall structure may render comments misleading when they get out of date. The mapping can be maintained in a separate text file stored within the source code control system. This mapping should list the revisions at which a given file or element within a file became associated or dissociated with a given requirement point.