01
软件工程的内涵:
软件工程是指在系统化、结构化和量化的方法下,对软件的开发、运行、维护和管理进行全面研究的学科和技术。它涵盖了软件开发的整个生命周期,从需求分析到设计、编码、测试、部署和维护,旨在提高软件质量、提高开发效率,并管理软件开发过程中的风险。
02
软件工程的目标
在给定成本、进度的前提下,开发出具有适用性、有效性、可修改性、可靠性、可理解性、可维护性、可重用性、可移植性、可追踪性、可互操作性和满足用户需求的软件产品。追求这些目标有助于提高软件产品的质量和开发效率,减少维护的困难。
软件在不同的系统约束条件下,使用户需求得到满足的难易程度;软件系统能最有效的利用计算机的时间和空间资源。各种软件无不把系统的时/空开销作为衡量软件质量的一项重要技术指标。很多场合,在追求时间有效性和空间有效性时会发生矛盾,这时不得不牺牲时间有效性换取空间有效性或牺牲空间有效性换取时间有效性。时/空折衷是经常采用的技巧。
允许对系统进行修改而不增加原系统的复杂性。它支持软件的调试和维护,是一个难以达到的目标;能防止因概念、设计和结构等方面的不完善造成的软件系统失效,具有挽回因操作不当造成软件系统失效的能力。
系统具有清晰的结构,能直接反映问题的需求。可理解性有助于控制系统软件复杂性,并支持软件的维护、移植或重用;软件交付使用后,能够对它进行修改,以改正潜伏的错误,改进性能和其它属性,使软件产品适应环境的变化等。软件维护费用在软件开发费用中占有很大的比重。可维护性是软件工程中一项十分重要的目标。
把概念或功能相对独立的一个或一组相关模块定义为一个软部件。可组装在系统的任何位置,降低工作量;软件从一个计算机系统或环境搬到另一个计算机系统或环境的难易程度。
根据软件需求对软件设计、程序进行正向追踪,或根据软件设计、程序对软件需求的逆向追踪的能力;多个软件元素相互通信并协同完成任务的能力。
03
软件工程的特点
采用系统化、规范化的方法进行软件开发,包括需求分析、设计、编码、测试和维护等阶段,以确保软件质量;强调团队合作,通过分工协作来管理大型软件项目的复杂性,提高开发效率。
特别适用于构建规模大、复杂度高的软件系统,要求有良好的项目管理、版本控制和配置管理;通过模块化、抽象化等技术手段控制软件的复杂度,使软件易于理解、修改和扩展。
软件工程重视变更控制,因为软件需求和环境常常变化,需要灵活应对并保持软件的稳定性;通过测试、评审、静态分析等手段确保软件质量,符合功能、性能、安全等方面的要求。软件工程是一个持续学习和改进的过程,鼓励采用新技术和方法提高开发效率和产品质。
04
软件工程的危机
软件危机则是指软件开发和维护过程中遇到的一系列问题,这些问题可能导致项目延期、成本超支、质量低下和维护困难。软件危机的主要表现和原因包括:
客户需求不清晰或在开发过程中频繁变动,导致项目失去控制;缺乏有效的软件开发方法和工具,导致软件难以管理和维护。
软件系统日益复杂,如果管理不当,将导致开发效率低下和错误频发;软件开发过程中缺少必要的文档记录,或文档与实际代码不一致,影响维护和团队协作。
忽视软件测试和质量保证,导致软件交付时存在大量缺陷。软件维护成本高,特别是在没有良好设计和文档的情况下,接手维护的人员难以理解和修改现有代码。
软件行业快速发展,人力资源和技术更新速度难以匹配市场需求。