未来的应用软件质量
接下来的几篇,我将陆续讨论我对软件工程未来的看法。在阐明我认为重要的问题的同时,希望能引发一些争论。我将软件世界分为应用和系统两大类。尽管它们之间的界限模糊不清,但展望这些领域,我认为最重要的两个问题是对软件质量的关切和对具备足够技术能力的人员的需求。这一篇,我将从应用软件的质量开始谈起,观点有二。
质量环境
大家现在虽然抱怨质量问题,却没有真的那么关心。与其他行业一样,当质量没有得到度量和管理的时候,通常就会很差。我们现在,就处于这种环境之下。
可是,应用软件正逐渐被用于非常关键的商业领域,比如医疗、交通、能源……这意味着,缺陷的影响会随着应用程序影响的增加而增加。在关键领域中出问题的风险是极高,因此,随着客户对高质量的诉求是会增加。这对整个行业来说,既是挑战,也是机会。客户会先要求供应商提供质量方面的担保和保修服务,如果还是不能满足质量要求,要么另寻合作伙伴,要么放弃该领域的自动化尝试。
放弃自动化的想法是与人性背道而驰的。那么提高质量就成了必然的趋势。
规模和复杂性
应用软件的规模和复杂性正在以摩尔定律的速度增加。如果我们以当前的方法开发更大规模、更复杂的软件,缺陷数量就会随着规模而线性增加。
一个200KLOC的程序,若每KLOC有5个未测到的缺陷,则共有1000个缺陷。那么一个2000 KLOC和相同缺陷密度的增强程序,将有10000个缺陷。假设用户对增强程序的使用周期与老程序类似,在相同的时间内暴露在用户面前的缺陷就是原来的十倍。(这里假设了用户使用了新程序中的增强功能。如果他们不用,怕是也没有必要开发新程序了。)因此,即使缺陷的影响力不变,软件规模和复杂性的增加也会要求我们减少缺陷的数量。
问题来了。任何测试过程只能发现和修复在执行特定测试时遇到的缺陷。除非全覆盖的测试,否则即使通过测试,也很可能存在很多缺陷。
可是,即使相对简单的软件,其程序条件的组合数量也非常庞大。随着规模和复杂性的增加,实现给定级别的测试覆盖率所需的测试数量,随程序大小呈指数增长;发现和修复缺陷所需的时间,也会随着程序规模的增加而线性或指数增加。
很显然,测试不会随着程序的规模而扩大,全覆盖的测试在当前的质量实践中是无法企及的。当下的质量实践无法应付,它向我们提出了挑战。
质量趋势会推动整个行业的探索。我认为最主要的制约是能否找到足够技术水平的人。下一篇我便要阐述质量趋势下,软件工程和软件工程师将会受到怎样的影响。
原文:《The Future of Software Engineering: Part I》
发表时间:2001年7一季度
编译:冯信