朝花夕拾
作业基本信息
这个作业属于哪个课程 | 课程链接 |
---|---|
这个作业的要求在哪里 | 软件工程实践总结&个人技术博客 |
这个作业的目标 | 回顾与总结实践历程 |
其他参考文献 | 《构建之法》 |
课程回顾与总结
回顾问题
之前提问的博客链接
问题分析
- 问题一
一个软件如果仅仅用于一时演示而没有投入全面应用。甚至在演示之后基本就不会再继续使用了,那么这些程序在开发的过程中还有必要严格按照常规的开发流程吗?
引用助教的解答:应该没有必要,这样的软件目的就是快速开发出来验证需求的,如果按照流程一步一步来,这样其实很不划算。
助教的解释十分清楚,软件开发流程目的就是为了提高软件开发、运营和维护的效率以及提升用户满意度、软件可靠性和可维护性,而如果软件作用仅是用于一时演示可以为了节省时间快速开发,尽早地验证需求、避免周期长的流程影响开发进度。
- 问题二
结对编程时,若两人的能力水平差距较大,应当如何协调磨合从而更加高效地进行编程呢?
结对编程,双方写的代码不仅是给自己看的,也是给对方参考和复审的。水平差距大的两人结对编程,在编码前应当对一些约定达成共识,例如编码规范、注释规范,方便之后复审,减少后期磨合工作的负担。编码的过程中避免英雄主义,建立集体精神,互相督促。
水平差距较大的时候可以使用后座领航员模式结对编程,水平高的程序员接管更多策略上的工作。驾驶员在键盘前坐着,执行诸如写代码的工作,后座领航员下达的是更细致的指示,驾驶员就负责写代码,浏览文件,还有基础实现方法。领航员则着眼更长远的考虑并且检查错误。结对的编程过程中,初学者在按照专家指示做事的过程中得到学习,学习的过程中双方不断磨合与影响。
- 问题三
初级软件工程师的成长可以体现在对通用的软件设计思想和软件工程的思想理解,那么可以用什么方式来评估一名软件工程师在这一方面的水平高低?
根据邹欣博客中《软件工程师能力自我评价表》的博文中,评估软件工程师的能力可以通过以下方面:
- 基本数据结构和算法问题
- 硬的问题,对于编程语言等具体技术方面掌握程度
- 软的问题,在成长路上学到了什么
- 团队管理源代码的水平
评价软件工程师水平高低并不是通过单一指标,而是在多维度上综合分析考量。
- 问题四
在之前设计用例时,我使用UML图形来分析的次数比较多,而文字内容较少,故事有哪些图形不具备的优势吗?
用简单的故事描述用例,可以让团队成员对需求有统一的了解,并且故事使用文字描述,可以增加一些图形不具备的细节,可以通过故事逐步构建整个系统的功能需求。故事包含背景、角色、目标,符合现实用户与程序交互的场景。描述内容非常适合交互式的系统。
- 问题五
可是在软件开发之初就可以确定自己潜在的忠实用户吗,实际市场中有什么策略可以有效地招募粉丝、培养忠实用户并提高用户忠诚度呢?
维护老客户、开发新客户是最关键的,所以只有不断提高客户对企业的信任、忠诚度,才能在市场上占的一地之席。
除了用户需求,软件质量很重要,任何实体或许虚拟的产品都首先需要有过硬的基本功。一个好的开场白一定会提升你的成功机率。也就是说,新用户如果第一次使用你的软件获得好的体验时,那么留下来的可能性就会非常大。
上手学习难度不能复杂。对于很多新开发的APP产品,多数用户都是小白级别的,如何正确的使用操作也会影响用户的感受。特别是游戏类和购物类的APP,新手教程设计的繁琐冗杂必定会让用户失去耐心,甚至开始吐槽。
及时反馈用户的意见。要想提高用户的忠诚度,服务很关键,忠诚度并不是一次的交易就可以形成的,而是通过用户一次次的使用,不管在那种情况下遇到问题,开发团队都能及时站出来解决问题,让用户知道自己是和开发团队站在一起的。
各阶段收获
需求
需求分析的重点在于以用户的角度思考用户到底想要什么,使用的场景有哪些。作为开发者团队,很难基于自己的经历和身份完全站在用户方面,没有遗漏地思考。还是需要收集用户的喜好、做好用户故事分析、信息收集明确自身产品定位,对于需求有明确的定义,不宜太过笼统,从而影响后续设计和编码工作。
设计
根据需求分配模块。做好数据库、代码规范以及接口的规范,完成各个模块的设计,成员之间做好约定,避免后续成员接口不一致导致返工从而增加工作量。
实现
阅读微信小程序接口文档,学习到小程序的运行原理和程序结构。主要实现了小程序云函数的编写和部署,与前端成员交流定义好接口,获取用户的相关数据并且展示,顺利实现对接,调式云函数是通过本地调式,经过初步调试之后再部署到云端,供小组内进行进一步的测试,锻炼了和各个组员的沟通交流能力,更有效地沟通有助于团队开发的高效进行。
发布
在项目进行时应当尽早了解产品发布的相关规章制度。小程序个人发布不允许用户的社交功能实现,在alpha冲刺时并不知情这个政策,从而导致发布前夕匆忙地删除了小程序内的相关模块,在申请到企业认证时再次提交这些模块,如果早点知道发布的相关政策就能避免这种事情的发生,也能避免一些其他意外情况。
理解与心得
个人项目
寒假作业的要求让我重新审视了自身的学习经历和编程经验,思维导图和学习路线也让我在新的一个学期有一个明确的目标和学习方向。
在做编程作业,看到作业要求的时候,我觉得作业的要求比较简单看起来容易完成。等到我开始做的时候我才发现,要考虑到的细节还是很多的,不仅在编程的时候要思考有没有效率更高的方法,还要考虑编写出的函数是否足够可靠,能禁得起多次测试。做到后面又觉得其实只要把这个任务划分成多个小任务一块块完成的话,其实也没有那么复杂,对软件单元测试让我了解到,测试一个程序的可靠性,需要花心思考虑各种包括异常在内的所有可能的情况。
个人编程作业让我接触GitHub的更多操作,使用GitHub委托自己的代码感觉十分方便,做到哪一步觉得开始乱了可以回退到之前之前没有问题的一个版本,GitHub给代码管理带来了便利。
结对编程
结对编程的作业有两次,第一次主要在于网页设计,对于编码没什么要求,双方统一好风格和页面大致布局以后各自负责各自模块。双方审视着对方的工作,有什么不同的意见可以相互交换进行取舍。遇到困难也能互相帮助,这让我对团队合作有一个初步认识也让我明白结对合作的好处。
第二次结对编程是真正开始进行双人编码的工作,这次的结对项目我在重温Python的Web框架同时,也学习到了如何使用Ubuntu系统的云服务器部署Python的Web项目,同时还深刻认识到到在两人同时进行一个项目时有效的沟通,比具体的埋头编码更有效率,团队分工有时候可以做到1+1>2的效果。由于是进行同一个项目,以前遇到一个小问题可能就要折腾大半天,效率十分低而且也没学到什么新东西,现在两人进行同一个项目,可以直接向对方提问往往能更及时得到有效的反馈。这次结对编程的过程,对我也是共同学习小项目如何互相交流分工、两个收到二人小团队的驱使,互相学习新知识的过程,第一次实现在服务器部署项目也让我有一种无法言喻的成就感。
团队项目
团队成员都很积极地参与进项目的设计和编码的工作当中,让我在进行功能实现的过程中有一种特殊的参与感、归属感。
尽管最后做出来的东西并不完美,还有缺陷之处,但我在团队合作编程的过程中学习到了很多之前并不了解的知识,还是收获满满的。
个人技术总结
技术概述
微信小程序调用云函数,通过调用云函数访问数据库得到需要的数据并返回结果。