2020软工课提问回顾与个人总结
项目 | 内容 |
---|---|
这个作业属于哪个课程 | 2020春季计算机学院软件工程(罗杰 任健) |
这个作业的要求在哪里 | 个人博客作业——软件案例分析 |
我在这个课程的目标是 | 学习软工的思想方法,写出好的软件并维护 |
这个作业在哪个具体方面帮助我实现目标 | 总结了本学期课程的收获,同时回顾自己在课程开始提出的问题,形成一个闭环 |
一、链接到以前提问题的博客
二、解答自己提出的问题
1.软件设计思想和软件工程思想是什么?
软件设计思想:按工序将问题化简,将功能的实现与设计分开,便于分工协作,即采用结构化的分析与设计方法将逻辑实现与物理实现分开。将软件生命周期划分为制定计划、需求分析、软件设计、程序编写、软件测试和运行维护等六个基本活动,并且规定了它们自上而下、相互衔接的固定次序,如同瀑布流水,逐级下落。
软件工程思想:软件工程思想是一个非常大的概念,在《构建之法》一书第一章即提出,但没有细致解答,但经过一个学期后我发现,其实全书都在讲软件工程思想,它不是一个具体的概念,而是知道你如何做出一个好的软件!
2.何时用goto是好习惯?
通过本学期的编程,我还是觉得用goto非常的别扭,我在读别人代码时,比较喜欢那种顺序的逻辑,看起来会舒服很多,但是用了goto就必然会来回滑动着读,我个人感觉不是很舒服,因此我个人不喜欢goto,也不觉得goto是个好习惯。
3.关于结对编程
在软工课上的结对编程我们采取的方式和书上的区别较大,我们是两个人先规定一些借口规范等对接问题,然后分工,每人负责一部分去完成,然后再互相查看一下代码检查问题,最后合并后进行一些测试,并没有像书上说的那样一个人写一个人看着,因为代码量挺大的,作业也很多,这样的做法可以更快的完成任务。而最有意思的是,本学期我真的体会了一次书上那种结对编程,在计网实验上,和同学一个写一个看,效果非常好,能避免很多错误。分析这两种结对编程的方式,我认为书上的编程方式比较适合那种已经确定写法的编程,即一个人写另一个人不是提出更改算法的意见,而是提出一些比如命名,差错之类的意见;而第一种方法则更适合敏捷开发,完成任务的速度很快,同时每个人的任务实现比较自由,不会被别人指手画脚。
4.顾客需要帮助
由于我们团队开发的是博客园app,然后有一个功能是删除班级成员,我们的方式是提供一个班级成员的列表,用户通过左滑删除要删除的人。于是有用户给我们反馈说这个第一次用的时候研究了好久怎么用。通过这个事情我们发现,其实开发者自己觉得简单的操作用户不一定觉得简单,有时必要的提醒是非常好的,可以设置为只提醒一次,可以大大减轻用户的烦恼。我认为一个好的软件,必须考虑这方面的需求。回到自己当初写的问题,git其实也有不错的提醒,只不过是英文的比较难懂,所以优秀的软件,必然会为用户提供很好的帮助。
5.软件开发过程的可见性究竟怎么做?
本学期我们开发的博客园app在可见性这方面做得很好,我们每个人开会时都可以向别人展示UI,然后大家提出意见修改,但是对于内部实现的逻辑,比如跳转,删除,调用api确实没法展示,也没法强求,因为你写到一半是根本没法运行的,不像UI的xml文件做多少都能展示。我还不知道如何展示全部项目的可见性,但是在开发过程中展示前端UI界面还是非常有必要的。
三、新的问题
作为PM,是否应该和组员一块参与开发呢?
我个人感觉作为PM和组员一块开发有助于深入了解项目,才能更好的进行任务管理。但我看到学长学姐和有些组PM是不参与开发的,只是尽心尽力的做管理,这样的优点是有更多的时间去规划设计,所以PM是否需要和组员一块开发呢,在公司中PM是怎么工作的呢?
四、学到的知识点
1.需求
需求分析是非常重要的,本学期有些小组的项目获得的反馈是没有使用的需求,那你内容做的再天花玉坠也没有用。所谓好钢用在刀刃上,前期的需求分析一定要做好,可以采用NABCD的需求分析法。
2.设计
设计分为功能设计和规格设计,我本人一开始觉得规格设计不是那么重要,有些轻视,而这造成我们后期发现UI不统一,文件命名有些乱,xml中的id有重复,需要整改的问题,同时也导致如果有别人接手了项目,看着这些id会很混乱,代码可读性不好。规格设计必须要重视,确定了命名规范,UI样式,接口设计后再开始写代码会有事半功倍的效果。而功能设计一开始不用分的特别细,但要掌握其关键核心,要明确这个功能到底能不能实现,其他的在项目开发时再考虑细节也不迟。
3.实现
Scrum Meeting每天都要开,作为PM要实时掌握组员的进展,要督促他们完成任务,同时在组会上定好在下次组会前要完成的任务,可以很好地保证项目进展。在实现阶段最关键的就是交流,组员间的交流可以避免一个项目做完后像5个项目,每个人写的模块差异非常大。及时交流可以让项目整体化,同时也可以提出自己难以解决的问题,让别的组员给予帮助。
4.测试
测试可以借助一些测试平台比如wetest进行兼容性测试,同时它会帮助检测所有功能是否会闪退,十分好用,比人为手动测试覆盖面更广;同时还要进行功能测试,应事先写好测试方法再进行测试,做到覆盖全部功能;还要进行适配测试,在不同的手机上由于分辨率的不同,如果UI设计不当可能会出现显示的问题,多找几个分辨率相差很大的手机进行测试能发现很多UI设计的问题并改正。
5.发布
发布不是简单的上传,还需要针对典型用户进行合适的宣传才能有好的效果,在发布的初期可以进行一些民意调查,了解用户的真实感受有助于后续版本的改进。
6.维护
需要根据用户的反馈来进行维护,维护其实是很麻烦的,是一个持久的事情,必须要有足够的耐心,不然很容易放弃维护导致软件最后无人使用。
五、理解和心得
经过本学期软工课的学习,让我学到了很多软工的知识,也写了不少代码,学到了如何开发一个安卓项目。其实一开始在个人项目和结对编程阶段特别不能理解为什么要写这么多博客,觉得好没用啊,浪费时间,但是经过了团队项目后我们感觉真实的软工似乎就应当如此,会有很多的文档要去写,每次会议后也需要进行记录。学期中有过很多次抱怨反感,但是真正坚持下来后,我感觉成就感十足,虽然敏捷开发真的很累,但也让我体会了作为程序员的生活。最后做出的博客园app帮助很多助教解决了大问题,感觉很开心,也完成了我自己的目标,写出了好的软件!