个人博客作业

个人博客作业

前言

项目 内容
这个作业属于哪个课程 北航2020春软工
这个作业的要求在哪里 个人博客作业
我在这个课程的目标是 学习并实践软件开发,提高团队合作的能力
这个作业在哪个具体方面帮助我实现目标 快速了解、学习软件工程,提出问题,进行思考

1. 快速看完整部教材,列出你仍然不懂的5到10个问题,发布在你的个人博客上

  • 问题1。工程教育中,应该以量作为评价标准吗?

    邹欣老师在习而学的软件工程教育 这一章节中分享一个陶艺课的故事

    把学生分成两组,一组以出产的陶罐的量来评分,一组不要求数量, 纯粹以质评分。一个学期后,真正好的陶艺作品反而是出现在那以量评分的组里。各种道理值得大家思考。

    在工程教育中,的确大量的练习得到的经验是非常必要的,一味的空想而不实践大多数时候不会取得成就。对于“真正好的陶艺作品出现在以量评分的组里”这一结果,我觉得也蛮合理的。但是如果只以陶罐的量来评分,假设学生以追求高分为目标,难免会有学生随便对付,没有理解,只有机械重复,没有提高,就像中小学的题海战术,往往只对部分人有效。我觉得以量评分至少要因材施教,并确定某一质量底线,否则完全以量评分并不能够使得所有的同学能发挥出自己最大的潜能。

  • 问题2。代码的作者最了解代码的实现的局限性吗?

    邹欣老师在单元测试 这一章节讲到

    代码的作者最了解代码的目的、特点和实现的局限性。所以,写单元测试没有比作者更适合的人选了。

    我认同代码的作者的确最了解代码的目的和特点。但是我不认为代码的作者更了解其局限性,以我的个人经验来看,我感觉代码的作者很有可能会“不识庐山真面目,只缘身在此山中”,往往不能跳出自己的逻辑检查代码的局限性,所以我对这一点存疑。

  • 问题3。由于新冠疫情,结对编程的两个人无法面对面工作。这种情况下如何改进并做好“结对编程”?

    老师在结对编程这一章节中定义的结对编程:

    ​ 在结对编程模式下,一对程序员肩并肩地、平等地、互补地进行开发工作。两个程序员并排坐在一台电脑前,面对同一个显示器,使用同一个键盘,同一个鼠标一起工作。他们一起分析,一起设计,一起写测试用例,一起编码,一起单元测试,一起集成测试,一起写文档等。

    该章节提及的结对编程的好处:

    (1)在开发层次,结对编程能提供更好的设计质量和代码质量,两人合作能有更强的解决问题的能力。

    (2)对开发人员自身来说,结对工作能带来更多的信心,高质量的产出能带来更高的满足感。

    (3)在心理上, 当有另一个人在你身边和你紧密配合, 做同样一件事情的时候, 你不好意思开小差, 也不好意思糊弄。

    (4)在企业管理层次上,结对能更有效地交流,相互学习和传递经验,能更好地处理人员流动。因为一个人的知识已经被其他人共享。

    ​ 面对疫情,我们结对编程的两个人根本无法面对面工作,只能远程交流,作者讲解的结对编程的经验也不怎么适用了。而且我认为使用通讯软件的交流成本高,作者提到的结对编程的优势会很微弱,这种情况下对教材中的“结对编程”做出怎样的改进,才能在“远程结对编程”的情况下获得尽可能高的投入产出比?

  • 问题4。关于敏捷开发

    老师在敏捷开发章节中提到的一个原则是

    敏捷流程欢迎需求的变化, 并利用这种变化来提高用户的竞争优势。

    经常发布可用的软件,发布间隔可以从几周到几个月,能短则短。

    关于为什么要这么做,我的理解是使得开发人员能够更快更及时的得到用户的反馈从而及时修正、更改、增加软件功能。我的问题是这样也就导致了敏捷开发会议很多,交流成本很大,所谓的敏捷开发是一个坑吗?这个问题下有答主提到,敏捷开发的会议很多,而且很多时候这些会议并没有起到应有的作用,我们应该怎么做才能尽量避免采坑,学到真正的敏捷开发?

  • 问题5。在市场竞争中,如何发挥先来者优势?

    魔方的创新 这一章节中,作者讲述了如何逐步的实现模仿->创新的后来者居上之路。在创新 - VCD 的故事这一章节里,也讲述了世界上第一台VCD的创造者陆达的万燕公司由于没有申请专利,被各路公司争相模仿,虽然VCD在当时的确有着极大的市场,但是万燕公司在VCD发明三年后占据的市场份额只有3%。这些例子让我觉得先来者往往会丧失市场,所以我查找了在市场竞争中,一个先来者除了申请专利保护外(而且有些可能还不支持申请专利保护),如何才能最大可能发挥先来者优势,在我查到的资料中提到的大概有以下几点:率先占有关键资源,率先获得市场份额,率先建立转换成本。我的疑问是市场中的先来者,是该以创新立命,以不断创新为首位,还是先稳固市场,建立这一市场的进入壁垒?

