When all we are trying to do is CaptureRequirementsForPrioritization, they can be LowPrecision?. But when we want to build the system, we have to CaptureRequirementsForImplementation, and these have to be HighPrecision?.
A UseCase is the classical way to do this, filling in all of the sections on one of the more complete templates. (I recommend the excellent one that AlistairCockburn has made available on his website.)
With the BigDesignUpFront approach, we would probably complete RequirementsAnalysis before moving into design.
With the ExecutableArchitecture? approach from GradyBooch, you pick the ArchitecturallySignificantUseCases? and fully elaborate these prior to designing the system Architecture. The rest of RequirementsAnalysis would occur incrementally in Construction phases.
With the ExtremeApproach?, after picking the SystemMetaphor, elaboration of the Requirements is very incremental. Using the prioritized UserStory as a reminder, the Users get to explain what they really meant and then they get to design the tests.