写在前面

项目 内容
所属课程 2020春季计算机学院软件工程(罗杰 任健) (北航)
作业要求 个人博客作业
课程目标 培养软件开发能力
本作业对实现目标的具体作用 阅读教材,了解软件工程,并比较各个项目管理软件

一、《构建之法》的读后疑问与思考

1. 单元测试相关问题 (书本2.1.2)

单元测试必须由最熟悉代码的人(程序的作者)来写。代码的作者最了解代码的目的、特点和实现的局限性。所以单元测试没有比作者更适合的人选了。

虽然我十分肯定没有人比程序员自己更了解自己代码的观点,但对作者的这句话我仍有疑问。作者在 2.1的开头说道:“软件的很多错误都是来源于程序员对模块功能的误解、疏忽或不了解模块的变化。”然而,程序员意识到的可能出错的地方,他在写代码时往往已经注意了。这同时也意味着他写的单元测试的数据不大可能会包含到他没想到的出错情况。我们debug的过程中常常也有这样的困扰,感觉自己没有什么可错的地方,自己写的测试样例测了很多也没问题。但别人的测试样例却常能给我们很大的帮助。一个人自己写自己的单元测试,可能会思维受限,考虑不全。如果在大家都清楚代码实现功能的情况下,有人辅助进行单元测试以避免设计和情况的遗漏,是不是会好一点?

2.软件团队的模式 (书本 5.2)

本节中,作者介绍了多种团队的模式,有 主治医师模式、明星模式、社区模式、业余剧团模式、秘密团队、特工团队、交响乐团模式、爵士乐模式、功能团队模式、官僚模式。然而,作者并没有在文章中直接说明他们之间的优劣,似乎持着“不管白猫黑猫,抓到老鼠就是好猫“的态度。

作为学生的我们,专业能力还在培养之中,课上组队的模式多为主治医师模式业余剧团模式爵士乐模式。之前读过关于”鸡群效应“的相关文章,其在一定程度上否定了”超人“对团队的必需性。然而就我的大学经历来说,组队作业中最突出的不乏有”大佬“的团队(他们可能有时独挑大梁)。虽然这种团队存在一人带不动全组的情况,但能力相当的人组成的团队往往会应没有导向而没有突破性进展。那决定一个模式是否适合的重要因素是什么呢?团队模式是由组队人的水平一开始就决定的呢,还是说在合作过程中可以改变的呢?如果改变,又将怎样过渡以避免尴尬的境地?

3.关于项目经理(书本 9.3 )

在软件行业发展初期,软件都是为维持机器本身的运作服务,或是做科学计算,这时候也许看不出PM的作用。随着产业的发展,软件团队的复杂度都极大地提高了,这时候我们需要一些人,起到沟通、交换、影响、润滑、讨价还价的作用--就像商业社会的金钱一样--PM就是这样的角色。

PM做开发和测试之外的所有事情。

作者在这章中强调了PM的重要性,以及其所担任的任务。从作者的描述中,感觉PM更加注重的是软实力。虽然我们的大学课程有不少团队作业,却往往并没有PM的工作体现。这次软工作业,似乎是可以有PM的担当的,那么其预期的工作量是多少呢?在小型项目中,PM的价值如何更好得体现?

4.质量保障的相关问题 (书本14.1.2)

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

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

领导:进度如何?

答:可能快了。

问:能看看演示吗?

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

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

上面的问题我也遇到过。项目开展一段时间后,也许背后的工作很多,然而可展示的部分却很少。可能实际工作进度只差一点了,但由于各个部分关联性很强,没有全部完成的情况下并不好展示。项目开发的可见性,非常重要,但确实也会存在上面我说的情况,那么我们该如何做得更好呢?

5.关于创新的迷思(书本 16.1)

迷思之一:……但是他们没有提到这些科学巨人在顿悟之前已经在相关科学打下了深厚的基础,同时他们也为这些问题思考进行了长时间的思考,那些看似神奇的时刻才能光顾他们。

迷思之五:统计数据表明,70%的创新者说,他们最成功的创新,是在他们的拿手的领域之外发现的。

作者的这两段话,乍一看是挺矛盾的。我挺赞成第一段话的,且不说创新性地解决问题,连精准地发现可突破创新的点所在何处,大致有个前进的方向,就需要很深厚的领域知识了。然而,第二段话却用数据表明,领域的专家没有领域外的创新者那么有创意。是不是存在领域专家长期深陷本领域的研究,导致其思想被已有的专业知识限制的可能呢?这似乎牵扯到了学识的广度与深度的问题。在时间精力有限的情况下,深与广又该如何平衡呢?生活中不少例子表明,创新的方向往往以需求为导向。创新又带来了新一轮的需求。那么能敏锐发现需求的人,是不是更加可能创新呢?

二、 “软件” 和 “软件工程” 词汇的由来

软件

