软件工程1.0 1968年 NATO会议软件工程学科诞生

(1)产品化:只是交付符合质量标准的组件、构件和系统,没有认识到软件的柔性和数字化特性,把软件当作传统工业的产品,由此产生“软件工厂”这样的思想。
(2)结构化:受传统建筑工程的影响,重视框架和结构的设计,表现为以架构设计为中心进行结构化分析、结构化设计、结构化编程等。
(3)过程决定结果:流程质量决定产品质量,一环扣一环,相信良好的过程产生良好的产品,关注过程胜过关注人,非常关注过程评估和过程改进,CMMI(Capability Maturity Model Integration,能力成熟度模型集成)就是其典型代表。
(4)重视质量管理:引入传统的质量管理体系,包括以顾客为中心的全面质量管理和缺陷预防。
(5)阶段性明确:需求评审通过才能开始设计;设计评审通过才能开始实施(编程),编程结束再进行测试等,瀑布模型是其典型代表模型。
(6)责任明确:角色定义清晰,分工细致。
(7)文档规范化:强调规范的文档,定义了大量的文档模板。
(8)计划性强:具有完整的计划并严格控制变更。
(9)注重项目管理:围绕项目开展管理工作,包括风险预防、里程碑控制、关键路径法等。
软件工程2.0 2001年敏捷宣言发布
(1)SaaS:软件更多的是以一种服务存在。
(2)强调价值交付:只做对用户有价值的事情,加速价值流的流动。
(3)以人为本:个体与协作胜于流程和工具,充分发挥个人和团队的创造性与潜力;拥抱变化,敏捷开发或轻量级过程,加速迭代,以不变应万变。
(4)自我管理的团队:像一家初创公司一样运营,具有主动性并能够承担风险,具有自治能力,能自主建立目标和制订计划,不断反思,持续改进。
(5)持续性:阶段性不明确,持续构建、持续集成、持续测试、持续交付,以时间换空间,消除市场风险。
(6)开发、测试和运维的融合:强调测试与开发融合,开发与运维融合,推崇全栈工程师等。
(7)真正把用户放在第一位:用户、产品经理尽可能参与团队开发过程,注重用户体验,千人千面。
(8)知识管理:将软件工程纳入知识管理的范畴,强调将项目的计划、估算等工作授权给从事具体工作的开发人员,如任务安排不再由管理者下达任务,而由开发人员自主选择适合自己的任务。
(9)更有乐趣:“史诗故事”、用户故事、站会等让软件开发工作更有趣、更健康。
软件工程3.0 2023年LLM爆发式产生
(1)软件需求获取、分析与定义
(2)软件设计与体系结构
• 提供建议:根据需求和约束等自然语言输入对软件架构提供建议,这些建议可以帮助开发人员针对待开发软件架构做出明智的决策。
• 识别设计模式:根据自然语言输入识别软件架构中的常见设计模式,帮助开发人员识别潜在的问题并改进软件的整体设计。
• 分析和优化软件架构:通过分析软件架构并根据自然语言输入提出优化建议,帮助开发人员改进其软件的性能、可伸缩性和可维护性等。
• 知识共享:提供有关软件体系结构的最佳实践、模式和框架的信息,帮助开发人员跟上软件体系结构的最新趋势,提高在该领域的整体水平。
(3)代码生成和优化
(4)测试用例和测试代码等生成
(5)错误检测和解决
(6)协作和知识共享