软件工程的原则主要包括以下几点:
抽象:
抽取事物最基本的特性和行为,忽略非基本的细节。通过分层次抽象,自顶向下、逐层细化的办法控制软件开发过程的复杂性。
模块化:
模块是程序中逻辑上相对独立的成分,是独立的编程单位,应有良好的接口定义。模块化有助于信息隐蔽和抽象,有助于表示复杂的系统。
信息隐蔽:
将模块设计成“黑箱”,实现的细节隐藏在模块内部,不让模块的使用者直接访问。使用者只能通过模块接口访问模块中封装的数据。
局部化:
要求在一个物理模块内集中逻辑上相互关联的计算机资源,保证模块之间具有松散的耦合,模块内部具有较强的内聚。
确定性:
软件开发过程中所有概念的表达应是确定的、无歧义性的、规范的。这有助于人们之间在交流时不会产生误解、遗漏,保证整个开发工作协调一致。
一致性:
整个软件系统(包括程序、文档和数据)的各个模块应使用一致的概念、符号和术语。程序内部接口应保持一致。软件和硬件、操作系统的接口应保持一致。系统规格说明与系统行为应保持一致。
完备性:
软件系统不丢失任何重要成分,可以完全实现系统所要求功能的程度。为了保证系统的完备性,在软件开发和运行过程中需要严格的技术评审。
可验证性:
软件系统应该是可验证的,即能够证明其满足特定的需求和规格。
采取适宜的开发模型:
控制易变的需求,选择合适的开发模型以适应需求的变化。
采用合适的设计方法:
需要软件模块化、抽象与信息隐藏、局部化、一致性以及适应性等,需要合适的设计方法的支持。
提供高质量的工程支持:
软件工具和环境对软件过程的支持,确保软件工具和环境的质量。
重视开发过程的管理:
有效利用可用的资源,生产满足目标的软件产品,提高软件组织的生产能力。
迭代和增量开发:
采用迭代循环的开发模式,反复地实现需求分析、设计、编码、测试等各个阶段,每个迭代周期完成一部分需求,不断熟悉、反思并改进软件开发过程。
风险管理:
对可能影响软件开发成功的各种风险进行预测和管理,从而增加软件开发成功的概率。
简洁性:
保持软件系统简单,避免不必要的复杂性,使系统更强大、更容易理解、更容易推理、更容易扩展。
DRY(Don't Repeat Yourself):
减少软件系统中代码的重复和努力,促进代码重用,使代码更可维护、更可扩展、更少的错误。
YAGNI(You Aren't Gonna Need It):
避免由于增加你认为将来可能需要的功能而产生的复杂性。
这些原则共同构成了软件工程的基础,指导着软件开发的整个过程,以确保软件产品的质量、可维护性和可扩展性。