项目 | 内容 |
---|---|
这个作业属于哪个课程 | 课程社区 |
这个作业的要求在哪里 | 作业要求 |
我在这个课程的目标是 | 学习软件工程 |
这个作业在哪个具体方面帮助我实现目标 | 总结和回顾软件工程学习历程 |
个人回顾
链接到以前提问题的博客
请尝试对自己曾经提出的问题进行解答,并阐明,是如何通过看书,实践,或者讨论弄清楚的
-
关于微软的MSF原则“充分的授权与信任”的疑问
在实际的开发过程当中,由于我们团队成员的能力都比较强,工作认真负责,所以在合作当中我们事先根据成员特点分工,充分给予了每个人权力,各个成员在相对平等,在人数较少、大家相互熟悉的情况下能够采用MSF模型。
-
A/B Test具体的作用是什么
在开发过程当中我们并没有使用A/B Test,但是通过查阅资料,首先我发现A/B Test有自己的数学原理,它实际上是一个假设检验,另外我发现有不少大型的项目使用了A/B Test调研用户,例如EA推出的游戏模拟城市5就是通过A/B Test卖出两个不同的版本,增加了43.4%的与定量。
-
UML是否真的有必要使用
我们在实际的开发中没有使用UML,通过查阅相关资料以及个人对uml的理解,我认为uml在开发当中并不是必须存在的,理由是uml复杂,属性众多,学习、绘制uml会增加许多成本。
-
关于有错不改是否是必要的
我认为是不必要的,起码在我们实际的开发过程当中,一个错误会造成更多的错误,发现问题之后应该尽早修改。但是像一些头部公司的大软件例如Excel等,经历了很多个版本的迭代,可能修改某个bug会浪费大量人力,甚至导致代码重构,所以有错不改的措施可能还是要看实际情况决定是否使用。
-
关于代码发布应该达成的要求
这个问题在实际的开发之后体会的比较深刻,我们在Alpha阶段开发之前制定了开发计划,预期完成一些基本功能,项目能够初步使用,最终完成的Alpha版本的功能基本上和预订计划相同,但是在诸多方面并不稳定,在Beta阶段,针对Alpha阶段出现的问题完成了一些修复,并且完成了大部分核心功能,针对项目完成了很多测试,有完善的发布公告、出口条件,最终运行稳定。
是否原来的问题还不明白?如果有,请分析。
没有问题不明白
是否产生了新的问题?如果有,请提出
没有产生新的问题
软件工程这门学问有很多 “知识点”, 这门课强调 “做中学” - 在实践中学习知识点。
-
需求
需求分析应当尽量完备,特别是要善于与用户沟通,通过多种方式(问卷、当面交流)进行调研,最后将用户的需求进行总结,需要注意的是,尽量边开发边与甲方用户进行沟通,保证开发的方向正确。
-
设计
对设计体会最深的一点就是,设计是整个开发过程当中最重要的一环,一个好的设计会大大的降低开发的难度。我们在设计的时侯先根据需求设计了数据模型,前端根据需求画出了demo图,光是设计的阶段就花了很多时间。之后根据数据模型开发,在开发的过程当中不可避免的会出现更多的问题,但是良好的设计让我们进行改动时也十分方便。
-
实现
实现的过程当中我学到最重要的一点就是及时沟通,在实际的开发过程当中,虽然制定了设计文档,接口文档,但是在实现的时候难免会因为个人因素导致对接问题,这个时候就需要线下交流,我们团队通过多次的线下交流以及燃尽图的变化得出结论,线下会议的形式十分高效,十分有利于开发进程的推进。
-
测试
测试在实际的开发过程当中的重要性基本等同于实现,在测试过程当中我们依然发现了大量的bug,我在测试当中学到了单元测试、压力测试等方式,也学到了python并发测试工具、go test、AP等测试工具的使用。
-
发布
一个好的项目最终要呈现到用户手中需要经过包装,不然再好的内核也无法暴露在用户手中,在发布阶段由于项目的特殊性,我们最终采用了水群发布。但是通过调研大型项目的发布方式以及其他宣发做的比较好的小组我了解到了通过github、知乎、bilibili等社区发布的优越性。
-
维护
我个人认为对于没有经验的开发团队来说维护是比较麻烦的,主要是需要学习很多冗杂的知识,但是在运维当中我学会了CI/CD、Dockerfile、python、bash等脚本语言的使用,这些自动化工具在后期大大降低了运维的难度。
结合自己在个人项目/结对编程/团队项目的经历,谈谈自己的理解或心得
-
个人项目
本课程个人项目的部分主要就是案例分析,在完成的过程当中我学会了一些自动化寻找软件漏洞的办法,例如通过nessus等扫描器自动查找,另外在分析了成熟的团队项目之后对我们自身的开发也有很好的借鉴作用。
-
结对编程
结对编程有如下优点
-
面对面交流沟通高效
-
一个人写一个人看的编程方式发现错误的速度很快
-
能够取长补短相互学习,毕竟在学习的过程中有一个直接能解决问题的人比使用搜索引擎寻找答案高效很多
另外在完成结对项目的过程当中我也学会了qt,gtest等许多新的技术,沟通的能力也得到了提升。
-
-
团队项目
团队项目是整个软件工程课程的重点,也花费了很多时间,我们经历了需求分析、设计、实现、测试、发布等过程,并且作为整个团队主要的运维,我在整个项目出现问题的时候经常需要以最快的速度解决,虽然整个过程十分劳累,但是当最终有一个完整的成果呈现到我的面前时成就感十足。