您好,欢迎访问代理记账网站
移动应用 微信公众号 联系我们

咨询热线 -

电话 15988168888

联系客服
  • 价格透明
  • 信息保密
  • 进度掌控
  • 售后无忧

软件构造学习心得——第一部分(1、3讲)(上)

软件构造学习心得——第一部分(1、3讲)(上)

内容重点

软件构造的多维度视图
软件构造的阶段划分、各阶段的构造活动
内部/外部的质量指标
软件配置管理SCM与版本控制系统VCS
Git的结构、工作原理、基本指令

1.软件构造的多维度视图

多维视图
Moment view:特定时刻视图
Period view:过程变化视图

翻译参考:感谢精译
在这里插入图片描述
第一讲最重要
考试:一个东西属于哪个阶段哪个层面

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

Build-time (构造阶段):

idea Þ requirement Þ design Þ code Þ installable / executable package

三个层面(build+moment+code)

---- how source code are logically organized
by basic program blocks such as functions, classes, methods, interfaces,
etc, and the dependencies among them
代码层面、逻辑组织

Three inter-related forms内联形式
词汇层面 高级语言
半结构化:近乎自然语言的风格+遵循特定的编程语法前者:方便程序员后者:方便编译器

语法层面 eg:ast抽象语法树(用结构树来代替半结构化源代码)
在这里插入图片描述
彻底结构化,将源代码变为一棵树,对树做各种操作==对源代码的修改

语义层面 eg:UML在这里插入图片描述
描述接口、类、属性、方法和其中的关系
基于图形或者由形式定义
在设计阶段通常是模型化的,并且将其转换为源代码
根据用于需求面向对象分析和设计的结果

Code churn 代码变化(build+period+code):

Lines added, modified or deleted to a file
from one version to another.

architecture(文件、包、库、静态链接)(build+moment+componet)

---- how source code are physically
organized by files, directories, packages, libraries, and the dependencies
among them
模块架构层面、物理组织

Source code are physically organized into files which further are organized by directories;
Files are encapsulated into packages and, logically,components and sub-systems.
Reusable modules are in the form of libraries.

静态链接发生在构造阶段
动态链接发生在运行阶段

版本、配置项(变化)(build+period+component)

各项软件实体随时间如何变化?
在这里插入图片描述

Runtime Views(运行阶段)

(snapshot)可执行程序以及逻辑实体在内存中如何呈现(run+code+moment)

Code-level view: source code ---- what do the in-memory states of an
executable program look like and how do program units (objects,
functions
, etc) interact with each other? 代码层面:逻辑实体在内存中如何呈现?

考试重点:代码快照图(会画,内容变化、引用变化,单双线圈)
在这里插入图片描述
Memory dump (内存信息转储)
硬盘上包含着内存内容复件的文件,在进程因信号或错误中止时产生

动态链接、库、包、配置文件、中间件、数据库、网络(run+moment+component)

Component-level view: architecture ---- how are software packages
deployed into physical environment (OS, network, hardware, etc) and how do they interact? 构件层面:物理实体在物理硬件环境中如何呈现?
在硬件架构中应用与交互
动态链接、库、包、配置文件、中间件、数据库、网络

执行跟踪、多线程(run+code+period)

逻辑实体在内存中如何随时间变化
UML明确不考怎么画
Execution tracing 执行跟踪 用日志方式记录程序执行的调用次序

事件日志、多进程、分布式处理(run+period+component)

物理实体在物理硬件环境中如何随时间变化
事件日志:系统层面
事件日志可以给系统管理员提供诊断和审查的有用信息。
每一类事件可以通过给定的独特代码来格式化并且输出人能够读懂的信息。

感谢学长翻译
在这里插入图片描述

阶段划分、构造活动

null Þ Code 编程、回顾、静态分析
– Programming / Coding (ADT/OOP)
– Review, static analysis/checking
Code Þ Component设计、编译、静态链接、打包、安装、清理
– Design (ADT/OOP; Reusability; Maintainability)
– Build: compile, static link, package, install, etc
Build-time Þ Run-time安装/部署,Debug,单元/整体测试
– Install / deploy
– Debug, unit/integration testing (Robustness and Correctness)
Moment Þ Period重构、版本控制、加载、动态链接、解释、执行
– Version control
– Loading, dynamic linking, execution (dumping, profiling, logging)
– Concurrent threads

