作业要求:https://edu.cnblogs.com/campus/nenu/SWE2017FALL/homework/1449
第一次作业博客:http://www.cnblogs.com/jyj5951/p/7502748.html
回顾1:回顾本学期第一次作业[https://edu.cnblogs.com/campus/nenu/SWE2017FALL/homework/876]。参见 [http://www.cnblogs.com/easteast/p/7403491.html ],阅读其中给出的材料,并回答下面几个问题:
(1)回想一下你曾经对计算机专业的畅想:当初你是如何做出选择计算机专业的决定的?经过一个学期,你的看法改变了么,为什么?你认为过去接触到的课程是否符合你对计算机专业的期待,为什么?经过一个学期,你的看法改变了么,为什么?你觉得计算机是你喜欢的领域吗,它是你擅长的领域吗?经过一个学期,你的看法改变了么,为什么?
答:我在第一次作业中提到本科选择计算机专业是一个巧合,考研的时候因为没有自己更加向往的专业,所以选择了考取计算机专业的研究生。对于过去接触过的课程我的看法没有改变,接触的课程没有符合我对计算机专业的期待,但是在开学到现在的这段时间里我发现,自己可以在课外的时间学习一些自己感兴趣的课程或者知识,学习了再多的理论知识,没有经过动手实践都无法完全掌握知识。我现在仍然觉得计算机领域不是我擅长的领域。
(2)考取研究生,对照前人们走过的路和描述未来发展,现在的你自我感觉你已经具备的专业知识、技能、能力有哪些?离成为一个合格的计算机学生,在专业知识、技能、能力上还差距哪些?经过一个学期,你的看法改变了么,为什么?
答:对于这一问题的看我我还没有改变,对于研究生所具备的专业知识、技能,我觉得对于现在的我知识接触到了一些基础知识,还没有具备较多的专业技能,离成为一个合格的计算机学生我还差得很多。
(3)每天都是一个人生选择的十字路口,学术研究、工程项目、社会实践 (?) ,不同的选择有不同的努力方向。对照以上你阅读的前人们的经历,你的选择是什么?经过一个学期,你的看法改变了么,为什么?在这种选择下,你认为你相比其他同学来说有何优势,有何劣势?经过一个学期,你的看法改变了么,为什么?针对你的选择,你给自己的本学期的规划是什么?经过一个学期,你的看法改变了么,为什么?
答:经过一个学期,针对这一问题我的想法暂时没有改变,在研一的时候我会继续加强自己科研实践方向的能力,不过我想在研一结束的时候对于未来的发展方向和职业规划,我应该有了更加清楚的计划。
(4)你对这门课的期待是什么?你打算平均每周拿出多少个小时用在这门课上?经过一个学期,你的看法改变了么,为什么?实测结果,每周平均用在本课程上多少小时?
答:对于这一问题,经过一个学期,我的看法发生了一些改变,在个人作业的时候我花费的时间远远大于在第一次作业时自己打算的时间——12小时,在进行团队项目时除了召开立会所占的公共时间,我花费的时间就没有最初想象的那么多,在完成团队中自己要负责的任务所花的实际时间小于前期预计时间。
回顾2:
1、5个问题
作业要求 [https://edu.cnblogs.com/campus/nenu/SWE2017FALL/homework/876] 中提到:
通读《构建之法》,发布随笔1篇,要求列出5个问题,可以是读后不理解的,或者读后反对的。要求有观点、有证据或分析。字数不是直接的考核标准,但是要求长到能把观点表述清楚。
请回顾这5个问题,自己回答一下。当初的困惑是否还在,你现在如何认为,是更深的困惑么?
(1)我通过看第二章2.1.1“用户的标识通常是一个邮件地址”,有了这样的疑问,应用程序的用户我觉得是使用当前应用程序的人或者机器,而用户的标识不应该是代表用户身份唯一性的一系列数字序列么?为什么会定义其为一个邮件地址?
答:对于这一问题,我还没有很清楚的理解。
(2)通过阅读第二章第37页“那么这位工程师还是一个优秀的工程师么?”,我产生了一个疑问:一个优秀的工程师到底是什么样子的,他应具有什么样的品质或特质?
答:通过查询网上很多人的见解和自己的看法,我觉得优秀的软件工程师至少应具备以下几种品质:
1)周密计划,优秀的工程师一定有很好的一个计划性;
2)勤于动手,同样勤于思考;
3)善于总结;
4)开放的学习和交流态度。
(3)第三章44页提出多种解决方法并估计工作量,开发人员应如何估计工作量呢?用什么指标或标准,工作量大小有什么划分标准么?工作量是指拿到项目进行需求分析开始到测试完成无误交付给用户么?代码工作量应该用什么标准来评估呢,代码工作量是指从开始编码到首次结束编码么?
答:通过对工作量评估的查询,我了解到软件开发工作量与估算工作量经验值、风险系数和复用系数等项有关:软件开发工作量 = 估算工作量经验值 × 风险系数 × 复用系数,软什开发工作量的计算,曾有人提出以源代码行或功能点来计算,这些方法实施起来均有不少难度。目前国际上仍旧按以往经验的方式加以计算,国内各软件企业也是采用经验的方式加以估算工作量。为了更好地规范估算方法,建议可按照国家标准“GB/T 8566-2001软件生存周期过程”所规定的软件开发过程的各项活动来计算工作量。工作量的计算是按一个开发工作人员在一个月内(日历中的月,即包括国家规定的节假日)能完成的工作量为单位,也就是通常所讲的“人·月”。软件开发过程中既包括了通常所讲的软件开发,也应包括各类软件测试的活动。(摘自http://www.cnblogs.com/Chinasf/archive/2010/07/17/1779910.html)
(4)第13章263页写到我们要等到合适的时机再开始进行集成测试,那这个合适的时机应该是什么时候呢?是一定要等到一个模块稳定后么?如果不是那么这个时机应最起码满足什么标准?但软件工程的目标不就是要更早的发现并修正问题么,微软内部流行的伙伴测试虽然能够些许有效的解决这一问题,但是一些规模没有微软这么大的公司,没有条件为开发人员找测试人员,可能开发人员就是一部分的测试人员,在程序完成的过程中他们不能兼顾这两项工作,那这种情况下应如何确定新的模块加入系统的合适时机呢?
答:通过对集成测试的查询,我了解到根据IEEE标准集成测试分为四个阶段:计划阶段,设计阶段,实现阶段,执行阶段(实施阶段)。最后的执行阶段是安排在单元测试完成后,这样在进行单元测试后测试人员就可以尽早的进行集成测试,早些发现问题,解决问题。由于没有在公司实习的经历,所以我猜想对于职工人数较少的小型软件公司,在进行测试的时候,会从之前的编程人员中抽取一小部分人员进行软件测试工作。
(5)我们在合作进行项目时经常会将每个人的代码放在GitHub或者类似的网上源代码管理项目,但是我们当前上传的代码会在之后随时进行修改,不同的两个人负责的部分可能存在代码重叠,两人同时对代码进行修改,GitHub上就会出现覆盖的情况。但是如果我们等一个人做完一部分工作上传后另一个人再进行工作,这样单线程的工作方式就会影响项目完成进度,有没有更高效的代码管理方式呢?
答:在团队项目中使用GitHub可以使用分支来进行控制,主分支上的内容为最终的版本,不能轻易修改,如果需要添加新的功能,可以创建一个新的分支(副本),然后在此分支上进行修改,修改完成之后,与主分支进行合并。这样可以有效地保证代码修改的不重复性。而且我们组在进行团队项目前,已经将功能等进行了分类,编码人员之间代码的交叉率较低,每个人在进行代码编写前都将git上最新的代码版本进行了下载,在此基础上继续编码工作。除了可以使用Git进行代码管理,还可以使用SVN进行管理,由于没有使用过SVN,所以我对这两种方法的比较进行了查询,通过查询发现SVN可能更适用于项目管理, Git更适用于代码管理,希望在之后的工作学习中可以自己进一步体验这两种管理工具的不同和优劣势。
2、请根据本学期的学习、收获、困惑,再提出5个问题,可以是读后不理解的,或者读后反对的。有求有观点、有证据或分析。体验一下,这5个问题,是不是更有深度了 。
1)结对编程的过程中,对于两个人同用一台电脑的方式仍觉得不是十分习惯,这一工作方式是否会在实际工作中出现呢?
2)对于“用户的标识通常是一个邮件地址”这一问题我仍存在一些疑问,不太清楚所谓的用户标识是指哪个方面。
3)在团队项目任务分配的时候开始会出现任务分配不均的情况,那么在实际工作中是否会出现这一问题?组内任务分配时分配人员是否会根据每个人所擅长的方向有侧重的进行分配?
4)我对《构建之法》“迷思之五:要成为领域的专家,才能创新”中的一些语句存在疑问,书中提到“当时计算机科学家在搞COM……这样一些高难度的东西。事实上,正式……改变了世界。”我觉得可能领域内的科学家是起到了引领这个领域发展方向的作用,受着这个领域顶尖专业的影响,邻域内的其他专业的思想可能受到了一定的限制,有时候会忽略一些看似简单的创新点。
5)对于同一问题的不同想法,在均未实现且时间、资金、人力等有限只能够实现一种想法的情况下,如何选择哪个更好,更适合呢?
3、回忆整个学期,你有什么话想对后来的学弟学妹们说。
可能刚开始完成杨老师留的作业时会有些困难,需要花费比较多的时间,但是随着这门课的进行,你们会发现在学习这门课、完成老师的作业的过程中收获了很多,除了编码、文档方面的进步,最大的收获应该就是逐步拥有了工程人员的一些思想,逐渐养成了一些在以后的工作中行之有效的习惯。最后,切记:使用GitHub等工具,不要让自己的代码被猫吃了。
4、如果重新来过一次,你打算做哪些(技术上,而不是态度上的)改变--基于希望得到什么样的更好结果,你才希望这样改变的;更重要的是,你根据什么估计这些改变会有预期的结果。
如果重来一次,我打算增强自己的编码思想和能力,在进行程序运行速度评估的时候虽然我的程序由于需要一个特定的dll文件无法在老师的电脑上运行成功,但是我在之后查看了其他人的程序运行速度,又多次运行了自己的程序,发现自己的程序的运行速度慢于前几名的同学,通过查看了个别代码发现他们使用的存储方法等要优于我所使用的方法,此外还有其他原因致使我的速度要慢,所以,如果重新来过,我想提高自己编程思想,多学习一些运行效率高且好的方法。
5、终于我们即将不再是师生。当你结束本课程,你和我就站在同样的位置上,我将不再基于学校授权和知识、经验 (年龄?)上的优势而对你的自由有任何干扰。除发布及成绩以外,我最后一次行使教师特权: 请问你有什么要对教师 (我)说的,建议、抱怨、希望……多谢。
首先要谢谢杨老师这一学期对我们的教导,通过这一学期的学习我了解了工程人员的一些思想和方法,其次最重要的是学会了守时这一品质。最后,在前几次完成老师步骤的作业的时候我总会对于题目问题存在一些疑问,希望老师在之后布置作业的时候可以语言更加简单,作业步骤的更加严谨、准确。
总结
1、代码总量,平均每周代码量。
代码总量 | 平均每周代码量 |
1084 | 90.3 |
2、博客字数总量,平均每周字数。
博文字数总量 | 平均每周字数 |
0 | 0 |
3、根据PSP,平均每周在本课程中所用时间(是的,请再回答一次)多少小时。
根据PSP平均出每周在本课程所用时间为11.797h。
4、进度条总结: 遍历每周知识点,以周为单位做如下表格。
起止时间 | 提交PSP例行报告时总结的知识点 | 现在回顾该周收获到的知识点 |
第一周 |
对《构建之法》这本书所介绍的内容有了一定的了解 对项目开发过程中要注意的地方有了清晰的认识 |
对软件开发有了初步了解 |
第二周 | C++编程相关知识:指定路径下文件搜索,文件读写,结构体等知识 | C++编程 |
第三周 |
文件重定向 使用VS进行效能分析 |
文件重定向实现 使用VS进行效能分析 |
第四周 |
C#编程知识,如:逆波兰式、文件写入 NUnit单元测试框架 |
C#编程 |
第五周 |
竞争性需求分析NABCD框架 Axure RP简单使用方法 Java环境和配置 |
竞争性需求分析NABCD Axure RP简单使用 |
第六周 |
使用Axure RP设计GUI Prototype 软件功能说明书内容 Java语言编程 |
GUI原型设计 软件功能书初步了解 |
第七周 |
GUI Prototype 软件功能说明书 Java知识 |
软件功能说明书编写 |
第八周 | 软件互测 | 软件互测 |
第九周 |
软件功能增删 软件功能说明书 Java编程 |
软件功能更新 |
第十周 | 软件功能书修订 | 功能说明书修订 |
第十一周 |
软件互评 postmortem会议 |
软件互评 事后诸葛亮会议 |
第十二周 |
软件功能说明书final修订 PSP总结 |
功能说明书final修订 PSP总结 |
时间分配堆积柱状图