什么是软件开发
软件开发是根据用户要求建造出软件系统或者系统中的软件部分的过程。
软件开发是一项包括需求捕捉,需求分析,实现和测试的系统工程
软件开发有哪些困难?
软件开发的本质困难
复杂性
不可见性
可变性
一致性
The Mythical Man-Month 人月神话Frederick P.Brooks.J:
对本质难题的进一步分析
三个本质难题因项目而异
四大本质难题相互促进
本质难题的变化带动软件方法(过程)演变
软件项目管理和软件过程管理
软件发展三大阶段
软硬件一体化阶段(50年代~70 年代)
软件完全依附于硬件
软件作坊
软件成为独立的产品(70年代~90年代)
网络化和服务化(90年代中期迄今)
软件完全依附于硬件
软件应用典型特征
软件支持硬件完成计算任务
功能单一
复杂度有限
几乎不需要需求变更
·软件开发典型特征
◆硬件太贵
◆团队以硬件工程师和数学家为主
软件作坊
·软件应用典型特征
功能简单
规模小
·软件开发典型特征
很多非专业领域的人员涌入软件开发领域
高级程序语言出现
质疑权威文化盛行
典型软件过程和实践
“Code and fix”
软件成为独立产品
软件应用特征
摆脱了硬件束缚(OS)
功能强大
规模和复杂度剧增
个人电脑出现 –> 普通人成为软件用户
·需求多变
·兼容性要求
来自市场的压力
典型软件过程和实践
·方法之一:形式化方法
·方法之二:结构化程序设计和瀑布模型
网络化和服务化
·软件应用特征
◆功能更复杂,规模更大用户数量急剧增加(这会带来什么问题?)
◆快速演化和需求不确定
◆分发方式的变化(SaaS)
典型软件过程和实践
迭代式:大型软件系统的开发过程也是一个逐步学习和交流的过程,软件系统的交付不是一次完成,|而是通过多个迭代周期,逐步来完成交付。
更深化的网络化和服务化
软件应用典型特征
随处可见(pervasive)
用户需求多样性进一步凸显
软件产品和服务的地位变化
错综复杂的部署环境
近乎苛刻的用户期望
多:功能丰富
快:快速使用,及时更新
好:稳定,可靠
省:用户的获得成本低,最好免费
·软件开发典型特征
◆空前强大的开发和部署环境——XaaS
·IaaS
·PaaS
·SaaS,FaaS,etc.
盛行开源和共享文化
盛行敏捷
软件工程的潜在支撑力量获得了长足进步(AI, Bigdata,Cloud,etc.)
典型软件过程和实践—DevOps
·方法论基础是敏捷软件开发、精益思想以及看板 Kanban方法。
·以领域驱动设计为指导的微服务架构方式 大量虚拟化技术的使用
·一切皆服务XaaS(Xas a Service)的理念指导
·构建了强大的工具链,支持高水平自动化
The Three Ways-The First Way
·概念
充分理解工作流(开发-运维客户)
流量最大化(小批量、缩小任务间隔、缺陷控制)
不断为了整体目标的实现而优化工作流
·部分关键实践和方法
持续构建、集成以及交付;
按需创建环境;
限制半成品(WIP);
构建支持顺利变更的安全系统;看板(任务可视化)
The Three Ways-The Second Way
概念
价值流(开发-运维-客户)的快速持续反馈
避免问题再次发生
(或者快速发现和修复)
从源头上保证质量
部分关键实践和方法
适时停止生产线
持续改进
构建自动化测试套件,确保代码随时可部署
Dev和Ops共享目标和pain
远程监测手段(自动化)
The Three Ways-The Third Way
概念
◆创建培育良好的文化(不断尝试、重复和练习)
部分关键实践和方法
◆营造勇于创新、敢于冒险以及高度信任的企业文化
确保至少20%资源投入在非功能需求上
不断鼓励和强化改进