《构建之法----现代软件工程》书评----软件工程学习新方法
2014-11-25
有幸选择来到中科大软件学院,有幸学到软件工程这门课程,有幸读到《构建之法》这个本,在读这本书之前,在网上也看了很多关于这本书的报导以及介绍,评价不错,再加上软件工程老师的推荐,所以就买了这本书读了读。
开始读这本书,最大的感受的感受就是软件工程原来是可以这么学的,以前学习软件工程的课程的时候,总是感觉这门课程及其枯燥无味,总是在说太多的理论,很少 会涉及到实践,甚至根本就是没有实践这个环节,所以学习很无聊,但是研究生阶段读到这本书,真的是全新的感受,首先,不仅仅只是在说理论了,加入了很多实 践的东西,而且还可以在网上可以与其他人进行交流学习心得。
开篇作者就说了“软件 = 程序 +软件工程”,以前写软件或者说程序,就只是写程序,最多会考虑到数据结构的知识,很少会用到软件工程,但是随着学习的深入,代码量的累积,如果还是和以 前一样只是关心程序只要是可用的,实际可运行的,那么就没有意义了,这样的程序写出来也是没有价值的,首先,软件工程不仅仅就只是涉及到计算机或者软件方 面的知识,相反,软件工程涉及了很对其他学科的知识,比如:管理学、数学、工业设计等等学科,一个合格的软件开发人员如果只是懂得怎样去写程序,那么嗨仅 仅只是初级阶段,更高级的应该是从一个更加高级的层面上去考虑更多的东西,如整个软件的架构。
整本书从实际软件开发的各个阶段出发,详细地分析了软件工程的各个环节,如:需求分析、设计实现、用户体验、软件测试已经最后的发布等等。
首 先,说说代码风格,一个良好的代码风格规范是一个软件开发人员最起码的要求,即使程序写得是多么地出色,具有广阔的市场应用前景,但是如果背后是混乱不堪 的代码,那么就会对这个软件日后产生不少的负面的影响,特别是在后期的维护以及版本的迭代上,不规范的代码对于日后的维护人员来说,简直就是噩梦,以至于 最后实在是没办法了,只好是全部推倒重写,当然这个最坏的打算了,所以好的代码规范是多么地重要,特别是在日后开发具有商业价值的项目时,或者是在一个软件项目的团队里工作,代码规范相当重要。
结对编程,对我来说这是一个很有意思的新词,尽管这个词语的出现可以追溯到上世纪,以前不管我们是自己独立地进行项目的开发还是几个人组成一个小团队进行开 发,最基础的还是需要每个人写代码(独立地),但是,在结对编程的模式下,是由开发人员肩并肩、平等地、互补地进行开发,无论是设计、分析、编码、测试。 结对编程最大的好处就是可以使得实际开发出来的代码不断地处于“复审”的过程中,可以及时发现问题,可以及时解决问题,可以极大地避免将问题带到最后的测 试或者是发布阶段。
敏捷(Agile)开发,也是一个很早就提出来的技术解决方案,敏捷是一系列的价值观和方法论的集合,前人通过 不断地实践,总结出来的开发方法及开发过程,对我们现在的开发有很强的指导意义,敏捷开发的原则很多,其中印象最深的就是“经常发布可用的软件,发布间隔 可以从几周到几个月,能短则短”,以及“可用的软件是衡量项目进展的主要指标”,我的理解是敏捷开发强调的是“小而美”,定期地完成一个小版本的软件项 目,比只是最终发布产品要好的多,这样也有利于产品的迭代,敏捷中的Scrum方法论,看起来简直就是无与伦比:要做什么->当前要解决什么 ->冲刺->得到一个增量版本。分阶段地不断递进地解决问题,但是敏捷也有很多的弊端,敏捷宣言不是圣旨,不必完全尊从,就像是Scrum, 实际执行的时候也不是看上去那么美好,在一个复杂的项目中,往往不能带给团队更多的惊喜,所以,敏捷慎用。
具体到软件的设计与实现,从软件工程的角度来看,并不是一上来就是进行实际的编码,而是进行诸如需求分析、写设计文档等相关的编码前的相关准备工作,第一步就是写设计文档(Design Document),然后针对这个设计文档进行团队内部的复审,然后再进行开发,如果在编码的过程中还会遇到一些意想不到的问题的时候,和PM进行交流,写完代码后,按照原先的设计文档和代码指南进行自我复审,重构代码;接下来写单元测试,如果可以,那么可以发布一个简单的小程序,在少数用户的范围内使用,方便及时地发现问题。好像到了这里,如果没有什么大的架构或者程序上的问题的话,那么一个相对比较完整的软件版本就已经实现了,但是在软件工程中还有一个问题往往会被忽略,那就是“用户体验”,我们都知道一个界面美观的设计有的时候也会给一个软件增色不少,使得用户的第一个直观的感受就是这个界面首先是吸引人的,做好一个用户体验,首先需要明确这个软件的受众或者说面向的是什么样的群体对象,根据具体的群体是喜好进行针对性的设计,才能更好地满足用户。
最后来说说软件测试,不仅仅是这本书中,几乎所有的介绍测试相关的书籍,都对测试讲得很多很多,说到测试,大家最熟悉的就是黑盒、白盒测试等,要写好一个不错的测试,首先要有一个好的测试方法,如:Unit Test、Function Test、Structure Test、System Test等等,测试方法多种多样,关键是怎样找出合适的测试方法最好地完成测试,怎样写一个Test Case?这个好像很麻烦,你必须首先知道并熟悉这个需求,要写出一个完整的测试过程,要考虑好测试的边界值的选取,极端情况下程序的健壮性,所以写好一个测试不简单。
学好软件工程也是不简单的。