软件工程:从入门到精通

发表时间: 2024-07-19 10:49

本篇文章,是【数据库、数据业务价值、大数据设计/架构/技术/工程】系列的第五篇。喜欢请关注作者,并点赞收藏。



01 软件工程定义

学术界的定义

  • 软件工程定义,尚有诸多争议,教材主流认可的定义:研究和应用如何以系统化、规范化、可定量的过程化方法去开发和维护软件,把经过时间检验的管理和当前技术结合起来的学科

ISO(国际标准化组织)的定义

  • ISO/IEC 12207定义软件工程为“涵盖软件生命周期各个阶段的所有过程、活动和任务,包括开发、运行和维护等。”

行业协会的定义

  • IEEE(电气和电子工程师协会)定义软件工程为“应用系统的、学科的和可量化的方法来开发、运行和维护软件,以及对这些方法的研究。”

美国军方的定义

  • 美国国防部(DoD)对软件工程的定义是“在预算、时间、性能和质量的限制下,使用系统工程原则和方法开发、操作和维护软件系统。”




02 软件工程关注的重点

总结

  • 软件开发的效率和质量
  • 软件开发和维护的一致性和可控性
  • 软件系统的可靠性、可维护性和安全性



03 不同历史时期软件工程的痛点及软件质量保障

1960s - 1970s

  • 痛点:软件危机:软件项目经常超预算、延期交付,且质量低下。
  • 质量保障理论:PDCA(Plan-Do-Check-Act):由Walter A. Shewhart提出,后由W. Edwards Deming推广。用于质量控制和持续改进,适用于软件开发过程中的各个阶段。
  • 质量保障模型:瀑布模型
  • 质量标准:ISO 9000

1980s - 1990s

  • 痛点:软件复杂性增加,需求变化频繁,开发周期长。
  • 质量保障理论:六西格玛(Six Sigma):由Motorola公司1980年代中期提出,DMAIC(Define, Measure, Analyze, Improve, Control)过程改进方法被引入软件工程中,以提高开发过程的效率和质量。IPD(集成产品开发):由Hewlett-Packard(HP)1990年代初提出,通过跨职能团队合作,实现产品开发的全面管理和优化,适用于复杂的软件项目开发。
  • 质量模型/标准:CMM(能力成熟度模型)
  • 工具:UML建模工具、版本控制系统(如RCS)

2000s

  • 痛点:计算机互联网高速发展、全球化和分布式开发的挑战,敏捷开发方法的兴起。
  • 质量保障理论/模型:敏捷方法(Scrum、XP)
  • 标准:ISO/IEC 15504(SPICE)、IATF 16949(1999首版)
  • 工具:JIRA、Subversion、Hudson

2010s

  • 痛点:移动互联网、云计算和大数据的应用,快速迭代和持续交付的需求。
  • 质量保障理论:混沌工程(Chaos Engineering)由Netflix在2010年代初提出,通过故意引入系统故障来测试和提高系统的韧性,适用于需要高可靠性和可维护性的AI驱动软件系统。注:混沌工程本质是系统工程学科中正常事故理论的实践,可以认为是软件和系统工程两个学科的交叉应用。
  • 模型:DevOps、CI/CD
  • 工具:Git、Docker、Kubernetes、Hudson/Jenkins

2020s

  • 痛点:人工智能和机器学习的集成,安全性和隐私问题。
  • 理论:DataOps、AI驱动开发


04 收录书籍和参考资料

书籍

《软件工程》 作者:Ian Sommerville,出版社:Addison-Wesley《设计模式:可复用面向对象软件的基础》 作者:Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides,出版社:Addison-Wesley《敏捷软件开发:原则、模式与实践》 作者:Robert C. Martin,出版社:Prentice Hall《持续交付》 作者:Jez Humble, David Farley,出版社:Addison-Wesley《云原生模式》 作者:Cornelia Davis,出版社:Manning Publications

工具

Docker 企业名称:Docker, Inc.,Git地址:https://github.com/docker/dockerKubernetes 企业名称:Google,Git地址:https://github.com/kubernetes/kubernetesTensorFlow 企业名称:Google,Git地址:https://github.com/tensorflow/tensorflowPyTorch 企业名称:Meta,Git地址:https://github.com/pytorch/pytorch

框架模型

瀑布模型 提出者:Winston W. Royce,出处:《Managing the Development of Large Software Systems》,1970年敏捷方法 提出者:Kent Beck 等,出处:《敏捷宣言》,2001年CMM(能力成熟度模型) 提出者:SEI(软件工程研究所)微服务架构 提出者:James Lewis, Martin FowlerPDCA 提出者:Walter A. Shewhart, W. Edwards Deming六西格玛 提出者:MotorolaIPD 提出者:Hewlett-Packard


本篇文章,是【数据库、数据业务价值、大数据设计/架构/技术/工程】系列的第五篇。喜欢请关注作者,并点赞收藏。