前言
经过一个学期的学习,我对软件开发的整体过程有了一定了解,再看看自己的开发过程,跟工程上严密的步骤相去甚远,简直不堪回首。下面从软件生命周期的各个阶段对开发过程进行反思总结。
软件定义
软件定义时期的任务是:确定软件工程开发必须完成的总目标、确定工程的可行性、导出实现工程目标应该采用的策略及系统必须完成的功能、估计完成该项工程需要的资源和成本,并制定工程进度表。
——张海藩《软件工程学导论》
软件开发的总目标定老师给的作业描述中已经说明了,可行性也是不言自明的。我之前从未开发过一个软件,于是找了一个功能与老师描述相似的平台作为开发的参照——交大柠檬中的闲置物品模块。由于不具备太多软件工程方面的知识,我了解的开发软件的工具也很少,不假思索地就决定用Python内置的GUI库tkinter来开发了,现在想想还是应该在开发前多多调查,寻找有没有更好的框架和工具。至于完成这个软件所需要的资源和成本,我完全没有估计过,一方面是因为没有想到,另一方面是因为能力有限,想到了也不知道应该如何估计。
软件开发
软件开发时期具体设计和实现在前一个时期定义的软件。它通常由下述4个阶段组成:总体设计,详细设计,编码和单元测试,综合测试。
——张海藩《软件工程学导论》
我的开发过程很好地体现了在计算机系统发展的早期时代,个体化的软件环境下的软件开发过程:软件设计通常是在人们头脑中进行的一个隐含的过程,除了程序清单之外,没有其他的文档资料保存下来。
只有在开发时遇到一个问题实在无法解决时,我才尝试画一些软件结构图试图厘清思绪寻找可能的解决方法。现在我知道了,应该在动手编码之前先把软件结构设计好。我也身体力行地体会到了在开发后期调整软件结构有多费劲。
软件维护
维护时期的主要任务是使软件持久地满足用户的需要。
——张海藩《软件工程学导论》
根据室友和检查我代码的同学的反馈,我(并不是很及时地)对错误加以了改正。在开发的上一个阶段,我实现了作业要求的基本功能,但还有些我自己想加的功能没来得及实现,在后续的迭代中也进行了实现。在开发的最后阶段,作业又有了几项加分需求,我也根据自己对需求的理解,在能力范围内实现了一些附加功能。最后,我发现各个模块中有许多重复的代码段,显然没有达到“低耦合,高内聚”的要求。于是我运用了面向对象的方法,把软件中的页面分了几个大类,原来的类都从这几类中继承,并对整体的代码进行了重构。
总结
这是我第一次开发一个软件,虽然过程磕磕绊绊,但也算是收获了一个结果。以后要是还有机会开发软件,相信我会做得更好。