一、个人总结
类别 | 具体技能和面试问题 | 现在的回答(注明年级) | 毕业后的回答 |
---|---|---|---|
语言 | 最拿手的计算机语言之一,代码量多少?(偏web前端,PC/Mobile App) | java吧,代码量不知道有没有六千 | |
语言 | 最拿手的计算机语言之二,代码量多少?(偏后端,数据处理,网站后台,机器学习,等) | 没有 | |
软件实现 | (阅读代码的能力,实现,单元测试) 你有没有在别人代码的基础上改进,你是怎么读懂别人的代码的,你采取了什么办法来保证你的新功能不会影响原来的功能? 你在开发中碰到最复杂的bug是什么,你是如何解决的? 这个bug出现的原因是什么,你在将来应该怎么去避免bug再出现? |
没有在别人的代码基础上改过代码; java课设的代码吧,在开发过程中遇到的bug应该没有说什么最复杂的,要么就是自己逻辑没思考要么问同学解决的。 |
|
软件测试 | (测试方法、测试工具、测试实践、代码覆盖率) 你如何测试你自己写的代码? 你如何测试别人的代码? 你掌握了多少种测试工具和方法? 你写过测试工具么? 你如何对一个网站进行压力测试和效能测试? 你如何测试一个软件的人机界面(ux/ui)? |
目前只会通过print来测试自己写代码; 没有测试过别人的代码; 通过print测试,单元测试; 没写过测试工具; 目前尚未为网站进行过压力测试,也没有测试过一个软件的人际界面 |
|
效能分析 | 效能分析,效能改进, 你写过最复杂的代码是什么? 你是如何测量和改进它的效能的,用了什么工具,如何分析的? |
平时写代码时并没有关注到效能这一块 | |
需求分析 | (需求分析,典型用户,场景,创新) 你做过多少个有实际用户的项目,用户最多有多少? 你的项目有什么创新的地方? |
没有做过有实际项目的用户 | |
行业洞察力 | 你最感兴趣的领域是什么? 这个领域过去10年经历了哪些创新? 你分析过这个领域前10名产品吗?请分析一下他们的优势,你要进入这个领域,应该如何创新? |
貌似并没有最感兴趣的领域,目前还在思考毕业出路o(╥﹏╥)o | |
项目管理 | 你参与过项目管理么? 请描述一下两个当下流行的开发方法在你的项目中的具体应用情况; 请问你如何决定项目中各种任务的优先次序,有什么理论来支持你的做法?如果你突然发现项目不能按时完成,你作为项目领导,有什么办法? |
参与过,就这次的项目,1、需求沟通阶段2、原型设计阶段3、技术开发阶段4、测试交付阶段; | |
软件设计 | 你做过架构设计,模块化设计,接口设计么? 请说明一下你为何是这样设计,你比较过什么不同的设计方式,你的设计取得了什么结果? |
java中做过接口设计,将某些对象共有的功能设计成接口,多态,方便使用。 | |
质量意识 | (代码复审/代码规范/代码质量)你是怎么做代码复审的,你加入我们团队后,能帮助我们提高代码质量么,请具体说怎么提高? | 查看代码是否有按照代码设计规范和代码风格规范进行编写,确认代码是否正确解决了问题。 | |
工具/社区 | Software Tools(performance tool,version control,work item,TFS) 你在各种开发平台(web,linux,PC,mobile,machine,learning)都是用过什么样的工具,自己写过什么工具来改进工作效率?你写的技术博客坚持了多久,读者最多的是哪一篇? |
eclipse、v有c6.0、vs、NetBeans、微信开发平台;没写过什么工具; 没有写过什么技术博客 |
|
团队协作 | Work with others(协同工作,提供反馈,说服别人)请描述你在项目中如何说服同伴采用你提出的更好的解决方案,或者你如何听取了别人的意见,改进了自己的方案? 你如何说服懒惰的同伴加紧工作,实现团队的目标? |
用事实数据证明; 根据别人提出意见查看自己代码是否存在这种问题,思考这个意见是否有被采取的必要,然后再考虑是否要改进自己的方案; |
|
理论素养 | 你上过什么数学,计算机或其他理论课,请举出具体的例子,说明你学到的理论知识如何帮助你解决实际问题。 | 高数、离散、线代、概率,数字逻辑,操作系统; 写代码时有时会用到高数的一些知识,操作系统让学习Linux管理课程比较好理解 |
|
自我管理 | 全年级你专业排名多少?你从刚入学(大学一年级)到现在的排名有变化吗? 你如何解释你的排名的变化? |
大三上23名;有变化; 学习动力不够足,不知道自己应该学些什么,不知道往哪个方向走 |
二、回答问题
我们在课程开始之初,曾经要求大家针对软件工程提出问题:个人阅读作业2,那么在经过alpha阶段,大家是否对软件工程有了一定的了解?请结合自己提出的问题进行回答
问题一
书中提到:软件团队的人员也会流动,新的成员要尽快读懂已有的程序,了解程序的设计。
问:在第一节软件工程课上,老师就讲了一下这个学期的教学安排,其中就有提到在做团队项目时,有个环节就是要进行成员交换。对于这个我不是很能理解,当你在这个团队已经一段时间,足够熟悉这个项目的需求以及程序的设计,并且跟其他成员也有一定的配合度,突然交换成员,如果是能力较强的成员那倒是影响不大,但是能力稍差的,则又需要一定时间去磨合,去熟悉程序的设计。这不是多费了一份功夫吗?
回答:我想这个应该是想让我们模拟现实生活中软件团队人员的流动。在实际中,企业管理上软件团队是会流动的,可能是现有团队有解决不了的技术困难,需要有掌握新技术新知识人员的支持,也有可能是现有团队在负责这个项目的同时还兼有其他任务,所以需要人员的帮忙。而我们课程设计中的团队成员交换,就是为了让我们模拟在企业管理上可能出现的人员流动问题我们要如何去适应它,当我们被要求调入一个新的团队,我们是不可能说拒绝的,不服从上级的要求,所以作为新的成员我们就需要尽快的读懂已有的程序,了解程序的设计,尽快的投入到新的团队里协助尽心团队开发。
问题三
书中提到:程序各方面的质量取决于一对程序员中各方面水平较高的那一位
问:一个很现实的问题就是队员的问题。我们平时上课做实验有时候就是得搭档着做,做课设的时候也有需要搭档着做的时候,那么在团队里总有人能力较强有人能力不强。像在两个人的结对中,万一有一方能力较差一点,总不能所有事情都让另一方去做。这样能力较弱的一方都没学到什么,更甚者两个编程能力都不强的人结对又该如何保证代码质量,要怎么去处理这个问题?在团队里,要怎么正确的给每个人分配工作,又要怎么的把每个人做的部分整合起来?
回答:宝玉老师在给我一个同学关于这个问题的回复是这样:“一个项目,并非要教条式的自始至终结对,尤其是在项目初期选择一些模块进行结对即可,结对主要还是让水平低的能跟着水平高的养成良好的习惯,形成统一的规范”。结对编程主要是让我们有一个互相学习、互相磨合的机会,在水平能力高的人带领下养成一个良好的编程规范,在相互交流中,相互学习和传递经验。我们不需要一直规矩着秉着结对的观念从始至终结对编程,只需要在有些需要的模块上进行结对即可。
问题四
书中提到:经常发布可用的软件,发布间隔可以从几周到几个月,能短则短
问:一个可用的软件,并不等于一个好用,用户满意的软件。在通过百度搜索后看到,提到敏捷开发的一项主张——“简单”,主张最简单的解决方案就是最好的解决方案。不要过分构建你的软件。但是如果是一款简单的软件,当它在发布间隔能短则短的情况下发布,那么如果用户发现并没有它所需要的功能,就不会喜欢它,即使之后有更新版本也不一定还会愿意去下载。在这发布间隔短,主张简单的情况下,如何保证用户还会下载最新版,如何保证软件的用户使用量?
回答:在这一段时间的软件工程课程的学习中,我们有学到两个概念需求分析和mvp(最小功能集)。在做一个项目开发之前我们是需要做需求分析的,我们需要知道我们所要开发的这个软件的软件需求(对产品功能性的需求、产品开发过程的需求、非功能性的需求以及综合需求),软件产品的利益相关者,因为不可能一次性满足所有利益相关者的要求,但是要获取到这个利益相关者的需求,也就是用户需求。mvp的概念是实现产品的最核心功能。而问题中提到的“在这发布间隔短,主张简单的情况下,如何保证用户还会下载最新版,如何保证软件的用户使用量?”问题,实际上在做敏捷开发前,已经做好了需求分析,了解到了用户所需,并且所说的主张简单,其实是mvp最核心的功能,这是在了解用户需求下所做的选择,所以在这情况下是有保证软件的用户使用量的。
三、再提问题
问题一
软件工程的教学和培训目标有提到通过一定的软件流程,在预计的时间里发布"足够好"的软件。
问:对于这个"足够好"的概念还不是很清楚,书上有提到bug的定义:软件的行为和用户的期望值不一样。bug的多少可以用来衡量一个软件的质量。实际上每个用户的期望肯定是不一样的,有些人觉得这个设计对于他的使用来说就是个bug,但是实际上这个设计就是这么设计的它不是bug。跟上次作业2提到的问题例子一样,百度主页按键的设置问题,所谓的"足够好"是针对占大多数的用户的吗?
问题二
第一章中提到软件开发的复杂性:大型软件(操作系统、办公软件、搜索引擎)有超过百万行的源代码,上万个不同的文件。而软件工程师通常一次只能看到30—80行源代码(相当于显示器的一屏),他们的智力、记忆力和常人差不多。
问:那么在这种情况下,我们应该怎么才能发现的了错误并且能够将错误排除掉呢?在这种情况下,我觉得进行排错是有一定难度的,既然软件工程师的记忆力跟常人差不多,只能看到30-80行代码,因为我们记忆量有限,当我们记忆过多的东西的时候就容易忘记之前的所记忆的东西,那么我们应该怎么去锻炼自己发现错误和排除错误的能力呢?有时候在我们编写代码的时候,也许只是一处代码写错了,但是却提示了一大片的报错信息,这种时候我们应该怎么解决?
问题三
在第八章需求分析有提到软件开发不可能一次满足所有利益相关者的要求,但是我们一定要让相关角色在这个阶段有机会提出他们的需求和意见。
问:书中提到的软件的相关利益者有很多,用户、顾客、市场分析着、监管机构、系统/应用集成商、软件团队和软件工程师等,虽然我们说到要有机会让相关角色参与到提需求和提意见中,但是我们应该如何判断在这个阶段哪个角色的需求和意见是最需要考虑的,因为我们做不到满足所有相关角色的需求和意见,所以作为一个软件开发团队,我们应该怎么协调某个阶段里相关软件利益相关者的需求和意见的优先级呢?
- 问题四
问:在开发的时候,每个人都会分配一定的任务去完成。在我们这次alpha阶段的开发中,我们做的是微信小程序项目,关于小程序编程语言的学习,我们在开发中都是边学边做的,但是每个人对于熟悉一门新的编程语言的能力是不一样的,有的人理解能力高几个小时就能摸索出大概的门路,但是有的人要花个几天的时间来理解这门语言,然而我们现在是处于alpha冲刺阶段,我们是应该让这个人继续自己学习他那部分任务代码的学习,还是应该分出人员去指导他的学习,这样会影响冲刺阶段的任务的完成吗?我们在这次开发并没有分配人员去指导,最后那部分功能没有实现成功,我们就把它取消掉了。这时候我们应该怎么处理?
- 问题五
问:在这次项目alpha冲刺阶段,我们只有两周的时间来进行冲刺,因为时间比较短,有时候会遇到项目就要截止发布内部测试版了,但是有些功能或者bug一直达不到预期的效果(未实现),这种时候我们要怎么进行测试,在开发人员已知自己功能尚未完善或bug还未解决的前提下,我们还要进行测试吗,或者直接发布内部测试版了?我们应该怎么去衡量着两者之间的关系?在测试阶段,因为我们小组有五人,开发人员三人,其余两人测试(经验能力较其他比较不足)开发人员是应该加入到测试中,还是说主导项目的测试,如果是参与到项目测试中,然而测试人员编程能力,经验不足无法写出合适的测试用例,这该怎么解决,如果是主导项目测试,那么安排的测试人员的又有什么用?
附加题
https://book.douban.com/annotation/56771350/