最终作业 - 软件工程实践总结(个人)

一、请回望暑假时的第一次作业,你对于软件工程课程的想象

1)对比开篇博客你对课程目标和期待,“希望通过实践锻炼,增强计算机专业的能力和就业竞争力”,对比目前的所学所练所得,在哪些方面达到了你的期待和目标,哪些方面还存在哪些不足,为什么?

回顾了一下准备篇,我当时在里面写到,期待:“能和队友一起做出厉害的作品,学会合作!”。而现在,在学期末回顾软工实践以来的点点滴滴,我觉得我的目标算是达成了85%——我们确实做出了比较厉害的软件(至少能看、能跑、能炫耀),以及我也确实能和同组成员较好的沟通合作,能及时更新GitHub、及时和其他模块负责人对接、有问题就提、有建议就听,总之做的算还行。那么还差15%在哪呢?从技术上来讲,我觉得我负责的部分还有相当大的改进空间,还有很多细节没有考虑清楚,由于此使得我们的产品显得比“厉害”差一点点;另一方面,到了后期beta冲刺的时候,我的脾气有些失控了,变得易怒和暴躁,给队友带去了负面影响,我觉得十分抱歉,这便是我在团队协作上还需改进的地方。

2)总结这门课程的实践总结和给你带来的提升,包括以下内容:

  • 统计一下,你在这门软件工程实践中,完成了多少行的代码

团队+结对+个人,非干货,累计代码量达7000行!我自己都觉得不可思议。不过这些很多不是纯原创,毕竟我听从了柯老板的建议,站在巨人的肩膀上大的代码。

  • 软工实践的各次作业分别花了多少时间?(做一个列表)
项目 投入时间
第一次作业——准备 180
第二次作业——个人项目 2370
第三次作业——结对一 1400
第四次作业——团队展示 60
第五次作业——结对二 2170
第六次作业——团队选题报告 0
UML设计 775
第七次作业——需求分析报告 1260
Alpha1 1080
Alpha2 790
Alpha3 35
Alpha4 675
Alpha5 0
Alpha6 885
Alpha7 390
Alpha8 0
Alpha9 390
Alpha10 1000
现场编程实战 900
第十一次作业-Alpha事后诸葛亮 185
第十次作业 - 项目测评(团队) 180
Beta1 0
Beta2 0
Beta3 311
Beta4 381
Beta5 411
Beta6 351
Beta7 351
Beta答辩总结 0
共计(/min) 16530
共计(/h) 275.5

  • 哪一次作业让你印象最深刻?为什么?

现场编程让我印象最深。那次现场编程,写了个登录注册就自以为掌握了pyqt的精髓,甚至前一天才刚看完州先生的教程,还没演练就直接被拉上了战场,那叫一个惨不忍睹啊。我还记得我在一个特别简单的功能上脑残了一个下午,明明几行代码的事情,我偏偏跟他们过不去,纠结了可久了。然后晚上的时候就神智不清了,继续那种盯着几行代码就是不知道怎么实现想要的功能的状态。那天,自然什么能看的成品也没有。经过那次实战,我彻底抛弃了算法(其实是被抛弃,张扬一人搞定后端),跑到界面开发组一起抗战pyqt。说来也可气,那次实战纠结不出来的,在alpha冲刺的时候我反倒一下子就想通了,当时怎么就转不过弯呢!

pyqt是一方面,我还十分在意另一件事。我记得当初在写马后炮的时候,我还自以为潇洒地抛了这样一句话:没有马后炮,一切都是自己太菜了。呵呵,我过后想了想,怎么可能没有马后炮!要不是我当时呼哧呼哧把界面设计得那么复杂,一下子整了个和我们的项目差不多复杂的界面,不然当时会做不出来?!我后来看了别人的,有的简单到只有一个网页!想来自己真是太年轻了,轻狂!

  • 累计花了多少个小时在软工实践上?平均每周花多少个小时?同时贴出开篇博客“你打算平均每周拿出多少个小时用在这门课上”的回答

别看我学习时间只有176小时,扣除学习时间、上课时间、吃饭睡觉(软工实践开始以来大概平均7h/天),剩下的2/3的时间是在打代码,软工的。算了一下历次个人PSP的时间,虽然不是很准,也有15886min了,按18周算的话,每周有882.6min花在软工实践上,14.7个小时/周,这样一平均,好像也不是很多?但是,我是个“记仇”的人,我只记得软工实践的作业是我花费最多时间的!没有之一!

看看,当初我多么有先见之明和觉悟。

  • 学习和使用的新软件

