第三十四章 软件工艺的话题

征服复杂性

降低复杂度是软件开发的核心。

  • 在架构层将系统划分为多个子系统,以便让思绪在某段时间内能专注于系统的一小部分;
  • 仔细定义类接口,从而可以忽略类内部的工作机理;
  • 保持类接口的抽象性,从而不必记住不必要的细节;
  • 避免全局变量,因为他会大大增加总是需要兼顾的代码比例;
  • 避免深层次的继承,因为这样会耗费很大精力;
  • 避免深度嵌套的循环或条件判断,因为他们能用简单的控制结构取代,后者占用较少的大脑资源;
  • 别用goto,因为它们引入了非顺序执行,多数人都不容易弄懂;
  • 小心定义错误处理的方法,不要滥用不同的错误处理技术;
  • 以系统的观点对待内置的异常机制,后者会成为非线性控制机构。异常如果不受约束地使用,会和goto一样难以理解;
  • 不要让类过度膨胀,以至于占用整个程序;
  • 子程序应保持短小;
  • 使用清楚、不言自明的变量名,从而大脑不必费力记住琐碎细节;
  • 传递给子程序的参数数目应尽可能少。更重要的是,只传递保持子程序接口抽象所必须的参数;
  • 用规范和约定来使大脑从记忆不同代码段的随意性、偶然性差异中解脱出来;
  • 只要可能,应避免偶然性困难。

精选开发过程

首先为人写程序,其次才是为机器

编写可读性好的代码,是为了便于别人看懂。可读性对程序的以下方面都有证明影响:

  • 可理解性;
  • 容易复查;
  • 错误率;
  • 调试;
  • 可修改性;
  • 开发时间——上述因素之集合;
  • 外在质量——上述因素之集合。

深入一门编程语言,不是浮于表面

借助规范集中注意力

规范是一套用于管理复杂度的智力工具。

  • 规范能精确地传达重要信息;
  • 规范可以使你免除各种风险;
  • 规范增加了对底层工作的可预见性;
  • 规范能够弥补语言的不足。

基于问题域编程

将程序划分成不同层次的抽象:

  1. 第0层:操作系统的操作和机器指令;
  2. 第1层:编程语言结构和工具;
  3. 第2层:低层实现结构;
  4. 第3层:低层问题域;
  5. 第4层:高层问题域。

问题域的低层技术:

  • 在问题域使用类来实现有实际意义的结构;
  • 隐藏低层数据类型及其实现细节的信息;
  • 使用具名常量来说明字符串和文字量的意义;
  • 对中间计算结果使用中间变量;
  • 用布尔函数使复杂逻辑判断更清晰。

当心落石

注意程序中每一处微小的错误和警告。

迭代,反反复复,一次又一次

汝当分离软件和信仰

要点

  • 编程的主要目的之一是管理复杂性;
  • 编程过程对最终产品有深远影响;
  • 合作开发要求团队成员之间进行广泛沟通,甚于同计算机的交互。而单人开发则是自我交流,其次才是计算机;
  • 编程规范一旦滥用,只会雪上加霜。使用得当则能为开发环境带来良好机制,有助于管理复杂性和相互沟通;
  • 编程应基于问题域而非解决方案,这样便于复杂性管理;
  • 注意警告信息,将其作为编程疑点,因为编程几乎是存粹的智力活动;
  • 开发时迭代次数越多,产品质量越好;
  • 墨守成规的方法有悖于高质量的软件开发。请将编程工具箱中填满各种编程工具,不断提高自己挑选合适工具的能力。

原文地址:https://www.cnblogs.com/liam-ji/p/11618483.html

时间: 2024-10-21 01:53:07

第三十四章 软件工艺的话题的相关文章

第十四章 软件、硬件发展史上的风风雨雨中的一声悲叹!

第十四章   软件.硬件发展史上的风风雨雨中的一声悲叹! 睡不着.感而写之. 忠言逆耳.良语苦口.高山流水.曲高和寡. 我的感觉,计算机已经发展到了一个死胡同.我们似乎只是在兜圈子,从最初的汇编写的UNIX操作系统,到如今的C语言写的WINDOWS.LINUX.我 们应该反思.到底技术上进步了很多?还是原地兜圈子?从汇编,到C语言.脚本语言,到C++.C#.JAVA,到VB等等所谓的高级语言:似乎取得很多进步了.我们面向对象编程啊,抽象了类.逐步贴近自然语言了.真的?我极端怀疑!人类的自然语言描

第三十四章

