软件工程第一次阅读作业

2023-11-10

项目 内容
本作业属于北航软件工程课程 博客园班级链接
作业要求请点击链接查看 作业要求
我在这门课程的目标是 成为一个具有一定经验的软件开发人员
这个作业在哪个具体方面帮助我实现目标 让我对自己目前的状况有一个更加清醒的认识
1. 快速阅读完教材仍然不懂的问题
1. 第4章 两人合作 4.3.4 如何处理C++中的类
  1. 类型继承

    1)仅在必要时,才使用类型继承

    2)用const标注只读的参数

    3)用const标注不改变数据的参数

我的疑惑点主要是在第1条原则。在上上学期的面向对象课程中,我们学到了类的继承是一个很实用的方法,它可以帮助我们减少代码之间的重复,并且体现出设计的层次感。但《构建之法》的意思似乎是在说,要尽量避免使用类型继承。在实际的工程中,类型继承是被提倡使用的吗?

2. 第4章 两人合作 4.5.3 不间断地复审

结对编程中驾驶员和领航员的角色要经常互换,避免长时间紧张工作导致观察力和判断力下降。

前文中作者提到,结对编程可以类比于现实中的一些搭档关系:越野赛车(驾驶、领航员)、驾驶飞机(驾驶、副驾驶)。但是在这些领域中,搭档的职务往往是固定的,这是因为两个人往往在不同的岗位上有不同的经验,让在某一个岗位具有更丰富经验的人去担任这一职务,比两个人交换岗位、在自己不熟悉的领域工作,要合适的多。因此,结对编程中驾驶员和领航员经常角色互换,是否是一个合理的选择?

3. 第12章 用户体验 12.1.3 软件服务始终都要记住用户的选择

我同意第一印象很重要,但是当用户已经是第N次使用你的产品时,你的UI能否为这些用户提供方便呢?

软件开发、尤其是面向大量用户的软件开发,一个很困难的问题就是如何定义“方便”以及“好用”这种很主观的概念。以最近微信发布的7.0.0版本为例,整个微信的界面底色由黑色变成了白色,这一改动在用户的评论当中毁誉参半,一部分人(比如我)认为这个版本的审美比之前的不知高到哪里去了,而另一部分用户则认为新版微信亮得晃眼睛。作为PM、开发人员、UI设计师,该怎么权衡不同用户对于同一套UI的相反评价?

4. 第13章 软件测试 13.3.2 测试工作中的文档 2. 测试用例

一个软件有很多可能的输入和环境参数,我们没有能力穷举所有的可能,也没有必要。我们可以运用不同的设计测试用例的方法,有效地生成测试用例。

我在做软件测试的时候,遇到的最困难的问题是如何处理有副作用的方法。这里的“有副作用”代表该方法与外界有交互,比如从控制台读入一行字符串,又或者是连接一个数据库。如果我想对这些方法进行测试,就需要模拟出一整个环境,这在紧张的快速开发中是难以做到的。因此,在设计单元测试用例时,我往往会选择跳过这些有副作用的方法,只测试那些纯函数。但软件的Bug往往是在这些与系统有交互的地方产生的。所以我想知道,该如何为这些方法设计完备的测试用例,尤其是当方法的副作用很复杂、环境难以模拟的时候?

5. 第14章 质量保障 14.1.2 软件工程的质量

软件开发过程中的可见性( Visibility)

我们看这个项目开发过程中的场景:

领导:进度如何?

答:可能快了。

问:能看看演示吗?

答:嗯,不知道。可能到了项目的最后一天才能看......

上面的对话不能说明软件的功能如何(也许最后发现功能非常惊艳),项目的可见性是非常差的。不但是小规模、业余项目会出现这样的情况,大规模的专业团队也是如此。

