软件构造 第一章

一、课程简介

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.性能

构建-代码:设计模式

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

运行-组件:分布式系统

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

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

原文地址:https://www.cnblogs.com/boston-o/p/10462860.html

时间: 2024-10-14 07:03:21

软件构造 第一章的相关文章

软件构造 第一章第二节 软件开发的质量属性

?软件构造 第一章第二节 软件开发的质量属性 1.软件系统质量指标 External quality factors affect users 外部质量因素影响用户 Internal quality factors affect the software itself and its developers 内部质量因素影响软件本身和它的开发者 External quality results from internal quality 外部质量取决于内部质量 外部属性: 正确性:按照预先定义的"

软件构造 第二章 第一节 软件生命周期和版本控制

软件构造第二章 第一节 软件生命周期和版本控制 基本内容 Software Development Lifecycle (SDLC) Traditional software process models (waterfall, incremental, V- model, prototyping, spiral) Agile development and eXtreme Programming (XP) Collaborative software development Software

软件需求工程 第一章学习

软件工程是一门研究用工程化方法构建和维护有效的.实用的和高质量的软件的学科.它涉及程序设计语言.数据库.软件开发工具.系统平台.标准.设计模式等方面:是用工程.科学和数学的原则与方法,研制.维护计算机软件的有关技术及管理方法. 软件工程分为三个阶段,定义阶段:可行性研究初步项目计划.需求分析:开发阶段:概要设计.详细设计.实现.测试:运行和维护阶段:运行.维护.废弃这三个阶段.其中需求工程是软件工程第一个也是很重要的一个阶段,那工程是什么呢?工程是按照一定的目标经过研究和制定计划并按照计划完成目

软件构造2

HIT - 软件构造 3章: 基本数据类型:int,long,boolean,double,char,short,byte,float 对象数据类型:classes,interface,arrays,enums,annotations Java是一种静态类型的语言,所有变量的类型在编译是已知的,Java可以静态检查,在像python这样的动态类型语言中,这种检查被推迟到运行时. 静态检查的类型:语法错误,名字错误,参数个数错误,参数类型错误,返回错误 动态检查的类型:非法参数,非法返回值,数组越

【软件构造】第六章第一节 可维护性的度量与构造原则

第六章第一节 可维护性的度量与构造原则 本章面向另一个质量指标:可维护性--软件发生变化时,是否可以以很小的代价适应变化? 本节是宏观介绍:(1)什么是软件维护:(2)可维护性如何度量:(3)实现高可维护性的设计原则--很抽象. Outline 软件的维护和演化 可维护性的常见度量指标 聚合度与耦合度 面向对象五大原则SOLID 单一职责原则SRP(Single Responsibility Principle) 开放封闭原则OCP(Open-Close Principle) 里式替换原则LSP

【软件构造】第七章第一节 健壮性和正确性的区别

第七章第一节  健壮性和正确性的区别 第七章:进入软件构造最关键的质量特性 --健壮性和正确性. 本节在1-2节的基础上,重申了Robustness and Correctness的重要性,澄清了二者之 间的差异,并指明了在软件构造中处理二 者的典型技术(防御式编程.异常处理. 测试.调试等) Outline 健壮性(Robustness)和正确性(correctness) 如何测量健壮性和正确性 Notes ## 健壮性(Robustness)和正确性(correctness) [健壮性] 定

【软件构造】第一章 软件构造基础(2)

二.软件构造的质量目标 1. 外部属性(主要):影响用户感受,如外观.速度等 (1)正确性:符合规格范围和计划目标 ·只保证各个层面的正确性(假设调用正确) ·检验与调试 ·防御性编程 ·形式化编程 (2)健壮性:响应规格范围外的异常情况 ·提示错误信息 ·正常退出或降级 (3)可扩展性:提供增加新功能的空间 ·固化需求以规避风险 ·设计简洁.离散化 (4)可复用性:使软件模块能够被其他程序使用 ·模式固化 (5)兼容性:跨平台.跨软件交互 ·使用标准文件格式.数据结构.接口,保持一致性 ·定义

第一章软件开发概述思维导图

第一章软件开发概述思维导图

高可用高性能负载均衡软件HAproxy详解指南-第一章(简介、安装)

第一章:HAproxy简介及安装配置 对Linux有兴趣的朋友加入QQ群:476794643 在线交流 本文防盗链:http://zhang789.blog.51cto.com 目录 HAproxy简介 为什么要使用HAproxy haproxy 性能特点 负载均衡器的性能评估因素 安装HAproxy haproxy案例4:实现web负载 由于字体过多分开写的,全系列文章链接 第一章:HAproxy简介及安装配置 http://zhang789.blog.51cto.com/11045979/1