软件团队的共担责任
问责制被认为是个人与其社会系统之间的纽带,它创造了一种将个人与其行为和绩效联系起来的身份关系。在入门系列的第一篇文章《超越工具和流程:成功软件开发团队的策略》中,我们介绍了问责制的概念,并提出了以下定义:
期望对自己的行为负责,并需要在未来向他人提供此类行为的解释和理由。
无论集体的性质如何,从二元组到文明,解决其成员之间利益分歧的协调与合作都是必不可少的。问责制通过在社会系统中建立共同的期望来发挥作用。当制定了标准和期望时,人们必须遵守,否则可能会受到惩罚。社会系统的各个层面都会评估对标准的遵守情况,包括个人、二元组、团体、组织和整个社会。
问责制是所有社会(包括组织)的基本推动因素。如果社会体系缺乏问责制,个人行为将不顾他人造成的后果。因此,组织可能发现有效管理其运营具有挑战性。在软件开发中,问责制早在 80 年代的先驱者工作中就得到了承认。在 Barry W. Boehm 关于“软件工程七项基本原则”的论文中,他提出了一项确保对结果负责的原则,即“对结果保持明确的责任制”。
此外,“问责制”在 Scrum 指南中出现了九次。该指南非常强调问责制作为一种控制机制,例如“让彼此 [开发人员和团队成员] 以专业人士的身份承担责任”。那么,问责制如何控制和改善软件团队的成果呢?
图 1 直观地展示了追究责任的过程。它由一个评估过程组成,在这个过程中,个人要对自己的行为和决定负责,并受到特定社会文化背景下的人际、社会和结构因素的指导。受众会评估个人是否符合预先定义的规则、标准、官方和非官方期望以及共同规范,从而给予奖励或处罚。作为回应,个人会发展出各种应对机制,既有主动的,也有被动的,以维护和维持其社会体系中一致的自我形象。其中一些机制可能包括认知策略,例如将行动与受众偏好保持一致,或事后合理化,即个人用理由和借口为过去的行为辩护。虽然传统的问责理论通常将“受众”视为一个单一的实体,但它可以解构为一个由多个参与方组成的网络,个人需要对这些参与方负责。
在我们最近的研究中,我们研究了软件工程中问责制的构成要素,报告称,软件团队成员需要对多个问题承担个人和集体责任。
图 1:社会体系问责制的动态
项目成果,主要是软件质量、软件安全性和满足项目期限。业务分析师与软件团队中的其他角色共同承担这些成果的责任。
业务分析师 (BA) 共同负责软件质量、安全性和项目期限,因为他们的职责涉及定义直接影响这些结果的需求。通过收集业务需求并将其转化为技术规范,BA 可确保软件符合质量标准并按预期运行,这对于最大限度地减少缺陷和安全漏洞至关重要。此外,他们在生成构建软件的需求工件方面的作用会影响时间表,使团队工作与项目期限保持一致。当 BA 无法提供准确及时的需求工件时,就会对时间表产生影响。因此,让他们与开发人员和其他团队成员一起承担责任。
正式问责
组织有意实施策略来推动软件团队成员的责任感。这些制度化的驱动因素包括财务奖励、职业发展和惩罚。这些正式化的策略影响个人对责任感的看法,从而塑造他们对实现团队预期结果的承诺。虽然奖励旨在强化积极的表现,但惩罚旨在起到威慑作用,通过让工程师意识到潜在的负面后果来阻止他们表现不佳。
财务奖励。在上述研究中,我们发现软件团队成员在一定程度上受到财务奖励前景的激励,以满足既定期望。其中一些奖励包括财务激励,特别是与绩效评估挂钩的年度奖金。财务奖励,无论是奖金、加薪还是晋升,都用于坚持责任感并激励个人满足既定期望。
职业发展。在我们的工作中,职业发展也被认为是一种激励责任感的因素。组织会通过职业发展来奖励达到预期结果的期望。我们的研究结果表明,在软件专业职业中获得晋升的动力与表现出强烈的责任感密切相关。
惩罚。组织采用惩罚策略来激励表现不佳的团队成员达到或超过既定的预期结果。惩罚策略包括纠正措施(如绩效改进计划)和失业。惩罚策略表明,在某些情况下,组织致力于通过对未能达到预期结果实施明确的惩罚来推动软件专业人员的责任感。
控制机制是组织制定或嵌入软件开发实践的各种流程、工具和程序,旨在确保个人能够履行职责并遵守既定期望。在问责制的动态和流程中,控制机制属于图 1 中的“评估”。为了控制制度化的正式问责制,绩效评估作为一项问责制定期进行。这些定期评估推动了问责制,因为它们要求对组织就预定义期望的绩效负责,依靠代码中的缺陷计数和同行的反馈等指标,确保工程师始终如一地努力达到或超过组织既定的期望。
共同责任
共享或非正式的责任感源自同事的期望和软件专业人员的内在驱动力。前者促进了一种集体责任感,个人感到有必要回报同事并向同事展示自己的责任感,而后者则是天生的,具有内在基础。当软件专业人员感到内在驱动力以达到某些结果(例如,代码质量或按时完成任务)时,他们会表现出一种自我驱动的责任感。这种自我要求的责任感源于个人渴望超越或达到自我要求的标准,反映了软件专业人员的内在承诺和动机,即坚持和保持其交付成果的质量与他们的职业和个人价值观保持一致。共享责任感主要通过软件工程和开发实践(即测试和代码审查)以及同事的反馈来强化。
这种基于同行的问责制使用软件开发实践中固有的控制机制,例如测试或非正式同行的反馈,而不是既定组织的流程(如绩效评估)。
非正式或共享责任归因于团队的共同规范。然而,回报并不类似于正式的责任制(即财务奖励和职业发展)。在软件开发环境中,软件专业人员对同事的期望感到有责任,希望得到同事的评价,并为集体努力做出贡献。此外,避免团队层面的制裁。相反,我们的研究表明,软件团队更喜欢一种心理上安全的方式来应对表现不佳。
软件专业人员的责任不仅受到制度化机制(例如绩效评估)的影响,还受到同事的期望和内在动机的影响。虽然绩效等传统责任控制机制在软件团队中具有相关性,但它们与同事驱动和内在动机驱动的责任共存。
我们的工作表明,软件专业人员对同事驱动和内在动机驱动的责任有着天然的倾向。因此,在下一篇文章中,我们将深入探讨这种责任如何发生以及如何有助于满足团队成果的期望。
相关文章:
软件团队的共担责任
问责制被认为是个人与其社会系统之间的纽带,它创造了一种将个人与其行为和绩效联系起来的身份关系。在入门系列的第一篇文章《超越工具和流程:成功软件开发团队的策略》中,我们介绍了问责制的概念,并提出了以下定义: …...
代码美学:MATLAB制作渐变色
输入颜色个数n,颜色类型: n 2; % 输入颜色个数 colors {[1, 0, 0], [0, 0, 1]}; createGradientHeatmap(n, colors); 调用函数: function createGradientHeatmap(n, colors)% 输入检查if length(colors) ~ nerror(输入的颜色数量与n不一…...
Perforce SAST专家详解:自动驾驶汽车的安全与技术挑战,Klocwork、Helix QAC等静态代码分析成必备合规性工具
自动驾驶汽车安全吗?现代汽车的软件包含1亿多行代码,支持许多不同的功能,如巡航控制、速度辅助和泊车摄像头。而且,这些嵌入式系统中的代码只会越来越复杂。 随着未来汽车的互联程度越来越高,这一趋势还将继续。汽车越…...
大模型中常见的微调方法有哪些?
我整理了1000道算法面试题: 获取 这里说的微调主要是指参数微调,参数微调的方法主要有以下几种: - Adapter 在预训练模型每一层(或某些层)中添加Adapter模块(如上图左侧结构所示),微调时冻结预训练模型主体,由Ada…...
MATLAB支持的距离度量
距离度量是用于量化两个点或样本之间差异的一种方法。在不同的领域和应用场景中,距离度量的选择可能会有所不同。 欧几里得距离(Euclidean Distance):这是最直观的距离定义,适用于n维空间中的两点。对于二维空间中的点…...
c++编程玩转物联网:使用芯片控制8个LED实现流水灯技术分享
在嵌入式系统中,有限的GPIO引脚往往限制了硬件扩展能力。74HC595N芯片是一种常用的移位寄存器,通过串行输入和并行输出扩展GPIO数量。本项目利用树莓派Pico开发板与74HC595N芯片,驱动8个LED实现流水灯效果。本文详细解析项目硬件连接、代码实…...
LSA详情与特殊区域
LSA是构成LSDB的重要原材料,在OSPF中发挥很大作用。 报文 通用头部 LS age:LSA寿命,0-3600s Options:可选项 LS type:LSA类型,三要素之一 Link State ID:LSAID 三要素之一 Advertising Ro…...
Leecode刷题C语言之交替组①
执行结果:通过 执行用时和内存消耗如下: 代码如下: int numberOfAlternatingGroups(int* colors, int colorsSize) {int res 0;for (size_t i 0; i < colorsSize; i) {if (colors[i] ! colors[(i - 1 colorsSize) % colorsSize] && col…...
深入解析 Django 中数据删除的最佳实践:以动态管理镜像版本为例
文章目录 引言场景与模型设计场景描述 删除操作详解1. 删除单个 Tag2. 批量删除 Tags3. 删除前确认4. 日志记录 高阶优化与问题分析1. 外键约束与误删保护2. 并发删除的冲突处理3. 使用软删除 结合 Django Admin 的实现总结与实践思考 引言 在现代应用开发中,服务和…...
4457数字示波器 2Gpts的深度存储
4457数字示波器 2Gpts的深度存储 256级灰度等级及四种波形色彩显示 4457M系列数字示波器,带宽从1GHz到4GHz,采样率10GSa/s、20GSa/s,垂直分辨率12bit,存储深度1Gpts,最快波形捕获率70万个波形/秒,独创的…...
【笔记】轻型民用无人驾驶航空器安全操控
《轻型民用无人驾驶航空器安全操控》 理论考试培训材料 法规部分 【民用无人驾驶航空器的分类】 1、如何定义微型、轻型无人驾驶航空器? 微型无人驾驶航空器,是指空机重量小于0.25千克,最大平飞速度不超过40千米/小时,无线电发…...
【leetcode】动态规划
31. 873. 最长的斐波那契子序列的长度 题目: 如果序列 X_1, X_2, ..., X_n 满足下列条件,就说它是 斐波那契式 的: n > 3对于所有 i 2 < n,都有 X_i X_{i1} X_{i2} 给定一个严格递增的正整数数组形成序列 arr ࿰…...
嵌入式linux系统中图像处理基本方法
目录 2.1 BMP图像处理 2.1.1 BMP文件格式解析 2.1.2 代码实现:将BMP文件解析为RGB格式,在LCD上显示 2.2 JPEG图像处理 2.2.1 JPEG文件格式和libjpeg编译 2.2.2 libjpeg接口函数的解析和使用 2.2.3 使用libjpeg把JPEG文件解析为RGB格式,在LCD上显示 …...
Qt SQL模块概述
Qt SQL支持的数据库 要在项目中使用 Qt SQL 模块,需要在项目配置文件中添加下面一条设置语句: Qt sql在头文件或源文件中使用 Qt SQL 模块中的类,可以使用包含语句: #include <QtSql>这样会将某个 Qt SQL 模块中的所有类…...
PVE相关名词通俗表述方式———多处细节实验(方便理解)
PVE设置初期,对CIDR、 网关、 LinuxBridge、VLAN等很有困惑的朋友一定很需要一篇能够全面通俗易懂的方式去理解PVE 中Linux网桥的工作方式,就像操作一个英雄,多个技能,还是需要一点点去学习理解的,如果你上来就对着别人…...
C语言实现冒泡排序:从基础到优化全解析
一、什么是冒泡排序? 冒泡排序(Bubble Sort)是一种经典的排序算法,其工作原理非常直观:通过多次比较和交换相邻元素,将较大的元素“冒泡”到数组的末尾。经过多轮迭代,整个数组会变得有序。 二…...
ReentrantLock(可重入锁) Semaphore(信号量) CountDownLatch
目录 ReentrantLock(可重入锁) &Semaphore(信号量)&CountDownLatchReentrantLock(可重入锁)既然有了synchronized,为啥还要有ReentrantLock?Semaphore(信号量)如何确保线程安全呢?CountDownLatch ReentrantLock(可重入锁) &Semaphore(信号量…...
Zookeeper选举算法与提案处理概览
共识算法(Consensus Algorithm) 共识算法即在分布式系统中节点达成共识的算法,提高系统在分布式环境下的容错性。 依据系统对故障组件的容错能力可分为: 崩溃容错协议(Crash Fault Tolerant, CFT) : 无恶意行为,如进程崩溃,只要…...
Jmeter中的断言
7)断言 1--响应断言 功能特点 数据验证:验证响应数据是否包含或不包含特定的字符串、模式或值。多种匹配类型:支持多种匹配类型,如文本、正则表达式、文档等。灵活配置:可以设置多个断言条件,满足复杂的测…...
【通俗理解】隐变量的变分分布探索——从公式到应用
【通俗理解】隐变量的变分分布探索——从公式到应用 关键词提炼 #隐变量 #变分分布 #概率模型 #公式推导 #期望最大化 #机器学习 #变分贝叶斯 #隐马尔可夫模型 第一节:隐变量的变分分布的类比与核心概念【尽可能通俗】 隐变量的变分分布就像是一场“捉迷藏”游戏…...
Vivado程序固化到Flash
在上板调试FPGA时,通常使用JTAG接口下载程序到FPGA芯片中,FPGA本身是基于RAM工艺的器件,因此掉电后会丢失芯片内的程序,需要重新烧写程序。但是当程序需要投入使用时不能每一次都使用JTAG接口下载程序,一般FPGA的外围会…...
铲屎官进,2024年宠物空气净化器十大排行,看看哪款吸毛最佳?
不知道最近换毛季,铲屎官们还承受的住吗?我家猫咪每天都在表演“天女散花”,家里没有一块干净的地方,空气中也都是堆积的浮毛,幸好有宠物空气净化器这种清理好物。宠物空气净化器针对宠物浮毛设计,可以有效…...
SpringBoot 项目中使用 spring-boot-starter-amqp 依赖实现 RabbitMQ
文章目录 前言1、application.yml2、RabbitMqConfig3、MqMessage4、MqMessageItem5、DirectMode6、StateConsumer:消费者7、InfoConsumer:消费者 前言 本文是工作之余的随手记,记录在工作期间使用 RabbitMQ 的笔记。 1、application.yml 使…...
嵌入式硬件实战提升篇(二)PCB高速板设计 FPGA核心板带DDR3 PCB设计DDR全面解析
引言:设计一款高速板,供读者学习,FPGA核心板,带一颗DDR3内存,FPGA型号:XC6SLX16-2FTG256C。 随着嵌入式硬件技术的快速发展,高速板设计逐渐成为嵌入式系统设计中的核心技术之一。高速板的设计要…...
2044:【例5.12】回文字串
【题目描述】 输入一串字符,字符个数不超过100,且以“.”结束。 判断它们是否构成回文。 【输入】 一行字符串。 【输出】 是否为回文串。是输出“Yes”,否输出“No。” 【输入样例】 abccb 【输出样例】 No 代码实现 #include <stdio.h> /*2044&#x…...
Sui 链游戏开发实战:用 Move 写一个链上剪刀石头布游戏!
系列文章目录 Task1:hello move🚪 Task2:move coin🚪 Task3:move nft🚪 Task4:move game🚪 更多精彩内容,敬请期待!✌️ 文章目录 系列文章目录前言什么是 …...
Prometheus告警带图完美解决方案
需求背景 告警分析处理流程 通常我们收到 Prometheus 告警事件通知后,往往都需要登录 Alertmanager 页面查看当前激活的告警,如果需要分析告警历史数据信息,还需要登录 Prometheus 页面的在 Alerts 中查询告警 promQL 表达式,然…...
深度学习模型:循环神经网络(RNN)
一、引言 在深度学习的浩瀚海洋里,循环神经网络(RNN)宛如一颗独特的明珠,专门用于剖析序列数据,如文本、语音、时间序列等。无论是预测股票走势,还是理解自然语言,RNN 都发挥着举足轻重的作用。…...
分布式在线评测系统
OnlineJudge 前言所用技术开发环境 1. 需求分析2. 项目宏观结构3. compile_server服务设计3.1 compiler服务设计3.2 runner服务设计3.3 compile_run3.4 compile_server.cpp 4. oj_server服务设计4.1 model设计4.2 view设计4.3 control设计4.3.1 获取题目列表功能4.3.2 获取单个…...
Unity中动态生成贴图并保存成png图片实现
实现原理: 要生成长x宽y的贴图,就是生成x*y个像素填充到贴图中,如下图: 如果要改变局部颜色,就是从x1到x2(x1<x2),y1到y2(y1<y2)这个范围做处理, 或者要想做圆形就是计算距某个点(x1,y1&…...
鸿蒙多线程开发——sendable共享容器
1、异步锁机制 在介绍共享容器之前,先介绍异步锁机制。 为了解决多线程并发任务间的数据竞争问题,ArkTS引入了异步锁能力。异步锁可能会被类对象持有,因此为了更方便地在并发实例间获取同一个异步锁对象,AsyncLock对象支持跨线程…...
五天SpringCloud计划——DAY1之mybatis-plus的使用
一、引言 咱也不知道为啥SpringCloud课程会先教mybatis-plus的使用,但是教都教了,就学了吧,学完之后觉得mybatis-plus中的一些方法还是很好用了,本文作为我学习mybatis-plus的总结提升,希望大家看完之后也可以熟悉myba…...
Vue.js基础——贼简单易懂!!(响应式 ref 和 reactive、v-on、v-show 和 v-if、v-for、v-bind)
Vue.js是一个渐进式JavaScript框架,用于构建用户界面。它专门设计用于Web应用程序,并专注于视图层。Vue允许开发人员创建可重用的组件,并轻松管理状态和数据绑定。它还提供了一个虚拟DOM系统,用于高效地渲染和重新渲染组件。Vue以…...
警钟长鸣,防微杜渐,遨游防爆手机如何护航安全生产?
近年来,携非防爆手机进入危险作业区引发爆炸的新闻屡见报端。2019年山西某化工公司火灾,2018年延安某煤业瓦斯爆炸,均因工人未用防爆手机产生静电打火引发。涉爆行业领域企业量大面广,相当一部分企业作业场所人员密集,…...
中国科学院大学研究生学术英语读写教程 Unit7 Materials Science TextA 原文和翻译
中国科学院大学研究生学术英语读写教程 Unit7 Materials Science TextA 原文和翻译 Why Is the Story of Materials Really the Story of Civilisation? 为什么材料的故事实际上就是文明的故事? Mark Miodownik 1 Everything is made of something. Take away co…...
win10中使用ffmpeg和MediaMTX 推流rtsp视频
在win10上测试下ffmpeg推流rtsp视频,需要同时用到流媒体服务器MediaMTX 。ffmpeg推流到流媒体服务器MediaMTX ,其他客户端从流媒体服务器拉流。 步骤如下: 1 下载MediaMTX github: Release v1.9.3 bluenviron/mediamtx GitHub…...
代码美学2:MATLAB制作渐变色
效果: %代码美学:MATLAB制作渐变色 % 创建一个10x10的矩阵来表示热力图的数据 data reshape(1:100, [10, 10]);% 创建热力图 figure; imagesc(data);% 设置颜色映射为“cool” colormap(cool);% 在热力图上添加边框 axis on; grid on;% 设置热力图的颜色…...
gitlab:使用脚本批量下载项目,实现全项目检索
目的 当需要知道gitlab中所有项目是否存在某段代码时,gitlab免费版只提供了当个项目内的检索,当项目过多时一个个查太过繁琐。下面通过 GitLab API 将指定 Group 下的所有项目克隆到本地。此脚本会自动获取项目列表并逐一克隆它们,再在本地进…...
大型语言模型LLM - Finetuning vs Prompting
资料来自台湾大学李宏毅教授机器学课程ML 2023 Spring,如有侵权请通知下架 台大机器学课程ML 2023 Springhttps://speech.ee.ntu.edu.tw/~hylee/ml/2023-spring.php2023/3/10 课程 機器如何生成文句 内容概要 主要探讨了大型语言模型的两种不同期待及其导致的两类…...
【Python中while循环】
一、深拷贝、浅拷贝 1、需求 1)拷贝原列表产生一个新列表 2)想让两个列表完全独立开(针对改操作,读的操作不改变) 要满足上述的条件,只能使用深拷贝 2、如何拷贝列表 1)直接赋值 # 定义一个…...
Selenium 包介绍
诸神缄默不语-个人CSDN博文目录 Selenium 是一个强大的工具,主要用于自动化 Web 浏览器的操作。它支持多种编程语言(如 Python、Java、C# 等)和主流浏览器(如 Chrome、Firefox、Safari、Edge 等),广泛应用…...
量化交易系统开发-实时行情自动化交易-4.4.做市策略
19年创业做过一年的量化交易但没有成功,作为交易系统的开发人员积累了一些经验,最近想重新研究交易系统,一边整理一边写出来一些思考供大家参考,也希望跟做量化的朋友有更多的交流和合作。 接下来继续说说做市策略原理。 做市策…...
C++设计模式(单例模式)
一、介绍 1.动机 在软件系统中,经常有这样一些特殊的类,必须保证它们在系统中只存在一个实例,才能确保它们的逻辑正确性、以及良好的效率。 如何绕过常规的构造器,提供一种机制来保证一个类只有一个实例? 这应该是类设计者的…...
图的深度优先搜索算法DFS
深度优先搜索(DFS)就是一种寻找图中各个顶点的方法。想象一下,如果你在一个迷宫里探险,你会怎么做呢?你可能会选择一直走到尽头,直到找不到路为止,然后再回过头来试试其他的路,这就是…...
自动泊车“哐哐撞大墙”,小米SU7智驾功能bug缠身?
文/王俣祺 导语:小米SU7,自带热度与科技光环的“流量神车”,近日却以一种极为“狼狈”的方式闯入大众视野。多达70余辆小米SU7陷入“泊车魔咒”,瞬间在网络上炸开了锅。从“科技控”到“惹祸精”的背后,究竟藏着怎样的…...
Linux宝塔部署wordpress网站更换服务器IP后无法访问管理后台和打开网站页面显示错乱
一、背景: wordpress网站搬家,更换服务器IP后,如果没有域名时,使用服务器IP地址无法访问管理后台和打开网站页面显示错乱。 二、解决方法如下: 1.wordpress搬家后,在新服务器上,新建站点时&am…...
Http文件上传
方式一:HttpClient public static String uploadFile(String url, Map<String, FileWrapper> fileParam, Map<String,String> otherParam){long start System.currentTimeMillis();log.info("uploadFile url: {}.",url);HttpClient client …...
哈希C++
文章目录 一.哈希的概念1.直接定址法2.负载因子 二.哈希函数1.除法散列法 / 除留余数法2.乘法散列法3.全域散列法(了解) 三.处理哈希冲突哈希冲突:1.开放定址法(1)线性探测:(2)二次探…...
C++11(中)
C11(中) 1.可变参数模板1.1.使用场景 2.lambda表达式(重要)2.1.使用说明2.2.函数对象与lambda表达式 3.线程库3.1.thread3.2.atomic原子库操作3.3.mutex3.3.1.mutex的种类3.3.2.lock_guard3.3.3.unique_lock 🌟&#x…...
vim 如何高亮/取消高亮
高亮 :在ESC模式下使用 shift # 取消高亮:在ESC模式下输入英文输入 :nohl (no highlight)...