2. 请问 “软件” 和 “软件工程” 这些词汇是如何出现的 - 何时、何地、何人?

  • “软件”:2000年,耶鲁法学院的图书管理员Fred Shapiro发表了一封信,这封信揭露了其在对JSTOR的电子档案的搜索中,发现在由美国数学家Tukey于1958年发布的论文"The Teaching of Concrete Mathematics"中,提到了对于单词“software”的用法。1995,Paul Niquette声称他在1953年十月最初创造了这个词,虽然他没能找到任何资料支持他的说法。
  • “软件工程”:这篇文章提到,“软件工程”一词是 Margaret Hamilton 在阿波罗计划期间提出的。而在《中国大百科全书》第二版 中提到,1968年大西洋公约学术会议上提出了软件工程。

3.【附加题】:大家知道了软件和软件工程的起源,请问软件工程发展的过程中有什么你觉得有趣的冷知识和故事?

​ 美国银行信托软件系统开发案。美国银行1982年进入信托商业领域,并规划发展信托软件系统。项目原订预算2千万美元,开发时程9个月,预计于1984年12月31日以前完成,后来至1987年3月都未能完成该系统,期间已投入6千万美元。美国银行最终因为此系统不稳定而不得不放弃,并将340亿美元的信托账户转移出去,并失去了6亿美元的信托生意商机。

