关于高校内软件开发流程的思考

学习软件工程的方法已经有一段时间了,深深的感觉到,一个软件的成功与优秀的开发流程有着必然的联系。近期思考了很多关于软件开发流程方面的东西,也查看了一些相关的文章。今天就在这里理一理思路,一来方便自己以后查看,二来还可以接受网友们的批评和指正。正因为是新手所以还有很长的学习道路要走。

学校中的项目除了科研项目以外,大多都是通过用户提出需求、我们提供方案、修改方案、签署合同、进行开发、测试、提交成果这个流程来进行的。仔细阅读了InfoQ的《为什么有些公司敏捷实施不成功?》这篇文章后,我个人觉得敏捷开发的相关方法和原则,针对学校中做项目的流程而言,并不能全盘照搬。所以以下我写的流程还只是传统的软件开发的方法。

提供方案
这一部分是在用户提出需求后,我们对用户需求的细节部分进行估计、同时也通过查找相应的技术文档,制定出初步的技术路线。在软件工程里我觉得这部分的工作更像是做一个概要设计。当然我们的估计存在相应的偏差,但大多数情况下在这个阶段,用户的需求也是模糊的。用户也仅仅能够说出大概他们想要一个什么东西,更深的需求用户自身也不是很清楚。可悲的是在这种情况下,双方就要签署相关的合同了,然后项目宣布启动。

开发阶段
由于用户的需求不明了,合同可能写的含糊其辞,用户脑中的系统,和开发人员脑中的系统有可能是两种截然不同的东西。但有一点可以肯定。这时候方案中的大体思路是没有问题的,开发人员在上一部分中提出的需要解决的关键技术是基本没有问题的。毕竟技术这东西,只有开发人员才晓得。而事实上,在高校,开发人员往往是学生,没有什么经验。提出的关键技术大多都是看资料上是什么样的,就写什么。所以必须经历下一个重要的步骤:关键技术核实与突破

1.关键技术核实与突破
针对方案中的关键技术,开发人员需要尽可能的进行使用,通过构建相关的例子程序进行技术突破,俗称把路子打通。例如关键技术中有一条:利用SQL Server2005 构建多数据库联合查询的框架。这个功能需要哪些技术进行支持?是有关分布式的技术、还是SQL Server本身是否提供了多数据库的联合查询,毕竟专家给出的建议是:如果一个事情数据库本身可以完成,就不要把这个事情交给应用程序来做。在做关键技术突破的过程中,代码编写规则相对松散,其目的是做到关键技术的快速突破。有时候这个过程可能要花一点的时间,我个人认为是值得的。

2.快速构建原型系统
当关键技术全部突破以后,开发人员需要讲这个分散的技术结合起来,来构建一个原型出来。原型的构建,最主要的工作是模块的基本划分,系统构架的建立。为什么要构建原型,一来,这时候开发人员心里也没有底,到底能不能完成这个东西。二来,用户的需求还是不明确的。我们需要用原型系统来进一步挖掘用户的需求。

3. 用户交流
通过原型系统的演示,与用户进行交流。毕竟:用户只有看到他不想要的东西,他才知道自己想要什么。这时候需要落实合同中的每一个需求到底后面有多大,双方的对合同中的认识到底有没有差异。当然前期的合同签署时,这个差异已经消除的差不多了,但此时要进一步落实,用户到底想要什么功能,怎么操作,什么界面,怎么管理流程等等。在这一阶段需要双方建立需求控制组,这个组的作用是对用户的需求进行挖掘,同时也进行控制。大概看过原型后,用户总是会冒出一些新的点子,这时候我认为,要对用户提出的需求进行分析,是否是合同中的涉及项,技术上是否可行等等。对用户的需求即尊重、又限制才是最高境界。

4.总体设计
有了前期工作的铺垫,用户需求相对明朗。系统基本框架、模块划分的工作也相对容易。这时候重新进行系统的总体设计是十分重要的。这时候开发人员对系统的认识也会比较有把握。需要注意的是测试人员在这一阶段就需进入,目的是要让测试人员做到对系统的构架有清晰的认识。这一阶段完成系统的总体设计文档、测试大纲。当然这部分完成后要与用户做简单的沟通。

5.详细设计
基本的技术路线已经打通,开发人员对关键技术的使用已经有了把握,对于每个模块下,有多少个类,设计模式是怎样的,如何通信等问题都做详细的设计。每个类的参数传递是怎么样的,模块与模块之间的通信时怎么完成的。一般而言现在开发都是以组件开发为主,做到界面代码与功能代码分离,模块间代码分离等等。这一阶段开发人员要完成软件的详细设计书,测试人员要开始着手单元测试用例的编写。

6.代码编写
针对代码的编写与管理,是这部分的重点。开发人员为前期详细设计中的每一个类中的函数体添加内容,使之成为真正的函数。当开发人员编写完部分函数后,代码需要走以下基本流程:代码调试、代码回顾、函数的单元测试、模块的伙伴测试、代码的效率测试、最后完成代码的提交。代码调试,主要是开发人员来做,将错误消除。代码回顾主要是开发人员和测试人员一起回顾,针对代码的命名规范、代码的逻辑结构、代码注释的编写、代码解释文档的编写等。函数单元测试、主要是测试人员对代码的输入输出进行检查。代码效率测试、需要测试人员对代码的效率进行监控。最后由测试人员提交代码块。

7.代码集成
将代码块进行集成,测试人员进行集成测试,注重模块与模块间的调用效率等问题。对于组装好的系统,测试人员就要开始做系统测试了。此时针对系统测试,测试人员需要制定详细的测试计划、需要建立测试测试用例的编写、周报制度和BugList管理。测试人员与开发人员的交互在一个测试用例的4步曲中完成。首先,测试人员编写测试用例、然后测试人员按照测试用例对软件进行测试、接着测试人员将Buglist提交给开发人员修改、最后测试人员对修改后的程序进行复测。

8. 性能及压力测试
此部分测试人员借助相关的测试工具,进行性能测试和压力测试。

9. 发布系统
首先系统需要构建安装包,编写相关手册说明。此时系统正式进入发布阶段、首先发布的版本叫做阿尔法版。该版本由所有开发人员和测试人员一起使用,发现Bug,进行修复。在阿尔法版完成后、发布贝塔版。这时候就可以将该系统发放给用户体验,收集用户体验信息。做出相应的简单调整。

10. 项目验收
提交相关源代码,技术文档,开发文档,测试文档,安装手册,用户手册,配置手册等。

至此整个开发结束,小小一个软件需要经历如此复杂的过程,才能够让方便用户的工作流程,完美的帮助用户解决现有的问题。这不得不说是一个值得骄傲的过程。嘿嘿,以上是我将自己的思路进行整理的结果,不一定正确,还望大家多多批评指正。

                                                                                                                                                       Vincent

posted @ 2010-01-27 22:16  Vincent's code  阅读(260)  评论(1编辑  收藏  举报