Mockplus

Xmind8

Typora

Axure RP8

TeamViwer

GitHub Desktop

StarUML

Visual_Paradigm_CE_15

  • 学习和使用的新工具

Qtdesigner

Leangoo

  • 学习和掌握的新语言、新平台

PyQt

  • 学习和掌握的新方法

比如学会了用UML、思维导图等来梳理思路,构建原型。

  • 其他方面的提升。

“更耐熬夜”,肯定有!

抗压能力 up

吐槽能力 up

协作能力 up

二、写下属于自己的人月神话——个人或结对或团队项目实践中的经验总结+实例/例证结合的分析

“不为系统测试安排足够的时间简直是一场灾难”

这句话在我们团队实践的时候得到了充分的检验,特别是alpha和beta冲刺的时候,真是越着急,bug越多。平时的话,大体框架和基本功能代码一般都花不了多少时间,然后大部分的时候都是在调自己生产的bug以及和别人代码整合的时候出现的bug。虽然有时候我会把测试调bug的部分时间归到编码阶段。

“Deadline是第一生产力”

这个嘛,虽然这样说太对不起团队的其他成员,但事实确实是,在离deadline四五天之前,即使每个人都被安排得清清楚楚,但是进度条在deadline-4之前基本是不会有什么波动的。然后等到快来不及的时候,再集中开始赶进度,所以大部分的成果都是在deadline前几天赶出来的,至少前端开发组是这样的(据我了解,张扬应该是每天都有产出)

三、对下一届实践的建议,或者对于开学初的你,对于大一的你,对于开学初的我,对于同期的TA们,对于后来的学弟学妹:

  • 你有什么想建议、告知和期许想要告诉他们呢?

对于我们这届来说,软工实践还是选修,怂,可以不选。但对于你们,不好意思,不管你们是否愿意都得选,这是必修。既然都得逃不过,那就好好干吧。不过呢,软工实践还是挺有意思的,前提得选好老师。别看柯老板老不正经,喜欢搞事情,跟着他混,保管你们能学到很多。另一个老师我不知道如何,但在实践这块,要求要比柯老板低多了这我是可以肯定的。所以呢,真的猛士,选柯老板没错;想水学分呢,就不建议了。

至于后面团队协作做产品的时候,会面临很多选择,比如选队员、选项目课题、选实现工具等等,自己好好斟酌,这里只有一句话送给你们:自己选的坑,哭着也要踩平。反正,不要随便放弃,但也要懂得及时调整。

  • 特别地,特别地,下一届要不要中途换队员(强制的、彻底的从一队换到另一队)?假设依旧是一个90+人数的大班

个人建议alpha冲刺开始之后就不要想着跳槽了,那个时候在自己组都混不下去,去其他组更是没地儿给你落脚。要干就踏踏实实的肝下去。至于是和团队成员合不来、结梁子,老套点:不妨从自身找找问题,服个软,退一步海阔天空,锻炼人际交往能力的大好机会。不过在我看来,我是靠技术说话的,在项目面前,个人恩怨都不是事,能把工作交接好就行。如果连这都有做不到,哎,想跳就跳吧。

  • 身在一个格外大的班级,竞争强劲,你认为一个组的人数应当在多少比较合适?

我们组是有10个人,个人觉得偏多,总有些人接触不到核心工作,只能在边缘写写文档。感觉一个组6~7个 差不多。

  • 个人/结对/团队作业应该控制在怎样的规模?

作业量的话我也不是很清楚,个人感觉这学期的个人和结对的作业量还行。团队的话,看每个团队的选题吧,感觉选题比较简单的,或者采用的实现技术比较简单的,工作量对比起来自然就减轻了嘛。

  • 这学期下来,你最感谢的人是谁?有什么话想要对TA说呢?

两个,郑愈明和张扬。郑愈明是一起结对、一起在前端奋战的战友;张扬则是对团队奉献超多的PM。两个人都很优秀,对我也提供了很多帮助,当然也是对我的暴脾气容忍颇多。啊,突然想起来,我跟张扬的聊天记录最后一条是我跟他怄气的时候发的气话,在此我郑重向他道个歉,真的,不是你的错,是我太糟糕了!

四、分析一下自己所处的团队。软件工程实践是大学里少有的认真的团队协作经验。《构建之法》上说团队的发展有几个阶段,你的团队都经历过么,最后到达了“创造”阶段了么?(参考《构建执法》第17章 人、绩效和职业道德)

