目录
案例文档等
电子材料
第1章什么是软件工程
1.1软件工程诞生
1.1.1软件工程的定义
1.1.2从三个视角看软件工程
1.1.3软件工程方法学
1.1.4软件工程管理学
1.1.5软件工程要素
1.1.6软件工程的基本思想
1.1.7软件工程知识体系SWEBOK
1.2软件工程1.0
1.2.1瀑布模型的不足
1.2.2V模型诠释软件过程
1.3软件工程2.0
1.3.1敏捷开发历史
1.3.2敏捷开发原则
1.3.3极限编程
1.3.4行为驱动开发
1.3.5Scrum开发框架
1.3.6软件即服务
1.4软件工程3.0
1.4.1软件工程3.0的特征
1.4.2软件工程三个时代的比较
小结
思考题
参考文献
第2章过去我们是如何开发软件的
2.1软件研发的三种基本思维
2.1.1产品思维
2.1.2项目思维
2.1.3工程思维
2.2软件工程中的主要活动
2.2.1产品定义
2.2.2需求定义
2.2.3设计
2.2.4编程
2.2.5测试
2.2.6部署与运维
2.3开源软件运动
2.4精益开发
2.4.1看板
2.4.2精益软件开发实践
2.5开发与运维的融合: DevOps
2.5.1DevOps的概念及其工具链
2.5.2经典案例: 凤凰项目
思考题
参考文献
第3章如何定义好的软件需求
3.1软件需求工程概要
3.2软件有哪些需求
3.2.1业务需求
3.2.2用户角色需求
3.2.3系统的功能需求
3.2.4系统非功能性需求
3.2.5其他需求类型
3.3真实需求的获取
3.3.1需求获取的过程
3.3.2传统的需求获取方法
3.3.3针对新产品的其他方法
3.3.4针对已有产品的其他方法
3.3.5智能需求获取方法
3.4智能需求分析与定义
3.4.1去伪存真
3.4.2结构化分析方法
3.4.3面向对象的分析方法
3.4.4面向敏捷的分析方法
3.4.5场景分析方法
3.5需求评审
3.5.1如何确定传统软件需求的评审标准
3.5.2如何评审敏捷需求——用户故事
3.5.3智能需求评审
3.6需求跟踪与变更管理
3.6.1需求跟踪
3.6.2需求变更管理
3.7业务架构
3.7.1业务架构的价值与构建
3.7.2业务架构的框架与工具
小结
思考题
参考文献
第4章如何设计软件
4.1软件设计的基本原则
4.1.1抽象与精化
4.1.2模块化
4.1.3信息隐藏
4.1.4关注点分离
4.1.5面向对象设计
4.1.6智能问答: 让设计原则不再高冷
4.2软件系统架构设计
4.2.1单体架构
4.2.2分布式架构
4.2.3面向服务的架构
4.2.4微服务架构
4.2.5无服务架构
4.3微服务架构设计
4.3.1如何定义“服务”
4.3.2如何实现服务间的沟通
4.3.3REST与消息机制
4.3.4AI辅助的软件架构设计
4.3.5最佳实践
4.4接口设计
4.4.1设计维度
4.4.2设计原则
4.4.3案例研究: 使用Cursor辅助的接口设计
4.5UI设计
4.5.1视觉
4.5.2交互
4.5.3原型
4.5.4智能化工具
4.6数据设计
4.6.1数据组织
4.6.2数据存储
4.6.3AI辅助的数据设计
小结
思考题
参考文献
第5章如何高效地进行软件开发
5.1AI辅助编程
5.1.1代码实现
5.1.2代码理解
5.1.3代码调试
5.1.4代码可维护性
5.2软件构建
5.2.1编译和构建
5.2.2构建系统类型
5.2.3软件包管理
5.2.4依赖管理
5.2.5最佳实践
5.2.6Dependabot与智能构建
5.3软件文档
5.3.1读者类型
5.3.2文档类型
5.3.3文档的重要性
5.3.4编写高质量文档的挑战
5.3.5最佳实践: 文档即代码
5.3.6AI文档生成
5.4代码审查
5.4.1关键要素
5.4.2工作流程
5.4.3自动化与智能化
小结
思考题
参考文献
第6章如何保障软件质量
6.1深入理解软件质量
6.1.1什么是质量
6.1.2软件质量属性
6.1.3软件缺陷: 质量的对立面
6.2软件质量工程体系
6.2.1传统的质量管理体系
6.2.2构建软件质量工程体系
6.2.3根据上下文定制SQES
6.3软件测试目标、原则和类型
6.3.1软件测试目标
6.3.2软件测试的分类
6.3.3测试的原则
6.4智能测试分析与计划
6.4.1LLM驱动测试需求分析
6.4.2生成测试计划书
6.5智能测试设计与开发
6.5.1智能测试方法概述
6.5.2基于测试需求文档生成测试用例
6.5.3基于业务流程图生成E2E测试用例
6.5.4测试用例的复审
6.5.5生成功能测试脚本
6.5.6生成API测试脚本
6.6LLM驱动非功能性测试
6.6.1LLM驱动性能测试
6.6.2LLM驱动安全性测试
6.7智能测试评估
6.7.1智能缺陷定位
6.7.2评估测试覆盖率
6.7.3测试报告生成
小结
思考题
参考文献
第7章如何实现持续集成与持续交付
7.1持续交付
7.1.1软件交付概述
7.1.2软件交付的反模式
7.1.3持续交付的理念
7.2持续集成
7.2.1过程与方法
7.2.2最佳实践
7.2.3智能化持续集成
7.3持续测试
7.3.1测试的分类
7.3.2与持续交付集成的持续测试策略
7.4部署与发布
7.4.1自动化部署
7.4.2低风险发布
7.5部署流水线
7.5.1执行流程解析
7.5.2定制的部署流水线
7.5.3部署流水线平台与工具链
7.6云原生的CI/CD
7.6.1“云原生”概念
7.6.2搭建云原生的CI/CD工作流
7.6.3智能云
7.7智能化应用的CI/CD
7.7.1机器学习模型
7.7.2基于LLM的软件应用
小结
思考题
参考文献
第8章下一个版本如何开始
8.1软件维护
8.1.1软件维护的类型
8.1.2可维护性指标
8.1.3软件腐化
8.1.4代码重构
8.1.5智能维护和升级
8.2软件演化
8.2.1遗留系统
8.2.2风险与挑战
8.2.3遗留系统管理策略
8.2.4现代化与再工程
8.2.5架构重构
8.2.6弃用
8.3向智能化软件演进
8.3.1任务智能化
8.3.2功能智能化
8.3.3过程智能化
小结
思考题
参考文献
第9章如何更好地支持系统运维
9.1基础设施维护与验证
9.1.1基础设施即代码
9.1.2对基础设施进行验证
9.1.3系统运维工具
9.2A/B测试
9.2.1A/B测试设计
9.2.2A/B测试平台与测试执行
9.2.3关于用户体验度量
9.3监控告警系统
9.3.1日志分析及Elastic Stack的使用
9.3.2调用链分析及Skywalking的使用
9.3.3指标监控及Prometheus的使用
9.3.4监控系统解决方案
9.4安全性监控
9.4.1安全监控与审计框架
9.4.2智能安全监控
9.5智能运维
9.5.1从自动化运维到智能运维
9.5.2智能运维的典型场景
小结
思考题
参考文献
第10章智能化浪潮下软件工程的未来
10.1现状
10.1.1需求
10.1.2设计
10.1.3实现
10.1.4质量管理
10.1.5维护与演化
10.2挑战
10.2.1大模型在软件工程任务上的局限性
10.2.2计算资源与基础设施
10.3未来
10.3.1自然的人机交互
10.3.2端到端工作流
10.3.3隔离环境
10.3.4自学习与自适应
小结
思考题
参考文献
附录实验
