Loading

累并快乐着——软件工程实践总结

这个作业属于哪个课程 2021春软件工程实践|W班
这个作业要求在哪里 软件工程实践总结&个人技术博客
这个作业的目标 重新审视寒假提出的问题,总结本学期开发过程和收获经验,总结个人技术
其他参考文献 北京航空航天大学计算机学院软件工程课程的提问回顾与个人总结作业
提问博客链接 提问博客

第一部分:课程回顾与总结

对之前提出问题的重新审视

Q1:对于初级软件工程师的成长衡量。

在寒假我认为“衡量起来缺少一定的指标衡量标准,不像之后的对于实际项目的衡量可以通过大小、耗时、质量和错误等指标进行衡量”。在这一个学期的理论学习和实践开发之后,我认为确实可以从以下几个方面进行衡量。1.项目计划和质量管理;2.可行性分析和需求分析;3.系统设计;4.面向对象程序设计;5.测试和改错;6.维护和再生工程等多个方面。

在这学期的课程以及实践中,我充分感受到个人在以上六个方面的提升。这几个方面作为衡量初级软件工程师的因素我认为已经足够了。其中1和2可以考察一个 软件工程师在项目前期对于工作量的估计、用户需求的准确估计能力,3和4可以考察软件工程师在具体实施编码的过程中的能力,其中可以具体由可维护性(maintainablity)、可读性(readability)、可扩展性(extensibility)、灵活性(flexibility)、简洁性(simplicity)、可复用性(reusability)、可测试性(testability)等方面具体度量。5和6则可以考察一个软件工程师在开发完一个项目之后对于项目的再审、维护等能力。

Q2:达到什么程度我才可以自信的在简历上写“较好的掌握某种语言或者编程技巧”呢?在团队中执行一项项目时应该执着于创新从而掌握技巧还是根据“口诀”完成整个项目?

与其思考能否较好的掌握某种语言或者编程技巧,不如思考自己是否有足够的能力和勇气从头开始学习一门新的编程语言,或者在遇到开发问题的时候是否具备不畏惧困难的精神以及寻找各种手段解决问题的能力。在技术飞速发展的计算机领域,没有一种编程语言或者编程技巧是可以学会之后就一劳永逸的。程序员最重要的就是不断学习的能力。因此,学习能力才是以后在工作中最为重要的。当然在面试的时候,往往不能通过短短十几分钟或者几十分钟的提问具体了解你的学习能力,所以如果自己有使用某种编程语言或者编程技巧的经验,还是不妨都写在简历里叭哈哈哈。对于整个团队是否应该执着于创新驱动开发这个问题,我认为取决于一个团队中成员的基础扎实程度。当一个团队中的成员普遍都不具有扎实的基础的情况下,还是建议根据既定的开发方式稳健的开发比较好,至少这样能够走完整个流程,不至于使得项目因为开发难度太大而夭折。当一个团队中的各成员拥有扎实基础和丰富开发经验的时候,创新性就应该成为整个团队在开发过程中着重考虑的点了。

Q3:“谁来做代码复审?即最有经验、熟悉这一部分代码的人。对于至关重要的代码,我们要请不止一个人来做代码复审。
……
找出代码的错误,比如:不符合团队代码规范的地方。”

是否意味着在完成一个团队项目之前我们需要首先指定团队的关于该项目的代码规范?对于一个小型团队,可能每一个部分仅仅由一个人负责完成,那寻找“最有经验、熟悉这一部分代码的人”是否会很困难?

在软件工程这门课结束之际,对于“我们需要首先指定团队的关于该项目的代码规范”这个问题,答案显然是肯定的。在结对编程和团队开发中,老师每次都会要求我们制定相应的代码规范。因为一份合理的代码规范不仅能够增加代码的可读性,同时在代码的审核、复用过程中也起着尤为重要的作用。拿我们团队项目开发举例,小程序的某些功能往往能够使用相同或近似相同的代码段,例如对于二手物品和任务委托的列表项实现点击跳转至评价页面,在评价页面上方先展示二手或任务的详细信息,在下方的表单中用户能够输入评价 并点击按钮提交。实现这个评价功能后,其中的获取列表项中点击项的详细信息、展示详细信息、获取用户输入并判断等多段代码都能够是实现复用,甚至整个二手物品评价可以基本被复用至任务委托评价中。这就要求团队中的负责这块功能开发的同学写的代码能让别的同学理解和使用。针对第二个问题,在这次的团队开发中,我们将整个项目拆分程实现每个功能的前后端工作。每个同学在实现完自己部分的功能代码之后,首先需要使用静态数据测试,接着合并前后端代码进行接口测试,最后逐渐连接成一个完整的项目测试。对于小型团队因为人数限制,每个开发人员应该都先对自己代码进行测试。