萌芽阶段:肯定有啊,一开始大家都不熟,扭扭捏捏的,不敢多说一句话,分配工作的时候很“听话”。但同时也都很自信能一起把这个项目完成,做出了不起的成品。我记得那个时候我发消息的时候都相当客气,自然而然降低了自己的姿态。

磨合阶段:这个阶段,大家就慢慢开始暴露出自己的不足和一些缺点,进度慢啊、做事拖拉啊、产出有纰漏啊...我自己私下里也不是没有吐槽抱怨过其他成员,但是我也知道自己也没好到哪里去。所以在这段时期,我有在尽量克制住自己的坏情绪,不让自己的负能量在团队里面传播。

规范阶段:我觉得这个阶段我们像是有达到,又像是没有达到。可能是观察的角度不同的缘故,我觉得这个时候虽然分工明确了,大家的职能定位差不多就是那样了,但团队好像也瘫了一半的样子。因为项目到这个阶段基本上只需要团队内一半的人来完成,也确实只剩一半的人在开发了。

创造阶段:若是根据《构建之法》的描述,“高度自治”、“效率达到巅峰”、“知道为何而战并将注意力集中在如何创造、实现目标上”,那我觉得就开发的人来说,因为工具的熟练度和项目已经基本定型不会再有太大的改动的缘故,我们确实是有达到“创造阶段”的。

五、怎样证明你学会了软件工程?

  • 研发出符合用户需求的软件必须公开发布,有实际的用户,一定的用户量和持续使用量 (3 天后能保持10 - 100个用户);而不是: 做没有用户使用的软件

PM有公开发布在Github,不过暂时用户不怎么多就是了,后期可能会改进,至少把安装方便这一块解决了。

  • 通过一系列工具,流程,团队合作,能够在预计的时间内发布 “足够好” 的软件有项目规划/需求/设计/实现/发布/维护,有定时的进度发布 ; 而不是: 通过临时熬夜,胡乱拼凑,大牛一人代劳,延迟交付等方式糊弄

我们团队有使用leangoo进行任务分配和进度管理,我个人也算比较频繁地在上面反馈自己的任务进度,有时候要看别人的任务完成得怎么样了,也会直接在leangoo上看。

而且我们还使用了GitHub来管理代码,虽然还没能将其功能发挥到极致,但是有更新就会上传,我们还是有哒。

我们还有组织定期的小组会来汇报进度。

此外,摸着良心说,我们并没有“临时”熬夜,而是经常熬夜。也没有“胡拼乱凑”、“大牛一人代劳”。首先对于一个有着“全员强迫”美名得团队,我们是不会容忍胡拼乱凑的代码的,不论是测试还是其他的,胡拼乱凑的话会让代码变得乱糟糟的,我们表示不能接受!其次,团队内要称得上是大牛的话估计也就张扬吧,不过我觉得他仅靠一人之力要完成我们的项目还是挺吃力的,而且这样对他也相当不公平。

反正我们对待这个项目都相当认真!

  • 并且通过数据展现软件是可以维护和继续发展的。而不是 找不到源代码,代码无文档,代码不能编译,没有task/bug 等项目的发展资料

Github地址

现代软件工程 课件 软件工程师能力自我评价表

