热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

个人作业四--Alpha阶段个人总结

一、个人总结在alpha结束之后,每位同学写一篇个人博客,总结自己的alpha过程;请用自我评价表:http:www.cnblogs.comxinzp3852177.html

一、个人总结

在alpha 结束之后, 每位同学写一篇个人博客, 总结自己的alpha 过程;
请用自我评价表:http://www.cnblogs.com/xinz/p/3852177.html 有比较才会有进步。

类别 具体技能和面试问题 现在的回答 毕业找工作时
语言 最拿手的计算机语言之一,代码量多少? (偏web前端,PC/Mobile App) Java,大概应该有一万吧
语言 最拿手的计算机语言之二,代码量多少? (偏后端,数据处理,网站后台,机器学习,等) c++,大概五千?
软件实现 (阅读代码的能力,实现,单元测试) 你有没有在别人代码的基础上改进,你是怎么读懂别人的代码的,你采取了什么办法来保证你的新功能不会影响原来的功能 ?你在开发中碰到最复杂的bug 是什么,你是如何解决的?这个bug 出现的原因是什么,你在将来应该怎么去避免bug 再出现? 有在别人的代码上改进,读懂别人的代码首先要清楚各个类,变量的含义,其次通过注释理解代码,要是没有注释的话读代码就比较吃力。新开发的功能最好单独做一个模块,尽量避免有所交集,实在无法避免需要仔细缕清代码,不能有二义性,影响原有功能。开发较少,还没有碰到很复杂的bug。
软件测试 (测试方法、测试工具、测试实践、代码覆盖率)你如何测试你自 己写的代码?你如何测试别人的代码?你掌握了多少种测试工具和方法?你写过测试工具么?你如何对一个网站进行压力测试和效能测试?你如何测试一个软件的人机界面(UX/U1)? 通过自己写测试代码,eclipse有自带测试工具,其他没用过,也没写过测试工具,不懂。
效能分析 效能分析,效能改进,你写过的最复杂的代码是什么? 你是如何测量和改进它的效能的,用了什么工具,如何分析的? 没写过
需求分析 (需求分析,典型用户,场景,创新)你做过多少个有实际用户的项目,用户最多有多少?你的项目有什么创新的地方? 做的项目没发布过,最近做的记账小程序发布了,目前用户应该有20,因为还在开发阶段,创新的地方还没写出来。
行业洞察力 你最感兴趣的领域是什么? 这个领域过去10年经历了哪些创新?你分析过这个领域前10名产品么? 请分析一下他们的优劣,你要进入这个领域,应该如何创新? web前端技术,主要是网页设计的核心技术--HTML、CSS和Javascript
项目管理 你参与过项目管理么? 请描述一下两个当下流行的开发方法在你的项目中的具体应用情况;请问你如何决定项目中各种任务的优先次序,有什么理论来支持你的做法如果你突然发现项目不能按时完成,你作为项目领导,有什么办法? 最新的项目使用敏捷开发,目前alpha阶段已经完成,刚开始beta阶段。各种任务的优先次序取决于项目的进度和任务的紧迫程度。
软件设计 你做过架构设计,模块化设计,接口设计么? 请说明一下你为何是这样设计,你比较过什么不同的设计方式,你的设计取得了什么结果? 做过设计,以架构为中心,功能模块化,具体到接口、类。
质量意识 (代码复审/代码规范/代码质量) 你是怎么做代码复审的,你加入我们团队后,能帮我们提高代码质量么,请具体说怎么提高? 检查是否符合代码规范,检查代码的重复率,检查是否代码具备其功能。
工具/社区 Software Tools (performance tool,version control,work item,TFS)你在各种开发平台(web,linux,PC,mobile,machine learning) 都使用过什么样的工具,自己写过什么工具来改进工作效率?给社区贡献过什么工具和代码? Github有分享代码么?你写的技术博客坚持了多久,读者最多的是哪一篇? vc6.0,vs2015,eclipse,微信web开发者工具、devC++等,代码有上传至git。大二开始有写博客。
团队协作 Work with others (协同工作,提供反馈,说服别人)请描述你在项目中如何说服同伴采用你提出的更好的解决方案,或者你如何听取了别人的意见,改进了自己的方案?你如何说服懒惰的同伴加紧工作,实现团队的目标? 我会列举出我提出的方案的好处,以及原有方案的劣处,别人的意见好仔细思考,真的有用要听取改进。同伴懒惰时,要以身作则,指出我们共同的目标,鼓励他。
理论素养 你上过什么数学,计算机或其他理论课,请举 出具体的例子,说明你学到的理论知识如何帮助你解决实际问题 高等数学、离散数学、线性代数、概率论、数字逻辑等,太多了,也想不起来具体帮助了我什么,但是我知道一定有用。
自我管理 全年级你专业排名多少?你从刚入学(大学一年级) 到现在的排名有变化么?如何解释你的排名的变化? 二十几吧,排名基本没大的什么变化,但是还是有所浮动。与掌握的知识技能有关,还与考试的状态有关?

