【HIT】哈工大2021春软件构造复习(1)

Chapter 1: Views and Quality Objectives of Software Construction

1.1Multi-dimensional software view

1.软件的多维视图

在这里插入图片描述
Build-time:关注软件的构造阶段。

Code-level:这一维度关注代码的逻辑组织,也就是源代码是如何被方法、函数、类和接口等底层模块组织起来的,以及其中代码之间的依赖关系。

Component-level:这一维度关注代码的物理组织,即代码块之间的关系,如文件、包等等。

Moment view:关注特定时刻的软件状态。

Period view:关注软件形态随时间的变化。

(1)Build-time,moment, and code-level view

例:Source code,Interface-Class-Attribute-Method(Class Diagram)

这三个维度联系起来关注的是源代码的组织情况。可以从以下三个层面分析:

词汇层面:Lexical-oriented source code

半结构化:近乎自然语言的风格(方便程序员)+遵循特定的编程语法(方便编译器)

语法层面:Syntax-oriented program structure: e.g., Abstract Syntax Tree (AST)

AST:彻底结构化,将源代码变成一棵树,对树做操作就是对源代码的修改。

语义层面:Semantics-oriented program structure: e.g., Class Diagram

源代码具体想实现什么操作?图形化或样式化表达“需求”和“设计”思想,再转化为代码。

(2)Build-time, period, and code-level view

例:Code Churn

关注代码在构建期间的变化,比如代码行的添加,对文件的调整或删除。

(3)Build-time, moment, and component-level view

例:Package,File,Static Linking,Library,Test Case,Build Script(Component Diagram)

关注库(这里指静态链接库)和包,库有这几种来源:操作系统提供的库、编程语言提供的库、第三方公司提供的库以及自己积累的库。

链接库文件时分为静态链接(Static linking)和动态链接(Dynamic linking)两种。

静态链接:库被拷贝进入代码形成整体,执行的时候无需提供库文件,发生在构造阶段。

动态链接:库文件不会在build阶段被加入可 执行软件,仅仅做出标记;程序运行时,根据标记装载库至内存。发布软件时,记得将程序所依赖的所有动态库都复制给用户。

(4) Build-time, period, and component-level view

例:Configuration Item,Version

关注软件版本的更新。且相对于(2)而言更关注文件整体变化而非单单代码行的修改。

这里还介绍了一个版本记录工具:Version Control System(VCS)

Run-time:关注代码的运行阶段。

Code-level view(代码层面):逻辑实体在内存中如何呈现?

Component-level view(构件层面):物理实体在物理硬件环境中如何呈现?

(5)Run-time, moment, and code-level view

例:Code Snapshot(代码快闪照),Memory dump(内存信息转储)

关注程序在某个瞬间内存中的情况。

(6)Run-time, period and code-level view

例:Execution stack trace,Concurrent multi-threads

着重看代码的执行跟踪情况。

(7)Run-time, moment, and component-level view

例:Package,Library,Dynamic linking,Configuration,Database,Middleware,Network

和(3)一样都关注的是库、包,但更多是程序运行时的库,比如动态链接库。

(8)Run-time, period, and component-level view

例:Event log,Multi-processes,Distributed processes

使用日志查看系统使用情况。

2.多维视图间的联系

在这里插入图片描述
代码是一个从无到有的过程,也就空集 -> Code,而有了代码之后程序必定会随着代码行的增加而逐步完善,最后被封装,也就是Code->Component这个过程。当程序构建成功后需要运行,也就是Build-time->Run-time,最后我们还可能需要多次修改调整程序,或者记录程序版本变化,也就需要Moment->Period维度的转变。

1.2 Quality Objectives of Software Construction

1.软件系统的质量

外部质量因素影响用户,内部质量因素影响软件本身和它的开发者,外部质量取决于内部质量。

外部质量因素

(1)External1:Correctness(正确性)

