软件构造学习笔记(一)

一、多维度来看软件构造

  • 构建时期:想法->需求->设计->编码->可安装/可执行文件包,这整个过程是软件构建的和新过程和环节。
    从暂时的代码层面分析:主要考虑在逻辑上代码时如何通过基本的程序块,在这里,主要包含三个方面:面向词法、面向语法和面向语义。词法分析阶是从左到右一个字符一个字符地读入源程序,由词法分析程序实现这个任务。语法分析的任务是在词法分析的基础上将单词序列组合成各类语法短语,语法分析程序判断源程序在结构上是否正确。语义分析的任务是对结构上正确的源程序进行上下文有关性质的审查,进行类型审查。
    从长期的代码层面分析:这里主要体现在一个代码量的变化。
    从暂时的组件层面分析:文件被封装成包、组件和子系统,对于可服用的模块形成类。
    从长期的组件层面分析:这个就是一个然健版本的变化
    版本号变化各要素关系
  • 运行时期:代码被转换为CPU能识别的机器码,源代码被加载到牛才能中进行解释执行。对于java语言,程序首先被编译成字节码的形式,运行时需要有解析器转换为机器码或者解释执行,其中就涉及到一个很关键的部件——Java虚拟机。存在两种不同的链接方式:动态链接和静态链接。动态链接不将目标文件复制到可执行程序中,而是会标注用到的类库,在运行时,加载用到的库到内存中,然后同主程序链接,类库变化时,不需要重新生成可自行程序,多个运行中程序可共享同一类库优化内存使用。

二、软件系统影响因素

外部因素

  1. 正确性:假定一个软件系统是分层开发的,每层都要确保自己是正确的,同时假定其调用的低层也是正确的。保证正确性的方法:静态类型检查以及循序渐进的一步步确保正确。
  2. 健壮性:软件系统对异常情况作出适当反应的能力。比较关键的是对于异常的处理。
  3. 可拓展性:软件易于调整以适应变化的能力。越大的系统越难进行拓展,简单的体系结构总是比复杂的体系更容易适应变化,每一个模块自治性很重要。
  4. 可重用性:软件经常遇到相似的模式,利用共性,避免重复实现。比如说棋盘的实现等等。
  5. 兼容性、效率、可移植性、易于上手、考虑到功能以及时间性能等。

内部因素

圈复杂度:用来衡量一个模块判定结构的复杂程度,在实际中最求高内聚度和低耦合度。

三、软件开发模型

瀑布模型

特点:按部就班,一步一步完成,前一阶段的工作完成之后,才能开始后一阶段的工作;前一阶段的输出就是后一阶段的输入。
瀑布模型示意

增量模型

特点:将整个产品分成不同的增量,逐一完成;以增量的方式实施瀑布模型,此外通常首先实现优先级最高的需求。能在较短的时间内向用户提交可完成部分工作的产品;可在软件开发的早期阶段使投资获得明显回报和较易维护。

快速原型法

特点:实现系统的原型;在项目早期就可以获得用户的反馈然后用户判断软件是否符合规格说明,从而对软件进行估算。加速软件开发过程,节约软件开发成本。原型的作用是获知用户的真正需求,一旦需求确定了,原型系统将被抛弃。
快速原型法示意图

螺旋模型

特点:一种风险驱动的过程模型。使用原型及其他方法来尽量降低风险。理解这种模型的一个简便方法,是把它看作每个阶段之前都增加了风险分析过程的快速原型模型,风险驱动的螺旋模型适用于内部开发的大型软件项目。