当前位置: 首页 > news >正文

软工个人作业 -- 分析与提问

软工个人作业 – 分析与提问

项目内容
这个作业属于哪个课程2023 年北航软件工程
这个作业的要求在哪里个人作业-阅读和提问
我在这个课程的目标是了解软件工程的方法论、获得软件项目开发的实践经验、构建一个具有我的气息的艺术品
这个作业在哪个具体方面帮助我实现目标初步了解软件工程的内涵和内容,为下一步的实践提供了一定的理论基础。对于深入浅出的文风有了一个更深刻认识

软件工程不能只有干巴巴的原则,“人”才是工程的最重要因素。

​ —— 读《构建之法》有感

问题 1:

条目内容
问题单元测试是要在写技术模块的规格说明书的时候就要写好吗?
定位P25,第二章,小飞与阿超对话
原因对推理过程有疑问

阿超:在写技术模块的规格说明书 ( Specification ) 的时候 , 要越详细越好 , 最好各项要求都可以表示为一个单元测试用例 。

小飞:如果不能表示为一个单元测试用例呢 ?

阿超:那就是你写得还不够细。

按照书中的说法,单元测试用例似乎是需要在进行具体编码之前就要完成,如果是这样的话,那么基本上可以推断,单元测试是“功能”粒度的。但是在实际编程的过程中,程序员会将功能以一种“不确定“的方式进行细分,比如说对于输出 Hello, world 的功能

实现一

#include<iostream>
using namespace std;
int main()
{cout<<"Hello,World!"<<endl;return 0;
}

实现二

#include<iostream>
using namespace std;
void print1()
{cout << "Hello," << end;
}void print2()
{cout << "World!" << endl;
}int main()
{print1();print2();return 0;
}

在实现一中一个主函数就可以完成的事情,在实现二中变成了独立的两个函数。按照原文的意思,我们需要针对 “hello, world!” 的输出编写一个单元测试样例,那么如果在具体编码的时候,程序员采用实现二去实现代码,那么其实“单元测试”并不是“单元”的,它并没有测试每一个函数的功能。但是如果在编码前就“未卜先知”的编写了这两个函数的功能样例,这无疑又限制死了 Hello, world! 程序的其他版本的实现,换句话说,单元测试的书写限制了代码的可能性。

针对这个问题,我个人的理解是不应当让“单元测试”成为编程中的“金科玉律”,它应当像画家起稿时用的辅助线,随着作品的进行不断调整,而不是让编程的过程了无生趣,成为了为了迎合“单元测试”而不得不进行的“苦力活”。

在 Rails 中,单元测试是可以根据所书写的方法自动生成的,我们只需要调整单元测试的用例即可,单元测试是“伴随”编程过程进行的,而不是“先写测试,后编程”这种泾渭分明的方式。


问题 2:

条目内容
问题软件工程是否在异化编程的人?
定位P57,第三章,关于单人乐队的讨论
原因因为自己的假设和书中的不同

当一个小孩说长大了要做音乐家,你会让他走上单人乐队的道路么 ?

这是出现在书上的一个反问句,在这句话中表达了作者对于“单人乐队”的不赞同观点,引申出作者对于某种“全面人才”的批判,相反的,据我了解,作者可能更加赞同的是“作曲家”式的“全面人才”:

一个作曲家在写一首交响乐的时候,他可以写各个乐器的乐谱,充分发挥不同乐器的特点。

确实,似乎单人乐队与作曲家相比,显得并不是那么的专业,这突然让我想起了马哲课上对于“异化”的定义:

在异化活动中,人的能动性丧失了,遭到异己的物质力量或精神力量的奴役,从而使人的个性不能全面发展,只能片面发展,甚至畸形发展。

社会分工固化是异化的根本根源。

然后我就查询了一些更加近代的观点,比如近代哲学家卢卡奇的观点

这是科技所带来的巨大力量让人们产生了一种难以遏制的自负,而人类的自负又加剧了科技的自负。

人类已经被一种虚幻地、自满自足地考虑实践构造的科学遗弃了;这种科学所从属并为之服务的实践,就好像某种在科学界限之外的东西一样;这种科学满足于思想与行动的分离。

我个人的思考是这样的:

首先我的小孩将来如果要做音乐家,他如果希望去当一个单人音队的演奏家,我是可以接受的。不可否认,“音乐家”是一个需要社会认可的,高难度的,殿堂级的称谓,确实与“单人乐队”啥都要掺和一下的特性不符。但是同时,我个人认为“音乐家”的落脚点是“音乐”而不是“家”,相比于“家”所代表的专业性,我更看重“音乐”所代表的快乐和自然。我小时候常去南美洲多个国家玩耍,单人乐队的形式在桑巴中十分常见,我不认为我的小孩去做一个给美丽热情的巴西姑娘跳桑巴的时候配乐的人,有什么不合适的。

但是同时,我也认为,在软件工程中,确实是需要“分工”的,就好像我即使既会前端又会后端,但是对于大的项目,我也不可能一手操办,那么就不是工程了,“一个人干的不是工程”。

但是确实分工会影响人的“全面发展”,就好像大多同学,如果在数据库大作业中作为后端,那么在软工中,也会主动或被动的担任后端,可以想见,如果写简历,那么工作经历也会只有后端,那么应聘到的工作大概率也只能是后端,这显然是十分悲哀的。

但是这否是一种异化呢?还是一种简单的分工呢?


问题 3:

条目内容
问题结对编程的文档是变多了还是变少了?
定位P87,P89 第三章,关于结对编程的解释
原因不懂书中的术语

驾驶员:写设计文档, 进行编码和单元测试等 XP 开发流程 。

领航员:审阅驾驶员的文档; 监督驾驶员对编码等开发流程的执行; 考虑单元测试的覆盖率 ; 思考是否需要和如何重构; 帮助驾驶员解决具体的技术问题。领航员也可以设计 TDD 中的测试用例 。

对于结对编程中的分工,可以看到分工是十分复杂的。我觉得这是一个自然的现象,因为合作就意味着沟通,而沟通就需要代价,就好像 P89 页以跳舞举例,一开始一定是互相踩脚的,那么这个时候文档应该是会变多的,因为文档是一个良好的沟通手段。

但是 XP 又是极限编程的意思,它属于是敏捷编程,它的定义也可以找到

敏捷方法论有一个共同的特点,那就是都将矛头指向了“文档”,它们认为传统的软件工程方法文档量太“重”了,称为“重量级”方法,而相应的敏捷方法则是“轻量级”方法。正是因为“轻量级”感觉没有什么力量,不但不能够有效体现灵活性,反而显得是不解决问题的方法论似的。因此,就有了一次划时代的会议,创建了敏捷联盟。

这么看似乎需要花费大量时间的文档会在结对编程中得到弱化。那么文档量应该会减少。这应该是因为结对的两个人心意相通,所以省去了一些常见的沟通步骤,文档量也就减少了。

那么是不是可以这么理解,结对编程就好像长期投资一样,需要先投入一定的资金(早期大量的文档),然后才能有利润,并且利润越来越大(文档越来越少)?


问题 4:

条目内容
问题如何让团队每个成员对团队的目标、角色、产品都有统一的理解?
定位P111 第五章,对于 TSP 的定义
原因书中的描述和你的经验(直接经验或间接经验)矛盾

TSP 原则:

  1. ……
  2. 团队的各个成员对团队的目标 、 角色 、 产品都有统一的理解 。
  3. ……

我在数据库大作业的实践中,发现让团队成员有一个统一的理解是十分困难的事情,因为大家从小的教育和生长环境并不相同,所以很难对于一个事务有统一的理解(甚至连基础的理解都做不到)。比如说团队一开始希望做一个电影推荐网站,但是团队中有人连基础的“院线”的概念都不知道,那显然是无法为项目的设计贡献自己的一份力量的。

我认为“统一的理解”是一个很重要的事情,因为可以明显感受到,如果团队对于一个项目是有“想法”的,是有“见解”的,那么开发的热情和效率会大很多,但是这并不是一个容易的事情,我自己总结了如下方法:

  • 选择大家更有共同话题的选题,比如说学校平台、笔记软件等。
  • 选择更有可能有共同话题的同学组成团队。
  • 利用自身的人格感染力和频繁平等的会议,让大家的理解统一起来。
  • 将任务细化到不需要统一的理解为止。

虽然衍生了一些的方法,但是我觉得依然是缺少科学的、可复现的、高效的且正面的“让团队每个成员对团队的目标、角色、产品都有统一的理解”的方式,希望能在软工中有所学习。


问题 5:

条目内容
问题架构师是如何选择或者培养出来的?
定位P228 第十章,功能驱动的设计的定义
原因不懂书中的术语

