软件产品
构想 -> 需求 -> 系统设计 -> 架构设计 -> 模块设计 -> 编码 -> 测试 -> 发布 -> 维护 -> 生命周期
如何进行软件架构设计
- 横纵向充分解耦
架构是业务逻辑的技术表现形式
沿着业务领域解耦开的模块才是真正意义的解耦
在于切分出的模块可以匹配产品业务逻辑以及产品未来演进的诉求
各模块保证接口稳定,模块本身可长期独立交付演进 - 模块,组件间的接口定义
功能清晰,性能需求明确,接口定义明确 - 看护软件架构,确定架构的不腐化
- 架构和接口定义代码化 —> 以头文件的形式代码化
- 严格的架构管理机制
- 新增需求对架构的影响
首先从产品全景的功能逻辑入手,把新需求挂在产品全功能这颗树上。更新完产品全景业务逻辑后,再进行软件架构调整
- 重视软件工程能力建设
- 软件工程师的素养
- 自我设定目标和自我激励
代码洁癖
软件研发 = 软件技术 + 软件工程 + 艺术想象力 - 持续学习的能力
- 逻辑抽象能力和技术感知力
- 全局视野和系统思维能力
- 洞察未来能力
- 自我设定目标和自我激励
对软件生态的思考
- 要有多赢的心态
- 生态成功的基础是为消费者,开发者带来价值
- 把方便留给开发者
对软件文化的思考
- 信任和开放的环境
- 开放的做软件
- 评价和考核要有新的方式
软件分类
嵌入式软件
与硬件强耦合
需求明确,架构确定<国际标准就是架构>
标准明确,生命周期明确,客户维护水平高平台&云化软件
需求分散,缺乏标准,研发实现新功能堆叠无尽
规模膨胀,架构极易腐化
生命周期极难收敛,因客户业务演进,背景差异大- 互联网服务类软件
没有标准,初期无架构,研发实现需求快,小,全,强。
要求全功能团队,没有生命周期概念,快速迭代,快速闭环 - 工程工具类软件
构建生态
软件工程能力和优秀软件经验的总结和积淀