二、回答问题

我们在课程开始之初,曾经要求大家针对软件工程提出问题:个人阅读作业2,那么在经过alpha阶段,大家是否对软件工程有了一定的了解?请结合自己提出的问题进行回答

Q1:初级软件工程师如何成长?什么是好的软件设计思想?什么是好的软件工程思想?

  • 软件工程师可以如此成长
    • 我认为,初级工程师之所以为“初级”,是因为本身能力有限,那么就需要打磨自己的专业,“较小的领域”更容易做出让人印象深刻的成绩,作为初级工程师,要在较小的领域精益求精。
    • 第二点是不懂就问,虚心求教。没有人一开始就什么都懂,都是一点一滴积累起来的知识。听来的学问一定要和实践结合,深刻理解并运用才算真正的掌握。
    • 第三,要能有效管理自己的工作,最好是有一套指标来衡量,越是有明确的指标,就越有能力推动研发的行为。
  • 好的软件设计思想

    软件设计是从软件需求规格说明书出发,根据需求分析阶段确定的功能设计软件系统的整体结构、划分功能模块、确定每个模块的实现算法以及编写具体的代码,形成软件的具体设计方案。

  好的软件设计思想是能够把上面提到的任务很好地完成并连接在一起,从一开始就必须想好怎么实施,将问题或事物分解并模块化使得解决问题变得容易。

  • 好的软件工程思想
    还是有四个要点:迭代开发、以系统架构为中心、持续的质量保证以及管理变更和资产。要做就要做一个有“生命力”的软件,不断修复bug,更新版本,注入新的活力软件才能存在得更久。

Q2:结对编程会出现的问题

  • 我认为结对编程的利弊还是因人而异了。结对的双方若是编程水平差太多,或者两人根本不熟悉也不了解对方的编程习惯,结对编程的作用很明显就会弊大于利了。当然在工作中一般不会出现水平相差太多的情况,毕竟能成为同事也是不容易的事呢。如果说为了长远的利益,结对编程是必要的,那么就有必要花些时间去磨合了,不管是以什么样的方式。
  • 反之,结对编程的好处就会多多了。就如书上提到的那样:

    在结对编程中,因为有随时的复审和交流,程序各方面的质量取决于一对程序员中各方面水平较高的那一位。这样,程序中的错误就会少得多,程序的初始质量会高很多,这样会省下很多以后修改、测试的时间。

Q3:在稳定和发布阶段,无关大局的缺陷非得马上解决吗?修正方案中又有缺陷怎么办?

  到了稳定和发布阶段,软件已经成型,bug一直都有,有的可以解决,有的目前无法解决,自己也经历过了敏捷开发,明白其实无关大局的缺陷不必马上解决,尤其是快要发布的时候,那时可能做不到修正缺陷后再发布,所以可以等到适合的时机再行修改。软件都会有迭代,一般来说,每次迭代,都会修复已发现的bug,或是新增其他的功能,对用户来说,最重要的是要有良好的体验,在不影响这一目标的情况下应当允许某些bug的暂时存在。前面也说了,bug总是会有,世上没有完美的东西,也不会有完美的软件,给你完美的感觉只是当下,只是浅层面的,后面迭代的至少都会比之前的版本好。

三、再提问题

同时,大家一定会在实践过程中产生更多问题, 结合你的读书(教材,博客,参考书), 实践, 再提出关于软件工程的 5 个问题。

