针对某一功能性需求确定后,开发人员需考虑的非功能性需求:

 

面对开发人员自己

  易于调试

  可维护性

  重构达到复用(提炼API/框架)

  使用库而不是被库绑架(针对接口,使库易被替换)

 

设计API/框架(可复用)

  被封装

  可扩展

  可读性

  版本控制/兼容性

  单元测试作为文档

  粗细粒度

 

面对测试

  可测性

 

面对运维

 安全性

  可配置(配置文件/后台管理)

  少编译(不在服务端编码拼接html/css/js)/部分编译(IOC)

 易于快速/增量/分布式部署

  易于备份/还原

  可靠性/健壮

  日志/审计/监控(服务/实例/进程)

 

面对用户

  可用性(ajax不可用时)

  易用性(ajax可用时)

  用户体验

  跨浏览器

  

面对SEO

  可达性

  元数据(微格式)

 

面对数据(业务数据/资讯/图片)

  输入/输出的格式/质量(垃圾进垃圾出)

  OLTP/OLAP区别对待

  存储格式/位置

  同步

 

面对性能(响应/吞吐/并发/资源)

  延迟/提前加载

  生命周期/内存泄露

  并发/分布式

  连接次数(IO/DB/RFC)

 

面对第三方

  标准化

  协议

  约束

 

面对市场

 上市时间

 成本收益

 所希望的生命周期

 目标市场

 推出版本计划

 与老系统集成

 

此处考虑的是开发人员在开发中需考虑的非功能性需求,而非整个系统的非功能性需求,后者还可以通过硬件等措施来达到

另外类似运维,开发人员只考虑开发的模块对运维的支持,而不可代替运维的其他工作(如版本控制等)