上面的场景是我在项目开发中经常遇到的实际问题。很多时候,我编写的软件是偏后台的,甚至只是一个命令行交互程序,不像Web开发和GUI开发那样具有非常好的可见性。还有一些情况是,我的软件是高度模块化的,只有当最后一个模块完成的那一刻才能够组合在一起,在此之前无法单独展示。把项目做成可展示的形式需要花费大量的时间,尤其是编写用户交互界面更是一件费时费力的事情。而项目展示要求的是美观和易用,这就给项目的可见性带来了更多的压力,因为许多开发人员都不愿意去写界面,更不愿意去给一个单独的模块写GUI,有这时间的话他们宁可去完善功能。但是项目的展示又是非常重要的,项目的投资者往往会很看重开发过程中的展示。在实际的工程开发中,该如何做好项目的可见性?

2. “软件”和“软件工程”这些词汇是如何出现的?
  • 化学家和统计学家约翰·图基(John W. Tukey)在1958年撰写一篇科学文章时,首次使用“软件”这一术语。据报道,他早在1953年就已经提出这个词,用来标记计算机程序(即“软件)与使用这些程序的计算机(或“硬件”)之间的区别。
  • 1968年NATO会议上首次提出“软件工程”(Software Engineering)的概念,提出把软件开发从“艺术”和“个体行为”向“工程”和“群体协同工作”转化。其基本思想是应用计算机科学理论和技术以及工程管理原则和方法,按照预算和进度,实现满用户要求的软件产品的定义、开发、发布和维护的工程。从此也诞生了一门新的学科——软件工程。
3. 软件工程发展的过程中,出现的有趣的冷知识和故事

历史上出现的有关软件工程有趣故事并不多,我只能在此写一个前不久发生的事情,即”产品经理和程序员打架“事件。该事件于此链接中有详细描述,下图是事情经过的精华加工版。

1346301-20190304170655123-2034770924.jpg

这让我想起一则笑话:

- ”为什么计算机领域没有民科?“

- ”当然有,不然你以为产品经理是哪儿来的。“

这只玩笑,但产品经理是软件工程中一个重要的岗位,产品经理提出的需求往往很大程度上影响了软件产品的最终质量。因此,在软件工程中,一个团队里产品经理和技术人员的沟通就显得尤其重要,这也是我在软件工程课程中应该注意的事情。

4. 目前流行的源程序版本管理软件和项目管理软件及其优缺点

现有的版本控制软件如下图所示。
1346301-20190304170705985-1708902924.jpg
1346301-20190304170712498-1661842961.jpg
1346301-20190304170717515-1078230639.jpg

流行的版本控制软件的用户数如下图所示。

1346301-20190304170734960-1332828489.jpg

Git、Mercurial、Trac和Bugzilla的优缺点如下表所示。

软件名 优点 缺点
Git 1. 适合分布式开发,强调个体
2. 公共服务器压力和数据量都不会太大
3. 速度快、灵活
4. 任意两个开发者之间都可以很容易地解决冲突
5. 离线工作
1. 学习周期较长
2. 不符合常规思维
3. 代码历史保密性差,一旦开发者把整个库克隆到本地,就可以完全查看到所有的历史版本信息
Mercurial 1. 更简洁好用的命令行指令
2. 上手简单
3. 完善的GUI支持
4. 易于扩展
1.Mercurial的分支模型十分复杂,每一种分支方法都有很多缺点和不便之处
2. Mercurial改写历史很麻烦
3. 没有命名空间
Trac 1. 非常灵活,可以随心所欲地定制
2. 可以和SVN集成
3. Trac的权限体系是比较完备的设计
1. 不支持多项目
2. 中文化不完整
3. 核心功能很少,不安装插件基本无法使用
Bugzilla 1. 检索功能强大
2. 强大的后端数据库支持
3. 根富多样的配置设定
1. 安装需要Perl和配置MySQL数据库,过程比较繁琐
2. 修改配置文件很麻烦
3. 流程无法定制

转载于:https://www.cnblogs.com/zhouyufei/p/10471800.html

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