第一步:构造总体模型( Develop an Overall Model )
进入条件:团队已经选好了问题领域专家、主程序员、架构师。

在构造设计文档的时候,需要一个被称为“架构师”的角色,在我看来,他的角色和项目经理产生了一定的重叠

​ 架构师不是项目经理。项目经理侧重于预算控制、时间进度控制、人员管理、与外部联系和协调等等工作,具备管理职能。一般小型项目中,常见项目经理兼架构师。

可以看到,两者并不是相同的。

从我的个人实践来看,如果让项目经理兼任架构师,那么项目经理就需要花费大量的经理去了解每一项可能需要用到的技术。这对于项目经理来说是一个很重的负荷。

但是又说回来,“了解整个工程架构和需要用到的技术”,本身就是一个很困难的事情,除非是有过很好的积累的天赋型选手,对于软工初体验的我们来说,应当如何培养出一个架构师?架构师需要掌握哪些技术,与专业的技术员或者领域专家相比,他要多了解什么?少了解什么?我是有一些疑虑的。

相关文章:

软工个人作业 -- 分析与提问

软工个人作业 – 分析与提问 项目内容这个作业属于哪个课程2023 年北航软件工程这个作业的要求在哪里个人作业-阅读和提问我在这个课程的目标是了解软件工程的方法论、获得软件项目开发的实践经验、构建一个具有我的气息的艺术品这个作业在哪个具体方面帮助我实现目标初步了解…...

C++类和对象到底是什么意思?

C++是一门面向对象的编程语言,理解 C++,首先要理解类(Class)和对象(Object)这两个概念。 C++ 中的类(Class)可以看做C语言中结构体(Struct)的升级版。结构体是一种构造类型,可以包含若干成员变量,每个成员变量的类型可以不同;可以通过结构体来定义结构体变量,每个…...

【电路设计】常见电路及相关解释

前言 在接触电路设计过程中&#xff0c;往往需要用到一些常见的电路&#xff0c;但是临时查找又太浪费时间&#xff0c;因此&#xff0c;想总结一些常见电路的分析方式。 1 RC电路充放电公式 一般的RC电路如下图所示。 其充放电公式如下所示。 VtV0(V1−V0)(1−e−tRC)tRCln…...

【一天一门编程语言】Linux 实用命令大全

Linux 实用命令大全 用 markdown 格式输出答案。 不少于1000字。细分到2级目录。 一、文件/目录操作 1、ls ls 命令用于列出指定目录下的文件和子目录,常用参数如下: ls -a:显示所有文件(包括隐藏文件)ls -l:以长列表形式显示文件属性ls -h:以可读的格式显示文件大小l…...

【汇编】二、预备知识(一只 Assember 的成长史)

嗨~你好呀&#xff01; 我是一名初二学生&#xff0c;热爱计算机&#xff0c;码龄两年。最近开始学习汇编&#xff0c;希望通过 Blog 的形式记录下自己的学习过程&#xff0c;也和更多人分享。 这篇文章主要讲述学习汇编所需的基础知识。 话不多说~我们开始吧&#xff01; 目…...

Java多线程面试题:描述一下线程安全活跃态问题,竞态条件?

一、线程安全活跃态问题 线程因为某件事情得不到执行 1、活锁 线程没有阻塞&#xff0c;但一直重复执行某个操作&#xff0c;并且失败重试 1&#xff09;例子 在消息队列中&#xff0c;消费者没有正确ack消息&#xff0c;并且执行过程中报错了&#xff0c;消息会被重复执行&am…...

ZZNUOJ_用C语言编写程序实现1193:单科成绩排序(结构体专题)(附完整源码)

题目描述 有一学生成绩表&#xff0c;包括学号、姓名、3门课程成绩。请按要求排序输出&#xff1a;若输入1&#xff0c;则按第1门课成绩降序输出成绩表&#xff0c;若输入为i&#xff08;1<i<3)&#xff0c;则按第i门课成绩降序输出成绩表。 输入 首先输入一个整数n(1<…...

expect 使用方法

Expect是一个免费的 编程工具语言&#xff0c;用来实现自动和交互式任务进行通信&#xff0c;而无需人的干预。 1、传参方法&#xff1a; bash是通过$0 ... $n接收参数 expect是通过set <变量名称> [lindex $argv <param index>], 2、判断语法 if { condition } { …...

Spring AOP详解-Spring官方原版

