一学期的软件工程课程就要过去,在一学期的学习中,我学习了瀑布模型、UML描述的静态模型、动态模型、敏捷开发等软件工程中重要的理念;而在一学期的实际训练中,我独立完成了个人项目《一个简单的四则运算计算器和出题系统》,和王奈同学一起完成了结对项目《一个进阶的四则运算计算器》,作为组长带领组员完成了团队项目《工大助手》教务信息分析系统。

软件工程是一门研究用工程化方法构建和维护有效的、实用的和高质量的软件的学科。它涉及程序设计语言、数据库、软件开发工具、系统平台、标准、设计模式等方面。随着用户需求的复杂化,软件系统的构建规模也不断膨胀,开发难度不断提升,所以需要引入工程化方法来提升正确性和效率,这和在计算机组成原理中处理器设计的工程化是一个目的。

在上软件工程这门课之前,我们也会完成一些比较复杂的项目,但是一般实现功能后项目的开发生命周期就此终止了,最多为项目写一些功能说明的文档;而在软件工程这个领域,我们需要引入很重要但是比较繁琐的软件测试环节。测试主要分为黑盒测试和白盒测试。黑盒测试和我之前认知的测试功能是否实现的测试一致关心的是对用户需求的实现,而且测试起来也比较容易,在不同条件下不断测试程序的行为就可以了;新接触到的测试方法是白盒测试。白盒测试又称结构测试、透明盒测试、逻辑驱动测试或基于代码的测试。白盒测试是一种测试用例设计方法,盒子指的是被测试的软件,白盒指的是盒子是可视的,你清楚盒子内部的东西以及里面是如何运作的。"白盒"法全面了解程序内部逻辑结构、对所有逻辑路径进行测试。"白盒"法是穷举路径测试。在使用这一方案时,测试者必须检查程序的内部结构,从检查程序的逻辑着手,得出测试数据。贯穿程序的独立路径数是天文数字。采用什么方法对软件进行测试呢?常用的软件测试方法有两大类:静态测试方法和动态测试方法。其中软件的静态测试不要求在计算机上实际执行所测程序,主要以一些人工的模拟技术对软件进行分析和测试;而软件的动态测试是通过输入一组预先按照一定的测试准则构造的实例数据来动态运行程序,而达到发现程序错误的过程。在动态分析技术中,最重要的技术是路径和分支测试。在实际的应用中,我为了在结对项目中应用白盒测试的方法,特地把C++项目重新用Java实现并用JUNIT框架完成了对各个模块的单元测试。

此外,我学到的另一个重要概念就是迭代开发,并且我在开发中也体会这一点。迭代定义为:如果算法的定义没有包含算法本身,则叫做迭代法。迭代式开发也被称作迭代增量式开发或迭代进化式开发,是一种与传统的瀑布式开发相反的软件开发过程,它弥补了传统开发方式中的一些弱点,具有更高的成功率和生产率。迭代式开发方法中,整个开发工作被组织为一系列的短小的、固定长度(如3周)的小项目,被称为一系列的迭代。每一次迭代都包括了定义、需求分析、设计、实现与测试。采用这种方法,开发工作可以在需求被完整地确定之前启动,并在一次迭代中完成系统的一部分功能或业务逻辑的开发工作。再通过客户的反馈来细化需求,并开始新一轮的迭代。在我们的团队项目中,出现了多次的迭代,我们的最初的设想是搭建服务器使用nat穿透完成对教务的外网访问,然而多次尝试失败让我们改变策略放弃了MVC模式,采用了单客户端的方法,这里便开始了一次新的迭代;我们先后采用了两种不同的C#与python交互的方式,这又有两次新的迭代;在迭代中我们还有新的需求被发现,也有需求被放弃,这个过程很有收获,和真实的工程环境是相一致的。

综上,软件工程课程丰富了我在软件开发理论体系方面的知识,也让我在实践中得到了锻炼,令我受益匪浅。