软件工程第一次阅读作业 的相关文章

  • Windows 版 GitKraken 中的文件名太长

    正如建议的Q22575737 https stackoverflow com a 22575737 6623589 我已经更新了我的注册表并设置了git config system core longpaths true在处理长路径时 问题
  • 在 git repo 中查找超过 x MB 且 HEAD 中不存在的文件

    我有一个 Git 存储库 用于存储随机的内容 主要是随机脚本 文本文件 我设计的网站等 随着时间的推移 我删除了一些大型二进制文件 通常为 1 5MB 这些文件会增加存储库的大小 而我在修订历史记录中不需要这些文件 基本上我希望能够做到 m
  • git subtree pull -P 不管 总是合并冲突

    问题 即使我没有进行任何更改 每次尝试拉入子树时 我都会遇到合并冲突 我在做什么 In 子树仓库 Make some changes git commit am Changes made git push origin master In
  • 如何修复树与树之间的 Git 错误断开链接?

    我的事务被中断 当我再次尝试时 我遇到了空或损坏的对象错误 在另一个问题之后 我删除了所有空文件 当我运行时 git fsck full 我收到这个错误 Checking object directories 100 256 256 don
  • Git:如何变基到特定提交?

    我想变基到特定的提交 而不是另一个分支的 HEAD A B C master D topic to A B C master D topic 代替 A B C master D topic 我怎样才能做到这一点 您可以通过在您喜欢的提交上创
  • IntelliJ:查看本地和 git 提交/分支之间所有已更改文件的差异

    使用 IntelliJ 的 diff 查看器是检查代码的一种非常好的方法 因为您可以使用 IntelliJ 代码编辑器的所有功能 重构 完成等 在本地版本中进行更改 不幸的是 我还没有弄清楚当你在 IntelliJ 中进行代码审查时如何做最
  • 如何解决 VSTS 中拉取请求中的合并冲突?

    我已经创建了拉取请求 我进入了这个 批准 按钮不执行任何操作 并且 完成 被禁用 如何解决拉取请求中的冲突 Update 微软刚刚添加了基于浏览器的合并 这可能会让你摆脱小冲突的困境 并提供自 Sprint 150 起改进了不同场景的可视化
  • git push heroku master 权限被拒绝

    我正在关注 ruby railstutorial 我运行命令 git push heroku master 它吐出了这个错误 Permission denied publickey fatal Could not read from rem
  • 如何 git grep 仅一组文件扩展名

    如何执行 git grep 并将检查的文件限制为一组文件 我希望能够 grep cpp 和 h 文件的内容来查找 MyFunc 例如 git grep MyFunc hc 但是 这也匹配 c 文件和 cs 文件 Use git grep M
  • 有没有办法让 git flow 显示它在幕后执行的命令?

    有什么方法可以让 git flow 提前告诉我当我执行 flow 命令时它将执行的确切 git 命令吗 或者告诉我它是东吗 我只能看到输出和摘要吗 你可以使用Git的GIT TRACE 环境变量 http git scm com docs
  • 哪个是更智能的 git 协议,ssh 或 git(通过 ssh)或 https 协议?

    哪个高效 SSH 或 Git 文件压缩 我对 Git 的理解是 git 协议很智能 因为通信两端都有一个协议代理来压缩文件传输 从而通过有效地使用网络带宽来实现更快的克隆 From 我发现了以下说法 For secure authentic
  • git 匹配多个单词的标签

    我们可以得到最后一个 git 标签 它以一个单词 例如 TEST 开头 如下所示 git describe tag dirty match TEST 我想知道如何获得最后一个以 word1 开头的标签orword2 例如测试OR跑步 我尝试
  • .gitconfig 别名函数调用

    我在 gitconfig 中定义了以下别名 alias teamcity tc tc是我在我的中定义的一个shell函数 bashrc文件 由于某种原因 我收到以下错误 aafghani 03 git workday amirafghani
  • 我可以直接从我的谷歌云端硬盘在线推送/拉取吗?

    有一些方法可以通过谷歌驱动器同步 Windows 应用程序将我的本地 git 存储库同步到我的谷歌驱动器 但我想知道我是否可以完全绕过它的需要 Fro eg git remote add origin https drive google
  • 使用终端时 Git 推送在总计后卡住了?

    我尝试将一些文件推送到Github 总大小只有22 2M 我不知道为什么它在总行之后卡住了 我读过推送到 Github 时 Git 推送挂起 https stackoverflow com questions 16906161 git pu
  • 如何将工作树与提交进行比较?

    我在用着 git diff mycommit 用于比较我的工作树mycommit 但它似乎忽略当前索引中不存在的文件 您可以按如下方式重现它 git init echo A gt A txt git add git commit m A g
  • 如何在 macOS 上将 Git 升级到最新版本?

    我刚刚购买了一台装有 OS X Lion 的新 Mac 我在终端中检查了默认安装的 git 版本 我得到了答案 git version gt git version 1 7 5 4 我想将 git 升级到最新版本 1 7 8 3 因此我下载
  • 如何使用 AWS Lambda 安装 Git?

    我在代码提交存储库中有代码 我正在编写一个 lambda 函数来为代码提交存储库的每个签入 事件 构建代码 我无法安装 git 因此无法克隆存储库 我该怎么办呢 正如其他人提到的 在 lambda 上安装 git 要么非常困难 要么完全不可
  • Git 将一个分支合并到所有其他分支中

    我知道这个问题已经在这里被问过 https stackoverflow com questions 2329716 merging changes from master into all branches using git https
  • 当当前分支上有未提交的更改时签出另一个分支

    大多数时候 当我尝试签出另一个现有分支时 如果我在当前分支上有一些未提交的更改 Git 会不允许我这样做 所以我必须首先提交或隐藏这些更改 然而 有时 Git 确实允许我在不提交或存储这些更改的情况下签出另一个分支 并且它会将这些更改携带到

