项目 | 内容 |
---|---|
这个做业属于哪一个课程? | 北航软工 |
这个做业的要求在哪里? | 第一次我的做业 |
我在这个课程的目标是? | 学习高效严谨的软件工程开发过程,创建团队意识 |
这个做业在哪一个具体方面帮助我实现目标 | 熟悉并了解软件工程的基本知识,创建兴趣 |
1.软件开发中的风险控制?
现代软件开发中不免要用到一些第三方开发的开源库,好比python,js等语言,这些库为咱们的开发带来便利的同时,也为咱们带来了安全隐患,由于这些库的质量是咱们没法保证的。好比18年圣诞节发生的阿里的开源UI框架Ant Design中的彩蛋事件。那么,在成熟的商业公司的开发中,是怎样看待和使用这些第三方库的?python
2.单元测试的随机性,复杂性,如何创建合适的断言
测试已是软件开发中必不可少的一个步骤,咱们确实是有必要对程序进行全面严谨的单元测试。可是以咱们本次的结对开发任务为例,咱们提供一个找到最长单词链的接口。测试的时候,难道咱们就只测试返回的长度而不去考虑整个链的组成么?尤为是咱们将测试集的单词量级定为10000时,如何构造一个合适的数据集?人工构造耗时耗力。git
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的配置文件。svn可是为何会是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,因此只好结合它们各自的百科和博客纸上谈兵一番。
优势
适合分布式开发,强调个体。
离线工做。
优势
采用集中式,易于管理,保证安全性;
支持空目录。