软件工程第一次阅读作业

六眼飞鱼酱① 提交于 2020-11-24 20:04:56
项目 内容
本次作业所属课程 2019BUAA软件工程
本次作业要求 阅读《构建之法》,初步了解软件工程
我在本课程的目标 熟悉软件工程相关规范,学会结对编程和团队编程
本次作业的帮助 在《构建之法》的基础上解惑,在老师帮助下了解软件工程

1.快速看完整部教材,列出你仍然不懂的5到10个问题

问题1 第二章 个人技术和流程 2.1 单元测试

问:如果用随机数以增加测试的真实性,好么?

答:一般情况下不好,如果某个随机数导致程序出错,但是下一次运行又不能重复这一错误,则于事无补。我们还是要用随机数等办法“增加测试的真实性”,但不是在单元测试中。单元测试不能解决所有问题,不必期望它会发现所有的缺陷。……

​ “某个随机数导致程序出错,但是下一次运行又不能重复这一错误”,在随机生成单元测试的时候,为何下一次运行不能重复这个错误呢?随机生成的数据对测试者来说应该是可见的,在随机生成单元测试的时候,若某个随机数导致出错,可不可以记录这个数据,下一次测试就不需要重新随机生成了呢?

还有,对于类似随机数生成器这个程序本身,如果要进行单元测试要怎么进行呢? 这是我在查询以上疑问的时候遇到的新问题,但是似乎没有得到解答。

问题2 第二章 个人技术和流程 2.3 个人开发流程

个人项目耗时对比记录表

……

·如果数据不准确或有遗失,怎么办?让工程师编造一些?

​ 正如书中提出的问题,当PSP中数据不准确或有遗失应该怎么办呢?我个人觉得编造应该是不可取的,这样失去了PSP的意义。在回忆不起来的时候,如果单项时间缺失,可以从其他项目来计算时间;如果数据多项缺失… 有没有什么补救措施呢?

问题3 第三章 软件工程师的成长 3.3 技能的反面

​ 书中用魔方的精通来类比编程技能的精通,这样说来,C++之类的语言精通应该远比C语言困难得多,但即使是c语言,达到“精通”的标准也有一定难度。很多人编程的过程都被调侃或者自嘲为“面向谷歌编程”,那么是否意味着一门编程语言,当我还不能脱离文档或者谷歌独立完成一个项目的时候,我就不能声称我“精通”这门语言呢?

问题4 第三章 软件工程师的成长 3.4 技能的反面 练习与讨论

​ 在本章的练习与讨论里看到一个有趣的问题,也就是练习与讨论的第四题

​ ……

他越来越意识到自己原来设计中的弱点,……

如果现在就改弦更张,那势必要影响自己原来估计的准确性,并会花费额外的时间,这样他的老板、同事也许会因此看不起他。如果他按部就班地按既定设计完成,最后整个团队还要花更多时间在后续集成上,但那就不是他个人的问题了,怎么办?

​ 这个问题感觉有那么一点点类似“电车困境”,对于这个问题,我个人的看法是向团队说明自己的失误,并想办法更正以前的错误,后者肯定是不可取的,浪费整个团队的时间同时也是浪费自己的时间。但是我在这里想提问的是,有没有更好的解决方案呢?

问题5 第四章 两人合作 4.2 代码风格规范 4.2.4 断行与空白的{}行

if(condition){

​ DoSomething();

}

else{

DoSomethingElse();

}

​ 书上提倡每个大括号都占一行,但是没有提到过如上的大括号换行规范,即一个第一个大括号不换行。我觉得这种写法也是相对清晰的,并且在网上搜索了一下,采用上述格式和书上的格式D的人都有,甚至大家戏谑地称对方为“异端”。那么第一个大括号换不换行究竟有没有一些我没有考虑到的讲究呢?实例代码比较简单,显得我在钻牛角尖,但是我在想如果在复杂的代码中是否二者的某种优势或者劣势会被放大。

问题6 第四章 两人合作 4.2 代码风格规范 4.3.4 如何处理C++中的类

……

4)当你拿不定注意的时候,用成员函数,不要用运算符。

请问为什么这样说呢?我是这样想的,拿不定注意的时候,说明二者皆可,这个时候运算符重载会使得代码可读性更高,尤其是有嵌套调用的时候,所以我个人觉得运算符更好,不知道为什么要这个时候要用成员函数。

问题7 第十一章 软件设计与实现 11.5 开发阶段的日常管理

​ 文中的提到设定一个阈值,如果开发人员Bug数量超过这个阈值则需要他专心修复Bug,也就是掉进“小强地狱”。对于一个新的项目组,假如大家的代码能力我们都不是很了解,而本身这个阈值又不适合经常修改,那到底应该如何制定出合适的阈值呢?制定不好对于项目进度的影响是否会有负面效果?

2.请问 “软件” 和 “软件工程” 这些词汇是如何出现的 - 何时、何地、何人?

软件:

根据维基百科

The first theory about software—prior to creation of computers as we know them today—was proposed by Alan Turing in his 1935 essay On Computable Numbers, with an Application to the Entscheidungsproblem (decision problem).

软件理论的提出者是 Alan Turing

软件工程:

根据维基百科

1968年秋季,NATO(北约)的科技委员会召集了近50名一流的编程人员、计算机科学家和工业界巨头,讨论和制定摆脱“软件危机”的对策。在那次会议上第一次提出了软件工程(software engineering)这个概念.

3.大家知道了软件和软件工程的起源,请问软件工程发展的过程中有什么你觉得有趣的冷知识和故事?

著名计算机科学家Donald Knuth(高德纳)(学计算机的肯定知道这个人)写的排版软件TeX版本号可以算是个趣事,从TeX第三版开始,之后的升级是在小数点后加入一个新数位,使之越来越接近Pi的值。TeX目前的版本是3.1415926。于2008年3月更新。

这个程序很稳定,高德纳许诺要是谁发现一个bug,就奖励他一些钱(1美分开始,每年翻倍),一般真的发现bug的人,会把支票裱起来。

作者:FMiaoZ

链接:https://www.zhihu.com/question/20774002/answer/16134516

来源:知乎

著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

在知乎查找到一则有趣的故事,在此就直接引用了。

4.上网调查一下目前流行的源程序版本管理软件和项目管理软件都有哪些, 各有什么优缺点?

目前流行的包括Microsoft TFS、git、Trac、Bugzilla等。

  1. git(github、gitlab等)

    • 优点:
      • 功能强大,使用方便。
      • 用户基数大,方便用户间交流学习。
    • 缺点:
      • 初期有一定学习成本。
  2. Trac

    • 优点:
      • 轻量级。
      • 插件丰富,可拓展性强。
    • 缺点:
      • 不支持多项目。
      • 需求和缺陷没有分离。
      • 核心功能很少,不安装插件基本上没法用。
  3. Microsoft TFS

    • 优点:
      • 易于使用。
      • 高度集成其他工具(VS、ItelliJ等).
      • 自动化生成和发布。
    • 缺点:
      • 用户数量不够多。
  4. Bugzilla

    • 优点:
      • 丰富的配置设定,定制能力强
      • 免费开源
    • 缺点:
      • 装需要Perl和配置MYSQL数据库,过程比较繁琐
      • 修改配置文件麻烦
      • 汉化容易出现乱码
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!