类别 具体技能和面试问题 现在的回答(2016级) 毕业找工作时
语言 最拿手的计算机语言之一,代码量多少?(偏web前端,PC/Mobile App) C/C++ 应该还不到万行
语言 最拿手的计算机语言之二,代码量多少?(偏后端,数据处理,网站后台,机器学习,等) python 几千吧
软件实现 (阅读代码的能力,实现,单元测试)你有没有在别人代码的基础上改进,你是怎么读懂别人的代码的,你采取了什么办法来保证你的新功能不会影响原来的功能?你在开发中碰到最复杂的bug是什么,你是如何解决的?这个bug出现的原因是什么,你在将来应该怎么去避免bug再出现? 在别人的代码上改进是常事,我一般要先看整体框架:有什么函数、实现什么功能、函数之间的调用关系是什么样的等等,先理清思路,再把代码运行一遍,根据运行结果+注释辅助理解。另外写一个模块,通过模块调用的方法尽量避免对原功能产生影响。最复杂的bug...忘记了,可能经验还不够
软件测试 (测试方法、测试工具、测试实践、代码覆盖率)你是如何测试你自己写的代码?你如何测试别人的代码?你掌握了多少种测试工具和方法?你写过测试工具吗?你如何对一个网站进行压力测试和效能测试?你如何测试一个软件的人机界面(UX/UI)? 之前没有软工的时候是run+debug。现在经历了软工实践,会用VS2017的测试工具了
效能分析 效能分析,效能改进 你写过最复杂的代码是什么?你是如何测量和改进它的效能的,用了什么工具,如何分析的? 最复杂的代码...忘记了,不过我肯定自己没有做过效能分析
需求分析 (需求分析,典型用户,场景,创新)你做过多少个有实际用户的项目,用户最多有多少?你的项目有什么创新的地方? 好像目前没有
行业洞察力 你最感兴趣的领域是什么?这个领域过去10年经历了哪些创新?你分析过这个领域前十名产品么?请分析一下他们的优劣,你要进入这个领域,应该如何创新? 我最感兴趣动漫,但是跟我的专业好像不是那么对口
项目管理 你参加过项目管理吗?请描述一下两个当下流行的开发方法在你的项目中的具体应用情况?请问你如何决定项目中各种任务优先次序,有什么理论来支持你的做法?的如果你突然发现项目不能按时完成,你作为项目领导,有什么办法? 额,我们的项目应该是瀑布型的,但是没有严格遵循瀑布的开发方式就是了。核心功能优先,扇入大的优先。项目不能按时完成的话,就适当砍掉一些部分,先保证提交实现一部分功能、可运行的、保证核心功能的产品
软件设计 你做过架构设计,模块化设计,接口设计吗?请说明一下你为何是这样设计,你比较过什么不同的设计方式,你的设计取得了什么结果? 没有,团队里的接口设计不是我负责的
质量意识 (代码复审/代码规范/代码质量)你是怎么做代码复审的,你加入我们团队后,能帮我们提高代码质量么,请具体说怎么提高? 我一般根据规范文档进行静态审查。要提高代码质量,首先要先定一份规范,至少注释规范和命名规范肯定要先保证,然后还要定期复审、互审
工具/社区 Software Tools(performance tool,version,control,work item,TFS)你在各种开发平台(web,linux,PC,mobile,machine learning)都使用过什么样的工具,自己写过什么工具来改进工作效率?给社区贡献过什么工具和代码?Github有分享代码么?你写的技术博客坚持了多久,读者最多的是哪一篇? 自己还没有大佬到能写工具来改进工作效率(#`-_ゝ-)技术博客嘛,坚持不了多久,个人笔记倒是不少,就是觉得这些别人都整理过了,我再发也没意义,Github有作业代码( •̀ ω •́ )✧
团队协作 Work with others(协同工作,提供反馈,说服别人)请描述你在项目中如何说服同伴采用你提出的更好的解决方案,或者你如何听取别人的意见,改进了自己的方案?你如何说服懒惰的同伴加紧工作,实现团队的目标? 说服别人的话,有理有据总能够有好效果,如果有前车之鉴的话就更有说服力了,而且讲话语气不能冲、不能显得是对方的错似的,要用一种建议、温和的语气,用询问的口吻循循善诱,让对方自己说出我们的想法。对于别人的建议嘛,我觉得有道理就会听取了,而且大部分时间对方说的都很有道理。对付懒人,一是要催,而是要有技巧地催。先是频繁的试探性询问,再是在团队里抛出自己的进度来旁推侧击,然后是请求式地拜托,最后还拖就得严辞命令了
理论素养 你上过什么数学,计算机或其他理论课,请举出具体的例子,说明你学到的理论知识如何帮助你解决实际问题?。 高数、线代、离散、概率论、程序设计、组原、操作系统、计网、系统结构、数据库、数逻、模电、软工.......比如软工的项目管理之道就可以用在团队项目开发中

六*(选做)、阅读软件工程中关于代码质量的的经典论文,从下列文献中选择一篇或若干篇,结合自己的实际做一个阅读笔记(例如,自己写的代码质量如何,是不是一个大泥球,如何衡量自己代码的质量)?从以下参考论文中选择一篇或若干篇:

参考论文文献:

  • [1] Stamelos I, Angelis L, Oikonomou A, et al. Code quality analysis in open source software development[J]. Information Systems Journal, 2002, 12(1): 43-60.
  • [2] Boehm B W, Brown J R, Lipow M. Quantitative evaluation of software quality[C]//Proceedings of the 2nd international conference on Software engineering. IEEE Computer Society Press, 1976: 592-605
  • [3] Samoladas I, Stamelos I, Angelis L, et al. Open source software development should strive for even greater code maintainability[J]. Communications of the ACM, 2004, 47(10): 83-87

七、个性发挥,包括图文、照片和创意等

posted @ 2018-12-31 21:56  溯説  阅读(220)  评论(2编辑  收藏  举报