一、概述 面向方面编程(AOP)补充了面向对象编程(OOP) 提供了另一种思考程序结构的方式。模块化的关键单元 在OOP中是类,而在AOP中,模块化的单位是方面。方面 实现跨越问题(如事务管理)的模块化 多种类型和对象。(这种关切通常被称为“跨领域”关切 Spring 的关键组件之…...

链表习题精选(持续更新中)

第一题给定单链表的头节点 head &#xff0c;将所有索引为奇数的节点和索引为偶数的节点分别组合在一起&#xff0c;然后返回重新排序的列表。第一个节点的索引被认为是 奇数 &#xff0c; 第二个节点的索引为 偶数 &#xff0c;以此类推。请注意&#xff0c;偶数组和奇数组内部…...

【log】操作类日志处理 与 报错类日志处理logback

文章目录一、操作类日志处理【环绕增强】aop环绕增强导包第一步&#xff1a;自定义注解interface第二步&#xff1a;在Controller写一个测试的方法&#xff1a;第三步&#xff1a;编写LogAspect增强类与增强方法日志写入数据库&#xff08;使用mybatis&#xff09;第一步&#…...

百度网盘好友发来的文件手动输入JS选择代码批量保存

基本代码&#xff1a;document.getElementsByClassName(global-clearfix)[3].getElementsByTagName(li)[0].getElementsByTagName(a)[0].click();范围选择函数&#xff1a;这个要手动全部取消选择function sel(a,b){var alidocument.getElementsByClassName(global-clearfix)[3…...

【CS224W】(task6)Google的PageRank算法

note 求解pagerank&#xff1a;用power iteration&#xff08;幂迭代&#xff09;方法求解 rM⋅r\mathbf{r}\mathbf{M} \cdot \mathbf{r}rM⋅r ( MMM 是重要度矩阵)用random uniform teleporation解决dead-ends&#xff08;自己指向自己&#xff09;和spider-traps&#xff08…...

Python安装拓展库及常用的pip命令及其用法

Python安装拓展库 在Python中&#xff0c;库是一些预先编写好的代码和函数&#xff0c;它们可以帮助你解决特定的问题。如果你想要扩展Python库&#xff0c;通常有两种方法&#xff1a;使用现有的第三方库&#xff0c;或者编写自己的库。 1.使用现有的第三方库 Python社区中…...

这9道软件测试面试题,就能刷掉90%的软件测试员

转眼就要到“金三银四”了&#xff0c;没点真本事真技术&#xff0c;没点面试经验&#xff0c;不了解点职场套路&#xff0c;如何过五关斩六将&#xff1f;如何打败面试官&#xff1f;如何拿下那梦寐以求的offer&#xff1f; 如果你的跳槽意向已经很确定&#xff0c;那么请往下…...

【大数据】大数据Hadoop生态圈

文章目录大数据Hadoop生态圈-组件介绍1、HDFS&#xff08;分布式文件系统&#xff09;2、MapReduce&#xff08;分布式计算框架&#xff09;3、Spark&#xff08;分布式计算框架&#xff09;4、Flink&#xff08;分布式计算框架&#xff09;5、Yarn/Mesos&#xff08;分布式资源…...

python读取tif图像+经纬度

python读取tif的包很多&#xff0c;但大都只能读出图像像素值&#xff0c;不能读取到经纬度信息。原因&#xff1a;TIFF 简单理解就是一种图像格式&#xff0c;类似于 jpg、png 等。GeoTIFF 就是在普通 TIFF 文件上增加了地理位置、投影信息、坐标信息等&#xff0c;常用于遥感…...

Kali安装配置vulhub

一、vulhubVulhub是一个基于docker和docker-compose的漏洞环境集合&#xff0c;进入对应目录并执行一条语句即可启动一个全新的漏洞环境&#xff0c;主要利用于漏洞复现。Vulhub的官方地址为www.vulhub.org。二、搭建vulhub靶场2.1 开启kali虚拟机2.2 安装docker先更新一下软件…...

【进击的算法】动态规划——不同维度的背包问题

文章目录前言动态规划的维度二维动规leetcode416、分割等和子集leetcode1049. 最后一块石头的重量 IIleetcode494、目标和三维动规leetcode474. 一和零结语前言 大家好久不见&#xff0c;这次我们一起来学习一下动态规划中怎么确定维度&#xff0c;和对应问题如何解决。 动态…...

udiMagic 导入 Excel to Tally ERP Crack

关于 udiMagic 软件 udiMagic 是一款可帮助您快速轻松地将数据导入 Tally ERP 的应用程序。它由 Shweta Softwares 创建和分发&#xff0c;于2007 年首次推出。 您可以在 USB 闪存驱动器 [旅行许可证] 中携带 udiMagic&#xff0c;并在具有任何 Tally 版本的任何计算机上使用…...

vscode(仍待补充)

写于2025 6.9 主包将加入vscode这个更权威的圈子 vscode的基本使用 侧边栏 vscode还能连接ssh&#xff1f; debug时使用的launch文件 1.task.json {"tasks": [{"type": "cppbuild","label": "C/C: gcc.exe 生成活动文件"…...

抖音增长新引擎:品融电商,一站式全案代运营领跑者

抖音增长新引擎&#xff1a;品融电商&#xff0c;一站式全案代运营领跑者 在抖音这个日活超7亿的流量汪洋中&#xff0c;品牌如何破浪前行&#xff1f;自建团队成本高、效果难控&#xff1b;碎片化运营又难成合力——这正是许多企业面临的增长困局。品融电商以「抖音全案代运营…...

工程地质软件市场:发展现状、趋势与策略建议

一、引言 在工程建设领域&#xff0c;准确把握地质条件是确保项目顺利推进和安全运营的关键。工程地质软件作为处理、分析、模拟和展示工程地质数据的重要工具&#xff0c;正发挥着日益重要的作用。它凭借强大的数据处理能力、三维建模功能、空间分析工具和可视化展示手段&…...

华为OD机试-食堂供餐-二分法

import java.util.Arrays; import java.util.Scanner;public class DemoTest3 {public static void main(String[] args) {Scanner in new Scanner(System.in);// 注意 hasNext 和 hasNextLine 的区别while (in.hasNextLine()) { // 注意 while 处理多个 caseint a in.nextIn…...

python如何将word的doc另存为docx

将 DOCX 文件另存为 DOCX 格式&#xff08;Python 实现&#xff09; 在 Python 中&#xff0c;你可以使用 python-docx 库来操作 Word 文档。不过需要注意的是&#xff0c;.doc 是旧的 Word 格式&#xff0c;而 .docx 是新的基于 XML 的格式。python-docx 只能处理 .docx 格式…...

Linux-07 ubuntu 的 chrome 启动不了

文章目录 问题原因解决步骤一、卸载旧版chrome二、重新安装chorme三、启动不了&#xff0c;报错如下四、启动不了&#xff0c;解决如下 总结 问题原因 在应用中可以看到chrome&#xff0c;但是打不开(说明&#xff1a;原来的ubuntu系统出问题了&#xff0c;这个是备用的硬盘&a…...

智能分布式爬虫的数据处理流水线优化:基于深度强化学习的数据质量控制

在数字化浪潮席卷全球的今天&#xff0c;数据已成为企业和研究机构的核心资产。智能分布式爬虫作为高效的数据采集工具&#xff0c;在大规模数据获取中发挥着关键作用。然而&#xff0c;传统的数据处理流水线在面对复杂多变的网络环境和海量异构数据时&#xff0c;常出现数据质…...

Xen Server服务器释放磁盘空间

disk.sh #!/bin/bashcd /run/sr-mount/e54f0646-ae11-0457-b64f-eba4673b824c # 全部虚拟机物理磁盘文件存储 a$(ls -l | awk {print $NF} | cut -d. -f1) # 使用中的虚拟机物理磁盘文件 b$(xe vm-disk-list --multiple | grep uuid | awk {print $NF})printf "%s\n"…...

Yolov8 目标检测蒸馏学习记录

yolov8系列模型蒸馏基本流程&#xff0c;代码下载&#xff1a;这里本人提交了一个demo:djdll/Yolov8_Distillation: Yolov8轻量化_蒸馏代码实现 在轻量化模型设计中&#xff0c;**知识蒸馏&#xff08;Knowledge Distillation&#xff09;**被广泛应用&#xff0c;作为提升模型…...

C#中的CLR属性、依赖属性与附加属性

CLR属性的主要特征 封装性&#xff1a; 隐藏字段的实现细节 提供对字段的受控访问 访问控制&#xff1a; 可单独设置get/set访问器的可见性 可创建只读或只写属性 计算属性&#xff1a; 可以在getter中执行计算逻辑 不需要直接对应一个字段 验证逻辑&#xff1a; 可以…...