如果你领头开展一个全新的项目,你要怎么选择“合适”的团队模式?

在项目刚开始的时候,应该由PM根据团队成员情况和项目具体要求应用合适的团队模式。在本次软工实践中,我们小组主要采用的是“交响乐团模式”。在每次团队任务发布之后,我们先将任务划分成不同的模块,然后由团队中的每个同学进行认领,这样可以保证每个同学各司其职,同时保证项目的执行力。一个适合团队的运作模式是非常重要的,它能够极大地提高团队的工作效率,促进组内同学的合作与融合。随着项目不断推进,之前的团队模式可能就不再适合,这时候便需要适当的调整。同时为防止团队模式退化,就需要有一些措施:例如奖惩机制、每日例会,组长对任务的分割也很重要,尽量细粒度划分,落实到每日的任务中,这样浑水摸鱼者自然就无处遁形了。

如何审视创新这个话题。

回答同二。创新的前提是扎实的基础,同时能观察到身边的痛点,并且能通过编码解决这个痛点。

新问题的提出

在alpha冲刺阶段初期,我们小组对于项目的工作量出现了错误的估计,因此最后两天的冲刺就有些慌乱。同时在alpha阶段中期,分析认为无法在alpha阶段完成举报和评价两个功能,因此将这两个功能移至beta阶段完成。在beta阶段,由于有了alpha阶段的冲刺经验,我们对于项目工作量的估计就比较准确了,因此制定了与冲刺天数相匹配的工作量。我的问题是:在alpha任务初期,不熟悉任务工作量的我们如何进行合理的任务的划分和分配?

5个阶段收获

需求

  • 通过NABCD分析,团队可以清晰明了的掌握自己产品的定位与优劣。在确定产品功能的时候,要明确自己的产品重点。我们团队在设计Fidle——校园二手任务活动平台时,必然有参考相关软件例如闲鱼、微博等软件的设计思路、页面布置跳转逻辑以及功能实现方法等。但是我们团队的软件并不是这些软件的“大杂烩”,因此在需求分析阶段,我们有对平台需要实现的功能进行适当的删除与增加。例如删除了站内聊天的功能,取而代之的是“公众号的推送”机制(虽然在最后由于时间原因没有实现);增加了交易反馈机制,对于二手和任务从发布到接受到最后评价全流程跟踪,而不是简单的“信息发布平台”。
  • 在进行需求分析的时候,我们小组对Fidle需要实现的功能进行了充分的讨论,但考虑到这些功能仅仅还是我们小组成员能想到的功能,应该需要倾听校内其他同学甚至是其他学校同学的意见。因此我们通过发布问卷调查进行市场调研,在收集了近两百份问卷之后,我们不仅收获了很多对本组项目的改进性意见,从而添加了例如“自定义标签”“搜索筛选”“不同情况违约的处理”等功能,同时问卷调查也证明了我们的选题确实是戳中用户痛点的,这也充分增加了我们开发这款小程序的信心和决心。

设计

  • 在本次项目中我负责的是前端开发和原型设计。我认识到原型设计不需要将每一个页面的所有能点击的地方都加上动画和效果。原型的目的是为了使得前端开发能够有所参考,同时对项目的颜色、图标、字体等确定基调的地方予以确定。这次的设计阶段,进一步训练了我迅速完成原型设计的能力,同时让我明白了需求分析是之后所有工作的基础。原型设计能让开发者更加熟悉将要实现的系统的页面逻辑,包括页面之间的跳转,甚至是代码在哪些地方可以复用。因此一个好的原型设计是很能提高之后的开发效率的。