11 道渢(fēng)呵,其可左右也.万物恃之以生而不辞,成功遂事而弗名有也.万物归焉而弗为主.则恒无欲也,可名于小.万物归焉而弗为主,可名于大.是以圣人之能成大也,以其不为大也,故能成大. 第三十四章1 相当比例的人,因占有心而生病 道渢呵,其可左右也.万物恃之以生而不辞(帛书未见此句),成功遂事而弗名有也.万物归焉而弗为主.则恒无欲也,可名于小. 道广泛盛大,充满左右无处不在.它生养万物而不推辞这个庞大的工作,完成了这些事而不说是自己所拥有的.万物源于它但它不说自己是主人.道没有欲望,所以可

Gradle 1.12用户指南翻译——第三十四章. JaCoCo 插件

本文由CSDN博客万一博主翻译,其他章节的翻译请参见: http://blog.csdn.net/column/details/gradle-translation.html 翻译项目请关注Github上的地址: https://github.com/msdx/gradledoc/tree/1.12. 直接浏览双语版的文档请访问: http://gradledoc.qiniudn.com/1.12/userguide/userguide.html. 另外,Android 手机用户可通过我写的一个

第三十四章 metrics(2)- 搭建metrics平台

一.基本架构图 1.整个架构组件: java客户端 dropwizard-metrics:springboot.hystrix的metric体层使用了这个,所以我们需要自己封装向statsd发包的方法,来发送这些metrics给statsd java-statsd-client:直接进行计数并且非常方便的向statsd发送这些metrics(向statsd发包的方法已经封装好了) statsd graphite carbon carbon-relay carbon-cache whisper g

奋斗吧,程序员——第三十四章 挥泪别痴心,只怨情长天未怜【上半部完】

那天后来发生的事让我下巴差点掉在地上. 我虽然成功帮他引开了恐龙,但其实也没指望他能搭上美女. 没想到老四超常发挥,跟美女逛了一天街后,居然去开了房. 那美女是音乐系的,怪不得长得漂亮. 至此以后老四一直对那美女念念不忘,倒是人美女貌似只是想做一回露水夫妻而已,表示不必再联系. 不是我不明白,这世界变化快. 蒋小涵的邀请我最后还是拒绝了,没有说为什么. 彪悍的人生不需要解释. 她又提出晚上一起去唱歌,和她在一起,似乎每次的活动都是唱歌. 其实我不是很喜欢KTV的环境,情愿安安静静地煮一壶茶,聊聊

SpringBoot | 第三十四章:CXF构建WebService服务

前言 上一章节,讲解了如何使用Spring-WS构建WebService服务.其实,创建WebService的方式有很多的,今天来看看如何使用apache cxf来构建及调用WebService服务. 前言 一点知识 何为Apache-CXF 关于JAX-WS规范 常用注解介绍 SpringBoot整合CXF实例 服务端构建 客户端调用 异常捕获 自定义拦截器 服务端拦截器 客户端拦截器 参考资料 总结 最后 老生常谈 一点知识 何为Apache-CXF Apache CXF是一个开源的Serv

Welcome to Swift (苹果官方Swift文档初译与注解三十四)---241~247页(第五章-- 函数)

In-Out Parameters (全局参数) 像前面描述的参数变量,只能在函数体内进行修改,如果你需要函数修改的它的参数值,并且希望这些改变在函数调用结束后仍然有效,可以定义使用全局参数. 定义全局参数使用关键字inout,全局参数的值在函数调用的时候进行传递,在函数体内进行修改,最后函数回传新值来替换之前的值. 全局参数在函数中,只能使用变量来当作参数,不能使用常量或者文本值作为参数.因为常量或者文本值不可以被修改.为了表明参数变量可以被修改,要在变量名的前面直接添加一个& 符号. 注意

JavaScript高级程序设计:第十四章

第十四章 一.表单的基础知识 在HTML中,表单是由<form>元素来表示的,而在javascript中,表单对应的则是HTMLFormElement类型.HTMLFormElement继承了HTMLElement,因而与其他HTML元素具有相同的默认属性.不过,HTMLFormElement也有它自己下列独有的属性和方法. 取得<form>元素的引用方式有好几种.其中最常见的方式就是将它看成与其他元素一样,并为其添加id特性,然后再像下面这样使用getElementById()方

MiS603开发板 第十四章 UDP协议网络传输

作者:MiS603开发团队 日期:20150911 公司:南京米联电子科技有限公司 论坛:www.osrc.cn 网址:www.milinker.com 网店:http://osrc.taobao.com EAT博客:http://blog.chinaaet.com/whilebreak 博客园:http://www.cnblogs.com/milinker/ MiS603开发板 第十四章 UDP协议网络传输 本实验将实现FPGA 芯片和PC 之间进行千兆以太网数据通信, 通信协议采用Ether