欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

软件构造 第一章

程序员文章站 2022-06-11 08:30:14
一、课程简介 1.软件构造课程的目标 ①程序设计与实现能力 ②系统设计与实现能力 ③系统分析与评价能力 ④利用现代软件构造工具的能力 2.传统软件设计步骤 ①讨论需要写的软件并实现②测试代码并改错③重复②。图示如下 3.更好的软件设计 ①未雨绸缪②考虑非功能质量属性③考虑多种设计选择④把设计决策明确 ......

一、课程简介

1.软件构造课程的目标

①程序设计与实现能力

②系统设计与实现能力

③系统分析与评价能力

④利用现代软件构造工具的能力

2.传统软件设计步骤

①讨论需要写的软件并实现②测试代码并改错③重复②。图示如下

软件构造 第一章

3.更好的软件设计

①未雨绸缪②考虑非功能质量属性③考虑多种设计选择④把设计决策明确写下来

4.设计的目标、原则和模式

设计目标:编程的视野

设计原则:编程的标尺

设计模式:编程的经验

 二、软件构造多维视图

1.什么是软件

(1)构成:

·程序program:ui, algorithms, utilities, apis, test cases, etc

·数据data:files, databases, etc

·文档documents:srs需求规格说明, sdd设计规格说明, user manuals, etc

(2)考虑因素

·用户:谁来使用

·商业目标:为何有用

·社会环境:应遵循何种法则

·技术环境:如何实施

·硬件/网络:在何处运行

 

软件构造 第一章

2.软件构造的多维视图

软件构造 第一章

(1)build-time views

概述:build-time:idea->requirement->design->code->installable/executable package  (软件构造的核心过程和环节)

code-level view:源代码:在逻辑上源代码是如何由基本程序块(比如函数,类,方法,接口等等)构成的

component-level view:组件:源代码是如何通过文件,目录,包,库之间的依赖关键进行物理上的组织

moment view:时刻:在某一时刻,源代码和组件的情况

period view:时期:程序如何随时间改善

①build-time,moment,and code-level view

三种内部相互关联的形式:面向此法的源代码、面向语法的程序结构(ast(抽象语法树))、面向语义的程序结构(class diagram)

②build-time,period,and code-level view

代码随着时间变化:添加,修改或者删除文件,使其从一个版本到另一个版本

③build-time, moment, and component-level view

源代码物理地组织成文件,其进一步按目录组织

文件被封装成包、组件和子系统

可复用模块形成类库

库:库存储在自己的磁盘文件中,收集一组代码函数,可以在各种程序中重用。

来源:os预装,语言自带,第三方,自行开发

与库链接:步骤:用到的类库列表->复制类库到可执行程序中

静态链接:库是单个目标文件的集合,在编译过程中,将类库文件复制到可执行文件中,称为可执行文件的一部分

uml图

软件构造 第一章

 

 ④build-time, period, and component-level view

 文件,包,组件和库如何随着时间变化

软件配置项(sci)

版本控制系统(vcs)

软件构造 第一章

 版本控制是给计算机软件的不同 状态分配唯一的名字或者编号的过程 

软件演化是指软件产生之 后,由于不同的原因对其进行持续地升级过程。

(2)runtime views

code-level : 可执行程序的内存状态,程序之间的互动、调用

component-level:软件包部署到物理环境(os、network、硬件等),及其互动

moment view:特定时刻的程序行为

period view:随着时间的行为

可执行程序:cpu执行的机器可读指令序列以及相关的数据值

库:可以由不同程序重用的常用对象代码的集合,大多数系统包含一系列库,不能直接在目标机器上加载和执行,必须首先与一个可执行程序链接。

本地机器代码:

 源代码被加载入内存进行解释执行,转化为cpu能识别的机器码

 程序被编译成字节码形式(如 java的class文件) ,运行时需要由解析器转换成机器码或者解释执行 

软件构造 第一章

解释字节码:在执行时编译为字节码解释执行

动态链接:

不将目标文件复制到可执行程序 中,而是会标注用到的类库 

在运行时,加载用到的库到内存中,然后同主程序链接 

部署时需要将用到的类库同程序一起部署

优点:类库 变化时,不需要重新生成可自行程序  、多个运行中程序可共享同一类 库,优化内存使用

⑤ run-time, moment, and code-level view

快照图:刻画内存中某时刻变量的状态

内存转储:包含进程内存副本的硬盘上的文件,当进程被某些内部错误或信号中止时生成

⑥run-time, period and code-level view

uml:程序单元之间的交互

⑦run-time, moment, and component-level view

uml中的部署:

