架构评审时该问点什么?提升软件质量必读

作者简介

Gavin,程序员、软件架构师、企业架构师,关注智能制造。

本文是专栏《智能制造系统架构》中的文章,其它文章请参阅入坑智能制造系统架构。

最近团队作架构评审,所以整理一下架构评审要考虑的问题。很多时候,软件项目在进度和预算的压力下经常会优先考虑业务功能实现,尽量先把功能做出来,同时会忽略掉一些其它问题,考虑后续根据情况再逐步完善。特别是搞敏捷的团队,经常拿迭代当万金油,遗留一些问题给后续迭代,随后就成了技术债。最后发现,填坑的成本奇高无比,更有甚者干脆推翻重做。所以架构评审集合一些有经验的人,提前识别出重要的问题,做好规划,对于产品或者项目很有好处。并且,架构评审的过程团队成员可以共同学习,共同成长。

架构评审的第一个问题就是要评审什么?从哪里入手?所以本文汇总整理一下架构评审可能的关注点和相应的问题,作为评审入手的参考。但架构的关注点有很多,在不同阶段,评审的内容也会不同,所以实际评审时没必要挨个问一遍。只是作为基础参考,根据评审的关注点选择需要的内容即可。

架构评审的目的是为了识别出影响产品质量的风险,所以架构评审的问题点也是围绕产品质量要求。业界有一些相关的总结或者标准,以ISO 9126为例,对软件质量模型定义了如下属性以及相应的评估问题如下:

质量属性

质量子属性

评审点

 

 

Functionality

功能性

 

 

Suitability

适合性 :系统提供了满足需求的功能 

  • 系统利益相关者是否明确?
  • 系统业务范围是否明确?
  • 系统业务流程是否明确?

Accurateness

准确性 (包含数据一致性、事务性) :系统执行的结果是正确的(用户需要的)

  • 系统是否有特殊精度要求的功能?是否有精度缺失的情况?
  • 哪些业务需要保证数据一致性?是强一致性还是最终一致性?是否有数据一致性问题?
  • 在数据不完整的时候用户会感知到吗?
  • 哪些业务需要保证事务性?是否存在业务事务性问题?
  • 数据库事务回滚后会怎么样?服务调用了失败怎么办?
  • 队列补偿怎么做的?服务调用补偿怎么做的?
  • 数据补偿实现最终一致需要多久?

Interoperability

互操作性 :产品与产品之间交互数据的能力

  • 有哪些外部系统与产品有数据交互或技术依赖?
  • 使用的接口技术有哪些?

Compliance

合规性 :符合国际/国家/行业/企业 标准规范

  • 系统需要满足哪些法律或制度要求?
  • 系统是否包含个人隐私数据?如何保护个人隐私数据?
  • 系统是否存在跨境数据传输?

Security

安全性 :允许经过授权的用户和系统能够正常的访问相应的数据和信息,禁止未授权的用户访问.......

  • 系统需要访问资源的用户有哪些?
  • 如何定义允许哪些用户在哪些资源上执行哪些操作以及需要实施的信息完整性?
  • 系统如何作访问控制?
  • 功能权限如何控制?
  • 数据权限如何控制?
  • 系统是否包含敏感资源?
  • 系统是否考虑了系统外部人员和内部人员的威胁?
  • 系统是否有SQL注入和XSS的风险?
  • 系统是否有数据泄露的可能性?
  • 系统是否做了日志审计?
  • 系统受到了DDOS攻击怎么办?
  • 数据传输是否加密验签?使用的加密方法是什么?

 

Reliability

可靠性

 

Maturity

成熟性 :防止内部错误导致软件失效的能力

  • 系统SLA如何定义?
  • 系统彻底挂了对其它业务的影响是什么?
  • 系统彻底挂了是否可以有线下的方式走业务?
  • 系统架构中是否有单点?
  • 系统采用什么高可用方案?单机房?跨机房?跨地区?
  • 数据库或存储出现问题的时候系统会怎么样?
  • 数据库或存储出现问题又恢复了系统是否会自己恢复?
  • 系统是否存在缓存穿透的风险?
  • 系统是否存在缓存击穿的风险?
  • 系统是否存在缓存雪崩的风险?
  • 系统是否有数据丢失的可能性?
  • 系统接口重复调用是否会有影响?
  • 是否考虑了服务降级?哪些业务支持降级?
  • 是否考虑了服务熔断?熔断后怎么处理?
  • 是否考虑了服务限流?限流后客户端表现怎么样?
  • 系统如何实现故障转移?
  • 集群内部故障转移需要多久?

Fault tolerance

容错性 :软件出现故障,自我处理能力

  • 系统是否考虑异地故障转移方案?
  • 外部依赖系统出现故障系统如何处理?
  • 系统是否考虑了隔离性?

Recoverability

