软件工程第一次阅读作业

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

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. 软件工程发展的过程中,出现的有趣的冷知识和故事

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

这让我想起一则笑话:

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

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

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

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

现有的版本控制软件如下图所示。


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

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. 流程无法定制
posted @ 2019-03-04 17:08  NanonaN  阅读(370)  评论(1编辑  收藏  举报