随机推荐

  • 爬取中国移动用户问答

    最近一个好朋友在搞爬虫 问了很多问题 所以干脆直接写了一个范例 这个程序整体要两次解析网页 第一层是分析网页中的json数据来获取qtid 第二层是用qtid来解析获得问答所在的网页 因为在问答网页里的数据存储是引用的数据库中的数据 所以不
  • Mac系统下algs4学习环境搭建

    InterliJ下的搭建 1 官网下载algs4 rar文件 拷贝到在新建项目的libs文件夹下 然后在File gt project Structure 需要用到啦gs4的模块中导入jar包 这样在程序中引用静态类就不会报错类 termi
  • 深入Java(二):Java中的强引用、软引用、弱引用、幻像引用( 虚引用)

    在Java语言中 除了基本数据类型外 其他的都是指向各类对象的对象引用 Java中根据其生命周期的长短 将引用分为4类 1 强引用 特点 我们平常典型编码Object obj new Object 中的obj就是强引用 通过关键字new创建
  • 【python】20行代码实现有道翻译api接口调用

    文章目录 1 目标站点 2 完整代码 3 测试样例 3 1 测试样例 汉译英 3 2 测试样例 英译汉 4 调用文档 4 1 接口地址 4 2 请求方法 4 3 请求参数 4 4 请求示例 4 5 成功响应 5 接口分析 6 相关推荐 1
  • GDB下查看内存命令(x命令)

    GDB下查看内存命令 x命令 你可以使用examine命令 简写是x 来查看内存地址中的值 x命令的语法如下所示 x
  • 计算机软件摊销会计分录,财务软件摊销会计分录怎么写?

    摘要 这是一篇关于财务软件摊销会计分录怎么写 的文章 在财务软件摊销会计分录怎么写 文章中给各位财务人员讲解的是有关财务软件摊销会计分录怎么写 的会计实务处理 财务软件摊销会计分录怎么写 外帐按规定财务软件应该按无形资产处理10年摊销 或跟
  • vcruntime140.dll无法继续执行代码?vcruntime140.dll如何修复?只需要3步即可

    vcruntime140 dll是用于Microsoft Visual C Redistributable 可再发行组件 的一部分 它是一个动态链接库文件 包含了该软件包提供的运行库 在许多应用程序和游戏中 vcruntime140 dll
  • 深入理解Java中的BigInteger和 BigDecimal,再也不怕面试了

    Integer类作为int的包装类 能存储的最大整型值为2 31 1 Long类最大为2 63 1 虽然比Integer类大了很多 但是也是有限的 如果想要表示更大的整数 不管是基本数据类型还是它们对应的包装类都无法实现 Java中提供了两
  • 20221102模型调用 报错invalid load key, ‘\x00‘.invalid load key, ‘\x10‘.

    一 模型保存和调用 保存方法不一样 调用方法也不一样 joblib import joblib 保存 joblib dump model model1 pkl 加载 model joblib load open model1 pkl rb
  • 深拷贝构造函数和浅拷贝构造函数

    深拷贝构造函数和浅拷贝构造函数 拷贝构造函数有深拷贝构造函数和浅拷贝构造函数 分类 拷贝构造函数分为深拷贝构造函数和浅拷贝构造函数 区别 浅拷贝 即只复制对象空间 不复制对象资源 深拷贝 既复制对象空间又复制资源 由C 语言提供的默认拷贝构
  • leetcode 3. 无重复字符的最长子串

    题目描述 初始化 ans for 初始化慢指针 0 快指针 0 in 可迭代集合 更新窗口内信息 while 窗口内不符合维护的条件 扩展或者收缩窗口 慢指针移动 if 是合法的答案 更新答案 返回 ans 给定一个字符串 s 请你找出其中
  • Spring Boot2配置Swagger2生成API接口文档

    一 Swagger2介绍 前后端分离开发模式中 api文档是最好的沟通方式 Swagger 是一个规范和完整的框架 用于生成 描述 调用和可视化 RESTful 风格的 Web 服务 及时性 接口变更后 能够及时准确地通知相关前后端开发人员
  • 数据库备份工具有哪些

    本文主要介绍下数据库备份工具 数据库备份工具有很多种 以下是一些常见的数据库备份工具 mysqldump MySQL官方提供的命令行备份工具 适用于MySQL和MariaDB数据库 它可以将数据库导出为SQL文件 方便进行备份和恢复 属于逻
  • 测试用例(进阶篇)(测试的分类)

    目录 一 测试金字塔 二 按照开发阶段划分 1 单元测试 2 集成测试 3 系统测试 4 验收测试 三 按照测试的实施组织划分 1 测试 2 测试 3 第三方 四 按照是否运行划分 1 静态测试 2 动态测试 五 按照是否手工划分 1 手工
  • Jetson Orin NX install Pytorch

    steJInstalling PyTorch for Jetson Platform NVIDIA Docshttps docs nvidia com deeplearning frameworks install pytorch jets
  • JS 常用插件——下拉刷新、上拉加载,左右滑动,移动端调试,图片预览、放大缩小、旋转

    常用插件大全 非常好用 可以达到事半功倍的效果 下拉刷新 上拉加载 mescroll 上下 左右滑动 better scroll 移动端调试 Vconsole 图片预览 放大缩小 旋转 viewerjs 对象转字符串 并以 拼接成URL q
  • Python 将数据写入csv、xlsx、xls文件中(工厂方法、封装、优雅)

    记录 将数据写入csv xlsx xls文件中 工厂方法 封装 优雅 前言 文件目录存放结构 my file save py wrapper verify param py 封装csv my csv py 工厂方法 savedata fac
  • vite、vue3本地页面正常显示不刷新,外网穿透后页面不停刷新

    明明本地不会刷新 但映射到外网就会不停刷新页面 百度了一篇CSDN文章 vite项目 通过外网域名访问 无限刷新 的解决办法 没有解决我的问题 我使用的是natapp进行外网穿透 报错信息是 WebSocket connection to
  • C++ 生成随机数

    C 库有一个名为 rand 的函数 每次调用该函数都将返回一个非负整数 要使用 rand 函数 必须在程序中包含
  • 软件工程第一次阅读作业

    项目 内容 本作业属于北航软件工程课程 博客园班级链接 作业要求请点击链接查看 作业要求 我在这门课程的目标是 成为一个具有一定经验的软件开发人员 这个作业在哪个具体方面帮助我实现目标 让我对自己目前的状况有一个更加清醒的认识 1 快速阅读