软件工程课程笔记(1):软件工程概述
软件工程课程笔记(1):软件工程概述
1、软件危机
1.1 什么是软件危机
在计算机软硬件系统开发与维护过程中出现的一系列复杂挑战被称为"软件危机"。这些挑战不仅限于无法正常运行的应用程序带来的问题。事实上,在当前技术条件下几乎所有的应用程序都面临着不同程度的问题。概括而言, 软件危机主要涉及两个关键方面: 一是如何开发能够满足需求的新 software; 二是如何有效地维护现有的大量 software. 由于该现象具有长期性且不易被察觉的特点, 近年来有人提议将其更名为'software depression'或'software affliction'.
1.2 软件危机的典型表现
- 软件开发成本与进度的预估往往存在较大偏差。实际运行成本可能比预估高出一个数量级以上,在项目进度上也可能出现预期之外的巨大延迟现象(如几个月甚至几年)。这些偏差不仅损害了软eware组织的社会信誉,在赶工以降低成本的过程中还可能造成质量下降的问题而引发用户的不满情绪。
- 在软件系统完成过程中,用户对其功能与预期存在差距的现象较为常见。由于开发人员在缺乏明确需求定义、甚至未能准确把握问题核心的情况下草率推进项目,在与用户的信息沟通上也存在严重不足,“闭门造车”的结果必然会导致最终产品无法满足用户的实际需求。
- 软件产品的可靠性通常难以得到充分验证。目前关于可靠性的理论尚处于初步阶段,在实际应用中可靠性保证技术尚未被广泛应用于整个开发流程中;这些不足导致大量产品质量问题难以得到有效控制。
- 软件系统的可维护性普遍存在问题。许多程序由于其设计缺陷导致难以实现可维护的目标;即使在某些情况下程序可能被修改以适应新的硬件环境或新增功能需求;但总体而言"可重用"的目标还未能完全实现仍停留在追求理想状态的过程中。
- 缺乏规范化的技术文档不仅影响项目的管理效率更阻碍了维护工作的开展。对于项目团队而言缺乏统一的技术文档体系会导致沟通不畅协作困难以及知识传承受阻等问题;而对于维护人员而言更是面临大量无序资料带来的工作负担。
- 随着微电子技术的进步与自动化程度提升硬件的成本正在稳步下降然而在人力需求方面却呈现出明显的瓶颈效应;特别是在软件规模不断扩张的同时编程人员的工作强度也在不断增加这直接导致了整体开发成本的攀升。
- 尽管近年来软硬件生产效率持续提升但相比而言软eware系统的复杂性和多样性也在不断增加;这种双重压力使得软eware生产率的增长速度明显跟不上现有的技术发展水平更无法满足日益普及的应用需求。
1.3 产生软件危机的原因
在软件开发和维护的过程中出现了许多显著的问题,在这些情况下主要与其自身特性相关,并且也由于开发和维护方法不当而导致的问题更加突出。
- 软件不同于硬件,在计算机系统中它是抽象的功能部件而非实体物理部件。
- 软件开发过程的情况较难衡量其进展状况。
- 软件规模越大,则程序复杂性呈指数级上升。
- 目前相当多的软件专业人员在实践过程中错误地应用了各种方法和技术。
- 没有充分理解用户需求就草率编写程序是导致项目失败的主要原因之一。
- 人们往往忽视了需求分析的重要性,并认为编写程序并让它正常运行即为维护工作。
不同阶段实施软件修改所承担的成本呈现出显著差异。早期实施变更时所影响的对象较为有限;而系统集成阶段后对一个变更投入的成本较前期提升约两个到三个数量级;等到项目后期对一个变更投入的成本较前期提升约两个到三个数量级

1.4 消除软件危机的途径
为了解决软件危机问题,必须首先正确认识到计算机软件的本质。即任何单一的程序系统都不可能独立存在而孤立地发挥作用。事实上,在计算机系统的早期发展阶段就形成的'软件就是程序'的传统观念必须彻底清除。任何单一的程序系统都不可能独立存在而孤立地发挥作用。任何单一的程序系统都不可能独立存在而孤立地发挥作用。任何单一的程序系统都不可能独立存在而孤立地发挥作用.
必须深刻意识到软件开发既不是某一种别的人体劳动的神秘技巧也不是单纯的个人能力就能完全实现的目标而是需要以科学合理的组织架构严密的管理体系以及各环节人员密切协作相结合的整体系统工程。
在实际工作中应当努力汲取并总结人类长期以来在各种工程项目中积累下来的丰富经验与成熟方法论体系尤其是近年来在计算机硬件研发过程中获得的宝贵实践经验教训。
应当推广并采用在实践中总结出来的开发软件成功的技术和方法,并深入研究寻求更为先进的技术和方法,并及时清除计算机系统早期发展阶段形成的错误观念与做法。
建议创造并有效应用更优质的软硬件资源以提升整体效率
总体来说,在应对软件危机的过程中,既要采用具体的实施手段(包括各种方法和技术),也需要相应的组织管理支持。它正是通过对管理与技术的深入研究来实现开发与维护计算机软件这一目标的一门新兴学科。
2、软件工程
2.1 什么是软件工程
简单来说,软件工程是涵盖计算机软件开发和维护的一门工程学科。以工程的概念、原理为基础发展相应的技术和方法,并将这些技术与管理相结合,在保证高效的基础上实现高质量的软硬件系统设计与开发,并确保系统的稳定运行
2.2 软件工程的基本原理
- 应采取分阶段的生命周期计划来进行系统化管理。
- 应持续实施各阶段评估。
- 应严格执行细致的产品管控措施。
- 可应用现代程序设计技术原理来完成项目开发。
- 结果需经过清晰度审查。
- 开发团队需优化配置至最少人数配置标准。
- 必须认识到持续优化软件工程实践的重要性。
2.3 软件工程包含的领域
IEEE于2004年制定了《软件工程知识体系指南》,该指南将软件工程的知识体系归类为10个主要的知识领域。
◇ 软件需求(software requirements)。
◇ 软件设计(software design)。
◇ 软件构建(software construction)。
◇ 软件测试(software testing)。
◇ 软件维护(software maintenance)。
◇ 软件配置管理(software configuration management)。
◇ 软件工程管理(software engineering management)。
◇ 软件工程过程(software engineering process)。
◇ 软件工程工具和方法(software engineering tools and methods)。
◇ 软件质量(software quality)。
