EagleBear2002 的博客

这里必须根绝一切犹豫,这里任何怯懦都无济于事

\[ \def\Var{\mathsf} \def\Val{\mathsf{Val}} \def\OpId{\mathsf{OpId}} \def\Op{\mathsf{Op}} \def\read{\mathsf{read}} \def\write{\mathsf{write}} \def\reads{\mathsf{reads}} \def\writes{\mathsf{writes}} \def\checkSER{\mathsf{checkSER}} \def\size{\mathsf{size}} \def\width{\mathsf{width}} \def\checkSER{\mathsf{checkSER}} \def\Comm{\mathsf{Comm}} \def\SER{\mathsf{SER}} \def\SI{\mathsf{SI}} \def\PC{\mathsf{PC}} \def\CC{\mathsf{CC}} \def\RC{\mathsf{RC}} \def\RA{\mathsf{RA}} \def\Serialization{\mathsf{Serialization}} \def\po{\mathsf{\textcolor{red}{po}}} \def\so{\mathsf{\textcolor{purple}{so}}} \def\wr{\mathsf{\textcolor{green}{wr}}} \def\co{\mathsf{\textcolor{orange}{co}}} \]

摘要

事务通过启用对共享数据的计算来简化并发编程,这些共享数据与其他并发计算隔离并且对故障具有弹性。现代数据库为事务提供了不同的一致性模型,对应于一致性和可用性之间的不同权衡。在这项工作中,我们研究了检查事务数据库的给定执行是否遵循某种一致性模型的问题。我们证明了诸如读提交、读原子和因果一致性之类的一致性模型是多项式时间可检查的,而前缀一致性和快照隔离通常是 NP 完全的。这些结果补充了先前有关可串行性的 NP 完整性结果。此外,在 NP 完全一致性模型的背景下,我们设计了多项式时间的算法,假设输入执行中的某些参数(例如会话数)是固定的。我们在几个生产数据库的背景下评估这些算法的可扩展性。

笔者修改了 DBCop 的部分代码:https://git.nju.edu.cn/EagleBear/dbcop-verifier

INTRODUCTION

阅读全文 »

TPC-C(Transaction Processing Performance Council - TPC-C)是一个基准测试(benchmarking)标准,用于评估和比较数据库管理系统(DBMS)在事务处理场景下的性能。

官方文档:https://www.tpc.org/TPC_Documents_Current_Versions/pdf/tpc-c_v5.11.0.pdf

数据模式

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
// 仓库类
class Warehouse {
int warehouseId;
String warehouseName;
String warehouseAddress;
String warehouseCity;
String warehouseState;
String warehouseZip;
double warehouseTax;
double warehouseYtd;
}

// 顾客类
class Customer {
int customerId;
int customerWarehouseId;
int customerDistrictId;
String customerFirstName;
String customerLastName;
String customerAddress;
String customerCity;
String customerState;
String customerZip;
String customerPhone;
Date customerSince;
String customerCredit;
double customerCreditLimit;
double customerDiscount;
double customerBalance;
double customerYtdPayment;
int customerPaymentCount;
int customerDeliveryCount;
}

// 订单类
class Order {
int orderId;
int orderWarehouseId;
int orderDistrictId;
int orderCustomerId;
int orderCarrierId;
int orderLineCount;
boolean orderIsNew;
boolean orderIsFilled;
Date orderEntryDate;
Date orderCarrierDeliveryDate;
int[] orderLineItems; // 订单项
}

// 订单项类
class OrderLine {
int orderLineId;
int orderLineWarehouseId;
int orderLineDistrictId;
int orderLineOrderId;
int orderLineItemId;
int orderLineSupplyWarehouseId;
double orderLineQuantity;
double orderLineAmount;
Date orderLineDeliveryDate;
int orderLineIsNew;
}

// 商品类
class Item {
int itemId;
int itemWarehouseId;
double itemPrice;
String itemDescription;
Date itemReleaseDate;
String itemImageUrl;
}

// 供应商类
class Supplier {
int supplierId;
String supplierName;
String supplierAddress;
String supplierCity;
String supplierState;
String supplierZip;
String supplierPhone;
double supplierBalance;
}

// 库存类
class Stock {
int stockItemId;
int stockWarehouseId;
int stockDistrictId;
int stockQuantity;
String stockDist01;
String stockDist02;
String stockDist03;
String stockDist04;
String stockDist05;
String stockDist06;
String stockDist07;
String stockDist08;
String stockDist09;
String stockDist10;
double stockYtd;
int stockOrderCount;
int stockRemoteCount;
String stockData;
}

事务模式

阅读全文 »

摘要

大多数数据库教材中明确可重复读(RR)不能防止幻读。在本文中,我们展示了 RR 在幻读下的一些表现,分析了 RR 的实现原理,并论证了为何 MySQL 的 RR 隔离级别下几乎不会出现幻读。本文内容来自南京大学软件学院课程《数据库开发》。