4. 上网调查一下目前流行的源程序版本管理软件和项目管理软件都有哪些, 各有什么优缺点? 请按照最近一两年使用人数的多少, 从多到少排序并说明各自有多少用户(估计),工具的优缺点(可以引用相关资料并注明来源)。

  • git

    • git是用于Linux内核开发的版本控制工具,是一个开源的分布式版本控制系统。
    • 优点
      • 适合分布式开发,强调个体。公共服务器压力和数据量都不会太大。
      • 速度快,灵活。git分支的本质是一个指向提交快照的指针,速度快、灵活,分支之间可以任意切换。都可以在本地进行操作可以不同步到远程
      • 任意两个开发者之间可以很容易的解决冲突。多人开发很容易就会出现冲突,可以先pull远程到本地,然后在本地合并一下分支,解决好冲突,在push到远程即 可。
      • 离线工作。如果git服务器出现问题,也可以在本地进行切换分支的操作,等联网后再提交、合并等操作。
    • 缺点
      • 学习周期相对而言比较长。
      • 代码保密性差,一旦开发者把整个库克隆下来就可以完全公开所有代码和版本信息。
      • git没有严格的权限控制,一般是通过系统设置文件的读写权限来做权限控制。
  • Microsoft TFS

    • Team Foundation Server(TFS)是一种为 Microsoft 产品提供 源代码管理、数据收集、报告和项目跟踪,而为协作软件开发的项目。可作为独立的软件,或 Visual Studio Team System (VSTS) 在服务器端后端平台。它是Microsoft应用程序生命周期管理(ALM)工具的核心协作平台,简单的说它是管理和开发软件项目的整个生命周期的平台工具。可以用于版本管理。
    • 优点
      • 对敏捷,msf,cmmi等项目、过程管理、过程改善的支持,即产品全生命周期管理。
    • 缺点
      • 能应用起来的团队、公司的数量极少。多数真正用起来,也就是源代码管理这部分,这也仅仅是占tfs极小部分功能。
  • Mercurial

    • Mercurial 是一种轻量级分布式版本控制系统,采用 Python 语言实现,易于学习和使用,扩展性强。其是基于 GNU General Public License (GPL) 授权的开源项目。
    • 优点
      • 跨平台。基于python,Mercurial目前跨Mac、Windows、Linux
      • 封装好,学习门槛低
      • 分布式系统比集中式的单服务器系统更健壮,且对网络的依赖性更低。
    • 缺点
      • 分支管理不够灵活
      • 支持社区略差
  • GitHub

    • 是一个面向开源及私有软件项目的托管平台,因为只支持git 作为唯一的版本库格式进行托管,故名GitHub
    • 优点
      • pull request,issue等特点对开发人员很友好
      • 功能设计简洁实用上手很快,可用性好,已有很多相当质量的各类项目和优秀开发者在上面
    • 缺点
      • wiki功能太弱,导致文档(对于开源项目很重要)经常被分离到一个独立站点
      • 基于git,学习周期较长。
  • Bitbucket

    • Bitbucket是Atlassian公司提供的一个基于web的版本库托管服务,支持Mercurial和Git版本控制系统。
    • 优点
      • 支持Hg,也支持git。最易学易用(但不是最强大的)的分布式版本管理工具
      • 完全免费的闭源项目,支持5人以内的合作开发
    • 缺点
      • 不开源
      • 系统不稳定
  • Trac

    • Trac是Edgewall公司开发并维护的开放源码网页界面项目管理、缺陷追踪软件
    • 优点
      • 灵活,可以随心所欲控制、可以与SVN集成
    • 缺点
      • 功能不是很强大
  • Bugzilla

    • Bugzilla是一款用于软件缺陷的追踪管理网络程序,由Mozilla计划开发和应用
    • 优点
      • 通过跟踪和描述处理Bug
      • 完备的产品分类方案和细致的安全策略,安全的审核机制
    • 缺点
      • 只能管理软件缺陷
  • Apple XCode

    • Xcode 是运行在操作系统Mac OS X上的集成开发工具,由Apple Inc开发。
    • 优点
      • 为iOS和Mac开发而设计
      • 便捷的代码管理器,自动生成类关系图、函数方法列表等
    • 缺点
      • 稳定性不好
  • 用户数比较排序

    Name Users Projects
    GitHub 31,000,000 100,000,000
    Bitbucket 5,000,000 Unknown
    Launchpad 3,965,288 40,881
    SourceForge 3,700,000 500,000
    GitLab 100,000 546,000
    GNU Savannah 93,346 3,848
    OSDN 54,826 6,294

5. 调查完目前流行的源程序版本管理软件和项目管理软件后,请你选择其中至少5个软件来进行动手实践

  • git

    体验:简单好用速度快,对大文件的不友好

  • github

    体验:方便好用,就是网速比较慢


参考资料

参考资料
git,git优点与缺点TFS,TFS简介Mercurial,Mercurial有哪些优点GitHub,GitHub有什么优缺点GitHub、Bitbucket、Google Code 各有哪些优缺点?GitHub、GitLab与BitBucket应该怎么选?TracTrac优缺点Bugzilla
软件危机
现代软件工程讲义
Margaret Hamilton采访
[《中国大百科全书》第二版-软件工程](<https://cnkidbk-lib.e2.buaa.edu.cn/indexengine/entry_browse.cbs?no=20360&db=dbk2&indexval=����)
Comparison_of_source-code-hosting_facilities
posted @ 2020-03-05 23:20  zhyiuxan  阅读(268)  评论(1编辑  收藏  举报