1. A method for modeling requirements of a product comprising the steps of: defining an abstract use case for each feature of said product; hierarchically decomposing each abstract use case until concrete use cases are specified for each feature; depicting every actor who would use said product as communicating with a concrete use case through a boundary; and programmatically extracting requirements from said use case diagram.