3.内部/外部的质量指标

外部
speed ; ease of use——detected by its users
外部质量因素 影响 用户

内部
being modular; readable——only to developers
内部质量因素 影响 软件本身和它的开发者

外部质量最重要,但外部质量取决于内部质量

External quality factors

Correctness正确性:最重要的质量指标

按照预先定义的“规约”执行

每一层保证自己的正确性,同时假设其下层是正确的

测试和调试:发现不正确、消除不正确 ÞRobustness
防御式编程:在写程序的时候就确保正确性ÞRobustness
形式化方法:通过形式化验证发现问题
Þ Formal Language, Graduate courses

Robustness健壮性:针对异常情况的处理

出现异常时不要“崩溃”—— “abnormal case”
normal and abnormal case are always relative to a certain specification(规约),其中“normal”和“abnormal”是主观而非客观

未被specification覆盖的情况即为“异常情况”,所谓的“异常”,取决于spec的范畴;normal的不一定是想要的好情况,只要被规约考虑进去都叫normal

健壮性是对正确性的补充
区别
正确性:软件的行为要严格的符合规约中定义的行为
健壮性:出现规约定义之外的情形的时候,软件要做出恰当的反应

Extendibility (可扩展性)

对软件的规约进行修改,是否足够容易?

规模越大,扩展起来越不容易
为什么要扩展:应对变化

简约主义 a simple architecture will always be easier to adapt to changes than a complex one
分离主义a simple change will affect just one(or some) module

(ADT and OOP)/ (Modularity and adaptability)

Reusability (可复用性)

一次开发,多次使用
发现共性
不要repeat!

Compatibility (兼容性)

不同的软件系统之间相互可容易的集成
The key to compatibility lies in homogeneity of design (保持设计的同构性), and in agreeing on standardized conventions for inter-program communication
标准化:文件格式、数据结构、用户接口
更通用的方法是通过协议来实现更通用的兼容性

Efficiency性能

processor time, space occupied in internal and external memories, bandwidth used in communication devices硬件

性能毫无意义,除非有足够的正确性;对性能的关注 要与 其他质量属性进行折中;过度的优化导致软件不再适应变化和复用

Portability (可移植性)

软件可方便的在不同的技术环境之间移植,包括硬件、操作系统

Ease of use (易用性)

容易学、安装、操作、监控;给用户提供详细的指南
系统结构简明;客户目标明确

Functionality

每增加一小点功能,都确保其他质量属性不受到损失

过多的新功能容易带来一 致性的缺失,影响易用性;在质量提升技术的帮助下,可以在整个项目中保持质量水平不变,而不仅仅 是功能性;通常设计时,首先实现一小部分功能并保证各种质量目标,逐渐增加功能并继续保证质量目标

Timeliness (及时性)

及时发布

其他质量目标

可验证性:是否易于验证
完整性:软件系统保护其各种组件(程序和数据)免受未经授权的 访问和修改的能力。
可修复性:便于修复软件的缺点
经济性:同及时性相伴,是系统能够按照其分配的预算或低于预算完成的能力。

Internal quality factors

圈复杂度:用来衡量一个模块判定结构的复杂程度 。
耦合度:设计中追求高内聚和低耦合。
可读性、易理解性、清晰度、复杂度、体积

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

折中

在这里插入图片描述
正确的软件开发过程中,开发者应该将不同质量因素之间如何做出折中的设计决策和标准明确的写下来
虽然需要折中,但“正确性”绝不能与其他质量因素折中

key

四个关键质量指标

面向对象如何提升质量
在这里插入图片描述
五个关键质量目标
可理解性:代码风格、注释、规约、命名
可复用性:
在这里插入图片描述
可维护性:
在这里插入图片描述

健壮性:

在这里插入图片描述

性能:设计模式、代码调优;时空复杂度;分布式;并行多线程

版本控制和git放在下篇 链接

写作于6月10日,7月2日再修订后发布博客

感谢
第一讲精译


分享:

低价透明

统一报价,无隐形消费

金牌服务

一对一专属顾问7*24小时金牌服务

信息保密

个人信息安全有保障

售后无忧

服务出问题客服经理全程跟进