zoukankan      html  css  js  c++  java
  • 提问回顾和个人总结

    项目 内容
    这个作业属于哪个课程 班级博客
    这个作业的要求在哪里 作业要求
    我在这个课程的目标是 系统地提升软件工程能力
    这个作业在哪个具体方面帮助我实现目标 回顾与总结学到的软件工程知识

    一.提问回顾

    提问博客链接

    1、关于第一章中的“软件的非连续性”

    经过一学期的软工,我认识到这种“软件的非连续性”其实是指因为软件是一个离散的系统,当系统逻辑变得复杂时,输入上的微小变化可能会导致其经过不同分支,产生截然不同的结果,这种情况下,测试就变得尤为繁重和困难,需要保证每一个逻辑分支都能被覆盖,才能保证软件的可靠性,因此这种"非连续性"较大的影响了软件的开发成本。解决这个问题的一个重要方面便是在设计阶段合理的拆分和解耦合,将复杂逻辑拆成互不相关的简单逻辑,分而治之。

    2.第二章---单元测试应覆盖所有的代码路径

    我的观点同之前一样,还是认为不需要保证单元测试覆盖所有的代码路径,理由跟之前一样:

    当一个项目非常庞大的时,对代码所有路径的100%测试覆盖需要编写的测试代码量可能比代码本身还大,测试工作量非常大;而其中的很多很多简单的代码,这种情况下我觉得不必为其编写测试代码。如何平衡测试效率和测试覆盖率是测试人员需要磨练的东西

    3.第三章---软件工程师思维误区之过早泛化

    我当时提的问题是有些项目扩展性不足、有些项目存在过早泛化问题,那么项目扩展性的度如何把握?

    这个问题现在想想其实要求两点:

    1.设计阶段就要对项目的架构、API等了解足够清晰。回顾我们软工开发的游戏《源码召唤》,我们发现一个问题:因为我们团队刚开始都是Unity小白,对很多游戏功能的实现都不了解,是后来边学边用的。因此回看我们设计阶段的技术规格文档,其实它非常简陋,此外不同人员负责游戏的不同模块,他们之间的对接主要是彼此商量出来的结果,并没有在设计阶段就很好地定义这些接口。设计阶段的接口定义模糊会导致项目的扩展性充满了未知。

    2.认清你的预期

    即给你的项目定个目标,预期能发展到什么程度,朝着那个目标去设计扩展性。

    4.第四章-----关于结对编程的如何落地

    我的观点同之前一样:

    在我看来,结对编程的复审可以以一个函数为单位,这里说的“任何一段代码”不必细化到每一行代码,在复审时对方只需要对这个函数的功能做一定的单元测试+了解这个函数的实现思路即可。在开发前设计好各个函数的输入输出以及边界情况等,就像OO课程里的JML一样;同时通过代码规范检查等机制来限制每个函数的大小、行数,这样在对方复审时检查工作会容易进行得多,有利于结对编程的落地

    5.第九章---高效的团队讨论

    之前我对“高效的团队讨论”提出了自己想到的一个问题

    有些会议存在这样一个问题:议题过于庞杂,有些议题无关乎一些与会者当下正在做的或者是相关的工作和领域,被强行凑进一个会,这时的会议的讨论与与会者其实是无关的,也浪费了与会者的时间。

    回过头来看,开发阶段我的软工团队例会基本是每天一次,大家一起通过腾讯会议说说自己这一天完成了什么工作,并由PM分配下一天的任务。可能其他队员说的工作跟你毫不相关,但是我仍然觉花时间听别人的工作汇报和问题反馈非常有意义:别人汇报的工作让你对项目的进度有了更深入的了解,而不是只将焦点放在你负责的部分;通过别人的汇报你可以了解到对方干了啥,也敦促自己别摸鱼;别人遇到的问题可能下一个踩坑就是自己。总之会议内容与你无关的部分并不是就浪费了你的时间,多听多学也是很有帮助的。

    二.知识点回顾

    需求阶段

    明确需求,保证调研的需求得是真需求,否则做好产品,再发现没人使用,那么整个项目的努力都会付之东流。

    设计阶段

    设计要定义好整个项目的架构给出明确的接口,定义好可重用的部分。在我们的开发的游戏中,这一点在游戏开发中尤为重要,因为各关卡的游戏场景里可重用的部分较多,定义好哪些组件可以重用,就把它做成一个prefab,后期修改这一组件会非常方便。

    实现阶段

    实现阶段我感受最深的是每日例会的作用,它帮助了我了解项目的整体开发进度,也起到了监督的作用,敦促了我不摸鱼,努力干活,同时每日例会也能反馈自己开发中遇到的问题,寻求技术帮助。

    测试阶段

    重视测试,频繁测试,全面测试。测试是保证产品可靠性和稳定性的重要手段,需要我们付出较多时间和精力。同时别将测试工作堆到开发完成后再统一做,否则测试工作将十分紧张。

    发布阶段

    注意给发布留出缓冲期,提前确定好发布平台,发布条件等,例如游戏的发布是否需要提供版号,这项要求在小米、华为应用商店就是必需的,在其他一些平台就没有硬性要求。提前确定发布在哪,能否发布,如何发布等环节非常重要,否则发布之时就会麻烦不断。

    维护阶段

    注意收集反馈,汇总问题和Bug,形成文档。

    三.心得体会

    结对编程

    主要是明确分工,同时保持良好的沟通。明确分工,两人并发编程,提高效率,代码审查也多了一双眼睛;但同样为了让别人能看懂你的代码,又需要你像JML那样定义好各函数的输入输出、功能,增加了许多工作量,沟通不畅也会带来很多交流成本,有利有弊吧。

    团队项目

    此前我从未在一个多人团队中开发一个项目,这次的团队项目对我来说确实是一次有意义的经历与实践。从需求调研到设计到开发、测试再到发布、维护,我们团队7个人都为了同一个目标而努力,遇到问题可以互相请教和沟通,这种氛围、这段经历让我觉得开发并不孤独。此外,随着项目的一点点推进,产品也越来越完善,成就感也是很强的。总而言之,这学期的软工实践非常充实,丰富了我的团队开发经验,我学到了很多。

  • 相关阅读:
    leetcode教程系列——Binary Tree
    《Ranked List Loss for Deep Metric Learning》CVPR 2019
    《Domain Agnostic Learning with Disentangled Representations》ICML 2019
    Pytorch从0开始实现YOLO V3指南 part5——设计输入和输出的流程
    Pytorch从0开始实现YOLO V3指南 part4——置信度阈值和非极大值抑制
    Pytorch从0开始实现YOLO V3指南 part3——实现网络前向传播
    Pytorch从0开始实现YOLO V3指南 part2——搭建网络结构层
    Pytorch从0开始实现YOLO V3指南 part1——理解YOLO的工作
    让我佩服的人生 文章
    win8.1配置cordova+ionic等一系列东西
  • 原文地址:https://www.cnblogs.com/notorious/p/13151933.html
Copyright © 2011-2022 走看看