可重复读的实验

上图是可重复读隔离级别下的一个实验,事务 1 的两次查询得到的结果完全相同。看起来在这里可重复读防止了幻读,但我们其实希望读到 Dong 老师的数据。

阅读全文 »

摘要

本文介绍了在 Linux 和 Windows 系统下修改 ssh 配置文件使 ssh 协议访问 Github 时通过代理的解决方案。该方案同样适用于 ssh 访问其他网站时。

问题背景

从前天开始,Linux 台式机和 Windows 笔记本都不能对 Github 仓库进行 clone 和 push,表现为 clone 和 push 时链接超时。推测是网络环境发生变化导致网路不通。但浏览器此时可以正常访问 Github 和 google 等网站。

Github 目前已经不支持通过 http 协议进行 clone,只有 ssh 协议可行。笔者尝试使 ssh 协议通过代理。

阅读全文 »

摘要

IPADS 发表了与 Ad Hoc 事务相关的文章共三篇,内容基本相同。其中第三篇内容最为详细。

  1. Ad Hoc Transactions in Web Applications: The Good, the Bad, and the Ugly | Proceedings of the 2022 International Conference on Management of Data (acm.org)
  2. Ad Hoc Transactions: What They Are and Why We Should Care | ACM SIGMOD Record
  3. Ad Hoc Transactions through the Looking Glass: An Empirical Study of Application-Level Transactions in Web Applications | ACM Transactions on Database Systems

为什么需要临时事务

数据库事务无法满足 Web 应用的要求:

阅读全文 »

摘要

Web 应用程序中的许多事务都是在应用程序代码中临时构建的。例如,开发人员可能会显式地使用锁定原语或验证程序来协调关键的代码片段。我们将应用程序代码协调的数据库操作称为临时事务。到目前为止,人们对它们知之甚少。本文介绍了对临时事务的第一个综合研究。通过研究 8 个流行的开源 Web 应用程序中的 91 个临时事务,我们发现(i)每个研究的应用程序都使用临时事务(每个应用程序最多 16 个),其中 71 个扮演关键角色;(ii)与数据库事务相比,临时事务的并发控制更具灵活性;(iii)临时事务容易出错——其中 53 个具有正确性问题,其中 33 个由开发人员控制;(iv)临时事务通过利用访问模式等应用程序语义来提高争议工作负载的性能的潜力。基于这些信息,我们讨论了临时事务对数据库研究界的影响。

INTRODUCTION

今天,web 应用程序通常使用数据库系统来持久化大量数据,因此需要协调并发数据库操作以正确性。一种常见的方法是使用数据库事务。Transactions 通过将并发数据库操作封装成单独的工作单元来隔离并发数据库操作。另一种广泛采用的方法是使用对象关系映射(ORM)框架提供的不变验证 API(例如,来自 Active Record [98] 的验证关键字)。使用这样的 API,开发人员在应用程序代码和 ORM 框架中明确指定不变量,例如列值的唯一性报告不变违规的错误。到目前为止,已经做了很多工作来研究和改进这两种方法[8,9,25,31,39,65,66,79,97,117,118,122]。

阅读全文 »

摘要

工程化软件开发需要对软件开发整个过程进行有效的组织和管理,由此产生了一系列软件开发组织和管理方法,其主要目的是形成一种载体,用以积累和传递关于软件开发的经验教训。然而,由于软件开发的一些天然特性(比如复杂性和不可见性)的存在,使得描述软件开发过程的软件开发与组织方法也天然地带着一定的抽象性。由此带来了很多概念上的误导和实践中的争论,影响了上述目的的达成。例如,对于究竟该如何选择和定义合适的软件开发过程以更好地满足某个特定项目的要求,目前仍然缺少可靠的手段。甚至有些面向工业界的调研报告表明:在实际软件项目开发中,过程改进(例如引入新的工具或者方法)的主要驱动力是佚闻。试图厘清软件组织与管理话题的若干核心概念,系统梳理软件组织和管理方法的特征,并且以软件发展的历史为主线,介绍软件组织与管理方法的历史沿革,整理出这种历史沿革背后的缘由。在此基础上,讨论和总结若干发现,以期为研究者和实践者提供参考。

原文链接:https://www.jos.org.cn/html/2019/1/5645.htm

背景与概念介绍

