软构学习心得
健壮性和正确性
经过一学期对软件构造的学习,我感受到了软件构造与之前的数据结构与算法、算法设计与分析等课程有明显的区别。尽管这几门课都要求学生动手去编程,但编程的目标相差很大。个人感觉数据结构与算法的编程任务是为了让学生初步了解各种不同的数据结构的作用和适用面,还有不同算法的时间复杂度和空间复杂度,对代码的效率有要求。除此之外,此前的任务较少设计对程序健壮性的关注,一般都只要求给合法的输入能有符合预期的输出即可。相比之下,软件构造不那么注重代码的效率,而对代码的健壮性等提出了更高的要求,也更注重和使用这段代码的人的交互,这之前的课程中,我编写函数最终都是给自己使用以达成某个目的,如按某种方式遍历一个二叉树,这种情况下我不会恶意提供函数不支持的输入。而在软件构造中,我们的程序最终是要交互到用户手中的,我们不太可能要求用户总是提供合法的输入,我们甚至需要总是假定用户恶意为难自己,试图使自己的代码无法正常运行。例如播放一个视频文件,出于节省自己精力考虑,我们更希望用户总能提供完全没有问题的视频文件,但为了健壮性,我们又要试图使自己的程序能够尽可能的保证视频正常播放,遇到坏帧时选择跳过而不是直接就报错。
健壮性和正确性是软件构造最重要的指标,正确性要求永远不给客户错误的结果,而健壮性要求尽可能的保持程序的运行而不总是退出,健壮性趋向于容错。程序的健壮性提供可以减轻用户的压力,帮助用户分担一些麻烦,也能使程序更具竞争力。