软工个人博客作业1

我的疑问

单元测试应该覆盖所有代码路径,包括错误处理路径,为了保证单元测试的代码覆盖率,单元测试必须测试公开的和私有的函数/方法。

  • 在之前的面向对象设计的课程中,我初步地尝试了使用JUnit对自己的单元进行测试。但是对于测试的对象、粒度和测试的样例数据,我还是不能很好的把握。测试的粒度可以从小到大,从函数、方法到类再到模块,循序渐进。但是测试的样例数据方面,是否存在比较合理而且固定的方法,能够固定地按照一个流程去分析自己的应用,做到不重不漏,覆盖到所有的分支和情况?还是说单纯依靠代码的编写者去“我觉得,这个地方可能存在问题”这样的直觉和经验呢?

(1)驾驶员:写设计文档,进行编码和单元测试等XP开发流程。

(2)领航员:审阅驾驶员的文档、驾驶员对编码等开发流程的执行;考虑单元测试的覆盖程度;是否需要和如何重构;帮助驾驶员解决具体的技术问题。

  • 在这个过程中,我想知道结对编程过程中,是否会发生两者的贡献不匹配的情况。作为领航员,工作较为多元但是在代码数量方面的贡献不如驾驶员大,是否会出现领航员碌碌无为的情况?领航员在工作中更多是提出问题的一方,单从审阅文档进度、考虑测试覆盖的角度来看,领航员和甲方的区别在哪里?

产品负责人主导大家对于这个Backlog 进行 增/删/改 的工作。每一项的时间估计的单位为 “天”.

冲刺订单上的任务不会被分派,而是由团队成员签名认领他们喜爱的任务。 团队成员能主导任务的估计和分配, 他们的能动性得到较大的发挥。

冲刺期间, 每天要开一个每日例会 (SCRUM Meeting), 团队成员大多站着开会, 所以又称每日立会

  • 看完这一段,我越来越觉得敏捷开发对于团队的要求是很高的。不仅仅是团队成员各自的优势长处要互补,覆盖组织、研发、开发、测试、审查等各个方面,而且团队的熟练度必须很高,经历过一段时间的磨合;团队成员各自的积极性也要得到保证。没有这样的团队,很有可能会出现某个任务无人认领、每日例会浮于形式、工作效率不达标等现象。所以敏捷开发的效率似乎并不一定比按其他开发思想的效率高?同时考虑到需求的不断变动性,敏捷的乙方似乎会为了不断地满足甲方而承担更多的工作量?

大部分优秀的团队可以做到两个:

多, 快, 但是不省

多, 省, 但是不快

快, 省, 但是不多

PM 要带领团队选择哪两个是最重要的, 哪一个是可以牺牲的。

  • 在一个团队中,肯定有熟练者和不熟练者,因为最后采取的方案和开发工具很可能并不是所有人都熟悉的,同样的任务熟练者很快完成,但初学者需要花费很多时间来熟悉。那么作为一个PM,遇到这样的矛盾,如何去安排工作,使得初学者也能够得到认同和满足?

在测试中,如果发现问题,我们就得报告,在移山过程模型中,“Bug”是第二个工作项类型。在这一阶段,我们就主要用Bug进行交流。

  • 在实际的运行过程中,用户可能会反映很多不同类型的bug,但是用户对于bug的描述肯定不会非常全面具体。那么此时,在这样一个背景下,是谁负责去复现这个bug并试图找出原因? 如果遇到用户说不清道不明的情况(现实中常常会遇到),是否只有通过地毯式排查才能复现bug?

  • 在多个成员并行开发的过程中,可能遇到需要合并分支的情况(merge),那么在合并的时候如果发生了冲突,是否需要两个人都在场以便沟通冲突的部分如何取舍?我在之前的合作作业中,也经常遇到merge冲突的情况,当时我是通过回避冲突部分,把冲突部分单独另外提交的方式来规避问题;但是遇到对对方代码不熟悉的情况下,我如何去统一冲突呢?

软件和软件工程

软件

  • 该词语最早出现在1953年8月Richard R.Carhart发表的一份兰德公司的研究备忘录之中。
  • 该词最早发表在1958年美国数学家Tukey发表的论文"The Teaching of Concrete Mathematics"之中。

软件工程

  • 这个词最早是由数学与电脑科学先锋- Margaret Hamilton提出的,当时软件工程一词被人们当成笑话,不被重视,但是最终得到的尊重。
  • 数学与电脑科学先锋,一个自学程序设计,并且当上 MIT 软件工程测试实验室主任(也就是为美国太空总署 NASA 开发电脑系统的单位)的女性——Margaret Hamilton,在阿波罗登月计划期间,首先提出了“软件工程“一词。

小故事

Linus在1991年创建了开源的Linux。2002年以前,世界各地的爱好者把pull request通过diff的方式发给Linus,然后由Linus本人通过手工方式进行merge!但是后来代码库太大了,linus忙不过来,社区的弟兄们也觉得这样不科学,于是Linus选择了一个商业的版本控制系统BitKeeper,BitKeeper的东家BitMover公司出于人道主义精神,授权Linux社区免费使用这个版本控制系统。

但是2005年,linux江湖圈里一个叫Andrew的人试图破解BitKeeper的协议,被BitMover公司发现了,于是BitMover公司一怒之下决心要收回Linux社区的免费使用权。

Linus也很犟,自力更生,花了两周时间自己用C写了一个分布式版本控制系统,叫Git。一个月之内,Linux系统的源码已经由Git管理了!

VCS

  • Microsoft TFS

    优点:与VS无缝接合,可使跨职能团队有效处理各种规模的项目,还集成了项目管理、版本控制、BUG 跟踪,能跟踪需求、项目进度

    缺陷:能充分发挥功能的团队、公司的数量极少,硬件要求高,维护复杂

  • Git

    优点:使用http协议或git协议传输,速度很快,轻量,有出色的合并和跟踪能力

    缺点:新手需要记忆大量的命令和概念。代码保密性差。不能够捕捉创意过程和记录创意点子

  • Mercurial

    优点:有revset,扩展性,append only的存储结构,易于掌握,对新手友好
    缺点:分支管理不灵活,branch管理不够方便

  • Apple XCode

    优点:本身是IDE,有比其他版本管理工具更多样性的功能,编译速度极快,自动提供撤消、重做和保存功能,无需编写任何编码

    缺点:仅用于macOS,可能与windows/linux下许多习惯不同,且插件容易因为版本更新而失效。

  • Trac

    优点:非常灵活,可以随心所欲控制可以和SVN集成,权限设置比较完善,且是一个SCM配置管理平台,意味着它有良好的扩充,权限体系完善

    缺点:不支持多项目,需求和缺陷没有分,用 Wiki 来替代 Word 等工具编写文档提高了学习成本,中文支持不好,核心功能很少,需要配合插件使用。

  • Bugzilla

    优点:检索功能强大,中文化支持完整

    缺点:快速搜索结果不准确,只能管理缺陷

猜你喜欢

转载自www.cnblogs.com/lzhmark/p/12404640.html