软件构造 第一章

 

 ⑧run-time, period, and component-level view

事件记录 软件追踪
由系统管理员使用 开发人员使用
记录高级信息 记录低级信息
不包含太多重复事件或者无用信息 可以包含重复事件或者无用信息
需要标准的输出格式 输出格式没有限制
事件日志需要本地化 很少考虑本地化
对于添加新类型的事件或消息不灵活 对于添加新的追踪消息必须灵活

 

 

 

 

 

 

 

 

 

三、软件构造的质量目标

外部质量:外部质量是用户能够感受到的,影响用户的使用

内部质量:影响使用代码的相关人员,影响软件本身和开发者

1.外部质量

1)正确性(主要质量):正确性是软件产品执行其规范所定义的确切任务的能力。每层都要确保自己是正确的,同时假定其调用的低层也是正确的。

检查和调试、防守编程、标准化编程

2)健壮性:健壮性是软件系统对异常情况作出适当反应的能力。 

健壮性同异常情况相关,异常或非异常取决于程序的规 格说明 

判断是否是异常的标准,不取决于客观的正确标准,而取决于程序的规格说明 

3)可扩展性:可扩展性是指软件易于调整以适应变化的能力。 

提升可扩展性的两个原则:简约主义设计,*设计

4)复用性:可重用性是软件元素用于构建许多不同应用程序的能力。

软件经常遇到相似的模式,利用共性,避 免重复实现。 

难点:不同软件 有不同的设定/规定 

5)兼容性:不同软件系统之间相互可容的集成

难点:不同软件 有不同的设定/规定 

标准化是解决兼容性的关键:标准化文件格式,标准化数据结构,标准化用户接口

通过协议来实现更通用的兼容性

6)效率:效率是软件系统对硬件资源尽可能 少的需求的能力 

正确性是效率的前提

7)可移植性:可移植性是指便于将软件产品 转移到各种硬件和软件环境。 

8)易用性:用户可以轻松掌握软件的使用,也包括安 装、运行和监控的容易度 

结构清晰、 理解用 户,换位思考,站在用户的角度设计软件

9)功能性:系统提供的可能性范围

过多的新功能容易带来一 致性的缺失,影响易用性 

更难的问题是避免如此专注于功能而忘记其他品质

在质量提升技术的帮助下,可以在整个项目中保持质量水平不变,而不仅仅 是功能性。 

10)及时性:及时性是软件系统在用户需要时或之前发布的能力。

11)其他品质:

可验证性:是否易于验证

完整性:软件系统保护其各种组件(程序和数据)免受未经授权的 访问和修改的能力。 

可修复性:可修复性是促进缺陷修复的能力。

经济性:同及时性相伴,是系统能 够按照其分配的预算或低于预算完成的能力。

2.内部品质

代码:loc(圈复杂度, 用来衡量一个模块判定结构的复杂程度 )

结构:耦合度,内聚度,设计中追求高内聚和低耦合

可读性、可理解性、大小,复杂性,整洁性

内部质量因素通常用作外部质量因素的部分度量

3.质量属性间的权衡

完整性和易用性

经济性和功能性、可重用性

效率与可移植性、可重用性

及时性和可拓展性

正确性放在首要地位

4.软件构建的关键问题

系统的软件构建方法 

形式化的软件规格说明 

在开发过程中自动检查 

更好的语言机制 

一致性检查工具

5.软件构造的五个关键目标

1.可理解性:

代码的可理解性(变量/子程序/ 语句的命名与构 造标准、代码布 局与风格、注释、 复杂度)

 构建-组件-时刻:构件/项目的可理解 性(包的组织、文 件的组织、命名空 间)

·构建-代码-周期:重构

·运行-代码-时刻:日志跟踪

2.可复用性

构建-代码:adt/oop; 接口与实现分离; 重载; 继承/重载/重写; 组合/代理; 多态; 子类型与泛型编 程; oo设计模式

构建-组件:api设计,库,可重用的框架

3.可维护性和适应性:

构建-代码:模块化设计; 聚合度/耦合度; solid; oo设计模式;格式化、规范化、语法化编程

构建-组件:solid grasp、软件版本控制

4.健壮性

·构建-代码:异常处理、防御编程、先验程序

·构建-组件:单元测试、集成测试

·构建-周期:回归测试

运行-时刻:调试转储

运行-周期:日志跟踪

5.性能

构建-代码:设计模式

运行-代码:空间复杂性(内 存管理); 时间复杂性(算 法性能); 代码调优

运行-组件:分布式系统

运行-代码-时期:性能分析和调整、

运行-组件-时期:并行/多线程程序