A technique using realistic practical scenarios to define functional requirements and to design tests