1.2 软件质量现状
这是一个质量创新驱动市场主体创新的时代。质量管理大师William Edwards Deming在《新经济观》中提出“质量是新经济纪元的基础”这一关键命题,引发持续的质量反思。质量是企业最后的防火墙,是社会经济高质量发展的基石。
传统软件质量控制技术及质量工程方法论,面临着前所未有的挑战。在怀疑论者悲观情绪不断弥漫,完美软件开发、程序正确性证明、形式化验证等重大关键技术尚未完全突破,软件工程方法备受诟病的今天,软件测试是保证软件质量,改进软件过程,降低使用风险,实现用户价值的重要手段。而基于软件定义,系统质量需要解决的问题包括如何合理平衡管理的灵活性以及虚拟化之后的性能损耗,如何降低软件实现的复杂性和故障率,如何有效定位故障以保障系统的可靠性与健康性,如何在新型架构及质量要求下开发有效的测试技术及最佳实践。系统安全性对硬件资源管理可编程提出开放性、灵活性要求的同时,带来了更多安全隐患,而对于可靠性、安全攸关领域,可能会带来难以估量的损失甚至灾难性后果。
产品质量不仅是其外在表现的高质量,更是其内在实现高质量的过程,是过程及其结果双重可验证的属性,是技术创新、产品创新、模式创新、业态创新的基础。幽暗的丛林中,荆棘密布;平静的海面下,暗流汹涌。何曾识得庐山真面目,只缘未入此山中。不论是大型工程系统还是日常生活用品,越来越证明软件是一个薄弱环节,即便是通过规定测试与合格验证的软件,也常常受到错误的困扰,更何况我们还难以保证软件质量哪怕是在一段时间的将来是足够的。而不幸的是,软件规模越来越大,结构越来越复杂,持续集成与交付加速迭代,质量与效率此消彼长。
遨游太空,探索宇宙的无穷奥秘,是人类美好的梦想和追求;嫦娥奔月,夸父逐日已夙梦成真,地球流浪未必只是科幻。航空航天产品是可靠性、安全性攸关的复杂系统,质量管控一丝不苟,开发设计严密规范,测试验证充分完备,适航认证严慎细实,双五归零严肃彻底,形成了大量独树一帜的最佳实践成果。然而,质量问题依然时有发生,甚至引发了不少灾难性事故。据2023年1月6日《空天动力瞭望》报道,截至2022年,全球共进行186次航天发射,谱写了航天发射新的辉煌,但却仍然有42个航天器因7次发射失败和1次部分失败,未能入轨或未能成功部署载荷,其中相当一部分是因为软件质量问题所致。在航空航天发展史上,因为软件质量问题引发的重大质量事故俯拾皆是。1996年6月4日,ARIANE 5火箭首发升空40秒,即燃放了一个“大烟花”,其原因是主惯性参考系统将64位浮点数转换成16位有符号整数时,数字转换超界,未将正确的姿态数据传送至箭载计算机,致使其攻角大于20°,引起极高的气动载荷,引爆自毁。2003年5月4日,联盟TMA-1号飞船自国际空间站返回时,软件错误导致导航系统故障,使得自动驾驶仪以弹道方式降落,飞船失联长达11分钟,与原定溅落点偏差达460千米。自波音737 MAX投入商飞后,先后于2018年、2019年发生两起重大空难,造成346人丧生,除波音公司管理不透明、美国联邦航空局监管缺失之外,导致悲剧发生的根本原因是错误地将特定条件下自动压低机头的MCAS软件激活时间设定过短(4秒,一个经验丰富的飞行员至少需要10秒才能完成诊断和应对)。2022年2月10日,Astra Space的ELaNa41发射失败,损失4颗立方体卫星,一个重要原因是数据包丢失故障模式,上层级发动机Aether无法利用其推力矢量控制飞行器,进行稳定和机动控制。2023年1月11日,美国航班飞行通告系统因一个数据文件损坏,导致美国全境空中交通全面瘫痪,引发巨大混乱。
现代战争不仅是尖端武器及平台的对抗,更是在扩大的空间与缩短的时间、分散的布势与模糊的战线、动态行动的军兵种与频繁转换的作战样式之上的体系对抗,作战理念及样式不断改变。软件定义装备,软件是战斗力形成及作战效能有效发挥的关键要素,深刻影响新军事变革。基于军工系统卓越的质量管控机制,有效地规范了装备软件的开发设计、测试验证、试验鉴定等工作,较好地保证了装备软件质量。即便如此,装备软件质量问题时有发生,甚至已成为制约装备建设发展的瓶颈。欧美等西方发达国家和地区,亦概莫能外。例如,海湾战争期间,爱国者防空系统因跟踪软件运行100小时后出现0.36秒舍入误差,未能成功拦截伊拉克的飞毛腿导弹,造成28名英军官兵被炸身亡。又如,美国海军“约克城”(CG-48)号巡洋舰动力系统软件存在被零除错误,数据溢出,导致动力系统失效,致使全舰瘫痪。前车已覆,后车之鉴。在美军事转型计划关键项目——网络中心战研制过程中,构建数字化试验鉴定体系,实施基于能力的试验鉴定战略,推进美军装备试验鉴定由技术性能验证向系统效能验证和交付能力评价,以标准化能力文档为中心的线性试验鉴定转型,对保证软件系统质量发挥了重要作用。
可靠性、安全性攸关的航空航天、军工装备尚且如此,与我们日常生产生活密切相关的工业软件、商用软件,情况又如何呢?不幸的是,操作系统、数据库等基础软件及信息与通信技术(Information and Communications Technology,ICT)基础设施,其核心算法、技术架构、应用模式等自主创新能力不足,价值失衡,生态脆弱,异构软件功能难以形成合力,质量安全风险居高不下,已成为制约软件产业发展的瓶颈。信息技术及软件服务业的技术妄念、汉尼拔情结及销售驱动增长给软件质量管控及产业发展造成了难以弥合的伤害。臭虫成堆、架构腐败、功能缺失、性能离散、操作不便、运维困难、黑客侵扰、恶意攻击、隐私泄露、服务中断、系统宕机等问题,层出不穷。2017年1月31日GitLab.com的“数据丢失”事件,2017年2月28日百度的“不正经”事件,同日Amazon S3 Cloud的“互联网毁灭”事件,2017年3月21日,ofo的“小瘫车”事件,对互联网服务行业发展产生了深刻的影响。2021年12月9日,广泛用于企业业务架构的日志框架Log4j2的远程代码执行漏洞,触发无须特殊配置,攻击者可通过构造恶意代码请求在目标服务器上执行任意代码,进行页面篡改、数据窃取、挖矿、勒索等,对业界造成巨大冲击;2021年12月20日,攻击者利用该安全漏洞攻击比利时国防部网络系统,导致邮件系统宕机达数日之久,此乃近十年来最严重的软件质量事故之一。2022年1月4日,西安一码通系统继2021年12月20日崩溃之后再次崩溃,无法显示疫情防控码,导致成千上万西安市民在瑟瑟寒风中无奈地等待,更讽刺的是,这一幕再次发生在4个月后的“上海健康云”系统。2022年3月15日,央视“3.15”晚会曝出,一些不良厂商为压低儿童智能手表成本,使用10年前的Android4.4操作系统,各种App安装后,无须用户授权即可获取定位、通讯录、摄像头等多种敏感权限,轻易获得用户地理位置、图片视频、通话录音等隐私信息,用于偷窥偷听,给使用人员带来重大安全隐患。2022年9月2日,“四川天府健康通”系统崩溃,出现民众高举手机“呼唤”信号时心酸而又无奈的一幕。作者封笔交稿时,又传来了令人震惊的消息:2023年11月12日,“双11”刚刚过去,阿里就迎来了一次P0级事故,阿里云直接崩溃,阿里系的淘宝、钉钉、闲鱼、语雀、高德地图等全线崩溃,影响到数以万计的用户,那些使用阿里云OSS服务的公司,亦未能幸免;11月27日,滴滴崩溃,宕机长达12小时,不仅造成千万订单、4亿元交易额的损失,更为严重的是影响了大量人员出行,造成难以弥补的社会影响。事实上,上述问题仍然在无时无刻地上演。
自2013年至2022年,我们组织完成了162项某类软件系统鉴定、定型测评,不计文档问题,共检出13523个软件问题,其中致命问题757个、严重问题3871个,平均至每个项目,软件测试检出一般问题数、致命问题数、严重问题数分别达到83.48、4.67、23.90,平均千行代码缺陷率达到3.933。该类软件系统测试问题统计如图1-3所示。
图1-3 某类软件系统测试问题统计(单位:个)
由图1-3可见,该类软件系统虽历十载,在鉴定定型测试阶段,软件问题依然居高不下,质量问题十分突出。与此同时,图1-3以无可争辩的事实证明,软件测试是检出缺陷、改进软件质量的重要手段。
质量需求催生软件测试,质量变革驱动测试发展。现代质量起源于检测,软件质量回归于测试。正本清源,重塑新时代质量思维,熔炼尚不成熟的软件质量心智,面向软件的二重性及其严峻的质量形势,认清软件测试对软件质量控制的极端重要性和不可或缺性,基于软件质量保证能力提升以及质量工程创新变革的迫切需求,强化软件测试技术创新,深化软件测试最佳实践,检出缺陷保质量,验证性能固状态,摸清底数定能力,提质增效促使用,分析评价哺开发,改进过程助治理,为缺陷工程、性能工程、质量工程、价值工程融合发展提供广阔的技术创新空间和最佳实践平台。