软件构造复习1

软件构造复习1

软件构造中的多维度视图

按阶段划分:构造时/运行时视图
按动态性划分:时刻/阶段视图
按构造对象的层次划分:代码/构件视图

  • Software=Modules(Components)+Data/Control Flows

  • 软件的质量目标评价不能脱离外部环境

  • 开发软件的流程
    计划-分析-设计-完善-测试&融合-维护

软件构造复习1

Built-time 构造阶段

代码层——代码的逻辑组织
模块层——代码的物理组织

时刻性——特定时刻的软件形态
周期性——软件形态随时间的变化

1)构造阶段+时刻+代码层(词汇、语法、语句)

  • 词汇:程序中所使用的语句、变量形式(?)
    半结构化:近乎自然语言的风格+遵循特定的编程语法
    方便程序员+方便编译器
  • 语法:程序->树形结构/流程图
    AST:彻底结构化,将源代码变为一棵树,对树的各种操作==对源代码进行的修改
  • 语句:图形化或形式化表达需求和设计思想,再转化成Code

2)构造阶段+周期+代码层
记录代码改变的“过程”——版本控制工具

软件构造复习1
3)构造阶段+时刻+模块层(代码的组织情况)

  • 模块化地组织源代码文件,Files->packages

如何组织?

  • 使用库文件,可以使开发者像使用编程语言指令一样使用库中的功能
  • 操作系统提供的库、编程语言提供的库、第三方提供的库、自己累积的库
  • 如何利用库文件需要进行链接(静态/动态)
    javac -classpath ./lib/*.jar
    静态链接发生在构造阶段,库被拷贝进入代码形成整体,执行的时候无需提供库文件(也就是执行的时候不依赖于库文件?缺点:难以升级)

4)构造阶段+周期+模块层(代码的版本Version)

Run-time 运行阶段

  • 运行时:程序被载入目标机器,开始执行

代码层:逻辑实体在内存中如何呈现
构件层:物理实体再硬件环境中如何呈现

时刻性:略
周期性:略

1)可执行程序(直接编译,一次性,找到起始位置执行,存在缺点:不同机器码编译结果不同,可移植性差
2)解释性可执行程序(java,根据不同操作系统的运行情况编译成机器能够理解的执行程序)
3)库文件(动态链接java

  • 程序的源文件和库的源文件转化成两部分,再链接在一起
  • 库文件不会再built阶段被加入可执行软件,仅仅做出标记
  • 程序运行时,根据标记装载至内存库
  • 发布软件时,需要发送所有动态库文件(因为是分离的)
  • 易于升级

4)配置文件(对程序执行进行限定)
5)分布式程序:需要多个运行程序,分别部署于多个计算机物理环境

6.1)运行阶段+时刻+代码层
软件构造复习1
内存转储信息(Debuggers、Information、Analyze)

6.2)运行阶段+周期+代码层(时序图UML)
执行跟踪(用日志方式记录程序执行的调用次序)

6.3)运行阶段+时刻+模块层
在某一时刻,不同机器/同一机器不同单元->程序的不同模块

6.4)运行阶段+周期+模块层(事件日志:系统层面)

SUMMURY
Ø => Code
Code => Component
Build-time => Run-time
Moment => Period

软件构造的质量目标

外部质量->用户
内部质量->软件本身和开发者

软件构造复习1
1)正确性(相对的)

  • 分层。上层的正确性需要下层正确性的保障

2)鲁棒性/健壮性

  • 对异常情况(取决于程序的规格说明)做出反应的能力

3)易扩展性

  • 适应变化的能力,软件越大越难以扩展。
  • 模块自治性越强,变化对其余模块的影响越小
  • 【ADT and OOP】【Modularity and Adaptability】

4)复用性

  • 利用共性避免重复实现
  • 【Design for/with reuse】

5)兼容性(设计的一致性、标准性)

  • 标准的变量/数据结构/用户接口

6)效率(对资源尽可能少的需求)

  • 硬件资源、空间资源、时间资源、etc…
  • 【Performance】

7)可移植性(各种硬件和软件环境)

8)易用性(用户->安装、运行、监控的容易度)

  • 【GUI】

9)功能性

  • 一致性易缺失,影响易用性
  • (用户追求功能的多样性还是质量?)
  • 【Agile, SCM】

10)时效性

  • 是否易于验证
  • 软件系统 保护 程序和数据 免受 未经授权的访问和修改 的 能力
  • 按照预算或好于预算

其他)

  • 圈复杂度
  • 高内聚与低耦合(耦合度:模块之间的交互;内聚性:模块本身的独立性)
  • 大小
  • 复杂性(是否易于理解)

Tradeoff

  • 某些性质之间的权衡,比如复用性和功能性
  • 正确性一定是最重要的因素