首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

软件开发的缺陷

可惜的是,没有多少程序第一次就能正常运行。我们周围的这个世界太复杂了,而程序也反映了其复杂性。编程要求对细节极端关注,而能做到这一点的人却不多。正因为如此,任何规模的程序都会包含缺陷,也就是说,它们在某些情况下会做错一些事或者得出错误的答案。这些缺陷被称为bug,这个词是因我们前面提到的格蕾斯·霍普而流行起来的。

在实际编程中,很大一部分工作是在编写代码的同时测试代码。很多软件公司的测试人员比程序员还多,目的就是尽可能在把产品交给用户之前发现更多的缺陷。查找缺陷不容易,但你至少可以找到那些会经常出现的。怎么测试上面的温度转换函数呢?你一定会想,用几个知道结果的简单测试用例试一试,比如摄氏0度和100度,结果应该是华氏32度和212度。这两个测试都没有问题。顺便说一下,这两个函数互为逆运算的特点使测试变得简单。如果你将同一个值依次输入两个函数,结果应该和原数相同,除了可能由于计算机无法将非整数精确地表达出来而导致细微的差别之外。缺陷会使软件在面对攻击时不堪一击。攻击者通常会利用这些缺陷以自己的恶意代码重写内存。

可利用缺陷的发现和披露已经变成了一个活跃的市场,在这里白帽子们解决问题,黑帽子则以此牟利。这里个市场中还存在着一个灰色领域,如美国国家安全局之类的政府机构收集和储备这些可利用的缺陷以便以后利用或修补。正是由于bug广泛存在,所以各种重要的软件才会频繁升级,比如浏览器,它已经成为很多网络黑客关注的焦点。就拿我使用的Firefox来说吧,在2015年前后发现了超过100个安全缺陷。这不是特例,也并不意味着Firefox程序员的失职,相反说明了编写一个耐用的程序非常难,而坏人始终都在寻找你的弱点。现实中软件面临的另一个复杂性在于外界环境瞬息万变,因此程序必须不断适应新情况。新的硬件问世后,它所需要的软件可能得进行系统级的改动。

新的法律法规出台,程序的规范可能就必须调整——众所周知,税法每次有什么变化,相关软件都要升一次级。过时的计算机、工具和语言会被新生替代品取代,数据格式过时的情况更加常见——今天的Word软件打不开20世纪90年代初写就的Word文档。自然,存储和处理这些数据的物理设备也一样在代代更替。而随着人的退休、死亡或被公司解雇,专业知识也会消逝。学生在校期间开发的系统随着设计人员的毕业也将面临相同的遭遇。软件开发和维护无可避免的一大问题就是必须持续不断地小幅更新,否则程序就会遭遇“比特腐烂”,一段时间之后,便无法工作或者无法更新。因为它们无法重新编译,或者所依赖的库已经变得面目全非。与此同时,无论是更新还是修复问题,都会伴随着新缺陷的产生,或者改变用户所依赖的操作行为。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20220320A09DXR00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券