软件工程第一周作业:软件工程和代码托管平台
0x01 :请问 “软件” 和 “软件工程” 这些词汇是如何出现的 - 何时、何地、何人
软件:最早的软件的概念,由Richard R. Carhart在1953年8月,Rand Corporation的备忘录中提出,并将其使用于工程背景中(The earliest known publication of the term "software" in an engineering context was in August 1953 by Richard R. Carhart, in a Rand Corporation Research Memorandum.),而真正的电子的软件,是由John Tukey在论文"The Teaching of Concrete Mathematics"中引用,并被发表在JSTOR中(In 2000, Fred Shapiro, a librarian at the Yale Law School, published a letter revealing that Tukey's 1958 paper "The Teaching of Concrete Mathematics" contained the earliest known usage of the term "software" found in a search of JSTOR's electronic archives, predating the OED's citation by two years.)
软件工程:"软件工程"一词是Margaret Hamilton致力于为软件以及那些发明者争取应有的正统性与尊重,所以开始使用“软件工程”这样的字眼来将之与硬件还有其他工程学类做出区别,最早发明于阿波罗11号软件系统的开发期间
0x02 :源程序版本管理软件和项目管理软件及优缺点
n VSS
VSS 采用Windows操作界面,且配置和安装相对简单,参考微软的开发文档即可应用于实际工程中。VSS配置管理提供文件的版本跟踪、基线的管理,同时提供Share\Branch\Merge功能以支持团队的开发。
但与其他代码托管平台相比,VSS智能运行在Windows平台而不支持其他操作系统,同时其安全性较低,即便可以设置正常的四级权限,但完全共享给用户后极易导致文件的恶意删除,同时,VSS也不支持对流程的管理,和异地团队的开发支持。
n Git
Git是一款免费的、开源的、分布式的版本控制系统。git采用了分布式版本库的方式,不必服务器端软件支持,使源代码的发布和交流极其方便。每一个git克隆都是一个完整的文件库,含有全部历史记录和修订追踪能力。其最大特色就是“分支”及“合并”操作快速、简便。支持离线工作,git是整个项目范围的原子提交,而且git中的每个工作树都包含一个具有完整项目历史的仓库。
因此,Git适合于分布式开发,公共服务器压力和数据量不大,能相对容易地解决冲突,也满足离线工作的工作状态;但学习周期相对较长,且若其他开发者将整个库克隆后可完全公开全部代码和版本信息。
n Mercurial
Mercurial 是一种轻量级分布式版本控制系统,采用 Python 语言实现,易于学习和使用,扩展性强。其是基于 GNU General Public License (GPL) 授权的开源项目。
与传统的使用集中式的 repository的版本控制系统相比,Mercurial由于采用了分布式的模型,可以由用户自主管理属于自己的repository,同时,分布式系统比集中式的单服务器系统具备更强的健壮性,不会因为单个节点崩溃而导致全部系统无法运行,同时其对网络的依赖性也有所降低,同Git类似,可以实现离线的工作。
n Bitbucket
BitBucket 同Github类似,属于代码托管网站,采用Mercurial和Git作为分布式版本控制系统,同时提供商业计划和免费账户。用户能在BitBucket上无限制地添加私有仓库,并提供无限制的磁盘空间,能同时支持HTTP/SSH的访问,同时也提供了丰富的扩展功能供用户使用,如:Bug 跟踪、项目Wiki、API 支持、灵活的权限控制、可自定义域名等
n SVN
SVN是Subversion的简称,是一个开放源代码的版本控制系统,相较于RCS、CVS,它采用了分支管理系统,它的设计目标就是取代CVS。互联网上很多版本控制服务已从CVS迁移到Subversion。在功能上,它管理方便,逻辑相对符合大众的思维习惯;同时集中式的服务器更能保证安全性,也使得代码一致性非常高。
n Trac
Trac是一个为软件开发项目需要而集成了Wiki和问题跟踪管理系统的应用平台,是一个开源软件应用。Trac是以面向进度模型为项目管理模型的,很明显的特点就是它以里程碑(Milestone)方式进行项目管理的。每个里程碑中的具体要做哪些事情,就使用Ticket来进行定义、跟踪等。同时,Trac提供SCM配置管理平台,具备良好的扩充性。通过WebAdmin界面中的Plugin功能,可以很方便的安装下载的插件,也可以通过此功能查看已经安装的插件,并可对其中的插件进行启用或停用操作
n Rational
Rational是提供基于业界开放标准的工具、最佳方案和服务,用于开发商业应用和构建软件产品及系统,包括移动电话和医疗系统等设备使用的嵌入式软件,是IBM软件开发平台的一部分,包括生命周期管理、统一建模语言、功能测试和回归测试等多个组成部分
0x03 :《构建之法》阅读提问
n 在开发过程中的设计框架中,预留接口方便维护是讨论的重要组成部分,但如果开发过程遇到需求的急剧调整,如何设计独立性较强,模块集成较高的接口
n 既然软件开发是一个具有不可预知性和变化性的动态的过程,如何在初期的架构过程中合理地为可能的需求预留扩展的空间
n 开发的后期阶段,遇到用户需求的发生急剧变化的情况,应当选择重构代码,还是实行敏捷开发,尽早在更新的版本中增加一夹在前端和后端间的中间层
n 软件开发过程,在遇到文档不全面的旧代码,如何重新维护或测试保证其正确运行
n 软件工程是团队型的项目,那仅针对学习过程,能否提供崭新的思路保证每个人都能去担当每一角色来保证学习的完整性