【BUAA软件工程】第一次阅读作业
BUAA软件工程 第一次阅读作业
项目 | 内容 |
---|---|
这个作业属于哪个课程? | 北航软工 |
这个作业的要求在哪里? | 第一次个人作业 |
我在这个课程的目标是? | 学习高效严谨的软件工程开发过程,建立团队意识 |
这个作业在哪个具体方面帮助我实现目标 | 熟悉并了解软件工程的基本知识,建立兴趣 |
快速看完整部教材,列出你仍然不懂的5到10个问题
1.软件开发中的风险控制?
现代软件开发中难免要用到一些第三方开发的开源库,比如python,js等语言,这些库为我们的开发带来便利的同时,也为我们带来了安全隐患,因为这些库的质量是我们无法保证的。比如18年圣诞节发生的阿里的开源UI框架Ant Design中的彩蛋事件。那么,在成熟的商业公司的开发中,是怎样看待和使用这些第三方库的?
2.单元测试的随机性,复杂性,如何建立合适的断言
测试已经是软件开发中必不可少的一个步骤,我们确实是有必要对程序进行全面严谨的单元测试。但是以我们本次的结对开发任务为例,我们提供一个找到最长单词链的接口。测试的时候,难道我们就只测试返回的长度而不去考虑整个链的组成么?尤其是我们将测试集的单词量级定为10000时,如何构造一个合适的数据集?人工构造耗时耗力。
3.代码的命名规范
书中好像对代码的简洁性要求比较高,例如它给出这样的例子,”表示全年假日的列表“不用写arraylistOfHolidays
,可以直接写作holidays
,我感觉这个与我的开发经验是不符的,按照我的写法,应该会被命名为holidaysList
,这样可以看出变量的数据类型。
4.代码的验收测试
越长的代码越不可能没有bug,我们平时几百行的程序当然可以做到完成所有测试并改正找到的bug,像一些商业软件最后的验收会不会有妥协。是一定要做到测试中的零bug,还是对bug分类,不影响核心功能的bug如果工期紧或者代价大就不改了?
5.需求引导与变更
我之前用的一款手机APP突然从左右滑动翻页,换到了上下滑动自动加载。我不太习惯,用户社区里也有很多反对的声音。但是几个更新版本下来,APP并没有回滚的意思。我们在开发中遇到这种事应该怎么决定,比如处于技术或者美观的考虑需要改正用户的习惯操作时,我们应该怎么抉择?
请问 “软件” 和 “软件工程” 这些词汇是如何出现的 - 何时、何地、何人?
软件(英语:software):第一个关于软件的理论是艾伦图灵在1935年发表的论文《On Computable Numbers, with an Application to the Entscheidungsproblem》。但是软件software一词是在1953年,Richard R.Carhart在公司的备忘录中首次提出并使用这个词.
软件工程是1968年,NATO(北约)的科技委员会召集了近50名一流的编程人员、计算机科学家和工业界巨头,讨论和制定摆脱“软件危机”的对策。会议上提出了软件工程software engineer一词。根据后来的报导,应该是女科学家Margaret Hamilton在会议上提出了该词。
大家知道了软件和软件工程的起源,请问软件工程发展的过程中有什么你觉得有趣的冷知识和故事?
我在知乎上看到过这样一个笑话,算是跟软件有关吧
当年麻省理工的一名系统管理员,忽然收到统计系主任打来的求助电话“咱们的邮件发不了500英里以外的地方,其实,是520英里更准确点”。
系统管理员心里¥!&……*&。
不过在他开始用自己的邮件测试后,发现邮件的确只能发往520英里以内,其余的收件地点一律失败。于是在他一片纠结中他渐渐开始发现问题,邮件服务器被人更新过操作系统(当年还是SunOS),但是由于操作系统的发行版往往配备了旧版软件,于是在更新操作系统的时候邮件软件反而被降级了(Sendmail 8 -> Sendmail 5)。
于是进一步调查发现,在更新操作系统时,管理员自己编写的Sendmail配置文件(sendmail.cf)被保留了下来。这样就出现了这种状况:Sendmail 5尝试解析Sendmail 8的配置文件。但是为什么会是500miles呢?为什么是500miles咧?
原因是这样的,Sendmail 5面对陌生的配置文件,凡是不理解的部分都会忽略,凡是没设置过的配置项自动设置成0。这样其中有一个被设置成0,这一项就是 (连接远端SMTP服务器的超时时间)timeout to connect to the remote SMTP server。后来经过实验,发现0秒的timeout会导致Sendmail在3毫秒后中断连接。
所以,为啥是500miles?
在当年,MIT的校园网是没有那么多router的,也就没那么多网络延迟,所以连接一个远端主机的时间大概就是光所需的时间。于是3毫秒, 就意味着:
558英里。也就是558英里以外的服务器,都无法连接到,而558英里以内的服务器,都可以正常通信。
当当当,这就是500英里的bug啦。
上网调查一下目前流行的源程序版本管理软件和项目管理软件都有哪些, 各有什么优缺点?请按照最近一两年使用人数的多少, 从多到少排序并说明各自有多少用户(估计),工具的优缺点(可以引用相关资料并注明来源)。
在stackoverflow18年做的一次开发者调查中,有一定用户数量的版本管理软件有Git,Subversion,Team Foundation Version Control,Mercurial等等(除了单纯的复制,备份),他们具体的排名是这样的:
在全体开发者的范围内排名:
在专业开发这的范围内排名:
其实这些软件中,我实际用过的也只有git,所以只好结合它们各自的百科和博客纸上谈兵一番。
git
优点
适合分布式开发,强调个体。
公共服务器压力和数据量都不会太大。
速度快、灵活。
任意两个开发者之间可以很容易的解决冲突。
离线工作。
缺点
- 学习周期相对而言比较长。
- 不符合常规思维。
- 代码保密性差,一旦开发者把整个库克隆下来就可以完全公开所有代码和版本信息。
Subversion(SVN)
优点
采用集中式,易于管理,保证安全性;
管理方便,逻辑明确,理念符合常规思维;
代码的一致性高;
适合人数不多的项目开发;
允许一个文件有任意多的可命名属性,会关注所有的文件类型;
支持二进制文件,更容易处理大文件;
支持空目录。
缺点
- 服务器压力太大,数据库容量暴增;
- 必须连接在服务器上,否则基本不能工作、提交、对比、还原等;
- 不适合开源开发
Team Foundation Version Control
- 优点
- 可视化做的很好
- 缺点
- 中文资料太少
- 需要借助微软的开发平台
Mercurial
- 优点
- 轻量,易用性强
- 缺点
- 中文博客和资料比较少
【BUAA软件工程】第一次阅读作业的更多相关文章
- [2021BUAA软工助教]个人第一次阅读作业小结
BUAA个人阅读作业小结 一.作业要求 https://edu.cnblogs.com/campus/buaa/BUAA_SE_2021_LR/homework/11776 二.评分规则 言之有物,按 ...
- 2021S软件工程——个人阅读作业2
2021S软件工程--个人阅读作业2 项目 内容 这个作业属于哪个课程 2021春季软件工程(罗杰 任建) 这个作业的要求在哪里 个人阅读作业#2 我在这个课程的目标是 了解并熟悉软件开发的具体流程, ...
- 2021S软件工程——个人阅读作业1
2021S软件工程--个人阅读作业1 项目 内容 这个作业属于哪个课程 2021春季软件工程(罗杰 任建) 这个作业的要求在哪里 2021年软工-热身阅读作业 我在这个课程的目标是 了解并熟悉软件开发 ...
- BUAA软件工程个人项目作业
BUAA软件工程个人项目作业 项目 内容 这个作业属于哪个课程 2020春季计算机学院软件工程(罗杰 任健) 这个作业的要求在哪里 个人项目作业 我在这个课程的目标是 学习软件开发的流程 这个作业在哪 ...
- 第一次阅读作业 xinzcover
---恢复内容开始--- 第一次阅读和准备作业 这个作业属于哪个课程 https://edu.cnblogs.com/campus/xnsy/SoftwareEngineeringClass1 这个作 ...
- BUAA软件工程结对项目作业
BUAA软件工程结对项目 小组成员:16005001,17373192 1.教学班级和项目地址 项目 内容 这个作业属于哪个课程 博客园班级连接 这个作业的要求在哪里 结对项目作业 我在这个课程的目标 ...
- 【软工作业&思考】关于软工的一些概念性理解暨第一次阅读作业
概述 项目 内容 本次作业所属课程 2019BUAA软件工程 周二班 本次作业要求 第1次个人作业当然,比这个更重要百倍的还是实实在在的思考,这也是标题如此命名的原因 我在本课程的目标 在原有实践经验 ...
- 2019 SDN第一次阅读作业
目录 阅读 文章链接 阅读 阅读文章<软件定义网络(SDN)研究进展>,并根据所阅读的文章,书写一篇博客,回答以下问题(至少3个): 1.为什么需要SDN?SDN特点? 背景:传统网络的层 ...
- ASE高级软件工程 第一次结对作业
黄金点游戏Bot Bot8前来报道 1.问题定义 a) 问题描述 N个玩家,每人写一个0~100之间的有理数 (不包括0或100),提交给服务器,服务器在当前回合结束时算出所有数字的平均值,然后乘以0 ...
随机推荐
- 【PAT】B1057 数零壹(20 分)
简单题,简单字符串处理加简单数学进制转换 #include<stdio.h> #include<string.h> #include<ctype.h> int ma ...
- Spring boot 之 dubbo 无xml 简单入门
Dubbo简介 Dubbo框架设计一共划分了10个层,而最上面的Service层是留给实际想要使用Dubbo开发分布式服务的开发者实现业务逻辑的接口层.图中左边淡蓝背景的为服务消费方使用的接口,右边淡 ...
- Python之对象的永久保存模块---pickle
经常遇到在Python程序运行中得到了一些字符串.列表.字典等数据,想要长久的保存下来,方便以后使用,而不是简单的放入内存中关机断电就丢失数据. 这个时候Pickle模块就派上用场了,它可以将对象转换 ...
- UGUI 文字效果实现(Shadow\Gradient\Outline)
NGUI直接在UILabel组件中接入了Shadow.Gradient和outline选项,但在UGUI中是通过另外的组件单独提供,比如outline.shader等.这篇文章主要记录这几个文字效果实 ...
- 个人技术博客Alpha----Android Studio学习
项目联系: 本次项目我主要负责Android studio的后端,以及游戏文案游戏策划,结果后来事情太散了,Android studio学的不咋地,文案写完还有帮着写一写数据库的插入语句,然后就是跟队 ...
- 小程序布局中class='container'的bug
display:flex失效,并增加其他额外属性,暂时记录,还未查询是何原因导致,更改calss则无此问题.
- CRM项目之stark组件(2)
那么从今天开始呢,我们就要开始设计属于我们自己的admin组件,起个名字就叫stark吧(当然你愿意叫什么都可以). stark组件之四步走 仿照admin组件实现流程,stark组件要实现四件事情: ...
- WINDOWS 下设置单独的java环境
set JAVA_HOME=C:\Program Files\Java\jdk1.8.0_65set PATH=%JAVA_HOME%\bin;%PATH%;D:cd D:\JavaProjectcm ...
- 虚拟DOM与DOM diff算法
虚拟DOM是什么? 一个虚拟DOM(元素)是一个一般的js对象, 准确的说是一个对象树(倒立的) 虚拟DOM保存了真实DOM的层次关系和一些基本属性,与真实DOM一一对应,如果只是更新虚拟DOM, 页 ...
- Python3中PyMongo的用法
MongoDB存储 在这里我们来看一下Python3下MongoDB的存储操作,在本节开始之前请确保你已经安装好了MongoDB并启动了其服务,另外安装好了Python的PyMongo库. 连接Mon ...