一个完整的计算机系统通常是由硬件以及运行其上的软件所组成。这其中,软件从诞生开始,其规模以及在一个完整计算机系统中所占的比重一直呈现上升趋势。类似硬件产品的“摩尔定律”(即:硬件产品的性能,每隔约 18 个月性能翻番,成本下降),软件产业也有一个类似的“摩尔定律”,即:类似功能的软件产品的规模每隔 18 个月,其规模(比如代码行)会翻倍,而用户获取该软件或者服务的代价将会下降[1]。Humphrey 收集整理了一些典型软件产品中规模(单位为千行代码)随着时间推移的变化趋势(如图 1 所示)[2]。我们从中可以发现:在一些系统软件产品(例如,IBM 的软件产品和微软 NT 产品)和应用软件产品(例如,航空领域软件系统和电视机中的嵌入式软件系统)中,软件系统的规模都随着时间的推移呈现出明显的上升趋势。“摩尔定律”给软件系统的开发和维护带来很多负面影响:首先,软件规模的不断扩大,会使得软件开发益发困难,由此带来成本超支、交付延后以及质量低劣等问题;其次,为了缓解摩尔定律的影响,尤其为了尽可能地避免收益下降,软件供应商还需尽快交付产品或者服务,这将使得前述由于规模扩大所带来的影响更加突出。此外,如果考虑到软件在一个计算机系统中的比重也在不断增加,那么软件行业的“摩尔定律”对整个计算机系统的研发和交付的影响也将逐渐增加,进而对由“软件定义的世界”的社会生活各个方面带来巨大影响。

阅读全文 »

摘要

本文覆盖了 2023Fall 课堂习题和目前全部的往年考试题,根据题型做了分类,部分题目提供了参考答案,如对答案有疑问,请联系博主本人探讨。

课程沿革:

  • 2023Fall-软件质量管理
  • 2022Fall-软件质量与管理
  • 2021Fall-软件质量与管理
  • 2018Fall-软件过程与管理

客观题

阅读全文 »

期末考试占总评 50%-60%。

  1. 选择题:20 道 \(\times\) 2 分/道=40 分,大多数来自 MOOC
  2. 填空题:?
  3. 简答题:空不大,不需要写很多字。
  4. 设计题:

选择题

MOOC

