1.以前博客的链接
http://www.cnblogs.com/zyctsl/p/4028006.html
http://www.cnblogs.com/zyctsl/p/4094011.html
2.请说明哪些问题现在自己已经清楚了,请阐明一下,是如何通过看书,实践,或者讨论弄清楚的
问题1:关于代码的管理问题
最近写软工和编译作业,随时都会有一些小小的改动,而且过一段时间后,自己都忘记了改了哪里,而且如果是自己写的还好,可以去读代码,但是像软件工程这种团队协作的项目来说,读别人的代码就感觉又费力气又费时间,当初我是觉得svn来管理太麻烦,不过现在想想相比于去重复的读代码,svn实在好用太多,而且每次修改还可以加上注释。所以现在我觉得,代码管理还是用类似于svn这种管理软件来管理比较好。
当然,还有可以用来管理程序的就是文档了,虽然大家都不太喜欢喜文档,当我们去读别人的代码的时候,我们最想先看的就是别人的文档和注释,这样可以节省很多时间,所以文档也是管理代码的很重要的一个方面,包括一些必要的注释,对于读代码,是非常有帮助的。
问题2:团队中分工与协作的问题
我觉得在这个问题中,PM的重要性就体现出来了,首先团队的分工,我觉得首先一个团队在分组的时候就要考虑到每个人各方面的能力,一个能力稍强的和一个能力稍弱的人一组可以以强带弱,但是把能力稍强的人分成一组,强强联手,然后在分配任务的时候,适当的有些倾斜,这种分组方式也未尝不可。其实这两种方式最终结果到底有多少不同,我们不好判断,但是我个人觉得差别或许不大。我们组分工,第一阶段是就近原则,宿舍离得近的同学一组,这样方便一起讨论,确实是,一般都是两个人一起写,类似于结对编程,效果也还行,但是这样就会造成有的小组的两个同学都有拖延症,最后项目的完成时间就会被延迟,所以这样考虑得话,在分工的时候还要考虑到个人的习惯。M2阶段我们组的分工大致是按照上面的第一种方式,其实感觉最终的效果和M1差别不大,有拖延症的还是会要拖到最后才去完成整个项目,所以现在关于这个问题我还是没有很清晰的认识,可能这和我们毕竟不是一个非常专业的开发团队有关吧,估计一个团队的组建会考虑每个成员的各方面的能力,来让这个团队整体的实力变得比将几个成员的能力简单的叠加的实力强很多吧。
3.哪些问题还不明白,请分析
不明白的问题有上面团队的分工和写作的问题,到底怎样去各一个团队分组,分工才能让这个团队的效率最高,让这个团队的能力最大化。
还有就是一个团队的组成肯定要考虑各方面的因素,这些因素到底有哪些,哪些又是最重要的?
4.产生了哪些新的问题,请提出
新的问题关于团队的就是上面提到的团队的组成和分工问题
关于项目和个人的:项目共享服务期问题,多个团队用同一个服务器,首先就目前的状况来看,服务器的cpu负荷一直100%,代码运行效率很低,而且不考虑这方面,考虑共用一个数据库的安全性问题,首先数据库的创建者拥有管理数据库的所有权限,而数据库的使用者只能有数据库的读取权限,不应该拥有更改数据库的权限,这样有很大的安全隐患。
5. 新的体会
首先,一个项目的开发,确实会自觉或者不自觉得遵循瀑布模型,可见这个理论的正确性,在之前对这些理论还没有什么了解。
还有就是软件开发中的银弹问题:
其实这个问题在当时,我个人认为软件开发的银弹就是那几篇文章中所说的面向对象编程的思想,现在有很多开源的api之类的共享代码,功能模块。所以开发一个项目变得较之前相比容易得多,但是任何事物都是有两面性的,代码共享的隐患就是代码的安全问题,当时邹欣老师也提出了这方面的质疑,这个问题确实存在,而且谁都不能保证某个网上找的开源代码中没有病毒或者漏洞,不管是多么权威的网站。之所以现在我仍然认为面向对象编程所带来的功能模块化,使代码可以得到共享的这种编程思想是软件开发的银色子弹,是因为它有这种可能,它在某种程度上具备了成为银弹的“潜质”,只是这种“潜质”就目前的发展状况来看还不可行。
6.各个阶段的收获
需求:需求的来源,需求一定来自于使用你的系统的用户,也就是你的项目的下一个阶段的开始。需求是整个项目的方向,只有首先得到需求,才能着手项目。
设计:设计是整个软件工程的核心,设计前一定要先了解整个项目的架构,采用正确的设计方法。设计的过程是一个从宏观到微观的逐渐细致的过程。
实现:实现阶段进度安排要尽量的均匀,任务分配要合理。
测试:测试要全面,考虑覆盖率,黑盒测试和白盒测试要结合进行。
发布:发布要准备充分,做好宣传工作。
维护:项目出现问题要及时维护,维护后要重新对相应模块做测试。