有两个函数:C(x)表示问题x的复杂程度;E(x)表示 解决问题x所需要的工作量(时间) 对于两个问题P1和P2,如果:C(P1)>C(P2) 则:F(P1)>E(P2) 另一个有趣的特性是:C(P1+P2)>C(P1)+C(P2) 根据前面的结论,我们可以得出下面的不等式: E(P1+P2)>E(P1)+E(P2) 这个不等式表明:单独解决问题P1和P2所需的工作 量之和,比把P1和P2合起来作为一个问题来解决时所需 的工作量要少 这种“分而治之”的思想提供了模块化的根据:把复 杂的问题分解成许多容易解决的小问题,原来的问题也 就容易解决了
这种“分而治之”的思想提供了模块化的根据:把复 杂的问题分解成许多容易解决的小问题,原来的问题也 就容易解决了。 根据前面的结论,我们可以得出下面的不等式: E(P1+P2)>E(P1)+E(P2) 这个不等式表明:单独解决问题P1和P2所需的工作 量之和,比把P1和P2合起来作为一个问题来解决时所需 的工作量要少。 有两个函数:C(x)表示问题x的复杂程度;E(x)表示 解决问题x所需要的工作量(时间)。 对于两个问题P1和P2,如果:C(P1)>C(P2) 则:E(P1)>E(P2) 另一个有趣的特性是:C(P1+P2)>C(P1)+C(P2)
模块化和软件成本的关系 软件总成本 最小成本区 接口成本 H长 模块数目
模块化和软件成本的关系 M 软件总成本 成本或工作量 最小成本区 接口成本 模块数目
522抽象 我们在考虑问题时,集中考虑和当前问题有关的方面, 而忽略和当前问题无关的方面,这就是抽象。或者说抽 象就是抽出事物的本质特性而暂时不考虑它们的细节 软件工程过程的每一步,都是对软件解法的抽象层次 的一次细化。在可行性研究阶段,软件被看作是一个完 整的系统部分;在需求分析期间,我们使用在问题环境 中熟悉的术语来描述软件的解法;当我们由总体设计阶 段转入详细设计阶段时,抽象的程度进一步减少;最后 当源程序写出来时,也就达到了抽象的最低层
我们在考虑问题时,集中考虑和当前问题有关的方面, 而忽略和当前问题无关的方面,这就是抽象。或者说抽 象就是抽出事物的本质特性而暂时不考虑它们的细节。 5.2.2 抽象 软件工程过程的每一步,都是对软件解法的抽象层次 的一次细化。在可行性研究阶段,软件被看作是一个完 整的系统部分;在需求分析期间,我们使用在问题环境 中熟悉的术语来描述软件的解法;当我们由总体设计阶 段转入详细设计阶段时,抽象的程度进一步减少;最后, 当源程序写出来时,也就达到了抽象的最低层
523信息隐蔽 信息隐蔽原理认为:模块所包含的信息(过程和数据) 对于其他模块来说应该是隐蔽的。也就是说,模块应当 被这样规定和设计,使得包含在模块中的信息(过程或 数据)对于其它不需要这些信息的模块来说,是不能访 问的,或者说是“不可见”的 信息隐蔽对于软件的测试与维护都有很大的好处。因 为对于软件的其它部分来说,绝大多数数据和过程都是 隐蔽的,这样,在修改期间由于疏忽而引入的错误所造 成的影响就可以局限在一个或几个模块内部,不至波及 到软件的其他部分
信息隐蔽原理认为:模块所包含的信息(过程和数据) 对于其他模块来说应该是隐蔽的。也就是说,模块应当 被这样规定和设计,使得包含在模块中的信息(过程或 数据)对于其它不需要这些信息的模块来说,是不能访 问的,或者说是“不可见”的。 5.2.3 信息隐蔽 信息隐蔽对于软件的测试与维护都有很大的好处。因 为对于软件的其它部分来说,绝大多数数据和过程都是 隐蔽的,这样,在修改期间由于疏忽而引入的错误所造 成的影响就可以局限在一个或几个模块内部,不至波及 到软件的其他部分