软件工程
百年Coding小组成员简介:
PM 贾伟
博客地址:http://www.cnblogs.com/coolcrow/
程序开发人员:
吴翰雄
博客地址:http://www.cnblogs.com/metalcrash/
邓嘉
博客地址:http://www.cnblogs.com/freestyle-sn/
潘学
博客地址:http://www.cnblogs.com/DOOM-px/
闫生辉
博客地址:
测试人员
祁彦博
博客地址:http://home.cnblogs.com/u/Phoenixcaicai512/
刘牛顿
博客地址:http://home.cnblogs.com/u/fenglq/
2、在软件工程的实际实践中
我们针对每个人的能力的不同给每个人分配了不同的任务,其中有能力的人就多做一些东西。做一些别人做不了的东西,
这些东西都由PM来安排,合理的分配给每个人。
因为项目被分配成了很小的部分,所以每个人都要给出齐全的文档,具体的技术细节很多东西都参考文档来解决。
下面是文档的部分展示:
3、下面是几张项目进度的展示图:
项目测试(见视频)
4、团队人员贡献详细
5、软件特色:
我们的爬虫在达到了基本的爬虫功能上特色是可以根据网页的质量对网页进行筛选。
筛选的严格程度可以自己调节。
6、项目bug
1、 由于下载延迟,实际的访问链接数下载数要比用户的输入限制多一些。
2、 引用字段做得不理想。
7、项目M2阶段进步
首先老师的要求是我们爬取的数据都要在数据库中有记录信息,这样可以方便Pipeline组对我们爬取信息的处理及利用。我们在数据库中要存储对网页的描述
页面ID, URL, 页面编码, 页面类型, 页面内容, 上次爬到此页面的时间, 页面更新时间, 页面标题。
在M2阶段中,我们在爬取过程中对数据信息进行了记录和提取,并且将其存入了数据库中,达到了老师的要求。
在完成了老师要求的功能过后,我们又根据M1阶段的总结和得到的意见,开始完善M2阶段的功能。
问题1:
M1下载网页和PDF时是通过URL中是否包含html或PDF后缀来决定是否下载的。
M2阶段对其进行了解决,达到的效果是只要能得到URL地址就能根据URL地址来判断是否是符合下载要求的资源类型。
问题2:
M1阶段对网页下载时没有保存URL地址,不能再次找到原来的网页。
M2阶段将URL地址存入到了数据库中,并和文件名相对应,方便查找源网页。
问题3:
M1阶段对网页的外链处理不理想。需要对外链网页建立模版,否则会下载一些无关网页。
M2阶段我们在下载外链网页后会对网页内容进行分析。用一个关键字字典去匹配网页内容,达到一定要求的网页才允许下载。
其中这部分花了大量时间。
接下来是在M2阶段的实际测试过程中发现的比较重要的bug是在M1阶段上的完善。
1、对网页编码的处理。
M1阶段只负责对网页下载,不涉及网页内容的解析。所以么有遇到编码问题。在M2阶段因为要对网页内容进行解析。所以我们增加了处理网页编码的功能。
2、对服务器拒绝下载的处理
很多服务器为了记录用户的浏览历史,会在浏览器中添加记录(cookie)。而我们的应用程序是不会下载这个东西的。
所以就会发生一个cookie reject的问题。使某些网页下载失败。
8、
在这次软件工程课中,我们大家一同创造了一个软件。见证了一个软件的实现过程。这是我们以前的课程上都不曾经历的,在软件工程课上我们又了很多的第一次;我们第一次有角色分工,第一次有组会,第一次有专门的测试人员。第一次接手一个不完全不曾了解的项目,然后要在规定时间内完成,项目有项目的目标。而目标又是那么的明确,在项目开始之前总是想把它分析得很透彻,让每一步都确定化,但是真正的实现过程中又有那么多的不确定性。之前的考虑不是没有用,而是总有无法估计的东西在发生。就像老师要求阅读的文章和书籍中提到的那样,既然有那么多的不确定性,那么我们开始时是否需要计划,因为总有无法考虑到的东西那么为什么不直接去做。在这次的软件工程实践中我们M1阶段的前期实际试验了一次,发现这样是不行的,差点导致M1阶段没有顺利交付,M1开始阶段我们希望做到敏捷开发,一切计划都没有,开始时完全没有目标,像一群无头苍蝇,还好及时调整,对项目进行了规划,先分析软件要有哪些部分构成,自顶向下的分析,之后再去实现某个细节,在感受到计划的甜头后又想考虑得十分细致,最后发现在特别细小的地方还是敏捷开发更有效率,完成得更快。
接着是在项目管理上的感悟,这次的软件不像以前的课程设计,课程设计的东西各个部分都要自己实现,但是我们这次的做的是软件,完全没有必要各个地方都去自己实现。需要的是一个软件的框架。根据这个框架往里面填充东西,和实现细节,这样慢慢的软件就变得丰满了。在这次的软件工程中,我们很好的实现了工程管理,开发人员完全不需要知道整个软件的架构,只需要去做他们自己的那部分任务。比如做数据库开发的人员只有写了对数据库操作的程序,而其他的开发人员只要调用接口就行了。他完全可以不知道在哪里进行了调用,他需要某项功能的时候只需要去查阅,那个细节部分开发人员的文档即可。
最后是对软件工程课的一点建议,在整个软件工程课上我们一直都是在学习和实践,总感觉少了点什么。最后想了想我发现少了个“举例”的过程,如果把软件工程课比作一个课本,那么他是一个没有例题的课本。我们平时上课就是去听老师说要做什么,怎么做好像都很少有讲,好多时候我们都有种摸着石头过河的感觉,这种感觉很痛苦,我们在听了要做什么过后就是去实际作了,中间总感觉有一定的跨度,在这之前如果能举个例,那就太好了,微软有那么多的成功的项目,当然微软也有失败的项目,我们在课上可以看一下这些项目每个阶段都是怎么做的这样课会变得有趣许多,大家可以对这些项目的优点进行讨论,缺点进行总结,找到适合自己的软件开发的方法,看他们的验尸报告,这样的软工课是我更加喜欢的。