上QQ阅读APP看书,第一时间看更新
第1章 生产环境的生存法则
在项目上努力工作了许久,看起来所有的特性都已实现,甚至大多数特性通过了测试。可以松一口气了,完成任务了。
真的完成任务了吗?
“特性已实现”是否就意味着“就绪可上线”?系统是否真的万事俱备只待部署?是否真正可以放心地将系统移交给运维部门,并且任其面对现实世界中的大批用户?此时,你是否开始有一种即将面临深夜紧急电话和系统告警的沮丧情绪?事实证明,软件开发除了添加所需特性之外,要做的事情还多着呢!
如今,学校里的那些软件设计课程极其片面。这些课程只是讨论系统“应该”做什么,却没有解决相反的问题——系统“不应该”做什么。系统不应该崩溃、停止响应、丢失数据、侵犯隐私、损失金钱、摧毁公司,或者“杀死”客户。
项目团队的目标往往是通过QA部门的测试,而不是通过生产环境的生存考验。也就是说,团队的大部分工作是想方设法地通过测试。但即使是做了敏捷、务实和自动化的测试,也不足以证明软件已经为面对现实世界准备就绪。来自现实世界的压力和重负——包括亢奋狂热的真实用户、全局范围的网络流量,以及在闻所未闻的国家编写病毒软件的人群——远远超出了所能期望的测试范围。
请面对现实:计划再周详,仍会出状况。当然,尽可能防患于未然总是好的。但是,误以为自己已经预见和消除了所有可能的不良事件并能万事大吉,这是最要命的。一方面要采取行动以预防那些能够预防的事情,另一方面要确保系统在整体上能够从任何未曾预料到的重创中恢复过来。