正确性是最重要的指标,需要按照预先定义的“规约”执行,软件的行为要严格的符合规约中定义的行为。Chapter 6中会讲到Robustness,也就是测试和调试中发现不正确、消除不正确。此外采取防御式编程,即写程序时就保证正确性,最后也可以通过形式化验证发现问题。

(2)External 2: Robustness(健壮性)

健壮性是对异常情况的处理,是对正确性的补充。也就是出现规约定义之外的情形的时候,软件要做出恰当的反应。这里所谓“异常”,取决于spec的范围,没有被specification覆盖的情况就是“异常情况”。

(3)External 3: Extendibility(可扩展性)

一旦程序规约需要修改,是否成本过高?我们需要设计易修改的程序,这里在Chapter 3中和Chapter 4/5中也有提及。

(4)External 4: Reusability(可复用性)

程序可以一次开发多次使用。尽可能发现程序的共性以便重复利用已有代码。

(5)External 5: Compatibility(兼容性)

指程序在不同环境下是否可用,不同的软件系统之间相互可容易的集成。开发时要注意保持设计的同构性。

(6)External 6: Efficiency(效率)

对于性能,要与其他质量属性进行折中,并且注意性能的前提是保持正确性,否则没有意义。过度优化会导致软件不能适应变化和复用。

(7)External 7: Portability (可移植性)

指软件可以方便的在不同的技术环境(硬件、操作系统)之间移植。

(8)External 8: Ease of use(易用性)

程序员写的代码尽量要易学、便于安装操作和监控,金肯给用户提供详细指南。

(9)External 9: Functionality(功能性)

开发者要避免给软件增加越来越多的功能,结果导致程序极为复杂、不灵活、占用过多的磁盘空间。每增加一点小功能,都要保证其他质量属性不受到损失。

(10)External 10: Timeliness(及时性)

确保在使用者需要之前完成开发。

(11)External 10++: Other qualities

Verifiability (可验证性)、Integrity (完整性)、 Repairability (可修复性)、Economy (经济性)

内部质量因素

代码行数、圈复杂度(Cyclomatic Complexity)、高内聚低耦合(coupling,cohesion)。

可读性、可理解性、简洁度、规模大小。

多因素的折中

在这里插入图片描述
虽然需要折中,但是正确性不能与其他质量因素折中。

以下列出了OOP开发中提升代码质量的方法:
在这里插入图片描述

五个重要的质量指标

(1)Elegant and beautiful code:

即容易理解的程序。

(2)Design for/with reuse:

提高可复用性,开发成本低。

(3)Low complexity:

易于修改扩展。

(4)Robustness and correctness:

保证程序健壮性和正确性。

(5)Performance and efficiency:

执行效率高。

  • 5
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
哈尔滨工业大学(哈工大)在密码学领域有着丰富的研究经验和卓越的研究成果。哈工大密码学团队致力于密码学的基础研究和应用研究,具有国际一流的学术水平。 首先,哈工大密码学团队在密码学基础研究方面取得了卓越成果。他们在对称密码学、公钥密码学和身份认证等方面进行了深入研究,发表了大量的国际学术论文。这些研究不仅在理论上推动了密码学的发展,还为密码算法的设计和密码系统的安全性提供了重要的指导。 其次,哈工大密码学团队在密码学应用研究方面也表现出色。他们研究了密码学在信息安全、网络安全和数据保护等领域的应用,并提出了一系列创新的密码算法和安全协议。这些成果在电子商务、移动通信和云计算等领域得到了广泛应用,有效保护了用户的信息和隐私。 此外,哈工大密码学团队还与国内外的研究机构和企业进行广泛的合作,开展密码学研究与技术转移。他们与国内外顶级大学和研究所合作,共同攻克密码学研究中的难题,加强了学术交流与合作。同时,他们也积极与行业领先的企业进行合作,将密码学技术转化为实际产品和解决方案,推动密码学在实际应用中的发展。 综上所述,哈工大密码学在理论研究和应用研究中都具有卓越的表现,取得了一系列重要的研究成果。他们的研究不仅推动了密码学的发展,还为信息安全领域提供了重要支撑。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值