这个作业属于哪个课程
这个作业的目标
总结、回首
作业正文
....
其他参考文献
...
一、回望
(1)对比开篇博客你对课程目标和期待,“希望通过实践锻炼,增强软件工程专业的能力和就业竞争力”,对比目前的所学所练所得,在哪些方面达到了你的期待和目标,哪些方面还存在哪些不足,为什么?
当初我觉得软件工程是一群有着共同目标的人共同努力奋斗、合作互助做出让用户满意的软件。并希望通过此次软件工程实践的课程能让自己从一个项目经验为零的小白成长为一个团队的主力。
现在课程已接近尾声,回望此次课程,确实收获颇丰。
此次课程,让我真正学习到了,一个软件的产生,不仅仅只是之前我所认为的通过简单需求分析加编程就能形成。而是要层层递进,从需求调查、分析到系统分析,再到数据库的设计等等,都是一环扣一环的。前期好的分析设计奠定了软件的基石,有了稳固的地基,对于之后软件的编程开发是至关重要的。
由于上半年的疫情,导致学校无法开学,大家也只能通过远程协作来沟通合作。尽管如此,此次课程也是对我团队合作与沟通能力提升最大的一次。通过远程屏幕共享、语音等方式,我和我的队员们也并不觉得有任何阻碍。唯一做的不足的地方是由于前期考虑的不够周到,对于前后端接口部分的定义有部分偏差,直到beta实现阶段才发现一些当初设计的漏洞。但当时我们团队也采用新建一个接口共享云文档,后端人员写完接口后把详细的接口定义放上去,方便前端人员调用,也算是起到了较好的作用。总体来说还是经验不足的原因,相信此次积累的经验对之后的开发会有很大的帮助。
对于技术方面,此次项目我主要负责的部分是后端,在开发过程中我认识到了很多之前从未了解过的开发工具,熟练了使用各种测试工具,并且学习到了很多技术方面较为成熟的编程方法,对于git的使用也更加熟练。
还有一点不得不提,那就是写博客的能力。在这之前自己从来没写过什么文章,基本上是高考过后就没写过了。这次软工实践也让我意识到,博客是一个很好的方式来记录自己的学习,记录自己遇到的技术上的问题。不但日后自己可以看自己的历史,还能分享给其他遇到相同问题的人,增进交流。
(2)你在第一次作业的个人简历中制定的这门课程结束后,你预期你将增长的能力、技术、技能;和你针对你的目标绘制的学习路线图。对比当前你的所学所得,你达到了当时的预期值吗?
当初我对于工程能力的预期是:提升团队写作能力与个人编程水平,这点毫无疑问已经到达了我的预期。对于技术的预期是:掌握一定的框架和技术,熟练运用一门编程语言。我认为这点也大体达到了。在此次项目中,我学习并熟练了Spring框架的使用,对于开发过程中遇到的各种bug,通过搜索相关资料也算是更加熟练了对Java语言的使用。但是对于Spring框架的内部原理以及底层源码的学习还不足,要达到通过面试的水平还远远不够。
当初我指定的技术框架是大数据相关的学习,但只能说计划赶不上变化。由于这学期的课程多,作业多,再加上大数据相关的门槛更高,而Java相关的学习也是学习大数据方面技术的基础。于是我也在开学不久后改变了学习的方向与计划,决定先从掌握Java相关的技术框架开始。总体还是达到了我的预期值。
3)请总结这门课程的实践总结和给你带来的提升,包括以下内容:
统计一下,你在这门软件工程实践中,一共完成了多少行的代码;
粗略统计接近1W行代码
软工实践的各次作业分别花了多少时间?(做一个列表)
作业
时间(H)
软件工程实践 - 寒假作业(1/2)
6
软件工程实践 - 寒假作业(2/2)—— 疫情统计
36
结对第一次—某次疫情统计可视化(原型设计)
24
团队作业第一次——种子队伍选拔和团队展示
5
结对第二次作业——某次疫情统计可视化的实现
28
团队作业第二次—团队Github实战训练
8
团队作业第三次—项目需求分析
8
团队作业第四次—项目系统设计与数据库设计
9
个人作业——软件评测
9
团队作业第五次——站立式会议+alpha冲刺
70
团队作业第六次——beta冲刺+事后诸葛亮
50
个人作业——软件工程实践总结&个人技术博客
6
哪一次作业让你印象最深刻?为什么?
印象最深的属alpha冲刺。由于之前没什么合作开发经验,当时对于技术也不够熟练,编程过程中出现了各种问题。有些问题甚至是自己 本地环境的问题,同一个项目文件在别人电脑上没问题,却偏偏在自己电脑上崩了。当时调bug调了特别久,心态接近崩溃,印象尤为深刻。
累计花了多少个小时在软工实践上?平均每周花多少个小时?
累计花了接近260小时,平均每周17小时。
学习和使用的新软件;
Markdown:Typora
原型设计:墨刀,Axure
思维导图:XMind
UML图:StarUML
编译器:IDEA、HBuilder
模拟器: MUMU模拟器
学习和使用的新工具;
团队协作:git与github的使用
测试:Postman、JProfiler、JMeter
学习和掌握的新语言、新平台;
语言:Java,第二次寒假作业与团队作业中大量使用,更了解了Java的集合、JVM等知识。
JS:第二次结对作业中使用。作为一名后端人员,也学习了很多JS的知识。
平台:博客园、Github、以及安卓端。
学习和掌握的新方法;
原型设计:第一次了解并学习到了原型设计
单元测试: 在第二次寒假作业中第一次使用JUnit进行单元测试
接口测试:团队作业中使用Postman进行接口的测试
压力测试:团队作业中使用JMeter进行接口的压力测试
团队协作与版本控制:使用Git与Github进行软件版本惯例
工程能力的提升;
需求分析能力、类图分析能力、系统设计能力、数据库设计能力、代码编写与调试能力。
团队合作上的提升;
团队沟通与协作能力:使用语音通话与屏幕共享进行沟通调试
其他方面的提升;
个人品质:个人责任心、耐心与时间管理能力都有所提升
博客:博客写作能力有所提升
二、团队总结
软件工程实践是大学里少有的认真的团队协作经验。《构建之法》上说团队的发展有几个阶段,你的团队都经历过么,最后到达了“创造”阶段了么?(参考《构建执法》第17章 人、绩效和职业道德)
你在团队中担任了什么角色?你是否完成了该角色的任务?现在你觉得你适合该角色吗?
我在团队中主要负责后端部分。我认为我大体完成了该角色的任务,也比较合适该角色。
1、 如果你是组员,你觉得你的组长分工安排是否合理?你对组长的选举有什么建议?
我觉得我们小组的组长分工安排大致合理,但我认为后端人员有点过多(后端5人前端3人),导致开发阶段前端进度赶不上,后端进度过快。
对于组长的选举,我认为应该由小组成员自行投票选出。队长不仅要有较好的团队管理与进度把控能力,也应该有较好的技术水平。
2、 你这学期经历过换组吗?你对换组有哪些看法?谈谈你在这个过程中的感受。
我没有经历过换组。我认为换组是有必要的,这是一个模拟今后工作的过程,今后工作过程中难免会遇到这样的工作变动。现在的换组训练是对之后最好的模拟。换组后需要以最快的速度学习新的技术栈,快速熟练新的业务,熟悉新的环境,是个不小的挑战。
3、 分析一下自己所处的团队。软件工程实践是大学里少有的认真的团队协作经验。《构建之法》上说团队的发展有几个阶段,你的团队都经历过么,最后到达了“创造”阶段了么?(参考《构建之法》第17章 人、绩效和职业道德)
我们团队通过前几次的组队作业以及需求分析到达了萌芽阶段,通过系统设计与数据库设计到达了磨合阶段,在最终的开发实现的冲刺中,大致达到了规范阶段,但并未达到创造阶段这个高度。
三、人月神话
1、怎样证明你学会了软件工程?以下要求你们的团队达到了哪几个?请在随笔中用数据证明上述内容或侧重选择之一。
1)研发出符合用户需求的软件 必须公开发布,有实际的用户,一定的用户量和持续使用量 (3 天后能保持10 - 100个用户);而不是: 做没有用户使用的软件 (2)通过一系列工具,流程,团队合作,能够在预计的时间内发布 “足够好” 的软件 有项目规划/需求/设计/实现/发布/维护,有定时的进度发布 ; 而不是: 通过临时熬夜,胡乱拼凑,大牛一人代劳,延迟交付等方式糊弄 (3)并且通过数据展现软件是可以维护和继续发展的。 而不是 找不到源代码,代码无文档,代码不能编译,没有task/bug 等项目的发展资料
我们主要达到了第二、三两点。
我们有细致的时间安排与进度安排,有详细记录每日站会的会议记录,并且每个人要在文档中说明自己昨日进度与今日任务。
我们也有详细的设计文档与接口文档,源代码已上传github,前后端各一个仓库,可以维护和持续发展。
2、写下属于你自己的人月神话——个人或结对或团队项目实践中的经验总结+实例/例证结合的分析,文字部分字数要求在100字以上,可以使用你自己喜欢的方式表达(如图文结合、视频)..
项目开发中对于任务进度的计划不应该过于紧凑,计划赶不上变化,过度紧凑的安排最终只会被打乱。要留够充足的时间,将任务尽可能地细化,再合理地分配到每一天中,防止某天的任务因为bug等原因而拖迟影响之后的进度。在本次beta冲刺中,我们团队尽早地就开始了冲刺,但是在测试阶段发现了很多的bug,所以实际上最后改Bug花了很长的时间,远远不止7天的冲刺。还好我们开始的早,才能够留有足够的时间,在ddl之前交出满意的答复。
四、建议
对下一届同学的建议,或者对于开学初的你,对于大一的你,对于开学初的我,你有什么想建议和告知的呢?请写下你对后来人的期许。
我希望之后的同学们能够更加重视这门课程,也许你们确实在QQ空间或朋友圈看到各个学长学姐的疯狂吐槽,但软件工程实践这门课绝对是对你们意义非凡的一门课程。它不同于你们其他课程的课内作业,它有着更加系统与成熟的体系,你们付出的越多,得到的回报也一定越多。
对于软工实践课程,你有哪些建议?
希望软工专业这门课程能和计算机专业的一样改到大三上学期!到了大三下学期,大家都面临着重要的选择,要考研的,要找工作就业的,都得着手开始准备。放到大三上学期,这样对于准备找工作的同学来说也有更加丰富的项目经验,有助于找工作;对于准备考研的同学来说也能够全身心准备考研。据我所了解的情况,周边大部分准备考研的,这段时间以来基本上都没法复习,我相信大部分同学都是希望能调到大三上学期的。
对于助教工作,你有哪些建议?
希望助教能专门分享下自己的学习路线与经验,像乐助教一样多开直播分享,为乐主教点赞。
对于自己今后,你有哪些建言?
不忘初心,砥砺前行。希望以后的自己不后悔现在做的每个决定。
五、个人技术总结
六、阅读笔记
我所阅读的文献为第一篇:[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.
有幸在谷歌找到了PDF文件。
本文开篇提到了开源软件相比于传统“closed”软件的优势,开源有着更多的贡献者与社区力量,有着迅速迭代与新特性增加快的特性,能够有更加迅速的发展。但是,由于开源项目通常来说都是由最初的创建者直接领导,关于开源软件的开发过程并没有很好的定义。
Bollinger和他的同事指出对于开源代码而言,一个很重要的要求是“rigorously modular, self-contained and self explanatory”(严格模块化、自包含与自解释),这样才允许远程的其他人员进行开发。他还提到,在这种情况下,系统需求要更加精确,设计和需求文档也要更加严格,代码的质量也要相应提升,才能开发出较好的软件。
至此联想到此次软工实践中我们团队的项目,确实存在因为前期的接口文档与数据库设计不完善不合理之处,导致后期实际开发阶段需要进行修改变动的情况。诚然,精确、高质量的文档对于后期开发是至关重要的。
在作者的案例研究中,他们使用了Logiscope@(Telelogic,2000),这是一套全面的工具,能够自动执行代码度量和比较与用户定义的编程标准。他们使用此软件,检查了在SUSE Linux6.0版本中发现的100各C程序的样本。给出了不同的参数指标与可接受范围,包括语句数、圈复杂度、最大级别、路径数等十个指标。
Logiscope会为每个软件组件和标准提出具体的建议,建议包括四个级别:ACCEPT(接受)、COMMENT(注释)、INSPECT(检查)、TEST REWRITE(测试重写)。相关计算因子与范围如下:
计算式如下:
此外,作者还发现开源软件增加的模块化不仅有助于开源开发,而且与用户满意度有关。最终,作者提出了具有以下特性的开源流程:
1、项目参与者应该遵守在项目启动时就发布的编程标准。
2、静态的源代码分析应在发布内容定义之前的阶段执行,测量所开发的代码并验证是否符合规则。
3、测量结果在新版本配置中应能够使用