阅读《构建之法》中的问题
关于变量名的问题
在书中我看到了在C等弱类型语言中因为变量语义多样所以需要用“匈牙利命名法”等方法来规范变量的命名。实际在我平时的编程之中,对于变量的命名也有很大的困惑,见到有些同学的拼音首字母命名法等等,我想问一下,在实际的工程运用中,对于变量命名又是怎样处理的呢?有没有一个约定俗称的规范呢?如何才能写出更加工程化的命名方式?这点在书中并没有详细说明。
关于结对编程的问题
在阅读课本之前,我脑海中对于结对编程的概念是两个人分配好任务,然后各自完成。但是在书中介绍的结对编程却是两个人共用一台显示器一个键盘同时完成一部分程序。这个在实际操作中我认为会有很多的限制,我们课程中的结对编程也要求这样编么?现实的在软件开发企业中,真的有很多人会结对编程么?
关于编程流程的问题
在书中介绍了很多编程流程的框图,但是之前并没有接触过类似的编程流程,所以在脑海中印象不深。不知道在之后的学习之中是否会实践这些编程流程呢?有些编程流程看起来过于冗长了并且有很多不必要的工作。现在的软件开发是怎样进行的呢?
关于敏捷编程的问题
敏捷编程最重要的一个前提就是scrum master要将当前的任务切成一个一个的小块。但是在实际工作中,往往有些工作是不能被分割的,这时候该如何是好呢?还有在这个体系中,是不是过于依赖scrum master的个人能力了呢?感觉整个团队是否能够做好工作,都取决于他的任务分配和互相协调了。
关于单元测试的问题
在上学期的OO课程中,我第一次接触到了单元测试。但是,我对此有些疑问,真的做到了100%覆盖,我觉得并不能保证代码就是正确的,因为往往这个时候会有一些情况的分支没有考虑到,而这些分支的确实会导致程序最后的崩溃和功能问题。
软件与软件工程
软件
根据维基百科的说法,软件一词首先由计算机之父阿兰图灵提出,但是直到1957年,软件才被John W. Tukey正式用来描述现在所被称为软件的东西。
软件工程
1968年秋季,NATO(北约)的科技委员会召集了近50名一流的编程人员、计算机科学家和工业界巨头,讨论和制定摆脱“软件危机”的对策。在那次会议上第一次提出了软件工程(software engineering)这个概念。
关于各种管理软件
(由于这些软件我之前都没有接触过,这些优缺点都是从网上找的,并进行个人的理解综合)
- Git和Github
Git是由Linux之父Linus Tovalds 为了更好地管理linux内核开发而创立的分布式版本控制/软件配置管理软件。而这个软件是本地版的,需要配置环境比较麻烦。Github则是Git的在线版,相当于搭建了一个在线的Git服务端可以让所有人方便的访问。
优点:pull request等功能强大,方便多人开发,历史记录功能
缺点:Github由于服务器在国外,国内访问速度很慢,难以完成大项目的合作开发。对于中文支持不好。且随时可能被墙。
- Microsoft TFS
TFS是微软的项目管理软件,与VS无缝结合
优点:对敏捷,msf,cmmi等项目、过程管理、过程改善的支持。强调对于产品生命周期的管理,对于源代码的管理仅是其功能的一小部分
缺点:整个系统是用 asp 实现的,用浏览器访问相当慢,用 XP 系统和32位系统无法访问。团队的邮件细节配置比较复杂,不关心的项目的变更集也会给发邮件。
- Mercurial
又称Hg,是一种类似于Git的版本管理软件
优点:照顾命令行用户,大多数命令都有双字母的简称,效率更高。照顾SVN的迁移用户,命令上大多数都继承自SVN,使得用户更加习惯。基于Python,服务器配置相对于Git更加容易。
缺点:Mercurial的branch管理和Git相比不方便,branch出来就删不掉。
- Bitbucket
类似于Github,一个同时支持Hg和Git的在线版本管理网站,支持免费的私有项目。
优点:相比于GitHub,多支持了Hg作为版本管理工具,更加易学易用。对中文支持较好。官方的git工具SourceTree比GitHub for windows好用。
缺点:社交性不足,做的没有GitHub好。
- Trac
以下几个工具在网络上的介绍都比较少,简单的介绍一下优缺点
优点:使用非常灵活,可以和SVN集成。
缺点:系统比较简单,功能和其他系统相比,不够强大。
- Bugzilla
优点:对中文支持好,对Linux扩展支持较好。
缺点:只能管理缺陷但是对于相应的测试用例等无法进行管理。
- Xcode好像不算管理软件?