Software engineering is the discipline concerned with the application of theory, knowledge, and practice to build effectively and efficiently software systems that satisfy the requirements of users and customers. Software engineering is applicable to small, medium, and large-scale systems. It encompasses all phases of the life cycle of a software system. The life cycle includes requirement analysis and specification, design, construction, testing, and operation and maintenance
Select, with justification, the software development models most appropriate for the development and maintenance of diverse software products; and explain the role of process maturity models.· Apply key elements and common methods for elicitation and analysis to produce a set of software requirements for a medium-sized software system; use a common, non-formal method to model and specify (in the form of a requirements specification document) the requirements for a medium-size software system (e.g., structured analysis or object-oriented-analysis); conduct a review of a software requirements document using best practices to determine the quality of the document; and translate into natural language a software requirements specification written in a commonly used formal specification language.· Evaluate the quality of multiple software designs based on key design principles and concepts; using a software requirement specification and a common program design methodology and notation, create and specify the software design for a medium-size software product (e.g., using structured design or object-oriented design); and using appropriate guidelines, conduct the review of a software design