题面 选项 解析
【2022Fall】在人机交互领域,计算机可能指的是 A. 台式机
B. 大型计算机系统
C. 网站
D. 以上都是
D
【2021Fall】以下描述正确的是: A. 人机交互只关注软件的可用性
B. 人机交互就是用户界面设计
C. “以用户为中心”是交互设计的主要方法
D. 人机交互只需要关注软件设计,不需要关注用户
C
【2020Fall】以下哪个领域不会对人机交互学科产生影响 A. 人机工程学
B. 认知心理学
C. 计算机科学
D. 上述学科均对人机交互学科有影响
D
【2022Fall】人机交互是交叉学科,作为交叉学科团队的主要缺点是 A. 会产生过多想法
B. 看待和谈论问题的角度不同
C. 相互沟通不容易
D. 以上都不是
C
【2022Fall】【2020Fall】在 EEC 模型,用户为达目标而制定的动作与系统允许的动作之间的差别被称作 A. 执行阶段
B. 评估阶段
C. 执行隔阂
D. 评估隔阂
C
关于交互设计原则,以下描述正确的是: A. 设计原则不能指导设计人员做出正确的决策
B. 交互设计大师 Donald Norman 提出了十条启发式设计原则
C. 在要求输入日期时为用户提供日历组件,这对应“用户应享有控制权和自主权”的设计原则
D. 设计应该使用用户容易理解的语言来表示错误信息
D
【2022Fall】以下哪一种情况不会在优秀产品中出现 A. 使用一长串命令来完成一个特定功能
B. 图标们拥有清晰的语义
C. 使用常用的快捷键,如用 CTRL+Z 表示撤销
D. 使用声音表达特定的含义
A
【2021Fall】以下两个网页的主要区别在于: A. 背景颜色
B. 第一个网站提供了对结果数量的控制
C. 第二个网站只包含必要的 UI 组件
D. 第二个网站的配色方案更优
C
提供加速器(如键盘快捷键等)的目的是为了提高系统的: A. 实用性
B. 效率
C. 态度或喜爱程度
D. 易学性
B
【2022Fall】能够帮助设计人员了解用户特定交互行为发生的原因的可用性工程方法是 A. 边说边做
B. 用户和任务观察
C. 场景
D. 启发式评估
A
【2020Fall】以下哪一条符合频繁使用的专家用户进行设计的指导原则 A. 提供指令、对话框和在线帮助
B. 减轻记忆负担
C. 提供有意义的信息
D. 保证快速响应
D
【2021Fall】以下关于短时记忆描述正确的是: A. 短时记忆的容量是有限的
B. 短时记忆的容量是无限的
C. 短时记忆的容量为零
D. 短时记忆的容量很大,但容量有限
A
【2022Fall】在进行界面设计时要注意对组件进行对齐,这是由于格式塔心理学中哪一条原则的影响 A. 连续性
B. 相近性
C. 完整性
D. 相似性
A
【2021Fall】假设需要判断某应用程序的配色方案是否恰当。对于该测试任务,您将使用: A. 低保真模型
B. 高保真模型
C. 均可
D. 以上都错
B;低保真模型包括:草图、故事板、绿野仙踪法等。
【2022Fall】【2021Fall】以下关于“人物角色”描述正确的是 A. 人物角色不是特定上下文的,所以它可以很容易地被重复使用
B. 人物角色是设计人员编造的,并不是真实的人
C. 人物角色的概念以及使用都很简单
D. 人物角色能够帮助克服当前教学产品开发中的很多问题
D;人物角色不能被很容易地重复使用;人物角色虽然不是真实的人,但是在真是用户的基础上得到的,不是编造的;任务角色的构造和使用并不简单
以下关于 Allan Cooper 提出的交互设计框架描述正确的是: A. 建议使用高保真草图序列的故事板来描述关键线路情景剧本
B. 交互设计框架可用于确定界面使用的颜色和风格
C. 关键线路情景剧本必须在细节上严谨地描述每个主要交互的精确行为
D. 验证性的场景剧本需要具备产品的很多细节信息
C
【2022Fall】原型阶段跟在哪一个开发阶段的后面 A. 观察用户需要
B. 构建应用程序
C. 评估
D. 以上都不对
A
【2021Fall】对于主流用户很少使用,但自身需要更新的功能,可使用何种策略进行简化。 A. 转移
B. 删除
C. 隐藏
D. 组织
C
【2021Fall】关于交互设计模式,以下说法错误的是 A. 交互设计模式可以拿来即用,不需要修改
B. 设计模式能够帮助提供有价值、有用的设计思路
C. 模式在交互设计中的应用还处于起步阶段
D. 模式捕捉了良好设计中不变的特性
A
以下关于交互评估描述错误的是: A. 评估不一定要遵循 DECIDE 框架
B. 评估是系统化的数据搜集过程
C. 评估过程需要严谨的设计
D. 评估是设计过程中一个独立的阶段
D;设计过程中时时都需要评估
【2021Fall】【2022Fall】为探索小孩子们在一起是如何交谈的,并调查一种新型产品是否能帮助他们更积极地参与其中,可使用如下哪种技术 A. 可用性测试
B. 实地研究
C. 预测性评估
D. DECIDE 框架
B
【2021Fall】关于启发式评估,以下论证正确的是: A. 启发式评估是一种基于专家的评估方法
B. 专家应用启发式评估时,会从自身使用经验出发对界面进行判断;
C. 启发式评估的结果只有界面中潜在的可用性问题列表
D. 当界面元素存在多个可用性问题时,只需列举其中一个问题即可
A
【2021Fall】以下哪一条不属于用户测试前的准备步骤 A. 观察参与者
B. 制定测试方案
C. 开展小规模测试
D. 选择参与用户
A
【2022Fall】以下论述正确的是 A. 评估不应该过早进行,因为此时系统还不够完善
B. 原型既可以帮助发展设计问题,也可以用来帮助用户明确需求
C. 纸质原型适用于产品开发过程中的任意阶段
D. 高保真原型更接近系统,因而在评估中要尽可能使用高保真原型进行评估
B
以下关于任务分析描述错误的是: A. 层次化任务分析是人因工效学领域中最广泛使用的方法
B. 任务分析对于改善用户体验至关重要
C. 层次化任务分析采用的是“分而治之”的方法
D. 只要肯花时间,总是可以实现完善的任务分析
D
【2021Fall】GOMS 的全称是什么: A. Goals, operation, methods and selection rules
B. Goals, objects, models and selection rules
C. Goals, operations, methods and state rules
D. Goals, operations, models and state rules
A
【2022Fall】以下关于击键层次模型描述不正确的是 A. 击键层次模型用于预测指定任务的完成时间
B. 击键层次模型预测假设交互过程中没有错误发生
C. 击键层次模型预测的是无干扰情况下完成任务的时间
D. 使用击键层次模型预测的难点在于对操作路径的分析
D;TODO:难点为什么在于操作路径分析?
以下关于 Fitts 定律描述不正确的是: A. Fitts 定律是一种预测模型
B. Fitts 定律可以预测任意交互操作的完成时间
C. Fitts 定律对于图形用户界面应用开发具有重要指导意义
D. Fitts 定律也可用于指导现实生活中的产品设计
B
【2022Fall】以下关于预测模型描述正确的是 A. 预测模型只能预测任务的完成时间
B. 预测模型能够对所有任务的完成情况进行预判
C. 预测模型可用于比较不同的应用软件和设备
D. 预测模型预测的任务完成时间和实际用户的任务执行时间一致
C;预测模型除了预测完成时间,还能预测操作了路径
阅读全文 »