软件工程第一次阅读作业
项目 | 内容 |
---|---|
作业所属课程 | https://edu.cnblogs.com/campus/buaa/BUAA_SE_2019_LJ |
作业要求链接 | https://www.cnblogs.com/ChildishChange/p/7363123.html |
课程目标: | 了解软件工程的基本概念、原理和方法。参与一个软件的完整开发流程,熟悉软件的开发过程。参与团队开发,积累团队开发经验 |
该作业在哪个具体方面帮助我实现目标 | 在开课前熟悉教材,对教学大纲形成一定的认识 |
1.读完《构建之法》后产生的问题
-
1.1结对编程的效率问题
在结对编程模式下,一对程序员肩并肩、平等地、互补地进行开发工作。他们并排坐在一台电脑前,面对同一个显示器,使用同一个键盘、同一个鼠标一起工作。他们一起分析,一起设计,一起写测试用例,一起编码,一起做单元测试,一起做集成测试,一起写文档等等。
根据书中的介绍,在结对编程中,两人要同时使用同一台设备进行编程,在这样的情况下,两名程序员所产生的矛盾以及代码风格的不同,不会对编程效率产生影响吗?为何不使用两人分开进行模块化的编程的方式进行呢?
-
1.2优化与泛华时机的问题
书中3.2节提到的过早优化和过早泛华的问题。
过早优化和过早泛化都是软件编程过程中可能出现的问题,但是过晚的优化和泛化又有可能造成大量的代码重构,严重降低效率,那么应该如何把握一个合适的时机对程序进行优化和泛化呢?
-
1.3优化与泛化时机的问题
书中3.2节提到的过早优化和过早泛华的问题。
过早优化和过早泛化都是软件编程过程中可能出现的问题,但是过晚的优化和泛化又有可能造成大量的代码重构,严重降低效率,那么应该如何把握一个合适的时机对程序进行优化和泛化呢?
-
1.4计算机考级的问题
在中国,软件工程师的职业资格考试有: 计算机等级考试和全国计算机技术与软件专业技术资格考试。
就我所了解到的情况来看,计算机学院的学生似乎更加看重ccf认证的成绩而不是很在乎计算机等级考试,学院几乎没有人参加计算机等级考试,计算机考级对我们计算机学院的学生真的有用吗?
-
1.5goto语句的使用
函数最好有单一的出口,为了达到这一目的,可以使用goto。
在前期学习编程的过程中,如数据结构的课程中,老师都比较反对我们使用goto语句,在阅读别人的代码时也发现goto语句几乎没有人使用,这里为什么鼓励我们使用goto语句呢?
2.请问 “软件” 和 “软件工程” 这些词汇是如何出现的 - 何时、何地、何人?
- “软件”一词最早由John Turkey于1958年在Princeton于“The Teaching of Concrete Mathematics”这篇文章中提出。
- “软件工程”一词最早是1968年由Margaret Hamilton在NASA为阿波罗登月项目工作时使用的。
3.软件工程发展的过程中有趣的冷知识
作为公认的编程之父,Charles Babbage发明了世界上首批计算机之一。他将这台新设备称为分析引擎。其体积超过一栋房屋,由六台蒸汽机驱动并使用打孔卡进行编程。分析引擎有四大主要组成部分:1.转盘——相当于现代计算机中的CPU; 2.存储——相当于现代计算机中的内存与存储介质; 3.读取器——相当于输入机制; 4.打印机——用于实现信息输出。
来源:CSDN
网址:https://blog.csdn.net/l_mloveforever/article/details/83860547
4.上网调查一下目前流行的源程序版本管理软件和项目管理软件都有哪些, 各有什么优缺点?
4.1软件使用量排名
- 1.Github:约31,000,000用户量
- 2.SourceForge:约3,700,000用户量
- 3.Bitbucket:约5,000,000用户量
- 4.GitLab: 约100,000用户量
4.2各软件优缺点
版本管理软件名称 | 优点 | 缺点 |
---|---|---|
Git | 分布式开发优秀,可以有效管理很大或很小的项目,使用方便灵活,分支任意切换,离线工作 | 初学者学习较慢,访问速度比较缓慢 |
Mercurial | 简洁,扩展性强,命令兼容SVN | 功能较简陋,跨平台兼容性差 |
Trac | 有良好扩展性,权限体系完备 | 不支持多项目,功能较少,需安装较多插件,使用繁琐 |
BUGZILLA | 免费开源,功能强大,强大的检索功能,强大的后端数据库支持, 丰富多样的配置设定 | 安装需要Perl和配置MYSQL数据库,过程比较繁琐,修改配置文件比较麻烦 |