Q1:书本P16提到很多人认为有Bug就是质量不合格,没有Bug就是质量完美,其实这也未必。

  我认为“Bug”也是因人而异的,对某些人来说是缺陷,对某些人来说这正是特点。就如书上举的例子,裤腿上有洞的牛仔裤,像是年轻人就认为这很fashion,没什么问题,而“老年人”就认为有洞是质量不好,应该拿去退换。汽车有那么多品牌,各有各的好,有些人注重性能,有些人在意外观,等等,在他们眼里“好”是不同方面的,而销售人员就需要针对不同需求的用户推销适合他们的产品,结果才是皆大欢喜,否则最后销量未必理想。

Q2:书本P79提到谁来做代码复审?即最有经验、熟悉这一部分代码的人。

  最有经验、熟悉这一部分代码的人难道不是开发者本身吗?复审者是在替开发者干开发者本应干的事情那么是否需要安排专门的人来做代码复审呢?

Q3:书本中第五章列举了很多团队模式:主治医师模式、明星模式、社区模式、业余剧团模式、秘密团队、特工团队、交响乐团模式等等。

  这么多模式,怎么清楚定位自己的团队是什么模式呢?而且我认为每个阶段的模式可能不一样。

Q4:书本P122提到敏捷对团队的要求和简单:自主管理(Self-managing)、自我组织(Self-organizing)、多功能型(Cross-functional)

  事实上我们大学生还不能算一个成熟的团队,敏捷开发对我们来说很困难,每个人毛病挺多,能力也不强,所以老师让我们敏捷冲刺,也只是在时间驱动下完成项目而已。或许老师只是让我们体验一下敏捷开发的流程,但是我们真的能有所感悟就好了。就如书上所说:

如果你的团队很弱,那么强行把敏捷(或者其他高级方法)套在上面也没有用,也许还会适得其反,往往需要经历多次失败/总结/改进的过程才能让Scrum走上正轨。

Q5:书本P281提到的“灰箱”是什么?我们该怎么选择白箱、黑箱、灰箱呢?

所谓白箱就是机制和结构完全明了的系统,如同电视机对电视发明制造者来说就是“白箱”。


所谓灰箱,就是相当部分的结构机制已经明了,但并没有完全明了的系统,如电视机对一个并不高明的修理者来说就是“灰箱”。


所谓黑箱就是结构机制完全不明了,仅仅知道输入输出信息之间某些简单关系的系统,如电视机对一个根本不懂电器的用户来说,他只知道打开钮就亮、闭掉钮就灭一样。