易恢复性 :失效情况下的恢复能力

  • 系统可以自动恢复还是手动恢复?
  • 故障恢复需要多久?
  • 数据丢失后是否可以恢复?

 

Usability

易用性

 

Understandability

易理解性 : 决定系统功能能够被理解的难易程度。 

  • 用户是否可以在无操作手册或培训的情况下直接上手使用系统?
  • 对不同国家的用户,是否支持多语言?

Learnability

易学性 :用户的学习成本。

  • 产品文档是否完善?是否有需要补充的功能文档?
  • 用户学习产品功能需要花费多长时间?

Operability

易操作性 : 特定用户在特定环境下操作的难易程度

  • 应用的操作易用性是否需要改善?
  • 是否需要易于移动端操作?
  • 是否需要易于老年人操作?
  • 是否需要易于视觉障碍者操作?

Efficiency

性能 (包括可伸缩性)

 

Time behavior

时间特性 :平均事务响应时间,吞吐率,TPS(每秒事务数)

  • 整体设计上的TPS、QPS和RT的目标是多少?
  • 会不会有突发的数据量业务量增大?
  • 系统在不做重大改变的情况下,能够扩展到什么规模?
  • 随着数据量的增大系统性能会不会出现明显问题?
  • 系统哪个环节会是最大的瓶颈?
  • 是否执行了足够的测试和分析,从而理解了系统可能存在的性能特征?
  • 前端用户访问是否流畅性?
  • 哪些环节可以支持横向扩展?
  • 扩容需要怎么做,手动还是自动?

Resource behavior

资源利用性 :CPU 内存 磁盘 IO 网络带宽 队列 共享内存

  • 每一个组件对服务器哪方面的压力会最大?
  • 资源平均使用率是多少?

 

Maintainability

软件维护性

 

 

Analyzability

易分析性 : 分析定位问题的难易程度

  • 业务层面哪些指标需要监控和报警?
  • 应用层面系统内部是否有暴露了一些指标作监控和报警?
  • 系统层面使用的中间件和存储是否有监控报警?
  • 是否所有环节都接入了全链路跟踪?
  • 每一个模块是否有固定的主要和次要负责人?
  • 出现报警的时候应该由谁来处理?
  • 有没有可能系统出了问题无法通过监控指标体现?
  • 哪些指标需要由监控进行7*24监控?

Changeability

易改变性 : 软件产品使指定的修改可以被实现的能力

  • 是否有了解过产品层面以后会怎么发展?
  • 是否考虑到了A业务的实现以后还有B的可能性?
  • 以后是否可以把某个业务的H5前端适配到PC?
  • 组件是不是开源的,出了问题怎么办?
  • 系统代码是否存在难以接手的问题?
  • 是否存在硬编码配置逻辑的情况?
  • 如果流程有变,需要多大的工作量来适应?
  • 业务是否可以做到可配?

Stability

稳定性 : 防止意外修改导致程序失效

  • 是否存在未处理的异常?
  • 系统代码提交如何管控?
  • 系统配置如何管控?
  • 系统部署如何管控?

Testability

易测试性 : 使已修改软件能被确认的能力

  • 测试环境和线上的差异多大?
  • 是否支持部署多套隔离的测试环境?
  • 是否有单元测试,覆盖率目标是多少?
  • 测试黑盒白盒工作量的比例是怎么样的?
  • 是否支持接口层面的自动化测试?
  • 是否有可能做UI自动化测试?
  • 是否作压力测试?压测怎么造数据?
  • 是否可以在线上做压测?
  • 线上压测怎么隔离测试数据?
  • 是否有测试白名单功能?

 

Portability

软件可移植性

 

 

Adaptability

适应性 : 系统切换到新的规格或环境的能力

  • 系统如何作版本管理?
  • 怎么进行新老系统替换?
  • 新老系统能否来回切换?
  • 别的系统怎么连接你这套新服务?
  • 上下游依赖是否梳理过,影响范围多大?
  • 上下游改造的难度怎么样?
  • 使用了新的数据源数据怎么迁移?
  • 使用了新的技术老项目开发能否适应?

Installability

易安装性 : 部署软件需要花费的工作

  • 系统如何安装部署?
  • 系统可以部署在哪些平台上?
  • 重新搭建整套系统最快需要多少时间?
  • 系统是否可以完全基于源代码构建?
  • 系统是否有初始化或预热的环节?
  • 系统里哪些环节需要人工参与?

Replaceability

易替换性 : 在特定环境下更换指定组件的难易程度

  • 模块A是否能拆分出去独立为其它业务服务?
  • 模块B是否可以替换为另一种第三方数据源?

参考资料

  • http://www.sqa.net/iso9126.html
  • https://www.cnblogs.com/lovecindywang/p/9688523.html
  • Software Systems Architecture, 2nd. 中文版 《软件系统架构》

 

你可能感兴趣的:(系统架构,软件架构,软件质量)