【软件工程】是应对【软件危机】而诞生的学科,旨在通过系统化、规范化的工程化方法解决软件开发中的问题。软件危机表现为软件开发成本和进度估算不准确、用户满意度低、软件可靠性差、文档不足、维护困难以及生产率提升速度无法跟上计算机应用的发展。软件的发展经历了程序设计时代、程序系统时代和软件工程时代,每个时代都反映了软件复杂性的增加和应对策略的变化。
软件工程的目标是高效、经济地开发出满足用户需求的高质量软件,其原则包括抽象、模块化、信息隐藏、局部化、完整性、一致性和可验证性。软件工程是一门综合学科,融合了哲学、计算机科学、工程学、管理学、数学和应用领域的知识。软件工程方法学主要包括结构化理论和方法、模块技术、软件测试与正确性证明、软件分析与设计、软件工程管理及质量评估等。
软件产品的特殊性质包括其无形性、复杂性、可修改性、依赖性、不可见性等。软件工程研究的对象是软件开发技术和管理,包括开发方法、过程、工具和环境,以及软件管理、经济和心理学等。
软件的生命周期模型描述了软件开发的各个阶段,如瀑布模型、原型模型、增量模型、螺旋模型、喷泉模型、基于知识的模型和变换模型。选择合适的生命周期模型可以为软件开发提供框架和指导。软件开发方法有结构化方法、Jackson方法、维也纳开发方法和面向对象方法等。
软件工程过程通常包括开发过程、管理过程、供应过程、获取过程、操作过程、维护过程和支持过程。阶段划分会受到软件规模、性质、种类和开发方法的影响,因为不同类型的软件在生命周期中各阶段的需求和重点不同。
软件定义与分析时期需明确软件目标、可行性、具体需求和验收标准。瀑布模型是线性的开发过程,包括系统需求分析、软件需求分析、设计、编码、测试和维护,但缺点是难以适应需求变更。而原型模型强调快速构建原型以获取用户反馈,逐步完善系统,与瀑布模型的区别在于其灵活性和迭代性。
其他模型如增量模型和螺旋模型分别结合了迭代和风险管理,以适应不同的项目需求。软件工程的这些理论和实践是确保软件项目成功的关键,通过综合运用这些知识,可以有效地克服软件危机,提高软件质量和开发效率。