个人阅读作业——软件工程M1/M2的总结
临近学期末,本学期的软件工程课也已经结束了,在此我对软件工程课中,我们团队M1和M2开发阶段中,我做的工作做一个总结
我是DEV,主要工作是等着上级给我分配任务,但是很多时候如果这个活我不干,其他人就干了,导致我的贡献分就危险了,所以多数时候需要抢活干,主动点才有饭吃。
在M1阶段,我们多次开会,重点讨论了究竟要加什么功能。这是一个非常艰难的过程,因为爬虫软件的功能很明确就是爬取链接及其所有子链接,而这个功能已经被实现了,所以我们讨论的重点就是如何花式爬取网页。最后我们定下来,要实现多种爬取方式,比如关键字爬取等,同时还要对爬取到的各种数据做好管理工作,比如按热度排序等。
当然我们这个阶段犯了一个比较大的错误,由于我们的用户——下一个小组没有找我们强调他们的需求,导致我们蹭蹭蹭做出来之后,我们唯一的用户表示这东西不好用啊,我们还要爬ppt啊。虽然他们没说,但是应该做好用户需求分析的应该是我们,用户才是上帝,所以我们默默把这个锅接了。
具体的程序编写,我负责的模块还是比较顺利的,并且同时我也发现了链接传递时存在中文会变成乱码的问题,最后使用统一的UT8编码解决了这个问题。由于不太信任我们的TEST,所以我自己也对我自己的模块做了许多测试,确保基本功能无误才嵌入了代码。
M1阶段完成后,我们的爬虫软件也算功能众多了,看着我们做出来的软件,心里还是有点小激动的,尤其还是得到了老师的赞许。
在M2阶段,我们吸取了许多教训,比如提前询问了我们唯一的用户的需求,再三确认后才开始工作,确保完成我们唯一的上帝的要求。
M2阶段我主要负责修改网页的储存方式,因为之前是直接把文件命名为其uri的,这样存在许多问题,比如文件名过长无法在本地储存,存入数据库时会造成乱码等等。我一开始想通过将文件名做HASH函数处理后再储存的问题,后来放弃了这个想法,直接给每个网页分配一个唯一的ID,使用这个ID号作为文件名,很好地解决了这个问题。
同时我还协助修改了许多bug。
http://www.cnblogs.com/wyjbjl/p/4028189.html
这是以前提出问题的博客链接。
1.像这一类书籍,怎么阅读才更有效?
以我这几年看编程书籍的经验来说吧,我第一次看C++教程时,基本只是通读了全书。真正到要写代码时,还是没有什么概念。但是比如作
业要求我写具有某个功能的程序时,我再去翻编程书,这时边看边写,就基本可以记得下来。很多时候,当自己亲自去从头写程序时才会
2.命名规范为什么是加前缀?
其实现在我还是习惯于加后缀,比如tableA,它的数量我就喜欢命名为tableA_num,因为在使用CB,VS一些编程软件的时候,打出前缀就可
以自动找到对应的变量。加后缀时的逻辑一般是这样的,先是这个变量的“名字”,再是相应的“成员”,比如“tableA_num”表示的就是
“tableA”的“数量”,由于我喜欢先搞清楚这个东西“是谁的”,再搞清楚这个东西“是什么”,因此我喜欢使用加后缀的命名方式。
前缀表示的逻辑是这样的,先是这个变量的“成员”,再是相应的“变量”,比如“num_tableA”表示也是“tableA”的“数量”。这种命
名方式先搞清这个“是什么”,再搞清楚这个“是谁的”。这样做的好处就是,起码不会搞错这个变量的类型,后缀命名就比较容易随手一
点,点错了类型。(说的好像前缀不容易写错一样。。。算了相对不容易一些),我觉得这种命名规范在合作编程的时候只要约定一下不要
搞混了,都是可以的。
3.对于一个已经有一定规模的软件,增加功能重要还是精简功能重要?
在做过我们团队的项目后,我对这个问题也有了自己的体会,我们拿到学长的程序功能非常简单,就是一个网页爬虫,给链接,就会循环爬
取其所有子链接。这当然不能算一个有一定规模的软件,因此增加其可用性是非常重要的,我们加入了许多新功能,比如关键字爬取等等,
同时也砍掉了学长的许多功能,因为他们根本就没有被实现。如果一个模块无法完全实现既定的功能,那么容易造成冗余,还是去掉比较好
。
4.程序质量控制的重要性?
就我本人而言,我还是非常重视程序质量的控制的。由于本人比较粗心,每写完一段,我都喜欢再看上一遍,确保没有问题。但是同时来说
,过于重视程序的质量,容易失去编程的敏捷性。我个人是程序质量优于敏捷性的,程序当场写当场debug比较好,因为刚写出的代码自己
比较熟悉,也比较好改,时间久了就不好说了。
5.DEV要不要TEST自己的代码?还是一直专注于写?让专门的TEST来做?
最熟悉自己程序的肯定是编写者,当程序比较大时,比如这次的电梯程序,涉及到许多类之间的协调,那么测试者就会十分痛苦,因为他要
先搞清楚程序的运行机理,那我才能给出比较好的测试用例,出现bug时,debug人员也要先搞清楚程序的机理才能debug。如果是编写者,
输出的数据发生异常时,他比其他人更容易想到这个错误的原因,那么是不是当程序比较复杂不好测试不好debug时,由编写者自己来做一
部分测试工作?
上面是当时自己得出的答案,经过项目的开发后,我又有了一些新的体会。毕竟做项目是有工期的,如果时间比较充裕,为了减小工作量,
DEV大可不必进行TEST工作,而专门交给TEST去做,出了问题再解决。这样的好处就是每个人的工作量都比较小,毕竟人还是要休息的。但
是如果工期比较紧的话,那DEV还是要做一些基本的TEST的,毕竟最熟悉自己代码的肯定是自己,自己TEST肯定效率是最高的。
产生的新的问题:
由于我们的用户就是下一个小组,因此我们主要要满足他们的需求。而他们的需求是会变的,比如我们写好了这个功能给他们,他们用着用着发现需要的东西又多了出来,这时候又要找我们重新加功能。也就是说,用户的需求不固定。但是各个小组间的沟通又不够,再时间不够的情况下,容易产生下一组怪我们没有提供足够的功能,而我们又怪他们不早讲,这种情况。
需求/设计/实现/测试/发布/维护
需求阶段:需求是来自用户的,了解好用户才是需求阶段最重要的任务,需求分析及其重要!否则做完了东西发现功能不能满足用户的需求,那是要返工的。
设计阶段:我们是在学长的代码基础上进行修改的,学长没有提供文档,因此应该读代码,确定软件各个组成部分内的算法以及各部分的内部数据组织。
实现阶段:实现主要指编码实现,编码是我们的老本行了,要说学到了什么,主要是编码时要写好文档,注意规格吧。
测试阶段:测试应该做好单元测试,写好测试用例,保证覆盖到尽可能多的情况。
发布阶段:发布前要再三检查,确保万无一失再进行发布,再发布一次可是很伤的。
维护阶段:一个模块出了问题或是进行更新时,修改的时候要注意和他有关系的模块,注意是不是要同时修改。
个人阅读作业——软件工程M1/M2的总结的更多相关文章
- 个人阅读作业 --软件工程M1/M2总结
软件工程M1/M2总结 写在前面的话: 这学期的软件工程伴着考期的展开逐渐落下帷幕,回顾这学期的软件工程,我感觉我的热情在一次又一次的失落中逐步消耗殆尽,每个人对于这门课的体验都会有所不同吧,可以确定 ...
- 【个人阅读】软件工程M1/M2阶段总结
这次作业是好久以前布置的,由于学期末课程设计任务比较重,我在完善M2阶段的代码的同时又忙于数据库的实现和编译器的实现,一度感觉忙得透不过气来....到这些都基本完成的时候,会看自己以前的阅读心得,觉得 ...
- 【个人阅读】软件工程M1/M2做一个总结
1.以前博客链接 http://www.cnblogs.com/penglinjiang/p/4027850.html http://www.cnblogs.com/penglinjiang/p/40 ...
- 软件工程M1/M2总结及阅读作业总结
一.软件工程M1/M2总结 写下这篇总结的时候,我们的软件项目尚未完工.虽然尝试申请了延期答辩,但最终未能成功.这意味着,我们的项目能否正常发布已经处于了一个微妙的状态.可能可以,也可能不可以.只能尽 ...
- 软件工程M1/M2总结
也不分M1/M2了,就从头到尾的梳理一下这学期的软工课吧. 第一节课,老师就稀里哗啦说了一下这学期要怎么搞,什么个人项目啦,结对项目啦,团队项目一二啦,还要组队啊什么的,然后风风火火的组队. 个人项目 ...
- 【个人总结】软件工程M1/M2总结
个人博客连接: http://www.cnblogs.com/lwq12061168/p/4094252.html http://www.cnblogs.com/lwq12061168/p/40284 ...
- 【个人阅读作业】软件工程M1/M2总结
链接:”看<快速软件开发>的五个问题“ http://www.cnblogs.com/leiyy/p/4027759.html 一.较为明白的问题 1. 在文章的第一个关于Square_T ...
- 个人阅读作业 The Last
对于软件工程M1/M2的总结: 假象-MO 在团队开发的前期,我感觉自己其实给了自己很多的期待,因为一直希望着自己可以在团队中担任一个角色,用自己的力量为团队多做事情,也给了其他人一些假象,那就是看起 ...
- final个人阅读作业
一.软件工程M1/M2总结 1.M1阶段总结: 我们团队的软件工程开发是按照前后端来分别开发的,我是负责后端的.我们的项目是做一个北航的社团平台,是一个网站.在后端我们使用的是ruby on rail ...
随机推荐
- 30个最常用的Linux系统命令行
1.cd命令这是一个非常基本,也是大家经常需要使用的命令,它用于切换当前目录,它的参数是要切换到的目录的路径,可以是绝对路径,也可以是相对路径.如:cd /root/Docements # 切换到目录 ...
- 【Beta Scrum】冲刺! 3/5
1. 今日完成情况 人员 学号 分工 是否完成 完成情况 胡武成 031502610 完成登录注册api,协助web端完成api N SDN课程实践加上课缘故,仅仅写完了登录注册的逻辑判断内容,但是短 ...
- sql语句如何将多个空格字符替换成一个空格字符
很多时候,数据表中某个字段的值会带有一个或多个空格字符串的情况,面对多样化的需求,我们可能需要将这些空格字符串去除,当然,这很好说,我们可以直接用replace(' ','')将单个空格变成无就可以了 ...
- css 位置居中篇,flex布局【转】
最近看到沅老师的博客,关于flex布局的,觉得不错,http://www.ruanyifeng.com/blog/2015/07/flex-grammar.html
- Android中长度单位和边距
Android表示单位长度的方式通常有三种表示方式. 距离单位☞px:表示屏幕实际的象素.例如,320*480的屏幕在横向有320个象素,在纵向有480个象素 距离单位☞dp:dp = dpi ...
- Tensorflow张量
张量常规解释 张量(tensor)理论是数学的一个分支学科,在力学中有重要应用.张量这一术语起源于力学,它最初是用来表示弹性介质中各点应力状态的,后来张量理论发展成为力学和物理学的一个有力的数学工具. ...
- NPM(包管理器)作用是什么?
NPM是随同NodeJS一起安装的包管理工具,能解决NodeJS代码部署上的很多问题,常见的使用场景有以下几种: a.允许用户从NPM服务器下载别人编写的第三方包到本地使用 b.允许用户从NPM服务器 ...
- Qt 编程指南 4 单行编辑控件
从 Qt 设计师界面可以看到常用的 Qt 文本编辑和浏览控件,包括四个: 其中单行编辑控件 QLineEdit 和 普通文本编辑控件 QPlainTextEdit 都是针对最普通的 C++ 字符串编辑 ...
- metamask源码学习-background.js
这个就是浏览器后台所进行操作的地方了,它就是页面也区块链进行交互的中间部分. metamask-background描述了为web扩展单例的文件app/scripts/background.js.该上 ...
- oracle远程物化视图
一.创建远程物化视图日志 源端: CREATE MATERIALIZED VIEW LOG ON tozwdb.test tablespace tozwdb_data WITH ROWID; 二.付权 ...