Q1:快速看完整部教材,列出你不懂的 5 - 10 个问题,发布在你的个人博客上。
第4章 两人合作 —— 4.3 代码设计规范 —— 4.3.3 错误处理
此处提到了“断言”的概念,但着墨不多,介绍简略。
那么问题来了,挖掘机……不是,断言是什么?
编写代码时,如果程序员相信在程序中的某个特定点某表达式值(布尔式)为真,可将其标为断言(assert)。
举个栗子:
public class AssertionDemo{
public static void main(String[]args){
int i; int sum=0;
for(i=0;i<10;i++){ sum+=i; }
assert i==10;
assert sum>10&&sum<5*10:"sum is "+sum;
}
}
上述程序中语句assert i==10断言i的值为10,如果i的值不为10将抛出AssertionError异常。语句assert sum>10&&sum<510:"sum is "+sum断言sum<510,如果为false,将抛出带有消息"sum is "+sum的AssertionError异常。
如果肯定某件事一定要发生,则可以使用断言;如果这件事有别的可能,则应用if……else处理。
由于可以在任何时候启用和禁用断言验证,因此可以在测试时启用断言,而在部署时禁用断言。同样,程序投入运行后,最终用户在遇到问题时可以重新起用断言。
P.S. 此问题算个人知识的不足,之前不了解断言的概念。
瀑布模型是将软件生存周期的各项活动规定为按固定顺序而连接的若干阶段工作,形如瀑布流水,最终得到软件产品。它在1970年由温斯顿·罗伊斯(Winston Royce)提出,直到80年代早期,它一直是唯一被广泛采用的软件开发模型。
这一小节中有一个图表,对比了敏捷(Agile)、计划驱动(Plan-driven)、形式化的开发方法(Formal Method)的适用范围。里面提到的形式化的开发方法,其基本步骤是怎样的呢?为什么它能有极高的可靠性呢?下面是一些关于形式化方法特点的说明,从中可以看出它能力的缘由。
这一小节提到了几种比较出名的敏捷开发方法论,如FDD、Scrum、XP、TDD。前三者在书中都有专门的介绍,但TDD,久闻其大名,到底是何许妙招?
这一小节中提到了每日构建的重要性,那么,什么是每日构建?
Q2:请问 “软件” 和 “软件工程” 这些词汇是如何出现的 - 何时、何地、何人?
软件在完全不像其他工程学科;例如像硬件工程那样的受到重视,而且在大家的眼光中他就像是艺术、魔术一般,而不是一门科学。
玛格丽特一直以来坚信这项发明流着艺术与科学的血液,虽然当时很少人是这么想。因此,软件以及那些发明者争取应有的正统性与尊重,所以她开始使用“软件工程”这样的字眼来将之与硬件还有其他工程学类做出区别。
事实上,这台电脑当初的设计可不只是分辨发生错误的情况。一个完整系列的复原程序也在这个软件当中。在这个情况下,软件所做出的行动是删除较低优先次序的程序,并且重新建立重要的执行程序,如果当初电脑没有辨识出这个问题而进行复原的程序,阿波罗号登陆月球的行动不会如此成功。”
Q3:上网调查一下目前流行的源程序版本管理软件和项目管理软件都有哪些, 各有什么优缺点? (提示:搜索一下Microsoft TFS、Git、Mercurial、GitHub、Bitbucket、Trac、Bugzilla、Rationale,Apple XCode)?
VSS相对于SVN的优点主要是:
1、 如果开发工具是VS.NET,用VSS较合适,方便
2、 安装配置和使用都简单,SVN安装配置复杂
3、 版本控制简单,打label后,要还原到这个版本较简单;SVN如果不控制提交粒度,要查找某个版本工作量会很大。
VSS相对于SVN的缺点主要是:
1、 VSS自身安全性较差
2、 只支持widows平台下,SVN支持Linux、Unix和windows8 }
github的优点:
功能设计简洁实用上手很快,可用性好(很少访问有问题,即使在我国 -_-bb),已有很多相当质量的各类项目和优秀开发者在上面。
github的缺点:
已知的主要缺点:免费套餐不支持私有项目(作为对比,使用 hg 的类似平台 BitBucket 的免费套餐支持私有项目,只是限制了开发者人数不超过5)。