实现

  • 实现过程中需要遵守在项目前期制定的代码规范。同组开发人员有相同的代码风格在代码复审和之后的代码测试过程中能够起到重要作用。上文的Q3回答已经具体说明了代码规范的重要性,这里不再赘述。
  • 充分理解新框架以及其生命周期函数。我们组内的开发人员都是第一次接触微信小程序开发,在alpha冲刺开始之前,我们花了大约一到两天的时间对微信小程序的架构做了浅显的学习。在我看来,微信小程序开发和上学期学习的安卓很类似。接触这类的开发,至少需要知道哪里定义全局数据、怎么调用修改全局数据、怎么添加页面、怎么设置全局css等。其次,在每个页面中,它的机制又与安卓的生命周期函数类似。需要注意每一个函数在什么情况下执行,例如OnLoad()和OnShow()函数一个是在页面初次加载中调用,一个是在每次返回或进入该页面时就调用。因此在OnShow()函数中可以发送request请求,以保证在每次进入该页面时请求到的数据是最新的。

测试

  • 错误往往出现在输入以及页面的跳转。因此前端在写完页面时,首先应当使用假数据查看数据在页面的填充中是否有误,是否会出现错位、重叠等问题;在后端进行完测试之后,便可通过前后端交互进行接口测试,发现自己页面逻辑或者后端的错误。最终将不同的页面连接在一起做整体的测试。

发布

  • 发布也可以理解为让用户进行黑盒测试。用户在使用之后往往能够发现开发者在测试阶段没有发现的问题,同时对于开发出来的产品会有自己的看法和见解。因此在产品发布之后,团队应该积极发布调查问卷询问用户使用体验,反馈感受。同时面向用户给出的意见进行维护。

理解和心得

个人项目

本学期的个人项目主要包括两篇文档的撰写以及一次wordcount编程作业。在阅读《构建之法》之后提出自己的疑问让我在软件工程理论课以及实践环节中带着问题思考,对软件工程这一门课有了更加深刻的体会。软件评测作业中我对三个IT问答网站进行了对比评测,感觉自己好像成为了这些产品的测试人员以及PM。在评测的过程中自己也在思考,自己现在着手完成的团队项目还有哪些欠缺之处。而本学期的唯一一次wordcount编程作业,在助教测试环节拿了0分,这让我充分认识到编程之后进行大量的数据测试是十分重要的,不单单是自己编写的合法数据、非法数据的测试,同时也要包括大容量文件测试,最好也有有同学之间的相互测试。

结对编程

结对编程是我首次接触前后端分离这种开发方式。得益于sjr同学的帮助,我能够成功完成这次的结对开发作业,并且感受到合作开发带来的1+1>2的益处。一开始我对前后端交互方式完全没有概念,在进行了相关知识的学习之后对于发送请求和处理请求获得数据等操作有了一定的理解,也为之后的团队项目开发奠定了一定的基础。结对编程也让我和队友体验到了第一次互审代码的工作流程,认识到代码的规范性和合理的注释在复审中的重要性。在复审过程中,双方不断重复编写代码和修改代码的过程,在最终完成项目后我感受到自己的心态得到了充分的锻炼与磨练,也让我习得在团队中应该如何配合队友完成工作。

团队项目

这次beta冲刺让我体会到了在开发过程中不单单要注重自己部分功能的实现,也需要阅读同组开发人员的代码。因为有部分功能是可以通过他人的代码复用减少工作量的,因此阅读和理解他人的代码,在编写自己部分的代码时也尤其需要注重代码规范,以方便他人阅读。在微信小程序使用第三方组件库的时候,有可能会出现与原生代码冲突的情况,而且这些错误可能在电脑端没有问题,在真机调试时才会被暴露出来。前后端的及时沟通也非常重要,不然可能会影响到其他人的进度以及测试。

感谢整个“那你能帮帮我吗”小组成员,感谢全体的辛苦付出!

第二部分:个人技术博客

微信小程序中多tab的解决办法

概述:在本次团队项目的中,我负责的展示评论列表模块用到了两层tab嵌套的情况,里面坑还蛮多的,觉得可以拿出来讲一将。

posted @ 2021-06-26 22:36  BobbyShao  阅读(140)  评论(3编辑  收藏  举报