zoukankan      html  css  js  c++  java
  • 团队作业Week14

    团队作业Week14

    0. 在吹牛之前,先回答这个问题: 如果你的团队来了一个新队员,有一台全新的机器, 你们是否有一个文档,只要设置了相应的权限,她就可以根据文档,从头开始搭建环境,并成功地把最新、最稳定版本的软件编译出来,并运行必要的单元测试? (在这过程中,不需要和老队员做任何交流)

      这个原本是没有的,在这里介绍一下:
      需要配置的环境并不复杂。本地需配置好jdk(1.8)+android studio(1.5及以上版本) + android sdk(API23)即可。之后通过TFS的源代码管理功能,将主分支映射到本地,将项目添加到android studio即可编译运行。

    1. 你的团队的源代码控制在哪里?用的是什么系统?如何处理文件的锁定问题?
      场景: 程序员果冻正在对几个文件进行修改,实现一个大的功能, 这时候,程序员小飞也要改其中一个文件,快速修复一个问题。怎么办?
      一个代码文件被签出 (check out) 之后,另一个团队成员可以签出这个文件,并修改,然后签入么?
    有几种设计,各有什么优缺点?
      例如,签出文件后,此文件就加锁,别人无法签出; 或者, 所有人都可以自由签出文件

      TFS提供了一个很方便的功能。点击右键-签出进行修改,弹出如是界面。选择了对应的“锁类型”后,可以自动加锁,其他团队成员也可以签出,但是不能签入。
      还有其它的方法,比如为其他团队成员新建一个分支,并在各自的分支上进行修改,最后合并分支。

    2. 如何看到这个文件和之前版本的差异? 如何看到代码修改和工作项 (work item),缺陷修复 (bug fix) 的关系。

      场景: 程序员果冻看到某个文件被修改了,他怎么看到这个文件在最近的修改究竟改了哪些地方?
      场景: 程序员果冻看到某个文件在最新版本被改动了100 多行, 那么和这100多行对应的其他修改在什么文件中呢? 这个修改是为了解决哪些问题而作的呢? 那些问题有工作项 (work item,issue),或者bug 来跟踪么?
    场景1:可以通过将服务器端代码和本地代码进行比较的方式,查看修改的部分。

    场景2:可以在签入时在注释中详细描述添加的功能/修改的BUG。也可以将更改与工作项关联。

    3.如果某个文件在你签出之后已经被别人修改,并且签入了,那么你在签入你的修改的时候, 如何合并不同的修改(merge)? 你用了什么工具来帮助你?

      一个比较好的方法是:当多个成员需要对同一部分代码进行修改时,为每一个人单独创建一个分支,最后将分支进行合并。

      也可以将使用“比较的功能”,找出最新代码中新添的部分,再将自己的修改添加进去并签入。

    4.你有20个文件都是关于同一个功能的修改,你要如何保证这些文件都同时签入成功(修改的原子性),或者同时签入不成功?

    从编程习惯的角度:应该在本地完成全部的修改,并编译通过后,再统一签入到服务器端。
    从团队合作方式的角度:可以为这些文件统一关联一个标签,便于管理。还可以在签出之前创建一个新的分支。

    5. 你的PC 上有关于三个功能的修改,但是都没有完成,有很多文件处于半完工的状态,这时你要紧急修改一个新的 bug,如何把本地修改放一边,保证在干净的环境中修改这个 bug, 并成功地签入你的修改 --- changelist management。

    修改一件任务量较大、周期较长的任务时,在全部完成之前不要将部分代码进行签入。此外,可以为这项任务单独创建一个分支。

    6. 如何给你的源代码建立分支?
      场景:你们需要做一个演示,所以在演示版本的分支中对各处的代码做了一个临时的修改, 同时,主要的分支还保持原来的计划开发。 你们怎么做到的? 在演示之后,演示版本的有些修改应该合并到主分支中,有些则不用,你们是怎么做到的?
      场景: 你们的软件发布了,有很多用户,一天,一个用户报告了一个问题,但是他们是用某个老版本,而且没有条件更新到最新版本。 这时候,你如何在本地构建一个老版本的软件,并试图重现那个问题?
      使用TFS创建分支:

      场景1:将演示分支合并到主分支时,可以手动选择需要添加的变更集。这时选择我们所需的修改即可

      场景2:可以在历史信息中找到以往的变更集,在相应的变更集上进行回滚,就能重现当时的代码。

    7.一个源文件,如何知道它的每一行都是什么时候签入的,为了什么目的签入的 (解决了哪个任务,或者哪个bug)?
    场景: 一个重要的软件忽然出现崩溃的情况, 程序员果冻经过各种debug手段,发现问题是在某一个文件中有一行代码似乎显然出了问题,但是这个模块被很多其他模块调用,这行代码是什么时候,为了什么目的,经过谁签入的呢?如果贸然修改,会不会导致其他问题呢? 怎么办?

      签入时,会在注释中描述本次修改的功能,或者关联workitem,一目了然地明白其功能。在源代码管理中,可以查看每个文件的历史梗概,得知每次签入的时间和目的。
      场景:通过查看历史纪录,查看修改这模块的成员是谁,可以询问他的意见或者请他来调试这一模块。

    8. 如何给一个系统的所有源文件都打上标签,这样别人可以同步所有有这个标签的文件版本?
      代码每天都在变, 有时质量变好,有时变差,我们需要一个 Last Known Good (最后稳定的好版本) 版本, 这样新员工就可以同步这个版本, 我们如果需要发布,也是从这个版本开始。那么如何标记这个 Last Known Good 版本呢?

      原来TFS自带了标签功能~~~
      可以给整个分支、整个路径添加标签,或者给某个文件单独添加标签。用标签查找功能,即可获取这个标签关联到的全部代码。
      在这个场景中,通过一系列的测试,得到了一个相对稳定的版本后,应该及时对当前分支添加标签。

    9. 你的项目的源代码和测试这些代码的单元测试,以及其他测试脚本都是放在一起的么? 修改源代码会确保相应的测试也更新么?你的团队是否能部署自动构建的任务?
      在签入之前,程序员能否自动在自己的机器上运行自动测试,以保证本地修改不会影响整个软件的质量?
      在程序员提交签入之后,服务器上是否有自动测试程序, 完成编译,测试,如果成功,就签入,否则,就取消签入?
      团队是否配置了服务器,它自动同步所有文件,自动构建,自动运行相关的单元测试,碰到错误能自动发邮件给团队

    这方面我们做的有所欠缺,不过这到问题给我们提出了很好的参考意见。后期我们会着手服务器的配置。

  • 相关阅读:
    zookeeper使用场景
    zookeeper安装配置
    hadoop 远程调试
    deep learning笔记
    Sentiment Analysis(1)-Dependency Tree-based Sentiment Classification using CRFs with Hidden Variables
    PRML阅读笔记 introduction
    Python 学习笔记(2)
    python nltk 学习笔记(5) Learning to Classify Text
    python nltk 学习笔记(4) Writing Structured Programs
    python nltk 学习笔记(3) processing raw text
  • 原文地址:https://www.cnblogs.com/groupofdream/p/5075271.html
Copyright © 2011-2022 走看看