个人阅读作业——软件工程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 ...
随机推荐
- Docker学习—Docker简介
什么是Docker Docker 是一个开源项目,诞生于 2013 年初,最初是 dotCloud 公司内部的一个业余项目.它基于 Google 公司推出的 Go 语言实现. 项目后来加入了 Linu ...
- windows防火墙安全设置指定ip访问指定端口
场景摘要: 1.我有三台腾讯云服务器 2.我日常办公网络的ip换了 3.我在腾讯云上面改了安全规则,也不能访问我A服务器的21,1433等端口 4.开始我以为是办公网络的安全设置问题 5.我进B服务器 ...
- Kubernetes的搭建与配置(一):集群环境搭建
1.环境介绍及准备: 1.1 物理机操作系统 物理机操作系统采用Centos7.3 64位,细节如下. [root@localhost ~]# uname -a Linux localhost.loc ...
- 数据分组、统计 case when then else end
case when 对表进行条件分组 case简单函数 case age when then select name , sex , age , ( case age /*when 条件成立 ...
- Deepin系统手动安装oracle jdk8详细教程
Deepin系统手动安装oracle jdk8详细教程 oracle官网下载jdk压缩包,使用 sudo tar -zxf jdk***解压文件,我放在在了home/diy/java/jdk路径下. ...
- Django 通过 session 保存个人信息
通过 session 保存 个人 信息 登录的视图函数中: def login(request): ''' 登录 ''' err, user, pwd = '', '', '' if request. ...
- pandas中的数值计算及统计基础
import pandas as pd import numpy as np df = pd.DataFrame({ 'key1': [4, 5, 3, np.nan, 2], 'key2': [1, ...
- glVertexAttribPointer 用法简介
在内存中采用交叉模式存储,向gpu传入顶点数据的方法 GPU: #version 100 attribute highp vec2 aPosition; attribute highp vec2 a ...
- Echo团队Alpha冲刺随笔集合
班级:软件工程1916|W 作业:项目Alpha冲刺(团队) 团队名称:Echo 作业目标:完成项目Alpha冲刺 代码规范.冲刺任务与计划 Day 0: 代码规范.任务及计划 冲刺随笔 Day 1: ...
- C# 语法二 值类型引用类型
1.值类型 2.引用类型 一 值类型 值类型存放在栈中,引用类型存放在堆中. 值类型有:数值.布尔.字符,例如:int i;bool i2;char cr='a'; 二 引用类型 大多数类型是引用类型 ...