推荐阅读
  • 本文介绍了绕过WAF的XSS检测机制的方法,包括确定payload结构、测试和混淆。同时提出了一种构建XSS payload的方法,该payload与安全机制使用的正则表达式不匹配。通过清理用户输入、转义输出、使用文档对象模型(DOM)接收器和源、实施适当的跨域资源共享(CORS)策略和其他安全策略,可以有效阻止XSS漏洞。但是,WAF或自定义过滤器仍然被广泛使用来增加安全性。本文的方法可以绕过这种安全机制,构建与正则表达式不匹配的XSS payload。 ... [详细]
  • Webmin远程命令执行漏洞复现及防护方法
    本文介绍了Webmin远程命令执行漏洞CVE-2019-15107的漏洞详情和复现方法,同时提供了防护方法。漏洞存在于Webmin的找回密码页面中,攻击者无需权限即可注入命令并执行任意系统命令。文章还提供了相关参考链接和搭建靶场的步骤。此外,还指出了参考链接中的数据包不准确的问题,并解释了漏洞触发的条件。最后,给出了防护方法以避免受到该漏洞的攻击。 ... [详细]
  • 小程序自动授权和手动接入的方式及操作步骤
    本文介绍了小程序支持的两种接入方式:自动授权和手动接入,并详细说明了它们的操作步骤。同时还介绍了如何在两种方式之间切换,以及手动接入后如何下载代码包和提交审核。 ... [详细]
  • 背景应用安全领域,各类攻击长久以来都危害着互联网上的应用,在web应用安全风险中,各类注入、跨站等攻击仍然占据着较前的位置。WAF(Web应用防火墙)正是为防御和阻断这类攻击而存在 ... [详细]
  • android ... [详细]
  • Nginx使用AWStats日志分析的步骤及注意事项
    本文介绍了在Centos7操作系统上使用Nginx和AWStats进行日志分析的步骤和注意事项。通过AWStats可以统计网站的访问量、IP地址、操作系统、浏览器等信息,并提供精确到每月、每日、每小时的数据。在部署AWStats之前需要确认服务器上已经安装了Perl环境,并进行DNS解析。 ... [详细]
  • [译]技术公司十年经验的职场生涯回顾
    本文是一位在技术公司工作十年的职场人士对自己职业生涯的总结回顾。她的职业规划与众不同,令人深思又有趣。其中涉及到的内容有机器学习、创新创业以及引用了女性主义者在TED演讲中的部分讲义。文章表达了对职业生涯的愿望和希望,认为人类有能力不断改善自己。 ... [详细]
  • 如何在服务器主机上实现文件共享的方法和工具
    本文介绍了在服务器主机上实现文件共享的方法和工具,包括Linux主机和Windows主机的文件传输方式,Web运维和FTP/SFTP客户端运维两种方式,以及使用WinSCP工具将文件上传至Linux云服务器的操作方法。此外,还介绍了在迁移过程中需要安装迁移Agent并输入目的端服务器所在华为云的AK/SK,以及主机迁移服务会收集的源端服务器信息。 ... [详细]
  • 本文介绍了南邮ctf-web的writeup,包括签到题和md5 collision。在CTF比赛和渗透测试中,可以通过查看源代码、代码注释、页面隐藏元素、超链接和HTTP响应头部来寻找flag或提示信息。利用PHP弱类型,可以发现md5('QNKCDZO')='0e830400451993494058024219903391'和md5('240610708')='0e462097431906509019562988736854'。 ... [详细]
  • 本文介绍了响应式页面的概念和实现方式,包括针对不同终端制作特定页面和制作一个页面适应不同终端的显示。分析了两种实现方式的优缺点,提出了选择方案的建议。同时,对于响应式页面的需求和背景进行了讨论,解释了为什么需要响应式页面。 ... [详细]
  • 本文介绍了RxJava在Android开发中的广泛应用以及其在事件总线(Event Bus)实现中的使用方法。RxJava是一种基于观察者模式的异步java库,可以提高开发效率、降低维护成本。通过RxJava,开发者可以实现事件的异步处理和链式操作。对于已经具备RxJava基础的开发者来说,本文将详细介绍如何利用RxJava实现事件总线,并提供了使用建议。 ... [详细]
  • Java和JavaScript是什么关系?java跟javaScript都是编程语言,只是java跟javaScript没有什么太大关系,一个是脚本语言(前端语言),一个是面向对象 ... [详细]
  • 如何实现JDK版本的切换功能,解决开发环境冲突问题
    本文介绍了在开发过程中遇到JDK版本冲突的情况,以及如何通过修改环境变量实现JDK版本的切换功能,解决开发环境冲突的问题。通过合理的切换环境,可以更好地进行项目开发。同时,提醒读者注意不仅限于1.7和1.8版本的转换,还要适应不同项目和个人开发习惯的需求。 ... [详细]
  • 本文介绍了如何在Azure应用服务实例上获取.NetCore 3.0+的支持。作者分享了自己在将代码升级为使用.NET Core 3.0时遇到的问题,并提供了解决方法。文章还介绍了在部署过程中使用Kudu构建的方法,并指出了可能出现的错误。此外,还介绍了开发者应用服务计划和免费产品应用服务计划在不同地区的运行情况。最后,文章指出了当前的.NET SDK不支持目标为.NET Core 3.0的问题,并提供了解决方案。 ... [详细]
  • 如何压缩网站页面以减少页面加载时间
    本文介绍了影响网站打开时间的两个因素,即网页加载速度和网站页面大小。重点讲解了如何通过压缩网站页面来减少页面加载时间。具体包括图片压缩、Javascript压缩、CSS压缩和HTML压缩等方法,并推荐了相应的压缩工具。此外,还提到了一款Google Chrome插件——网页加载速度分析工具Speed Tracer。 ... [详细]
author-avatar
小丹巛丹布莱妮
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有