Principles and Practices of Software Engineering

Some of the core principles of software engineering are: better results can be produced if complete and clear thought is placed before action, the value of the reusable components and the program can be increased and the long-term cost can be reduced by reuse of software. Some other principles involved, building software that can be adapted and changed easily and implement, design, and specify always knowing that it has to be used later by someone. Last principles are: the success of the project depends upon a clear vision, all implementation and design must be as simple as possible and requirements must be satisfied and value must be provided to the users by the software.

At the other hand, some of the practices of software engineering are deployment practice, testing practice, construction practice, modeling practice, planning practice, and communication practice. Software engineering practice also involves providing necessary management and technology related to how the job can be performed. It also involves equipping management for managing software engineers and software projects for building computer programs. It also includes a collection of tools, methods, principles, and concepts that can be considered by software engineering regularly.

The principles of deployment practice involve fixing of buggy software before delivery, providing proper instructional materials to end-user, creating a support regime before the delivery of software, testing and assembling of a complete delivery package, and management of the customer expectations related to the software. The principles of testing practice involve no possibility of exhaustive testing, initiating testing in the small and then proceeding to the large (for example starting with unit testing then integration testing then validation testing and then ending at system testing. It also involves the application of the Pareto principle to software testing, planning of tests long before initiating the testing, and tracing of all tests as per the requirements of the software.