软件系统对异常情况的处理能力属于“健壮性”的范畴。健壮性是指在异常情况下,软件能够正常运行的能力。
健壮性有两层含义:一是容错能力,二是恢复能力。容错是指发生异常情况时系统不出错误的能力,对于应用于航空航天、武器、金融等领域的这类高风险系统,容错设计非常重要。容错是非常健壮的意思,系统即使发生异常也不出问题。而恢复则是指软件发生错误后(不论死活)重新运行时,能否恢复到没有发生错误前的状态的能力。从语义上理解,恢复不及容错那么健壮。
例如,某人挨了坏蛋一顿拳脚,特别健壮的人一点事都没有,表示有容错能力;比较健壮的人,虽然被打倒在地,过了一会还能爬起来,除了皮肉之痛外倒也不用去医院,表示恢复能力比较强;而虚弱的人可能短期恢复不过来,得在病床上躺很久。
对用户来说,软件出错是不能容忍的,软件出错后还不能快速恢复是更不能容忍的。因此,提高软件的容错能力和恢复能力是软件供应商的义务。
对软件开发来说,不仅仅需要在编码的时候考虑到对异常情况的处理,在软件开发的整个过程中都需要考虑。在需求分析时,需要分析系统的健壮性需求,甚至对每一个功能需求也需要考虑对异常的处理。在概要设计、详细设计、编码的时候需要考虑如何满足系统的健壮性需求。在单元测试、集成测试、系统测试的时候需要有异常相关的测试用例,并且需要加强对异常情况的测试。
现实中,软件开发对异常处理的重视度还不够,开发人员往往没有这个意识。我所在的组织就存在这样的问题。开发人员知道的最多的恐怕就是在函数实现的时候需要对异常情况进行错误返回,当然,这并没有错,只是这远远不够。比如,错误返回后上层函数是否对错误进行处理,整个系统是否能够处理出现的异常,这往往就没有考虑,甚至有的可能有的认为这不是自己模块的责任。
软件开发人员对可能发生的异常情况不了解也是不重视的原因之一。调查分析在线运行的系统曾经发生过的错误是了解异常的途径之一。
对于非纯软件系统来说,软件系统对硬件系统可能出现的异常也需要进行考虑。对不可恢复的硬件问题,软件至少需要能够上报告警,通知用户更换硬件。如果设备除了问题,连软硬件问题都分不清的话,用户恐怕对软件系统也不会有好感。
总之,在软件开发过程中,需要重视软件的健壮性,加强软件对异常情况的处理,提高软件系统甚至整个设备系统的健壮性。