关于软件构造第一部分(PPT0、1、3)的总结复习

发布时间 2023-05-22 19:08:10作者: (^O^)在?

  学而时习之,不亦说乎?在学习新知识的路上,我们应时时复习,总结所学知识,归纳吸收以建立自己的知识体系。故此,我现在对软件构造这门课的第一部分进行一些总结

 一、软件构造的多维度视图:

共有三个维度:1.按阶段划分:构造时/运行时视图,2.按动态性划分:时刻/阶段视图,3.按构造对象层次划分:代码/构件视图

具体可如图所示(图片来自PPT):

关于此图的一些理解学习:

在build-time构造阶段时:从代码视角来看,我们关注于源代码的逻辑层次,如类、方法、接口等;从构件视角来看,我们关注于构件——代码的物理层次,如包、文件、库等;从时刻视角来看,我们关注特定时刻的软件状态;从阶段视角来看,我们关注软件状态随时间的变化——重点在变化。

在run-time运行阶段时:从代码视角来看,我们关注于逻辑实体在内存中如何实现;从构件视角来看,我们关注于物理实体在硬件环境下如何实现;从时刻视角来看,我们关注逻辑/物理实体在内存/硬件环境下特定时刻的状态;从阶段视角来看,我们关注逻辑/物理实体在内存/硬件环境下状态随时间的变化——重点在变化。

 

二、软件构造的阶段划分、各阶段的构造活动

 

从无到有代码:编程,技术手段是ADT/OOP面向对象的编程;

从代码到组件:设计,技术手段是ADT/OOP,面向可复用性和可维护性;

从构建阶段到运行阶段:Debug,单元测试或者融合测试,面向健壮性和正确性;

从时刻到时段:版本控制,动态链接

开发就是各个视图的转化等,如图(图片来自PPT):

三、内部,外部质量指标

外部因素影响客户,内部因素影响软件以及开发者,外部质量取决于内部质量

外部指标有:

正确性:(最重要的质量指标)保持正确性的技术手段有:测试和调试(不能提高程序能力)、防御式编程、形式化方法(通过形式化验证发现问题)

健壮性:(是对正确性的补充)——出现异常时不要崩溃

可扩展性:规约更改时是否容易;可复用性:一次开发多次使用

性能——“性能毫无意义,除非有足够的正确性”——对其关注要与其他指标折中;及时性等

 

内部指标有:代码行数,可读性,可理解性等

四、软件配置管理SCM与版本控制系统VCS

SCM:追踪控制软件变化,其中SCI(软件配置项)是软件中发生变化的基本单元(如文件);基线是软件变化中的“稳定时刻”(如版本);CDMB(配置管理数据库)是SCI变化信息+基线

VCS:有本地,集中式,分布式三种。本地的仓库存储于开发者本地机器,无法共享和协作;集中式的仓库存储于独立的服务器,支持多开发者之间的协作;而分布式的是前两种的结合,仓库存储于独立的服务器+每个开发者的本地机器

五、Git

git分为三个部分,本地库.git——本地的CMDB;工作目录:本地文件系统;工作暂存区:隔离工作目录和Git仓库

其中关系如下(图片来自网络)

Object Graph:版本演化图,a->b表示b的基础上演化得到了a

VCS与Git的差别:传统VCS存储版本之间的变化(行);Git存储发生变化的文件(而非代码行),不变化的文件不重复存储

如图(图片来自PPT)

“产生冲突的原因”:

合并分支时,两个分支在同一个文件的同一个位置有两套完全不同的修改。 Git 无法替我们决定使用哪一个。必须人为决定新代码内容。查看状态(检测到有文件有两处修改)。

git的一些指令(图片来自网络)