这个学期接近尾声,软工课也已经正式结课了,也该好好的给自己这个学期的软工学习做一个总结了。

软件工程,工程化的软件开发思想

什么是软件工程?软件工程是研究和应用如何以系统性的、规范化的、可定量的过程化方法去开发和维护软件,以及如何把经过时间考验而证明正确的管理技术和当前能够得到的最好的技术方法结合起来的学科(摘自维基百科)。

其实说白了就是把工程化思想运用到软件开发整个过程中,使得软件开发的流程更加高效,做出的软件更加实用。从需求分析、软件设计、软件实现到软件测试,每一个环节都应该采用工程化得方法来解决。在需求建模的过程中,我们需要采用UML语言,画UML图,采用面向对象技术来进行建模。在代码编写过程中,我们需要采用一些设计模式,使代码更加可复用性和可维护性更强。

当然,软件工程不是金科玉律,而是一种工程化的思想,绝不是要求我们在开发过程遵循条条框框,让我们的开发受到限制,相反是为了高效地开发出高质量的软件。这就好比古代的将帅学习兵法,不应循规蹈矩,而应掌握战争的一般规律,在战场上随机应变,灵活运用。

需求,不可忽视的重点

作为程序员,我们常常把关注的焦点放在代码上,而容易忽视需求的重要性。我们常常会看到对需求这样的描述,“一般来说,在软件产品的开发过程中,需求分析的过程要占到整个软件开发过程的40%-50%”。其实,这么描述是有其道理的。Standish Group 2009年对IT项目调查中显示,在所有失败的项目中由于需求问题而失败的项目占13.1%,比例最高,由此可见需求分析的重要性。在开发过程中,我们常常减少需求分析的时间用来编写代码,但是却忽视了,不明确的需求会大大降低编码的效率。在代码编写过程中,需求不明确或者需求的改变常常会导致开发后段时间出现大幅度修改代码的情况,最终的结果就是程序结构混乱,漏洞重重。所以,“磨刀不误砍柴工”,清晰明确的需求分析会让之后的工作事半功倍。

程序员也要懂设计

这句话是我自己切身感受,以前做一些网站就在这方面吃过亏,这次做微信的公众平台,让我感受更加深刻。有时候,决定一个软件成功的要素,不是写代码而是设计。此处所说的设计,不是指架构设计,而是界面设计和交互设计。界面和交互直接影响到用户体验,用户体验差的软件显然是不可能成为一款成功的软件的。这次项目二的开发中,我们的项目在第一次迭代后进行了反复的修改,其中很大一部就是交互方式和界面设计的细节。当时为了支持同一时间可以抢多个活动的票,需要修改交互方式,一种方案输入活动代号来区分每个活动,另一种是以直接点击按钮来抢票,但是实现起来会稍微复杂一些。幸好最终决定采用了后者,若是采用前者,后期发现输入代码太麻烦又要改成后者。交互设计的过程中有一条非常重要的原则就是,以用户为中心。从用户角度出发,怎样交互简单便捷就怎么做。

测试让软件更完美

软件测试唯一的目标就是为了发现软件的bug,好的测试不是印证软件的正确性,而是能够发现难以发现的缺陷,只有这样才能做出接近完美的软件。我们的公众平台已经投入实际使用,目前还未收到什么负面的反应,这与我们在上线之前大量的测试是离不开的。说到此处,却感到非常惭愧,因为我们项目的很多测试工作都是老师和助教来完成的。一方面,我们小组在测试上的投入确实不够多;另一方面,正如之前所说,程序员把精力都集中在了代码上,自己在测试自己编写的软件时,往往会习惯性按照逻辑去测试其正确性,并不能发现很多潜在的bug。我想应该也正是因为这个原因所以才会有测试工程师这个职位。

在课程学习上的不足

首先,课堂上所学的关于软件工程的知识没有及时复习,没有很好地将其运用到实际工程之中。在项目二开始时,由于大帝和磊哥去参加百度的比赛,留下一个简单的框架让我和帆姐来写微信交互逻辑部分。那个周末我们设计完成数据库,写出初版的微信交互,之后也是我负责修改交互逻辑这部分的代码,一开始没有运用设计模式,想到哪里写到哪里,觉得如果有问题之后再来改,后面代码越写越多,问题就出现了。由于需要改变交互方式,所以交互的逻辑这部分就需要改变,结果发现修改起来非常不方便,有时候自己都理不清思路。

还有就是感觉自己的提出问题能力不够,课堂上老师也反复强调希望学生能多提问题,其实有时候自己真想提出一些问题,但是却又不知道问什么好。可能自己一直以来都习惯了老师问学生的这种方式吧,等到要自己提问的时候却都不知道该问什么。有人曾说过,“提出问题远比解决问题难,因为解决问题是技术性的,而提出问题则是革命性的”。只有主动提出问题,才更有可能解决问题。

课程感想

这门课程确实让我了解了很多软件工程的知识,不敢说学会,因为自己确实没有能够将这些知识熟练运用。若要真正学会这些知识,还需要在今后的软件开发过程中,多尝试使用一些软件工程的方法来解决问题,在实践中运用,在实践中感悟。此外,在团队开发的过程中,从他们身上认识到很多自己的很多不足。磊哥的沉着稳重,帆姐的一丝不苟,大帝的追求完美,这些都是值得自己学习的。在整个团队开发过程中,大家相互配合,相互帮助,共同开发完成一个软件,这种经历是很难得的。