软件工程第一次阅读作业

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(使用前将#替换为@)

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

  • git 分叉是如何工作的?

    所以我登录了 github 并 fork 了一个项目 每次原始存储库更新时 我的分叉存储库都会更新吗 或者我应该每次都从原始存储库进行分叉 这样我就不会错过对原始存储库所做的任何新更改 分叉是存储库的副本 分叉存储库允许您自由地尝试更改 而
  • Windows 中的 Git Shell:补丁的默认字符编码是 UCS-2 Little Endian - 如何将其更改为 ANSI 或 UTF-8 without BOM?

    当创建一个Windows 中使用 Git Shell 进行差异补丁 当使用适用于 Windows 的 GitHub http windows github com the 字符编码补丁的UCS 2 小尾数法根据Notepad 参见下面的屏幕
  • php run git 收到“ssh 权限被拒绝”

    我正在尝试从浏览器中运行 git pull php 脚本 但我得到了 sh 连接到主机 git assembla com 端口 22 权限被拒绝 我的 PHP 脚本
  • 为什么 git mergetool 说“没有文件需要合并”?

    我正在尝试将 BeyondCompare4 配置为 git 中的 difftool 和 mergetool 我使用的是 git 版本 2 5 0 windows 1 到目前为止 BeyondCompare4 作为 difftool 工作得很
  • Git - 显示远程分支的远程名称

    是否有一个 Git 命令可以显示远程分支的远程名称 目前 我坚持使用 shell utils 从远程分支引用中提取远程名称 例如 echo remote name branch name sed r s 1 remote name 有时出于
  • .gitignore 文件夹内容[重复]

    这个问题在这里已经有答案了 可能的重复 在 Windows 上忽略 Git 存储库中的目录 https stackoverflow com questions 343646 ignoring directories in git repos
  • 我可以从命令行向 github 添加问题吗?

    我是 git 新手 我希望能够通过 github 绘制我的项目的计划和进度 问题是 这需要在 github com 上使用浏览器进行大量点击 并且我希望能够通过使用命令行程序来自动执行该任务 github 有命令行界面吗 有一个ghi ge
  • 来自 eclipse 的部分 git 提交 (egit)

    假设我有一个有 2 个更改的文件 如何使用 egit 只提交其中之一 命令行版本可以在以下位置找到this https stackoverflow com questions 1085162 commit only part of a fi
  • 如何损坏 Git 存储库?

    创建损坏的 git 存储库有哪些方法 有没有有趣的方法可以永久损坏 git 存储库 你能否削弱一个 git 存储库 使其行为有些正常 但会做一些奇怪的事情 我的兴趣来自于当有人担心他们是否真的创建了不可恢复的状态时 它通常很容易修复或至少可
  • 如何获取第一次提交的 Git diff?

    我创建了一个存储库 在其中创建了一个文件 在文件中放入了一些内容 然后提交了该文件 现在 我想查看该提交的差异 理想情况下应该显示添加的文件以及添加到其中的行 然而 git diff HEAD HEAD回报fatal ambiguous a
  • 有关多个远程存储库的 Git 状态

    我有一个脚本 如果我忘记在 40 多个存储库中提交或推送一些代码 它会通过电子邮件向我发送提醒 在我的两个项目中 我遵循了这些帖子中的答案 其中我设置了 git push 来推送到多个存储库 从多个远程位置拉 推 https stackov
  • Python 无法在 git bash 命令行中工作

    Python 不会在 git bash Windows 中运行 当我在命令行中输入 python 时 它会将我带到一个空行 而不会像在 Powershell 中一样显示它已输入 python 2 7 10 它没有给我错误消息 但 pytho
  • 由于不存在大文件而导致 git Push 错误

    当尝试推送到 git 时 我不断得到相同的结果 Counting objects 78 done Delta compression using up to 4 threads Compressing objects 100 67 67 d
  • “git add”返回“致命:外部存储库”错误

    我刚刚进入 git 的奇妙世界 我必须提交我对程序所做的一系列更改 位于名为的目录中 var www myapp 我创建了一个新目录 home mylogin gitclone 从这个目录中 我做了一个git clone针对公共回购 我能够
  • Git refs/remotes/origin/master 没有指向有效的对象

    在上次合并到 Git 存储库的 master 分支后 我失去了克隆存储库的能力 Cloning into test repository remote Counting objects 126084 done remote Compress
  • 为什么在 Eclipse 中对 Egit 管理的项目禁用合并工具?

    根据Egit 用户指南 http wiki eclipse org EGit User Guide Using Merge Tool 要使用合并工具 应右键单击存在合并冲突的资源 然后选择Team gt 合并工具 但是 当我执行此操作时 合
  • Git 中的“分支提示”是什么?

    我正在学习 Git 并阅读专业 Git 书籍 https git scm com book en v2 书中和 Stack Overflow 上有时会使用术语 分支提示 但我找不到它的含义 分支提示是分支上的最后一次提交或最近一次提交 基本
  • 是否可以在 git 存储库之外添加和提交文件?

    我们的文本文件分布在系统的各个角落 我们计划将这些文件中所做的所有修改添加到 git 存储库中 每次对这些文件进行修改都是由脚本进行的 因此 我们计划向该脚本添加新命令 以将文件添加到 git 存储库 但是 这些修改是同时进行的 我们可以为
  • Git:压缩 master 上提交的最简单方法[重复]

    这个问题在这里已经有答案了 可能的重复 如何使用 git 将最后 X 次提交压缩在一起 https stackoverflow com questions 5189560 how can i squash my last x commits
  • 按时间顺序将多个文件夹提交到 git 中

    我有数百个网站备份 每个文件夹一个 我想将它们放入 git 存储库中 每个备份作为一个版本 这些变化主要涉及图像文件和每天 2 个数据库备份 大小约为 25 GB 并且不断增加 有没有办法告诉 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 快速阅读