北航 2022 软工个人阅读作业——提问回顾与个人总结
项目 | 内容 |
---|---|
这个作业属于哪个课程 | 2022北航敏捷软件工程 |
这个作业的要求在哪里 | 个人阅读作业-提问回顾与个人总结 |
我在这个课程的目标是 | 回顾学期初的问题,总结个人收获 |
这个作业在哪个具体方面帮助我实现目标 | 理论分析与总结 |
问题回答
第一次作业博客链接
问题与回答
为什么要用一周的时间看一本书
这个问题是我个人的问题,对读书的抵触情绪是曾经所有速读的要求带给我的,而且我对速读的要求深恶痛绝。我曾经也喜欢慢慢读自己喜欢的书,读到入迷时也会废寝忘食一目十行,但是读老师要求的书就会味同嚼蜡。现在用一些计算机专业的想法来理解这件事就是我还是一个没有训练完善的NLP模型,要求我快速处理大量数据并从中学习是不靠谱的,并且同时学习效率也会大幅降低。
因为我已经想明白这一点,我对速读的硬性要求就是这个态度:就是能力不足,无法高质量完成,我很抱歉。
为什么要提5-10个问题
这也是我个人的问题,速读对我来讲就是一个顶着压抑的情绪的猪脑过载的事情,我无法在速读时有效收集信息,因此提不出有价值的问题。但是不得不说这个题设也是很有问题的,如果题目要求是0-10条,我也许会高高兴兴地写出来5条或者更多,但是题目给了一个下限就存在着一个漏洞,假如我的想法和书作者想法完全一致那么我就绝对无法提出问题。于是乎我就又带着抵触的情绪来做作业了。当然这是我的个人情况,大概不太符合其他人的现状,这个题目也有它的合理性,我也只是提出我的个人意见。
图形化界面是如何自动测试的
首先不可否认手动测试也是非常重要的,也可以编写测试用例,和预期结果,只不过执行者是人,成本比较高。自动化测试应该视为手动测试的自动版。因为其接口是面向人类的图形界面所以测试会有难度,我查到目前有的方法有程序内部识别控件然后模拟点击,还有更高级的利用人工智能识别图形并点击,如TestComplete,大部分GUI测试软件都是商用的所以说成本很高。在小项目中还是应该返璞归真使用手工测试。由此我也认识到不是所有DevOp都是必要的,要在实际的条件下选择合适的开发和测试方式。
解决问题vs程序正义
软件工程师不能按时交付的原因之一,是他们有时候不满足于”解决目前直接的问题“,而是想“解决问题背后的问题”,或者“解决通用的、不直接的、但有重大意义的问题”
我们在软件开发过程中不仅会解决妨碍程序运行的问题,并且我们还会积极解决代码风格,框架使用合理度,开发流程中的问题。显然这些问题是可能导致后续开发速率下降甚至于代码无法维护的问题,解决它们一定是利大于弊的。另外还有一些不是我们能解决的问题,比如微信框架不支持PATCH方法,那么我们不会去尝试和微信公司要求可以使用PATCH方法,而是用一个中间件来讲PUT方法直接转换为PATCH方法。这会造成代码令人费解,不再符合Restful规范,不过为了程序可以正常跑起来这么做是必要的。
可见我们一直在目前的工作量和未来的工作量之间进行取舍选择总体工作量最小的方案,越是大的项目越要考虑未来,不过敏捷的项目必须更注重现在。
什么时候用类,什么时候用对象
我以前以为自己理解类的继承与类的实例化之间的区别,现在发现自己又不懂了。
面向对象只不过是一种编程范式,除此之外还有面向过程,函数式等等。越写代码越能感受到的是“没有银弹”的意义。没有代码不是屎山,我们所做的只不过是在尽可能的利用范式来减速屎山崩塌的速度。没有最精妙的架构,有的只有不断的努力编写代码来实现功能。无论是做继承还是做类中的标签,一切只为了把代码编写出来,因此这个问题不是绝对的,而是需要综合各种因素考虑的。
知识总结
需求
“NABCD”是由 Need、Approach、Benefit、Competitors、Delivery 五个单词的首字母组成,分别指需求、做法、好处、竞争、推广五部分。通过这五部分,可以清楚简明的把项目的特点概括出来,更好地确定软件开发目标。
设计
表现层状态转换RESTful是一种API风格范式,目的是便于不同软件/程序在网络(例如互联网)中互相传递信息。一切API被理解为资源的CRUD和Action,在遵循改风格开发软件时可以利用框架以实现非常迅速的开发,并阐述意义鲜明的API。
实现
开发规范。我们开发中采用了自动化工具对Commit信息,Branch用法,代码风格和测试进行了规范,一个好的规范使我们降低开发沟通成本,避免出现版本冲突等意外事件。
测试
自动化的单元测试可以大幅减少团队debug成本,是一件非常值得的事情。
压力测试可以帮助解决性能瓶颈,保证服务可以在生产环境中正常运行。
发布
发布稳定版。需要准备两套环境,开发环境和发布环境。在开发环境中可以持续集成持续部署,并进行测试,当开发环境中某个版本测试已经基本稳定无bug才可以合并到发布环境并向真实用户提供服务。混淆开发和发布环境会导致用户的服务不可用或者一些安全性问题。
维护
维护阶段的主要任务包括项目运行情况的实时监测,防止工程因为意外情况而宕机。
心得体会
这可能是我目前做过的最大规模的一次软件工程。能和一群优秀的大佬一起完成一个优秀的项目真的很高兴,这里非常想要感谢我们的PM kuma桑,能看到他真的为了项目能够正常推进下去做了不可磨灭的贡献,尽职尽责地履行着PM的职责。
从课程中我体验到了合作开发相较于独立开发所独有的特征,比如摸鱼不止影响自己一个人的进度,代码不是写给自己一个人看的,文档要写好多好多,交流也要好多好多。而这些都是未来的工作中所需要用到的能力,经此锻炼感觉收获颇丰。