总体问题
· 创建子程序的理由充分吗?
· 如果把一个子程序中的某些部分独立成另一个子程序会更好的话,你这样做了吗?
· 是否用了明显而清楚的动宾词组对过程进行命名?是否是用返回值的描述来命名函数?
· 子程序的名称是否描述了它做的所有工作?
· 子程序的内聚性是不是很强的功能内聚性?它只做一件工作并做得很好吗?
· 子程序的耦合是不是松散的?两个子程序之间的联系是不是小规模、密切、可见和灵活的?
· 子程序的长度是不是它的功能和逻辑自然地决定的:而不是由人为标准决定的?
防错性编程
· 断言是否用于验证假设?
· 子程序对于非法输入数据进行防护了吗?
· 子程序是否能很好地进行程序终止?
· 子程序是否能很好地处理修改情况?
· 是否不用很麻烦地启用或去掉调试帮助?
· 是否信息隐蔽、松散耦合,以及使用“防火墙”数据检查,以使得它不影响子程序之外的代码?
· 子程序是否检查返回值?
· 产品代码中的防错性代码是否帮助用户,而不是程序员?
参数传递问题
· 形式参数与实际参数匹配吗?
· 子程序中参数的排列合理吗?与相似子程序中的参数排列顺序匹配吗?
· 接口假设说明了吗?
· 子程序中参数个数是不是7 个或者更少,
· 是否只传递了结构化变量中另一个子程序用得到的部分?
· 是否用到了每一个输入参数?
· 是否用到了每一个输出参数?
· 如果子程序是一函数,是否在所有情况下它都会返回一个值?
总结:
· 建立子程序的最重要原因是加强可管理性(即降低复杂性),其它原因还有节省空间、改进正确性、可靠性、可修改性等等。
· 强调强内聚性和松散耦合的首要原因是它们提供了较高层次的抽象性,你可以认为一个具备这种特性的子程序运行是独立的,这可以使你集中精力完成其它任务。
· 有些情况下,放入子程序而带来巨大收益的操作可能是非常简单的。
· 子程序的名称表明了它的质量,如果名称不好但却是精确的,那么说明它的设计也是非常令人遗憾的。如果一个子程序的名称既不好又不精确,那它根本就无法告诉你程序作了些什么。无论哪种情况,都说明程序需要改进。
· 防错性编程可以使错误更容易被发现和修复,对最终软件的危害性显著减小








