zoukankan      html  css  js  c++  java
  • 软工网络15个人作业4——alpha阶段个人总结

    一、个人总结

    第一部分:硬的问题

    类型 具体技能和面试问题 现在的回答(大三) 毕业时找工作
    语言 拿手的计算机语言(偏web前端,PC/Mobile App) 编写微信小程序了解一些Javascript语言
    语言 拿手的计算机语言(偏后端,数据处理,网站后台,机器学习等) java语言、C++
    软件实现 (阅读代码的能力,实现,单元测试)有没有在别人的代码基础上进行改进,你是怎么读懂别人的代码,你采取什么方法不影响原来的功能,遇到的bug是什么,怎么解决,bug出现的原因 1、有,通过代码注释和变量名、类名等看出代码的具体用途2、保留功能的代码,进行小范围的修改或者进行添加功能模块3、遇到的bug就是添加的功能还存在一些问题,一般可能是变量是局部或者全局的问题,或者是算法描述有误,与原来的代码模块没有很好的融合
    软件测试 (测试方法、测试工具、测试实践、代码覆盖率)你如何测试自己的代码?如何测试别人的代码?掌握了多少种测试工具和方法?写过测试工具么?如何对一个网站进行压力测试和效能测试? 1、从一开始添加一些输出语句进行测试到现在会使用一些测试工具如xtest,还会用到编写软件的应用的调试功能2、到现在没有熟练掌握的测试工具也没有写过测试工具3、使用一些测试工具如testcomplete,loadrunner对网站进行压力测试,效能测试针对网站的各个功能模块,后端数据库搭建以及是否存在安全漏洞等进行针对性测试
    效能分析 (效能分析,效能改进)你写过的最复杂的代码是什么?如何测量和改进他的效能的,用了什么工具,如何分析的? 1、写一个有关仓库库存的代码2、通过对功能模块的展现和需求进行对比,如果有所出入则需要进行改进,当时还没有用到什么工具,测试方法通常为运行程序,尽可能从各个方面(输入正确数据/错误数据)使用程序
    需求分析 (需求分析,典型用户,场景,创新)你做过多少个有实际用户的项目,用户最多有多少?你的项目的创新之处? 这次软件工程作业做的是记账小程序,用户大概有12个这样。创新之处在于能够根据用户的消费类别的使用情况给出合理的消费建议
    行业洞察力 你最感兴趣的领域是什么,这个领域过去十年有什么创新?你分析过这个领域前十的产品吗?请分析一下他们的优劣。你要进入这个领域,如何创新? 1、微信小程序2、微信小程序在这两年很火热,优点在于使用方便,无需安装,占内存小,兼容性较好,缺点在于很多小程序的功能相对app而言还不够完善3、始终围绕用户需求进行程序设计,秉持着让用户有更好的使用体验进行创新
    项目管理 你参加过项目管理吗?请描述两个当下流行的开发方法在你的项目中的具体应用情况。如何决定各个任务的优先顺序,有什么理论支持你的做法?如果项目不能及时完成,有什么办法 1、这次项目开发有参加2、开发方法较主流的有结构化方法、面向对象的开发方法,如记账小程序的记账页面先把页面的排版给设计好,然后针对一些按钮进行功能代码的编写,针对各个功能模块写出各个方法模块3、任务的顺序在于功能的重要程度,先完成最核心的功能。MVP模式。如果项目不能及时完成,把核心功能的要求再降低,在较短的时间内完成最最核心的功能
    软件设计 你做过架构设计、模块化设计、接口设计吗?请说明以下你为何是这样设计,你比较过什么不同的设计方式,你的设计取得了什么成果? 没有做过,一般根据用户需求进行模块的分类,针对模块进行编写程序,然后考虑数据的传输
    质量意识 (代码复审/代码规范/代码质量)你是怎么做代码复审的,你加入我们团队后,能帮我们提高代码质量吗,请具体说怎么提高? 通过浏览代码看是否能够进行代码复用、能否用更好的方法、是否存在潜在的bug、效率、可读性和可维护性和安全性等
    工具/社区 你在各种开发平台(web,linux,PC,mobile,machine,learning)都使用过什么样的工具,自己写过什么工具来改进工作效率?给社区贡献过什么工具和代码?Github有分享代码么?你写的技术博客坚持了多久,读者最多的是哪一篇? 1、目前没有使用工具2、没有写过工具,Github有分享过一些代码3、没有写过技术博客
    团队协作 描述你在项目中如何说服同伴采取你更好的方案?或是听取别人的意见改进自己的方案?如何说服懒惰的同伴加紧工作? 1、把自己方案的亮点体现出来,通过细致的分析,告诉同伴这个方案带来的好处和存在的缺漏2、如果别人的意见比较好,会听取他人建议,即使改进自己方案3、交代工作量,给同伴一个指定的时间期限,让他有时间的紧迫感
    理论素养 你上过什么数学,计算机或是理论课,举出具体的例子,如何帮你解决问题 高数,操作系统,计组,c语言,数据结构,java等,使用数据结构里面学到的算法,如前缀后缀表达式来解决四则运算程序的核心功能的编写
    自我管理 全年级你专业排名多少?你从刚入学(大一)到现在排名有变化吗?如何解释这种变化? 发生了一些变化,有所下降。但我觉得学习成绩只能反映你的学习态度。大学要学会对未来的规划

    第二部分:软的部分

    1. 保持高标准,不要受制于破窗理论(broken windows theory)[i]。当你看到不靠谱的设计、糟糕的代码、过时的文档和测试用例的时候,不要想 既然别人的代码已经这样了,我的代码也可以随便一点啦。

    a) 从来没听说过; b) 我就是这样随便过来的; c) 如果有明确要求,我可以做好 d) 一直主动这样做 e) 不但主动做, 还会影响同事一起做好

    2. 主动解决问题。当看到不靠谱的设计,糟糕的代码的时候,不要想“可能别人会来管这个事情” ,或者“我下个月发一个邮件让大家讨论一下”。要主动地把问题给解决了[ii]。

    a) 不懂啥是靠谱的设计; b) 随便应付一下即可; c) 如果有明确要求,我可以做好。 d) 一直主动这样做 e) 不但主动做, 还会影响同事一起做好

    3. 经常给自己充电,身体训练是运动员生活的一部分,学习是软件工程师职业的伴侣。每半年就要了解和学习一些新的相关技术。通过定期分享(面对面的分享,写技术博客等)来确保自己真正掌握了新技术。

    a) 从来不看书; b) 看了就忘; c) 有时分享。 d) 一直主动这样做 e) 不但主动做, 还会影响同事一起做好

    4. DRY (Don't Repeat Yourself)——别重复。在一个系统中,每一个知识点都应该有一个无异议的、正规的表现形式。

    a) 从来没听说过; b) 听说过,但是认为意思不大; c) 这要讲场合。 d) 一直主动这样做 e) 不但主动做, 还会影响同事一起做好

    5. 消除不相关模块之间的影响,在设计模块的时候,要让它们目标明确并单一,能独立存在,没有不明确的外部依赖。

    a) 从来没听说过; b) 出了问题再说吧; c) 想做,但是不知道怎么衡量效果。 d) 能够在多种语言和架构中做到 e) 不但主动做, 还会影响同事一起做好

    6. 通过快速原型来学习,快速原型的目的是学习,它的价值不在于代码,而在于你通过快速原型学到了什么。

    a) 从来没听说过; b) 把原型直接用于产品,不然就浪费了; c) 不用原型,一直在产品中直接改。 d) 一直主动这样做 e) 不但主动做, 还会影响同事一起做好

    7. 设计要接近问题领域,在设计的时候,要接近你目标用户的语言和环境。

    a) 从来没听说过; b) 按我的想法设计,用户以后会适应的; c) 大概同意,但是怎么接近用户呢? ** d) 一直主动这样做** e) 不但主动做, 还会影响同事一起做好

    8. 估计任务所花费的时间,避免意外。在开始工作的时候,要做出时间和潜在影响的估计,并通告相关人士,避免最后关头意外发生。工作中要告知可能的时间变化,事后要总结。

    a) 做完了,就知道花费了,不用事先估计; b) 大概估一下,不必在意时间 c) 如果有明确要求,我可以做好。 d) 一直主动这样做 e) 不但主动做, 还会影响同事一起做好

    9. 图形界面的工具有它的长处,但是不要忘了命令行工具也可以发挥很高的效率,特别是可以用脚本构建各种组合命令的时候。

    a) 一直用鼠标和GUI; b) 到时候问牛人; c) 正在学习命令行工具。 d) 一直主动这样做 e) 不但主动做, 还会影响同事一起做好

    10. 有很多代码编辑器,请把其中一个用得非常熟练。让编辑器可以实现自己的定制,可以用脚本驱动,用起来得心应手。

    a) 只用老师教的一个; b) 随意; ** c) 没有任何定制。** d) 会定制,并且分享给其他人 e) 还会学习和使用各种编辑器的扩展。

    11. 理解常用的设计模式,并知道择机而用。设计模式不错,更重要的是知道它的目的是什么,什么时候用,什么时候不用。

    a) 从来没听说过; b) 模式没用; c) 每写100行程序,我就尽量用一个模式。 d)有实际使用的经验 e) 能用具体代码说明模式的利弊

    12. 代码版本管理工具是你代码的保障,重要的代码一定要有代码版本管理。

    a) 从来没听说过; b) 用QQ,u盘即可; c) 领导要求才用。 d) 经常用 e) 不但主动做, 还会影响同事一起做好

    13. 在debug的时候,不要惊慌,想想导致问题的原因可能在哪里。一步一步地找到原因。要在实践中运用工具,善于分析日志(log),从中找到bug。同时,在自己的代码里面加 log.

    a) 从来没听说过; b) 只会printf; c) 加log 太麻烦,我的代码不会有bug 的。 d) 一直主动这样做 e) 不但主动做, 还会影响同事一起做好

    14. 重要的接口要用形式化的“合同”来规定。用文档和断言、自动化测试等工具来保证代码的确按照合同来做事,不多也不少。使用断言 (assertion) 或者其他技术来验证代码中的假设,你认为不可能发生的事情在现实世界中往往会发生。

    a) 从来没听说过; b) 太麻烦,不用; c) 想用,但没有时间。 d) 一直主动这样做 e) 不但主动做, 还会影响同事一起做好

    15. 只在异常的情况下才使用异常 (Exception), 不加判断地过多使用异常,会降低代码的效率和可维护性。记住不要用异常来传递正常的信息。

    a) 从来没听说过; b) 抓住所有异常 c) 如果有明确要求,我可以做好。 d) 一直主动这样做 e) 不但主动做, 还会影响同事一起做好

    16. 善始善终。如果某个函数申请了空间或其他资源,这个函数负责释放这些资源。

    a) 从来没听说过; b) 随缘; c) 有时这样做。 d) 一直主动这样做 ** e) 不但主动做, 还会影响同事一起做好**

    17. 当你的软件有多种技术结合在一起的时候,要采用松耦合的配置模式,而不是要把所有代码都混到一起。

    a) 从来没听说过; b) 没有实践的机会; c) 代码都在一起比较好管理。 d) 一直主动这样做 e) 不但主动做, 还会影响同事一起做好

    18. 把常用模块的功能打造成独立的服务,通过良好的界面 (API) 来调用不同的服务。

    a) 从来没听说过; b) 拷贝代码过来用也可以 c) 如果有明确要求,我可以做好。 d) 一直主动这样做 e) 不但主动做, 还会影响同事一起做好

    19. 在设计中考虑对并行的支持,这样你的API 设计会比较容易扩展。

    a) 从来没听说过; b) 并行不会出错的; c) 任何代码都应支持并行。 ** d) 考虑在适当的层次支持并行** e) 不但主动做, 还会影响同事一起做好

    20. 在设计中把展现模块 (View) 和实体模块 (Model) 分开,这样你的设计会更有灵活性。

    a) 代码都在一起比较好改; b) 随缘啦; c) 没搞清楚啥是V,啥是M。 d) 一直主动这样做 e) 不但主动做, 还会影响同事一起做好

    21. 重视算法的效率,在开始写之前就要估计好算法的效率是哪一个数量级上的(big-O)。

    a) 从来没听说过; b) 我的数据量不大,无所谓; c) 不会有效率问题的,现在CPU 都快了。 d) 主动测试程序效率,以验证估算 e) 不但主动做, 还会影响同事一起做好

    22. 在实际的运行场景中测试你的算法,不要停留在数学分析层面。有时候一个小小的实际因素 (是否支持大小写敏感的排序,数据是否支持多语言)会导致算法效率的巨大变化。

    a) 从来没听说过; b) 想用,但不知道工具 c) 主要靠肉眼观察算法效率。 d) 一直主动这样做 e) 不但主动做, 还会影响同事一起做好

    23. 经常重构代码,同时注意要解决问题的根源。

    a) 从来没听说过; b) 任何修改都可以叫重构; c) 每天应该重构两次。 d) 一直主动这样做 e) 不但主动做, 还会影响同事一起做好

    24. 在开始设计的时候就要考虑如何测试 ,如果代码出了问题,有log 来辅助debug 么? 尽早测试,经常测试,争取实现自动化测试,争取每一个构建的版本都能有某些自动测试。

    a) 从来没听说过; b) 我的代码不会出问题的; c) 项目没有安排时间,我也没有提这事。 d) 一直主动这样做 e) 不但主动做, 还会影响同事一起做好

    25. 代码生成工具可以生成一堆一堆的代码,在正式使用它们之前,要确保你能理解它们,并且必要的时候能debug 这些代码。

    a) 从来没听说过; b) 从来不看那些代码; c) 那些代码没有bug。 d) 一直主动这样做 e) 不但主动做, 还会影响同事一起做好

    26. 和一个实际的用户一起使用软件,获得第一手反馈。

    a) 从来没听说过; b) 用户太蠢,不值得听反馈; c) 想做但是没有机会。 d) 一直主动这样做 e) 不但主动做, 还会影响同事一起做好

    27. 在自动测试的时候,要有意引地入bug,来保证自动测试的确能捕获这些错误。

    a) 没听说过; b) 不必这么麻烦; c) 如果有明确要求,我可以做好。 d) 一直主动这样做 e) 不但主动做, 还会影响同事一起做好

    28. 如果测试没有做完,那么开发也没有做完。

    a) 从来没听说过; b) 签入代码,就是做完了; c) 。 d) 一直主动这样做 e) 不但主动做, 还会影响同事一起做好

    29. 适当地追求代码覆盖率:每一行的代码都覆盖了,但是程序未必正确。要确保程序覆盖了不同的程序状态和各种组合条件。

    a) 从来没听说过; b) 覆盖20% 就好了; c) 要覆盖至少60%。 d) 一直主动这样做 e) 不但主动做, 还会影响同事一起做好

    30. 如果团队成员碰到了一个有普遍意义的bug, 应该建立一个测试用例抓住以后将会出现的类似的bug。

    a) 从来没听说过; b) 每个bug都是特殊的; c) 测试用例不值得加 d) 一直主动这样做 e) 不但主动做, 还会影响同事一起做好

    31. 测试:多走一步,多考虑一层。如果程序运行了一星期不退出,如果用户的屏幕分辨率再提高一个档次,这个程序会出什么可能的错误?

    a) 从来没听说过; b) 如果有问题,用户会报告的,我们不用测这些; c) 如果有明确要求,我可以做好。 d) 一直主动这样做 e) 不但主动做, 还会影响同事一起做好

    32. (带领团队)了解用户的期望值,稍稍超出用户的期望值,让用户有惊喜。

    a) 从来没听说过; b) 我们决定用户的期望; c) 如果有明确要求,我可以做好。 d) 一直主动这样做 e) 不但主动做, 还会影响同事一起做好

    33. (带领团队) 不要停留在被动地收集需求,要挖掘需求。真正的需求可能被过时的假设、对用户的误解或其他因素所遮挡。

    a) 从来没听说过; b) 用户不说的,我们不做; c) 如果有明确要求,我可以做好。 d) 一直主动这样做 e) 不但主动做, 还会影响同事一起做好

    34. (带领团队)把所有的术语和项目相关的名词、缩写等都放在一个地方。

    a) 从来没听说过; b) 都记在我脑子里; c) 大家看代码就好 d) 一直主动这样做 e) 不但主动做, 还会影响同事一起做好

    35. (带领团队)不要依赖于某个人的手动操作,而是要把这些操作都做成有相关权限的人士都能运行的脚本。这样就不会出现因为某人休假而项目被卡住的情况。

    a) 从来没听说过; b) 我们没有休假的,没关系; c) 出了问题再说 d) 一直主动这样做 e) 不但主动做, 还会影响同事一起做好

    36. (带领团队)要让重用变得更容易。一个软件团队要创造一种环境,让大家有轻松的心态来尝试各种想法 (例如,模块的重用,效能的提升,等)。

    a) 都听领导的; b) 团队严肃紧张最好; c) 不必尝试,失败的可能性太大。 d) 一直主动这样做 e) 不但主动做, 还会影响同事一起做好

    37. (带领团队)在每一次迭代之后,都要总结经验,让下一次迭代的进度安排更可靠,质量更高。

    a) 没有时间总结,直接做下一版; b) 总结用处不大; c) 如果上级有要求,就做一下; d) 一直主动这样做 e) 不但主动做, 还会影响同事一起做好

    38. (带领团队)团队中往往会有矛盾产生,作为领头人,怎么办?

    a) 我没看见矛盾。 b) 和稀泥,过得去就行 ; c) 如果没有捅到上级那里,就打哈哈,希望他们自己搞定; ** d) 有明确和一致的处理矛盾的原则** e) 不但有明确和一致的处理原则,而且对于影响团队士气的任何事情追究到底

    二、回答问题

    Question1:

    横向科技更注重实践应用;纵向科技更重视探索未知领域和研究前沿话题。计算机科学和软件工程的不同侧重点——即计算机科学较偏向理论教学(但大部分的学校的计算机科学老师做的都是偏实践应用,导致目前中国IT产业发展的现状为“计算机科学就等同于软件工程”),软件工程偏向实践应用。

    • 我的问题是在当今时代,有必要去纠正计算机科学的发展方向(修正为重视理论)吗?

    Answer:

    • 我认为是有必要的。近几年来人工智能,智能识别等技术在不断发展,发展前景是很明朗的,这些技术需要有扎实的理论基础。如果大部分学校的计算机科学还是偏实践应用,恐怕同学们对理论知识不能够很好的消化,这样下去,容易造成新兴科技的人才缺口。已经有软件工程偏向实践应用,计算机科学就踏踏实实学好理论,各个专业专注于一件事,成效也更明显。

    Question2:

    创建单元测试函数的主要步骤是:1、设置数据 2、使用被测试类型的功能 3、比较实际结果和预期的结果......单元测试必须和产品代码一起保存和维护。

    • 我的问题是那是不是意味着只要产品的代码改变时,单元测试才有必要进行呢?如果产品的代码未改变,单元测试就可以一直沿用以前的内容吗?

    Answer:

    • 单元测试和代码是紧密关联的,代码有所改动,则需要进行单元测试,如果未改动,则和单元测试一起保存和维护,无需重新测试。

    Question3:

    微软在总结了自己产品团队的开发经验和教训,以及微软咨询服务部门的业务经验后,推出了MSF(Microsoft Solution Framework)。......MSF基本原则包括推动信息共享与沟通、为共同的远景而工作、充分授权和信任、各司其职、交付增量的价值、保持敏捷,预期和适应变化、投资质量、学习所有的经验、与顾客合作

    • 我的问题是MSF基本原则是不是适用于所有的项目开发呢?还是有它自己适用的范围呢?

    Answer:

    • 我认为面向市场型的软件开发都可以参照MSF基本原则。因为MSF基本原则在理论上十分严谨,又是在实践中总结的经验。但针对用户需求比较单一且不会有很大变化的开发项目(如硬件开发、建筑设计),MSF基本原则中的保持敏捷、预期和适应变化则可以不需要遵守。

    三、再提问题

    问题一 第十三章 软件测试p270

    事实上这是一种基本验证测试,据说是从硬件设计行业流传过来的说法。当年设计电路板的时候,很多情况下,新的电路板一插上电源就冒起白烟,烧坏了。如果插上电源后没有冒烟,那就是通过了“冒烟测试”,可以进一步测试电路板的功能了。我们正在讨论的BVT也是一种冒烟测试。

    • 书上提到的BVT(构建验证测试),是在一个构建完成之后,构建系统运行一套测试,验证系统的基本功能。通过以上一段文字,还不是很清楚冒烟测试和BVT之间的联系。

    • 通过查阅资料,明白了冒烟测试在软件测试中是指,针对软件的基本功能进行测试,发现并记录bug,按照bug优先级针对每个bug进行修复。冒烟还有一层意思是所需时间短,在一定程度上能够节省测试时间。但这个测试存在的不足在于只关注某个bug进行修复,可能造成其他连锁模块新的bug出现,代码覆盖率也不高。BVT是针对基本功能进行的一系列测试。可以得出BVT是冒烟测试的一种,冒烟测试是自由测试的一种。

    问题二 第六章 敏捷流程p121

    各个需求和任务之间是有种种复杂的依赖关系的,除了优先级之外,我们还要考虑相互的依赖关系。

    • 我们在制定计划的是针对软件开发的几个模块(如功能模块的开发、数据模块、测试)进行,再根据其发展时间顺序和优先级、依赖关系进行。但在制定计划过程中,我们还不能很好的权衡任务的优先级及依赖关系,就会导致在开发程序过程中计划是动态的,常常会发生变动。我的问题是怎样在一开始制定一个较为合理和较弹性的计划?对任务优先级和依赖关系的权衡有什么标准吗?

    问题三 第十一章 软件设计与实现

    • 在软件设计与实现的过程中,我们是要更看重功能模块的宏观架构的实现,还是更看重每个模块的功能实现,如果必须选其一,选择哪一个是比较合理的呢?

    问题四 第十六章 IT行业的创新p341

    迷思之五:要成为领域的专家,才能创新

    • 课本中,作者提到了统计数据表明70%的创新者说,他们最成功的创新,是在他们的拿手领域之外发现的。并列举了很多有重大突破的产品的创新历程。我认为要想创新,你首先必须了解这个领域的一些知识,至少粗略了解该领域产品的基本开发架构,熟悉每个开发流程的设计过程。首先在这个基础上想出创意的点子,与整个开发流程息息相关,在往后也更容易实现。其次,作为该领域的专家,对领域的一些产品的特性及痛点也比外行者看的更透彻,更能抓住创新的机会。领域外的创新者表现更加突出,我认为是因为专家在该领域待的时间久了,有些思维模式已经固化,很难跳出保守理念。

    问题五 第十六章 IT行业的创新p341

    迷思之六:技术的创新是关键

    • 课本中,作者提到了凝聚了多种先进技术的Iridium手机,能够实现地球全覆盖,即使在荒无人烟的地方也可以打电话,但是由于需要用户数量占的比例很少,退出了手机市场,现在变成了一项租赁业务。我的观点是“技术的创新是关键”这一点是没有问题的,问题在于我们在实现技术的创新过程中,是否紧密联系了用户需求和用户体验。产品离开了用户,即使技术再好恐怕也很快就消沉。或者换句话说,我们可以针对用户体验方面进行技术的创新,这样技术才会不断发展,造福用户。

    四、【附加题】

    我的提问

  • 相关阅读:
    【SQLSERVER】动态游标的实现
    【Oracle】动态游标的实现
    【SQLSERVER】拷贝表数据
    LeetCode: Count and Say
    LeetCode: Construct Binary Tree from Preorder and Inorder Traversa
    LeetCode: Combinations
    LeetCode: Convert Sorted List to Binary Search Tree
    LeetCode: Decode Ways
    LeetCode: Combination Sum II
    LeetCode: Construct Binary Tree from Inorder and Postorder Traversal
  • 原文地址:https://www.cnblogs.com/qxx-Ultraman/p/9033526.html
Copyright © 2011-2022 走看看