软件支持
- 产品缺陷性支持与非缺陷性支持
- 支持成本
- 商用软件:服务收费
- 开源软件:Stackoverflow, github
- 外层:客服
- 咨询电话
- 在线提交问题
- 技术问题
- 交付及安装补丁集
软件维护
- 软件维护原则
- 不损害程序的质量
- 保持程序风格的一致性和功能的完整性
- 应有利于将来程序的改变
- 对用户没有不利的影响
- 基于缺陷的软件维护
- 缺陷定位/调试:程序频谱
- 缺陷修复:自动修复技术
- 回归测试
- 集成
软件演化
- 变更控制
- 发起变更请求
- 批准变更请求
- 执行变更请求
- 跟踪和关闭变更请求
- 程序理解
- 二次开发
- 集成
Devops
-
DevOps: 版本研发 + 交付上线
- 版本研发:持续交付
- 流程:敏捷开发
-
开发过程
- 集成 Integration:编译、测试、打包
- 部署 Deployment:应用组件或基本设施的代码或配置变更在产品环境生效称为“部署”
- 发布 Release:具有业务影响的功能变化对最终用户可见
- 交付 Delivery:从 Deployment 到 Release 之间的阶段,更多的强调的是一种能力
-
三个阶段
-
Flow 宏观思维:开发发布自动化
-
持续集成:开发人员提交了新代码之后,立刻进行构建、(单元)测试
Maven, Gradle, Jenkins, Gitlab Cl
-
持续交付:将集成后的代码部署到更贴近真实运行环境的「类生产环境」中
Docker, Vagrant, Logstash
-
持续部署
-
持续演化
-
-
-
Feedback 反馈闭环:确保反馈的稳定提供,且包括缩短和优化反馈循环,以便人们尽可能快地 自动收到反馈
-
Continual Learning 持续的验证和提升的文化
代码重构
代码“坏味道”
- 重复代码
- 过长函数 (Long Method)/过大的类 (Large Class):将查询函数和修改函数分离
- 过长参数列表 (Long Parameter List)/无用函数参数(Unused Function Parameter):移除参数
- 不可读或者可读性差的变量名和函数名 (unread variable or function name):重命名
- 异曲同工类(Alternative Classes with Different Interfaces)
- 令函数携带参数
- Switch 过多使用(Switch Abuse):以明确函数取代参数
- 冗余类(Lazy Class)/冗余函数(Lazy Function)
- 函数圈复杂度超过 10(The Complexity is over 10)
- 依恋情结(Feature Envy)
- 过度扩展设计(Over-extend design)
- 过度耦合的消息链(Message Chains)
- 令人迷惑的临时字段(Temporary Field)
- 过多注释 (Too Many Comments)
重构技巧
- 反射去除分支结构
- 多态取代条件表达式
重构工具
- 代码质量管理工具
- SonarQube
- 重复代码检测工具
- PMD
- Simian
开源工具
例 | |
---|---|
数据库 | Oracle, MySQL, Cassandra |
持续集成 | Jenkins, TeamCity,Github Actions |
部署 | SSH, XLDeploy |
云/laaS,PaaS | Amazon Web Servies, Azure |
业务分析/监控 | Splunk, Nagios |
配置管理 | Git, SVN |
库管理 | Nexus, NuGet |
配置/服务开通 | Chef, Puppet, Ansible, Vagrant |
发布管理 | XL Release, UrbanCode Release |
日志 | Sumo Logic, Logstash |
构建 | Gradle, Ant, Maven |
测试 | Junit, Cucumber, Selenium, Jmeter, Appium |
容器化 | Docker, Kubernetes, Mesos |
协作 | Jira, Flowdock |
安全 | Snort, CyberArk |