Functional and Non-functional Requirement Software Engineering