软件构造:01-基础与目标

本文从编程/运行时、运行时两个维度深入剖析软件系统,包括时刻、代码视角和模块视角,探讨软件的构成、变化及不同视角间的关联。内容涉及源代码逻辑、物理结构、模块配置、版本控制和软件进化等。
摘要由CSDN通过智能技术生成


引用参考链接:https://blog.csdn.net/PS_Xie/article/details/87923044

从三个维度看软件系统构成

(To understand the comstituents of a software system in three orthogonal dimensions)
框图

引言

  1. 软件的定义:
    最早由阿兰·图灵提出:是二进制代码组成的可执行文件。
    在我们的生活中,有各种各样的软件,比如说操作系统和应用程序,有PC端、web端、安卓端、IOS端的各种程序等等,它们都被称为软件、不断更新。
    需要有规划,才能更好地描绘变化。
    可复用性、可重复性。

计算机的交互层级示意图
用户
应用程序
操作系统
硬件

  1. 对软件系统的理解:
    依照时间分为:
    ①程序
    ②算法 + 数据结构
    ③程序 + 数据 + 文档
    ④模块(成分) + 数据/控制流
    如今,我们的coding愈发集成化,模块化编程也占据了主流。
    ——解释文档,方便互相交流开发而无需读代码,因为这样更方便、有利开发。
  2. List item
  3. List item

第一个维度:

编程/运行时

  • 编程时&运行时
    说到运行时的话,就不得不考虑程序在靶机上的运行情况,比如如何从磁盘中载出程序,如何载入到内存中等等。内存占用量、运行速度等等因素将会成为注意的对象。届时,我们将使用“代码快照”等方式来进行相应的观测。
  • 微观&宏观 代码的视角(源代码):①源代码如何逻辑组成或依赖程序块(如函数、类、方法、借口等等) ②内存中的程序及其之间如何运行与交互;
    模块的视角(结构):①源代码如何物理构成或依赖结构(如文件、目录、包、库等等) ②各个程序包如何在物理环境下配置、运行与交互;
  • 时刻&时期 时刻:某一特定的时间点,代码或模块如何,程序如何运行; 时期:随着时间的推移,代码或模块如何变化,程序如何运行;

1.时刻、代码视角

词义层面:
在这里插入图片描述语法层面
在这里插入图片描述语义层面
在这里插入图片描述在这里插入图片描述

时期、代码视角

程序本身变化:增、删、改等等。

时刻、模块视角

  • 源代码组成文件,进而组成目录
  • 文件封装为包,逻辑上,也叫子系统和元件
  • 可复用的模块形成库
    开发者通常并不是从头开发程序,而多是选择复用库中的模块。库存在于各处,来源广泛,我们可以将其看成是一种对标准编程语言的补充。
    库的使用方式有两种:动态链接以及静态链接。详细内容可以回顾计算机系统。
    在这里插入图片描述

时期、模块视角

每一个模块是如何随着时间变化的呢?为了描述这一种变化,我们引入了版本控制系统,也就有了我们常常说的版本号。
在这里插入图片描述在这里插入图片描述在发布软件之后,事情并未结束。软件是需要随着市场、技术等等因素而进化(Software Evolution)的,软件中的各个部分也将优胜劣汰,成为更好地软件。有的时候,维护的费用甚至将占到开发费用的90%。

时刻、代码视角

在这里插入图片描述将采用代码快照(Code Snapshot)的方式对代码进行观察,将分析内存的占用情况等等。(将在第03章中详细介绍)

运行时

时段、代码视角

利用UML以动态的形式描述类
在这里插入图片描述

时刻、模块视角

模块分析
在这里插入图片描述

时段、模块视角

log日志
在这里插入图片描述

各个视角之间的关系

在这里插入图片描述

  • Ф→ 密码 编程/编码(第3章ADT/OOP) 审查、静态分析/检查(第4章可理解性)
    Ф → Code
    Programming / Coding (Chapter 3 ADT / OOP)
    Review, static analysis / checking (Chapter 4 Understandability)

  • 密码→ 组成部分 设计(第3章ADT/OOP;第5章可重用性;第6章可维护性) 构建:编译、静态链接、打包、安装、清理(第2章构建过程)
    Code → Component
    Design (Chapter 3 ADT / OOP; Chapter 5 Reusability; Chapter 6 Maintainability)
    Build: compile, static link, package, install, clean (Chapter 2 Construction process)

  • 构建时间→ 运行时间 安装/部署(其他课程) 调试、单元/集成测试(第7章稳健性)
    Build-time → Run-time
    Install / deploy (Another course)
    Debug, unit / intergration testing (Chapter 7 Robustness)

  • 片刻→ 时期 重构(第9章重构) 版本控制(第2章SCM) 加载、动态链接、解释、执行(转储、分析、记录)(第8章性能)
    Moment → Period
    Refactoring (Chapter 9 Refactoring)
    Version Control (Chapter 2 SCM)
    Loading, dynamic linking, interpreting, execution (dumping, profiling, logging) (Chapter 8 Performance)

总结

描述软件系统的三个维度

  • 时期视角:编程时(build-time)&运行时(run-time)
  • 动静视角:时刻(moment)&时段(period)
  • 级别视角:代码(code)&模块(component)

每个视角的元素、关系以及模型

软件构造:视角的转换

Ф → Code
Code → Component
Build-time → Run-time
Moment → Period

在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值