软件工程实践总结
一、请回望暑假时的第一次作业,你对于软件工程课程的想象
- 臆想中中的软工蓝图
- 选个有意思的选题
- 聚在一起编程,同时在编程过程中学习新的技能
- 本来是想做一个和人脸相关的项目的,不过柯老板要求项目要比较有趣,我当时没想出来实际的应用场景,就没选择去做人脸相关的项目了。
- 对比开篇博客你对课程目标和期待,“希望通过实践锻炼,增强计算机专业的能力和就业竞争力”,对比目前的所学所练所得,在哪些方面达到了你的期待和目标,哪些方面还存在哪些不足,为什么?
- 目标本来是可以带领一个团队实现一个项目的,希望积累一些带团队的经验,同时希望自己能学习到一些新的技术。
- 确实带领了一个团队,不过掏心窝子说话带团队很累。我们团队人比较多,再加上一些特殊的原因(我自己有问题但问题绝不仅仅是因为我)。这方面我不算很满意吧,跟目标比起来。虽然不满意,但我在其中看到了人性、学到了说话的技巧。
- 选题不是和人脸相关(一方面当时没想出来靠人脸做什么,另一方面是团队9个人可能最后只有我一个人做人脸,那其他人呢?)
-
总结这门课程的实践总结和给你带来的提升
-
统计一下,你在这门软件工程实践中,完成了多少行的代码;
最终有用的代码3264行
- C++代码行数共计1997行
- Python代码行数共计1167行
-
软工实践的各次作业分别花了多少时间?
-
项目 | 投入时间(/min) |
---|---|
第一次作业——准备 | 150 |
第二次作业——个人项目 | 1060 |
第三次作业——结对一 | 685 |
"智能聊天机器人"项目介绍 | 180 |
第四次作业——团队展示 | 120 |
第五次作业——结对二 | 1070 |
第六次作业——团队选题报告 | 361 |
UML设计 | 300 |
第七次作业——需求分析报告 | 740 |
Alpha1 | 512 |
Alpha2 | 370 |
Alpha3 | 275 |
Alpha4 | 120 |
Alpha5 | 245 |
Alpha6 | 92 |
Alpha7 | 247 |
Alpha8 | 235 |
Alpha9 | 305 |
Alpha10 | 515 |
现场编程实战 | 370 |
第十一次作业-Alpha事后诸葛亮 | 185 |
第十次作业 - 项目测评(团队) | 275 |
Beta1 | 15 |
Beta2 | 95 |
Beta3 | 90 |
Beta4 | 50 |
Beta5 | 135 |
Beta6 | 170 |
Beta7 | 495 |
Beta答辩总结 | 310 |
共计(/min) | 9772 |
共计(/h) | 162.9 |
- 哪一次作业让你印象最深刻?为什么?
应该是团队现场编程吧,我们组最后是没有做出来的。原因主要是我们计划使用的pyqt比较复杂,而且我们起步就定了三个页面,实现那三个页面的切换比较困难(在pyqt下,在我们当时的能力下),以至于最后出现了后台接口函数写好了,界面写不出来的窘境。我事后也反思过,一方面是pyqt确实比较复杂(我不是负责写界面的),另一方面是我没有好好督促自己的组员,前期布置的任务大家都没有很好的实现(我心太软了,想让他们轻松点)。
然后那次学姐酌情给了我们80%的分数
- 累计花了多少个小时在软工实践上?平均每周花多少个小时?同时贴出开篇博客“你打算平均每周拿出多少个小时用在这门课上”的回答
累计162.9小时?(与真实花费时间有出入)
平均到每周就是9.05h,如果这个数字真实有效的话,想想也觉得可怕,我之前说的硬生生把两学分的课上成10学分,没毛病!
- 学习和使用的新软件
- Axure(原型制作工具)
- Process On(在线绘图工具)
- SQL lite
- 学习和使用的新工具
- 图床(小贱贱、存图库)
- Visual Studio针对C++的部分插件
- 爬虫
- 代码测试工具
- islide(PPT制作插件)
- VS的性能分析、代码覆盖率测试
- 学习和掌握的新语言、新平台
- 巩固了VC++的操作(实际上我没有使用面向对象编程的思想),在开发过程中还解决了了一些BUG
- 拓展自己Python的用法,比如多进程通信,以及更多的Python库的使用
- 学习和掌握的新方法
- 为项目加上高大上的修饰词(柯老板教的),诸如具有旋转鲁棒性的人脸检测器(其实就是检测不到人脸的时候转几个角度继续测)、无感式单项好友检测模块(其实就是发了三个乱码符号)、基于词性标记技术的人名检测模块(使用jieba的词性标记模块)、基于NLP的热词分析模块(调用jieba的中文分词功能)
- 学会了一些套路,比如柯老板教我的,针对xxxx问题,我们提出了xxxx方法,有了xxxx改进。
- 学习了使用VS进性测试
- 学习了很多新的Python库,比如
jieba
、wxpy
、qqbot
、wordcloud
- 学习了多进程通信,解决了
wxpy
开启过程中造成主进程假死的问题
- 其他方面的提升
- 演讲,因为组里面每次答辩基本都是我在上,现在上场不(lian)慌(pi)了(hou)。
- 制作好看的图表
- 团队协作能力得到了提升
- 熬夜的本领算吗?(偷笑哈哈)
二、写下属于自己的人月神话
- 个人开发
- 形成比较好的代码风格才能让你有继续写下去的动力,写好看的代码是一种乐趣,天天看丑陋的代码估计谁都没什么心情写下去。
- 合理使用工具,比如PPT的islide插件等等
- 想拿高分的话,一定要看好作业要求,对照每一项做好。
- 善用搜索引擎,加强自己查找资料的能力
- 善用知乎,比如说之前没有使用过原型开发工具,这个时候我想知道哪个原型开发工具最好用,我就可以去这里找找,看看高票回答,快速选择一个适合自己上手的工具进行开发。
- 善用B站,有的东西不懂的话也可以去B站找找看有没有教程,
工具的话,比如你要做PPT,就可以去知乎上面找找PPT制作技巧
- 团队开发
- 人不要太多,我个人觉得5人最好,7人最多,人多了之后任务不好分配
- 其实我对我们组的团队开发不满意,整个过程中可能我们更像一帮“土八路”吧,不像正规军。如果能重来一次,我会选尽量少的人(我们当时是先组队,后定的选题),构建好规范的文档,合理的使用代码托管平台。再也不当“土八路”了。
三、对下一届实践的建议,或者对于开学初的你,对于大一的你,对于开学初的我,对于同期的TA们,对于后来的学弟学妹:
-
你有什么想建议、告知和期许想要告诉他们呢?
- 在对你十分重要的事情上,要懂得一个词叫做“不计成本地投入”,比如考试,我看到太多人准备个考试连去打印店打印试卷都不愿意打印出来(可能也有一部分原因是每个人习惯不同),打印出来会方便很好,效率也高。这学期我为了准备考试,在打印店花费的钱差不多60+了吧
- 我们下一届的学弟学妹的课程体系已经和我们不一样,所以说选课似乎没什么用,不过在此想吐槽课程安排,大三上的课业压力本来就很大,学院还是把软工实践安排在这个学期,一门硬生生把两学分上成10学分的课啊!(我相信学院也有自己的考虑!只是吐槽没有抱怨(●'◡'●))
-
特别地,特别地,下一届要不要中途换队员(强制的、彻底的从一队换到另一队)?
- 其实我觉得中途、长期、强制换队员不现实也不合理,作用不大。
-
身在一个格外大的班级,竞争强劲,你认为一个组的人数应当在多少比较合适?
5个,5个,5个,至多7个
-
个人/结对/团队作业应该控制在怎样的规模?
我觉得目前的规模还不错,该有的都有了!
-
这学期下来,你最感谢的人是谁?有什么话想要对TA说呢?
柯逍柯老师吧!
首先是带我去参加了海峡信息赛,参加了人脸识别项目组,我比较轻松地拿到了一个一等奖回来。柯老板为我提供了宝贵的想法、建议,我平常也都有及时跟柯老板汇报进度,柯老板一直都有很耐心的帮助我。
软件开发工程中,我心态蹦过几次,就是当PM管理不好整个团队,不能让每一个人都参与到开发中,软件开发中后期我只拉一部分人出来开发。当然那是我的无奈之举,因为我要考虑软件开发的进度,而且之前分配的任务一部分队员没有很认真的落实,跟不上进度(这方面我也有督促不到位的责任)。
在心态崩溃的时候,也有跟柯老师聊过,柯老师也能给出一些建议来。
最想说的话嘛:柯老板之前跟我们几个说做出东西来请我们吃好吃的,你还记得吗?(疯狂暗示ing)
分析一下自己所处的团队。软件工程实践是大学里少有的认真的团队协作经验。《构建之法》上说团队的发展有几个阶段,你的团队都经历过么,最后到达了“创造”阶段了么?
看了看前辈总结的阶段,确实挺到位的,真的像是在描述我们自己。
萌芽阶段:有经历过,最开始的人员分配和我们最后的人员分配是不同的;大家刚开始都是满怀激情满怀希望来参加的。
磨合阶段:有经历过,在这个阶段我在努力担当起PM这个角色,分配一些任务,大家也都努力去完成。(●'◡'●)
规范阶段:有经历过,不过做的不好,我们没有指定具体的规范文档,只是我有跟大家分享一些函数命名上的规范,我们主要在使用PEP的编程规范(只是最后组员用的不是很多就是了)
创造阶段:有经历过,不过做的不够好就是了!我们分阶段指定目标,目标一个一个完成。做的不够好主要是说实话到了后期我没有能力去给一部分队员分配任务了吧。到了软件开发中后期我只拉一部分人出来开发。当然那是我的无奈之举,因为我要考虑软件开发的进度,而且之前分配的任务一部分队员没有很认真的落实,跟不上进度(这方面我也有督促不到位的责任)。
五、怎样证明你学会了软件工程?
- 研发出符合用户需求的软件
有公开发布在
Github
,不过暂时用户不怎么多,主要是我们团队内部成员及他们的舍友有使用。(是暂时是暂时,我后面再去推广推广...最近在准备考试)
- 通过一系列工具,流程,团队合作,能够在预计的时间内发布 “足够好” 的软件
- 使用了
leangoo
进行进度管理,累计49项团队计划任务(不包含个人独立任务)
使用Github进行代码托管
我们组还是存在一定程度的“deadline是第一生产力”的情况,但绝不是胡乱拼凑出来的,也不存在糊弄的现象。
我们使用在线多人文档编辑系统——腾讯文档
我们使用问卷星、腾讯问卷进行问卷调查。
- 并且通过数据展现软件是可以维护和继续发展的
六、阅读软件工程中关于代码质量的的经典论文,从下列文献中选择一篇或若干篇,结合自己的实际做一个阅读笔记(例如,自己写的代码质量如何,是不是一个大泥球,如何衡量自己代码的质量)?从以下参考论文中选择一篇或若干篇:
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
开源软件开发应该努力实现更高的代码可维护性
- 什么是开源软件OSS?
被定义为描述其源码可以被公众使用的软件,并且此软件的使用,修改和分发也不受许可证的限制
本来想考完试写的,奈何考完试后我的身体垮了,发烧的很严重,可能是复习期间多次熬夜带来的种种不利因素在考完试心情放松后一起暴露出来。考完试还不让我好过,哈哈哈。
总的来说,一个高质量的代码,需要有比较好的可读性、可维护性、可变更性
若想提升可维护性,需要注意以下几点
- 尽量留下简明扼要的注释
- 第一眼看上去就能知道其用处的代码,才是简单而美的代码
- 避免大段代码,要写高内聚、低耦合的代码
- 编码风格一致
- 代码清晰表达意图
下面可以说说自己的代码质量:
首先我自己是比较注重代码质量的,比如自己书写python的时候会强制让自己符合PEP8编程规范,并且留下简明扼要的注释。
可维护性的话,未必会好吧,哈哈。因为之前写工程,工程总体的框架其实都是自己一个人想的。并不知道如何体现可维护性。
七、个性发挥,包括图文、照片和创意等
团队合照
软件演示视频链接,一个既有灵魂画手,又有鬼畜配音的视频,欢迎来看!