问题清单
第一课
1.如何解决软件开发的挑战?
答:
1.方案封面需要公司给定的封面——显得正规
2.方案最好有目录——让别人看起来更方便
3.方案最好要有对应得图,不能是纯文字
4.方案的可行性
2.软件复用是什么意思?
答: 软件复用是将已有的软件及其有效成分用于构造新的软件或系统。它不仅是对软件程序的复用,还包括对软件生产过程中其它劳动成果的复用,如项目计划书、可行性报告、需求分析、概要设计、详细设计、编码(源程序)、测试用例、文档与使用手册等等。因此,软件复用包括软件产品复用和软件过程复用两部分的内容。
3.ISO9126质量模型是什么?
答:ISO9126软件质量模型,是评价软件质量的国际标准。6个特性27个子特性组成。1、ISO9126功能性 2、ISO9126可靠性 3、ISO9126易用性 4、ISO9126效率性
第二课
1.怎样写外部文档支持的代码?
答:
1.getComputedStyle(obj,false).color // 除IE之外的浏览器
2.obj.currentStyle.color // IE
<script>
function getStyle(obj,attr){
return obj.currentStyle?obj.currentStyle[attr]:getComputedStyle(obj,null)[attr];
}
</script>
2.模块化程序设计有什么窍门吗?
答:1、在C语言的程序设计时,通常将一个大的程序功能分成若干个较小的模块,每个模块编写成结构清晰,接口简单,容易理解的程序段,即函数。这种方法就叫做模块化的程序设计方法
2、函数的定义包括函数的包括函数的声明和函数的实现。函数的声明包括返回类型,函数名称和形参列表,函数的实现即是在函数声明后面的花括号里面包含的内容。
3、函数的参数
①无参函数:在调用无参函数时,主调函数不将数据传递给被调用函数,无参函数可以带或者不带返回值。
②有参函数:在调用函数时,在主调函数和被调函数之间有数据传输。
③定义函数式的参数称为形参,形参在函数未被调用时没有确定值,只是形式上的参数,调用函数时的参数称为实参,实参可以是变量、常量、表达式,有确定的值。函数定义时,形参不占用内存,在发生调用时,才分配内存,并接受实参传来的值。
④函数的形参和实参个数要求相等,对应类型一致,且顺序要相同
⑤形参用于调用函数和被调函数之间的数据传递,因此需要类型说明
3.有哪些好的集成开发环境?
答:1.VS/Eclipse系列2.gcc系列3.CB/CL等系列
第三课
1.代码审查的重要性?
答:
如果您认为只要进行测试就不需要进行代码审查,那么以下提到的好处可能会使您的想法转向不同的想法。
- 早期错误检测:在开发阶段的早期阶段检测到错误时,可以减少测试阶段的大量时间。整个过程变得很便宜。尽管如今,自动化测试减少了测试工作量和花费的时间,但是,没有比检测和纠正其他人所犯错误的人性更好的天赋了。
- 指导低年级学生:当新生参加项目时,高年级学生可能没有太多时间来指导或指导大三学生进行编码实践或培训他们如何工作。在这种情况下,对于高级开发人员而言,理想的解决方案是花费至少20-30分钟的时间来审查初级用户编写的代码。定期的反馈将使新生能够发展自己的编码技能。
- 敏捷时代:如今,大多数组织都遵循敏捷方法论,要求及时交付高质量的工作。代码审查将使组织能够开发出无缺陷且遵循标准协议进行开发的高质量原型。
- 团队凝聚力:频繁的讨论讨论使团队更加紧密,使他们意识到彼此的长处和短处,并避免他们陷入孤立的环境中。
- 符合标准:在敏捷时代,客户经常要求我们遵守特定的编码标准。但是,较新的开发人员通常不了解行业标准编码。经常检查有助于确保代码遵守利益相关者设定的规则和标准。
2.除了优化代码算法,还有其他提高性能的方式吗?
答:1) 提高循环运行效率2) 尽量少在循环中调用过程3) 消除不必要的存储器引用4) 循环展开技术(loop unrolling)5) 用指针代替数组6) 提高并行性7) 充分利用处理器的cache
3.分工合作和结对编程那个更好?
答:
- 一、团队合作的优点
- 1、分工不同
团队成员能够处理更大的项目并且更快地完成工作任务,团队合作创建了更简单、更高效的工作流程,有人曾说:“团队合作能够分化任务,并取得双倍的成功。”从另一方面来说,某些工作需要一丝不苟地完成,有些工作只适合一个人独立完成。
2、一加一大于二
团队合作有利于集思广益,如果在寻求反馈或者集体讨论,那么团队合作可能非常有帮助,如果遇到问题,几个人从不同角度看待问题,那么就很容易解决问题。大家也都听说过人多误事,如果团队成员不能达成共识,那么意见可能非常多,你可能面临的分歧更大,工作也不会有进展。
在这种情况下,最好的解决办法是后退一步,提醒成员们铭记团队的共同目标,这不是纠结对和错的问题,而是将完成工作放到首位。团队合作就是即使共同目标变得模糊,成员们也会朝着共同目标努力。
3、团队合作有利于促进团体成员共同进步
成为团队一员后,人们会更加努力工作,在工作中,如果团队合作良好,每个人相处融洽,那么就会产生更加积极的协同效应。即使最弱的团队成员也一样强大。每个人对团队的贡献都不相同。
二、团队合作的劣势
1、交流问题
团队成员们分属不同的工作地点时,冗长的电话会议和大量的电子邮件会阻碍项目的进程,和其他团队成员一年见几次面,大多数时间通过电话会议联系,团队有许多人,但是许多人一起召开电话会议并不容易。
下面是一些结对编程的优点:
- 程序员互相帮助,互相教对方,可以得到能力上的互补。
- 可以让编程环境有效地贯彻Design。
- 增强代码和产品质量,并有效的减少BUG。
- 降低学习成本。一边编程,一边共享知识和经验,有效地在实践中进行学习。
- 在编程中,相互讨论,可能更快更有效地解决问题。
当然,结队编程也会有一些不好的地方:
- 对于有不同习惯的编程人员,可以在起工作会产生麻烦,甚至矛盾。
- 有时候,程序员们会对一个问题各执己见(代码风格可能会是引发技术人员口水战的地方),争吵不休,反而产生重大内耗。
- 两个人在一起工作可能会出现工作精力不能集中的情况。程序员可能会交谈一些与工作无关的事情,反而分散注意力,导致效率比单人更为低下。
- 结对编程可能让程序员们相互学习得更快。有些时候,学习对方的长外,可能会和程序员们在起滋生不良气氛一样快。比如,合伙应付工作,敷衍项目。
- 面对新手,有经验的老手可能会觉得非常的烦躁。不合适的沟通会导到团队的不和谐。
- 新手在面对有经验的老手时会显得非常的紧张和不安,甚至出现害怕焦虑的的精神状态,从而总是出现低级错误,而老手站在他们后面不停地指责他们导致他们更加紧张,出现恶性循环。最终导致项目进展效率低下,并且团队貌合神离。
- 有经验的人更喜欢单兵作战,找个人来站在他背后看着他可能会让他感到非常的不爽,最终导致编程时受到情绪影响,反而出现反作用。
第四课
1.黑盒测试与白盒测试的优缺点?
答: 黑盒测试的优点有 :
2) 与软件的内部实现无关
3) 从用户的角度出发,能很容易的知道用户会用到哪些功能,会遇到哪些问题
4) 基于软件开发文档,所以也能知道软件实现了文档中的哪些功能
5) 在做软件自动化测试时较为方便
缺点 :
1) 不可能覆盖所有的代码, 覆盖率较低,大概只能达到总代码量的30%
2) 自动化测试的复用性较低。
1) 帮助软件测试人员增大代码的覆盖率。 提供代码的质量,发现代码中隐藏的问题
缺点 :
1) 程序运行会有很多不同的路径,不可能测试所有的运行路径
2) 测试基于代码,只能测试开发人员做的对不对,而不能知道设计是否正确,可能会漏掉一些功能需求
3) 系统庞大时,测试开销会非常大。
而规模不是很大的,商业型的应用软件,更倾向于快速得到可用的软件。而度且软件需要能够适应市场的变化作出相应的调整。原型模型无疑是更适合的。
Brools教授解释说,这是因为后来者需要加快速度,同时还要与前任进行沟通,从而使得开发团队增加了更多的开发时间,这个时间超过了新增程序员所做的贡献.
从理论上说,软件发展陷入僵局是可能的,此时开发团队极其庞大,以致所有时间都来互相沟通和重新决定,这样项目永远也不会完成.
另一方面,Brooks教授写道,灾难来源于漏洞。
2. 质量有保障。敏捷方法对每一次迭代周期的质量都有严格要求。敏捷开发团队拥有高水平的开发方法,有的会在正式开发功能代码之前先开发该功能的测试代码,质量可保证。
3. 客户合作胜过合同谈判。好的团队会更在乎与客户合作的这个过程。
4. 投资回报率高。在敏捷开发过程中,最具价值的功能总是被优先开发,这样能给客户带来最大的投资回报率。
5. 较高的速度是敏捷开发最显著的优点之一。敏捷团队只专注于开发项目中当前最需要的、最具价值的部分。这样能很快地投入开发。另外,较短的迭代周期使团队成员能迅速进入开发状态。
3.敏捷开发的缺点?
答:但敏捷注重人员的沟通,忽略文档的重要性,若项目人员流动大太,又给维护带来不少难度,特别项目存在新手比较多时,老员工比较累。
需要项目中存在经验较强的人,要不大项目中容易遇到瓶颈问题。
由于专家作为个体,存在个人偏见。
所以有Delphi方法。
步骤为:
1,组织者发给每位专家一份软件系统的规格说明合一张记录估算值的表格,请专家估算。
2,专家详细研究软件规格后,对该软件提出3个规模的估算值
最小值a。
最可能值m。
最大值b。
3,组织者对专家表格中的答复进行整理,计算每位专家的平均值E=(a+4m+b)/6,然后计算出期望值:E=(E1+E2+....+EN)
4,综合结束后,再组织专家无记名填表格,比较估算偏差,并查找原因。
5,上述过程重复多次,最终可以获得一个多数专家共识的软件规模。
3.怎样保证软件技术状态的一致性?
答:版本控制是全面实行软件配置管理的 基础,可以保证软件技术状态一致性。
第九课
1.怎样解决需求分析师七宗罪?
答:1、妥协即放弃,不敢坚持2、用户需求=产品需求,不懂挖掘3、看不起小需求,不注重细节4、存在即合理,不敢质疑5、只看重商业价值,不重视用户体验6、产品需求变更频繁,不懂敏捷开发7、自我看待产品需求,不懂站在用户角度。
2.评审和减少走查有什么区别?
答:走查是审评过程中采百用的一种方法。走查时,软件设计者或程序开发人员指导一名或多名其他参加评审的成员,通度读已书写的设计文档或编码,其他成员问负责提出问题,并对有关技术、风格、可能的错误、是否有违背评审标准答的地方进行评论。
审查是一种正式的评定技术。由除被审查对象的版作者之外的某人或某一小组自习检查软件需求、设计或编码,以找出故障和其他一些问权题。
3.什么是A/B测试?
答:AB Test 实验一般有 2 个目的:
- 判断哪个更好:例如,有 2 个 UI 设计,究竟是 A 更好一些,还是 B 更好一些,我们需要实验判定
- 计算收益:例如,最近新上线了一个直播功能,那么直播功能究竟给平台带了来多少额外的 DAU,多少额外的使用时长,多少直播以外的视频观看时长等
我们一般比较熟知的是上述第 1 个目的,对于第 2 个目的,对于收益的量化,计算 ROI,往往对数据分析师和管理者非常重要。
对于一般的 ABTest 实验,其实本质上就是把平台的流量均匀分为几个组,每个组添加不同的策略,然后根据这几个组的用户数据指标,例如:留存、人均观看时长、基础互动率等等核心指标,最终选择一个最好的组上线。