化学家和统计学家约翰·图基(john W. Tukey)1958年撰写的一篇科学文章时,首次使用了“软件”这一 术语。据报道,他早在1953年就已经提出这个概念,用来标记计算机程序(即”软件“)与使用这些程序的计算机(或”硬件“)之间的区别。

软件工程

1968年秋季NATO(北约) 的科技委员会召集了近50名一流的编程人员、计算机科学家和工业界巨头,讨论和制定摆脱“软件危机”的对策。在那次会议上第一次提出了软件工程(software engineering)这个概念,研究和应用如何以系统性的、规范化的、可定量的过程化方法去开发和维护软件,以及如何把经过时间考验而证明正确的管理技术和当前能够得到的最好的技术方法结合起来的学科。

三、软件发展过程中有趣的冷知识和故事

之前看到一篇文章,总结了一些在软件开发中的有趣而著名的定理。详见

  • 墨菲定律 (Murphy's Law)

    凡是可能出错的事就一定会出错。

推论:计算机会按照你写出来的方式运行,而不是你臆想出来的。

防御性编程、版本控制、测试驱动开发、模型驱动开发等等都是预防墨菲定律很好的做法。

  • 布鲁克斯法则(Brook's Law)

    向一个延期的项目增加人手只会让它延期得更加厉害

如果一个项目进展落后了,仅仅增加人力很有可能会带来灾难性的后果。相反,提高编程效率、审查软件开发方法和技术架构是否合理,几乎总是会比增加人力带来更好的效果。如果没有,这可能意味着霍夫施塔特定律在起作用。

  • 霍夫斯塔特定律 (Hofstadter's Law)

    事情总是要花费比你预想更长的时间,即使你把霍夫斯塔特定律也考虑在内。

这条定律的递归性反映出,即使付出最大的努力,也知道任务是复杂的,去精确地估算它依然是非常难的,所以要给估算留一个缓冲区出来。

四、流行的源程序版本管理软件和项目管理软件

  • 近年来,源程序版本/项目管理软件的使用人数情况如下:
Software Usage Project
GitHub more than 40 million* people 100 million*
GitLab 100,000 organizations ------
Bitbucket 6 million developers and 1 million teams ------
Bugzilla hundreds or thousands of organizations ------
Trac list of uesrs ------
  • 工具的优缺点比较
软件名 优点 缺点
Git 1.分支与合并
2.小而快速
3.分散式
4.资料保证
5.登台区
6.免费和开源
1. 前期学习知识较多
2. 对中文支持差
3. 代码历史保密性差,一旦开发者把整个库克隆到本地,就可以完全查看到所有的历史版本信息
Mercurial 1.更简洁好用的命令行指令
2.易于扩展
3.服务器配置相对于Git更加容易。
1.Mercurial的分支模型十分复杂,分支管理与Git相比不方便
2. Mercurial改写历史很麻烦 3. 没有命名空间
Trac 1.十分灵活,支持定制
2.良好的扩充性
3.权限体系设计得比较完备
1. 不支持多项目
2. 中文化不完整
3. 核心功能很少,不安装插件基本无法使用
Bugzilla 1. 检索功能强大
2. 优化的数据库结构
3. 定制功能强
1. 安装需要Perl和配置MySQL数据库,过程比较繁琐
2. 修改配置文件很麻烦
3.UI设计差
Bitbucket 1.支持私有免费项目
2.提交大文件速度快
1.项目检索不便
2.社区活跃度低

五、 软件使用尝试

(1) git

新建文件hello.txt

保存后 ,使用 git add命令,把文件添加到仓库缓冲区

使用 git commit 命令,把缓存区的所有文件正式提交到仓库

​ 现修改 hello.txt的内容

实现版本回退

感受:git因为6系课程要求,接触有一段时间了。git使用起来是很方便的,只是之前对其知识的学习需要一定的时间。

(2)Mercurial

感受:轻量级,安装比较方便;命令行使用和git很相似,有些更加简洁。

BUA软件工程个人博客作业的更多相关文章

  1. BUAA软件工程个人博客作业

    软件工程个人博客作业 项目 内容 这个作业属于哪个课程 2020春季计算机学院软件工程(罗杰 任健) 这个作业的要求在哪里 个人博客作业 我在这个课程的目标 团队完成好的软件,并对自己作出规划 这个作 ...

  2. BUAA 2020 软件工程 个人博客作业

    BUAA 2020 软件工程 个人博客作业 Author: 17373051 郭骏 项目 内容 这个作业属于哪个课程 2020春季计算机学院软件工程(罗杰 任健) 这个作业的要求在哪里 个人博客作业 ...

  3. 软件工程个人博客作业-软件案例分析:VS与VS Code

    项目 内容 本作业属于北航 2020 年春软件工程 博客园班级连接 本作业是本课程个人项目作业 作业要求 我在这个课程的目标是 提高软件开发能力.团队协作能力 这个作业在哪个具体方面帮助我实现目标 提 ...

  4. 初窥构建之法——记2020BUAA软工个人博客作业

    项目 内容 这个作业属于哪个课程 2020春季计算机学院软件工程(罗杰 任建) 这个作业的要求在哪里 个人博客作业 我在这个课程的目标是 完成一次完整的软件开发经历并以博客的方式记录开发过程的心得掌握 ...

  5. 【BUAA 软工博客作业】个人博客作业

    项目 内容 课程:2020春季软件工程课程博客作业(罗杰,任健) 博客园班级链接 作业:热身作业,阅读并撰写博客 作业要求 课程目标 学习大规模软件开发的技巧与方法,锻炼开发能力 作业目标 阅读教材, ...

  6. [2017BUAA软件工程]第0次博客作业

    [2017BUAA软件工程]第0次博客作业 结缘计算机 你为什么选择计算机专业?你认为你的条件如何?和这些博主比呢? 计算机是你喜欢的领域吗?是你擅长的领域吗? 我当时报考高考志愿的时候就已经是想好报 ...

  7. 【2020BUAA软件工程】个人博客作业

    个人作业博客 项目 内容 北航2020软工 班级博客 作业要求 具体要求 我的课程目标 学习软件工程,掌握团队合作,锻炼自我 作业在哪个方面帮助我实现目标 通读<构建之法>,尝试理解软件工 ...

  8. 初窥软件工程 2020BUAA软件工程$\cdot$个人博客作业

    初窥软件工程 2020BUAA软件工程\(\cdot\)个人博客作业 目录 初窥软件工程 2020BUAA软件工程$\cdot$个人博客作业 一.作业要求简介 二.正文 (一) 快速看完整部教材,列出 ...

  9. BUAA_2020_软件工程_个人博客作业

    项目 内容 这个作业属于哪个课程 2020春季计算机学院软件工程(罗杰 任健) 这个作业的要求在哪里 个人博客作业 我在这个课程的目标是 了解软件工程的技术,掌握工程化开发的能力 这个作业在哪个具体方 ...

随机推荐

  1. go-echarts 入门安装和使用

    在 Golang 这门语言中,目前数据可视化的第三方库还是特别少,go-echarts的开发就是为了填补这部分的空隙.Echarts是百度开源的非常优秀的可视化图表库,凭借着良好的交互性,精巧的图表设 ...

  2. 利用matplotlib和cmaps根据已有的colormap,重新定义colormap

    算法网上这哥们总结的还可以[1] ,但是使用matplotlib自定义colormap自己掌握的还不够,写在这里 希望达到的目标 使用什么样的颜色,可以自己定义 方便的调用其他人的色标, 使用一部分c ...

  3. 攻防世界 reverse 进阶 15-Reversing-x64Elf-100

    15.Reversing-x64Elf-100 这题非常简单, 1 signed __int64 __fastcall sub_4006FD(__int64 a1) 2 { 3 signed int ...

  4. 错误提示:Access denied for user 'GC'@'localhost' (using password: YES)

    错误描述:使用的是C3P0连接池 Spring整合Mybatis时出现错误 java.sql.SQLException: Access denied for user 'GC'@'localhost' ...

  5. redis的线程模型

    一.单进程模型来处理客户端的请求 Redis 基于 Reactor 模式开发了自己的网络事件处理器: 这个处理器被称为文件事件处理器(file event handler): 文件事件处理器是单线程的 ...

  6. 腾讯高级工程师带你玩转打包利器webpack

    随着前端领域飞速发展,webpack将前端不断出现的新模块.新资源.新需求,进行自动化整合.梳理.输出,极大提高了我们的工作效率,成为前端构建领域里最炙手可热的构建工具. 不少人webpack 的使用 ...

  7. JVM--Java核心面试知识整理(一)

    JVM 基本概念 JVM 是可运行 Java 代码的假想计算机 ,包括一套字节码指令集.一组寄存器.一个栈. 一个垃圾回收,堆和 一个存储方法域.JVM 是运行在操作系统之上的,它与硬件没有直接的交互 ...

  8. Oracle中left join、right join、full join应用场景

    一.提出问题:三个表分别存不同属性,一条sql查询各个公司的不同的属性 (1) 提供的三个表,相同的维度[company] (2) 需要的结果: 二.问题解析:可通过先查出所有公司再左连接三个表,或者 ...

  9. 通过Dapr实现一个简单的基于.net的微服务电商系统(八)——一步一步教你如何撸Dapr之链路追踪

    Dapr提供了一些开箱即用的分布式链路追踪解决方案,今天我们来讲一讲如何通过dapr的configuration来实现非侵入式链路追踪的 目录:一.通过Dapr实现一个简单的基于.net的微服务电商系 ...

  10. 基于MVC框架的JavaWeb网站开发demo项目(JSP+Servlet+JavaBean)

    1.环境配置 Windows10+Eclipse2020+jdk8+Tomcat9+MySQL8+Navicat10 2.需求分析 ①用户登录注册注销(查找.增加) ②显示用户列表(查找) ③显示用户 ...