Coursera 笔记

Module 01 · The Software Development Lifecycle

What is Software Engineering?什么是软件工程?

Coursera ↗

欢迎观看《什么是软件工程》课程!🎉
在观看此视频后,您将能够:

  • 定义 软件工程 📝
  • 列出 软件工程师 的职责 👨‍💻
  • 比较和对比 软件开发人员 和 软件工程师 🆚

软件工程的定义

软件工程 是将科学原理应用于软件的设计与创建。该领域采用系统化的方法来收集和分析 业务需求,从而设计、构建和测试软件应用程序,以满足这些业务需求。🔍


软件工程的发展历程

早期阶段

  • 在 1950年代末期,计算机技术开始兴起,软件工程作为一个学科还没有明确的定义。
  • 随着时间推移,软件工程逐渐发展为一个现代化的工程领域。

1960年代

  • 软件工程 作为一个学科正式诞生,并随着新技术的不断发展,软件开发的方法变得更加科学化。
  • 软件工程的趋势从 临时编程 转向了 更正式和标准化的方法。

1970-1980年代

  • 初期的 软件创建 并没有明确的开发流程。
  • 随着计算机的广泛应用,软件成为了生活中越来越重要的一部分,但软件开发的低效性使得开发过程难以跟上快速增长的需求,导致了 “软件危机”。
    • 软件开发常常超预算、进度滞后,代码存在很多 bug,难以管理。
    • 更糟糕的是,当老旧的软件方案开发完成时,更新的技术和更强大的系统已经问世,迫使软件工程师重新构建代码或彻底重新设计系统。

软件危机(Software Crisis)

  • 这一问题在1960年代中期至1980年代中期之间尤为严重。
  • 小型软件系统的开发方案无法扩展到大规模、复杂项目中。📉

解决方案与现代进展

虽然一些问题仍然存在,但通过持续应用 工程学原理,软件开发过程已得到了显著改善。💡

  • 计算资源 已经更加普及和标准化。
  • 标准化的软件开发方法 使得能够开发出 大规模且可扩展的复杂解决方案。
  • 软件危机的解决 方案包括将杂乱的编程工作转变为一种有组织的 工程学学科。

CASE工具的兴起

  • 1980年代中期,计算机辅助软件工程 (CASE) 工具的增长,进一步缓解了软件危机。
  • CASE工具可分为六大类:
    1. 业务分析与建模
    2. 开发工具(如调试环境)
    3. 验证与确认工具
    4. 配置管理工具
    5. 度量与测量工具
    6. 项目管理工具

软件工程师与软件开发人员的区别

虽然 “软件工程师” 和 “软件开发人员” 常常被交替使用,但它们之间存在细微的差异。🔍

角色 软件工程师 软件开发人员
知识面 软件工程师的知识面更广,采取系统化、大局观的方式思考软件开发。 开发人员的知识面通常较窄,可能更多集中在实现某些功能。
任务目标 软件工程师专注于设计、构建、维护完整的 软件系统。 开发人员专注于编写 特定功能的代码,实现功能需求。
工作规模 通常参与 大规模项目,注重软件的整体架构与结构设计。 通常负责具体的代码编写,解决特定的开发问题。

总结:

  • 软件工程师 负责设计和构建整个系统,而 软件开发人员 专注于实现特定的功能。🛠️


软件工程师的职责

软件工程师的职责包括:

  • 设计、构建 和 维护 软件系统。
  • 编写和测试代码,确保软件质量。
  • 与利益相关者(如客户、第三方软件供应商、安全专家及其他团队成员)进行沟通与协作。🤝

通过采纳科学的、标准化的 软件开发方法,现代软件的设计与开发过程变得更加高效。🧑‍🔬


软件开发生命周期 (SDLC)

软件开发生命周期(SDLC)是现代软件开发的基础框架,它定义了开发高质量软件所需的步骤。在本模块的后续部分,我们将详细讨论 SDLC、高质量软件的特性 以及 软件工程领域中的常见角色。


视频学习总结

在本视频中,你了解到:

  • 软件工程 是一种系统化的设计与开发软件的方法。
  • 软件工程师的职责 包括设计、构建和维护软件系统,编写和测试代码,并与各方利益相关者沟通。
  • 软件工程师 构建的是 完整的系统,而 软件开发人员 实现的是系统中的特定功能。

通过学习软件工程,你将能够更好地理解如何应用工程学原理开发出高质量的软件。📈