1950年代,第一次分离,主程序与子程序的分离结构是树状模型,子程序可先于主程序编写。经过使用库函数来简化编程,实现最初的代码重用。产生基本的软件开发过程:分析—设计—编码—测试,使大型软件系统的开发成为可能。
1975—1980年代,第二次分离,规格说明(Spec)和体(body)的分离说明是类型定义和操做描述,体是操做的具体实现。(具体的例子就是C++,Java等面向对象语言的类说明与类实现的分离。)解决方案设计只关注说明,实现时引用或者设计体。体的更改、置换不影响规格说明,保证了可移植性。支持多机系统,但要一样环境。此时产生了划时代的面向对象技术。
1995—2000年代,第三次分离,对象使用和对象实现的分离基于构件开发:标准化的软件构件如同硬件IC,可插拔,使用者只用外特性,不计内部实现。Web Services:软件就是服务。分布式,跨平台,松耦合。
编程
一方面,规格化设计能够帮助开发者理清思路,构建一个写程序的框架,这样一来开发者能够按照既定的套路来完成本身的任务,从而可以摒弃杂念,提升效率。
另外一方面,一个程序中不少代码会以一块一块的形式被反复使用,这些重复的代码块有可能被封装为函数反复使用,也有可能被放入库中供他人使用。若是能按照必定的规格去完成他们,那么调用者没必要大费周折的去理解代码,能够经过已有的对于格式的学习以及清晰明了的格式来快速完成对代码的理解,从而提升学习工做的效率。
框架
BUG内容 | BUG类型 | BUG代码行数 | BUG缘由 | 方法名 |
---|---|---|---|---|
程序没法运行 | error | 10 | 在main方法中未将全部线程start | public static void main() |
无JSF错误
分布式
BUG内容 | BUG类型 | BUG代码行数 | BUG缘由 | 方法名 |
---|---|---|---|---|
规格检查->没有写Overview | imcomplete | 1 | 将Overview写在了每一个方法前,而没有写在类前 | |
是否选择流量最短的路径 | error | 1 | 忘记将上一次有车通过的边的流量加一 | public void drive(int des) |
汇集关系:无
函数
BUG内容 | BUG类型 | BUG代码行数 | BUG缘由 | 方法名 |
---|---|---|---|---|
方法规格检查->JSF不符合规范 | imcomplete | 1 | 有的JSF中将==写为了= | |
缺程序设计文档 | imcomplete | 1 | 误解了指导书的要求,没有写程序设计文档 | |
行驶一条边的时间不为500ms | error | 10 | 由于程序采用系统时间,并且不能进行化整,故每过几秒程序会有几毫秒的偏差 |
汇集关系:无
学习
未按照要求格式书写测试
//错误 /** * @REQUIRES:None * @MODIFIES:None * @EFFECTS :return flow; */ //改进 /** * @REQUIRES:None * @MODIFIES:None * @EFFECTS :\result == flow; */
误将==写为=this
//错误 /** * @REQUIRES:None * @MODIFIES:None * @EFFECTS :\result = errorInfo; */ //改进 /** * @REQUIRES:None * @MODIFIES:None * @EFFECTS :\result == errorInfo; */
使用天然语言编码
// 错误 /* * @REQUIRES:None * @MODIFIES:None * @EFFECTS: 初始化出租车; */ // 改进 /* * @REQUIRES:None * @MODIFIES:None * @EFFECTS: \this.id == id; */
语句结束未加;线程
//错误 /** * @REQUIRES:this.repOK == true && edge.repOK == true * @MODIFIES:this.edgeNearBy * @EFFECTS :(edge.isLegal) ==> edgeNearBy.add(edge) */ //改进 /** * @REQUIRES:this.repOK == true && edge.repOK == true * @MODIFIES:this.edgeNearBy * @EFFECTS :(edge.isLegal) ==> edgeNearBy.add(edge); */
部分语句不够简洁设计
//错误 /** * @REQUIRES:this.repOK == true && taxiNumber >= 0 && taxiNumber <= 99 * @MODIFIES:taxiCanTake * @EFFECTS :taxiCanTake.add(taxiNumber); */ //改进 /** * @REQUIRES:this.repOK == true && 0 <= taxiNumber <= 99 * @MODIFIES:taxiCanTake * @EFFECTS :taxiCanTake.add(taxiNumber); */
这几回做业,咱们的主要着重点在于程序的JSF规范,类规范上,这些虽然对于代码质量没有直接的提升,可是在咱们之后开发大型程序,须要一个团队协做时,一个好的JSF规范,类规范,可以极大地提升团队协做的效率,可以从另一方面提升代码,乃至整个团队的质量。 在咱们之后的学习中,咱们也能够保持书写规范的习惯,这可以极方便的与他人进行交流学习,下降学习与合做的成本。同时咱们最好也在写代码前先进行规划,好比写JSF优先于代码实现,这样可以经过抽象出某一段代码的功能,提早考虑好程序各部分之间的关系,提升后续编写代码时的效率,提升代码总体的可读性。