软件工程第一次作业

 

  • 1.花20分钟写一个能自动生成小学四则运算题目的“软件”,要求:除了整数以外,还要支持真分数的四则运算。将代码上传至coding.net,并将地址发布至自己的博客。
  • https://coding.net/unsupport-browser.html
  • 2.在一周之内快速看完《构建之法》,列出你不懂的5-10个问题,发布在自己的博客。
  • 要求:① 在每个问题后面,请说明哪一章节的什么内容引起了你的提问,提供一些上下文
        ② 列出一些事例或资料,支持你的提问 。
        ③ 说说你提问题的原因,你说因为自己的假设和书中的不同而提问,还是不懂书中的术语,还是对推理过程有疑问,还是书中的描述和你的经验(直接经验或间接经验)矛盾?
        一个模板可以是这样: 
    我看了这一段文字 (引用文字),有这个问题 (提出问题)。 我查了资料,有这些说法(引用说法),根据我的实践,我得到这些经验(描述自己的经验)。 但是我还是不太懂,我的困惑是(说明困惑)。 
    【或者】我反对作者的观点(提出作者的观点,自己的观点,以及理由)。 
  • (1)我看了这一段文字 (软件工程的目标—创造足够好的软件,所谓好软件,就是软件没有缺陷,所谓软件工程就是把软件中的bug都消灭掉的过程),有这个问题 (当想做的项目规模很大时基本上不可能做到没有bug,并且作为一个初学者总会忽略很多,所以我们如何才能把握好这个度?)。 我查了资料,有这些说法(满足用户的需求;合理进度、成本、功能关系;具备扩展性和灵活性,能够适应一定程度的需求变化;能够有效的处理例外的情况;保持成本和性能的平衡),根据我的实践,我得到这些经验(我们应该尽可能的减少bug,bug的多少直接衡量一个软件的开发效率,用户满意度,可靠性和可维护性)。 但是我还是不太懂,我的困惑是(如何能够客观,合理的去评判一个软件的质量?)。
  • (2)我看了书上两人合作的不同阶段和技巧,对书中描述的5个阶段:萌芽,磨合,规范,创造,解体阶段有了一定的了解,但是4.6.2小节—如何正确地给予反馈,作者将反馈分为最外层(行为和后果)、中间层(习惯和动机)和最内层(本质和固有属性),不同层次的反馈给人不同的感受。如果将反馈上升到最内层,说不定两人合作将从磨合阶段直接到解体阶段...由于自己只是初学,并且没有太多的经验,所以对这三个层次我还是存在困惑,在工作中或学习中,我们如何才能对同伴选择正确的层次进行反馈。
  • (3)我看了 (第二章《个人技术和流程》,本章的实质是在说明,一个合格的软件工程师是怎样的,他应该具备哪些技能。读完本章,一个合格的工程师在开发时需要同时考虑质量和效率,与之同时需要具备的技能包括:单元测试、效能分析、个人研发流程)),有这个问题 (软件是需要单元测试的,之前对这个没什么概念,而且单元测试要跟软件更新同步,单元测试要覆盖所有代码路径,如何才能实现单元测试,减少隐患?)。  我查了资料,有这些说法(

    1 单元测试应该在最低的功能/参数上验证程序的正确性

    2 单元测试必须由最熟悉代码的人(作者)来写

    3 单元测试过后,机器状态保持不变

    4 单元测试要快(一个测试用例的运行时间是几秒钟)

    5 独立性—测试的运行/通过/失败不依赖于别的测试

    6 覆盖所有代码路径

    7 单元测试应该集成到自动化测试的框架中

    8 单元测试必须和产品代码一起保存和维护

    ), 但是我还是不太懂,我的困惑是(我们应该如何才能实现一个有效的单元测试)。
  • (4)在阅读第5章《团队和流程》中,我了解到了各种的团队合作模式,但是在开发流程这一块,对于瀑布模型以及其的各种变形的认知感觉有一定的难度,我学到了要完成一个复杂的软件项目,团队的各种成员要在不同的阶段做不同的事情,主要有:业务建模,需求,分析和设计,实现,测试,部署,配置和变更管理,项目管理以及环境等各个阶段。但是我还是感到困惑,在一个团队项目中,工作量如何分配?对此,我查找了资料,但仍然是一头雾水,对于我们目前组成的团队,在我们小组分工的时候完全把握不到这个度,甚至都不清楚都需要做什么工作,个人能力的认知上可能也有缺陷,所以我想知道怎样才能合理分工,组成一个有效的项目团队。
  • (5)我看了这一段文字 (第6章 敏捷开发,知道了,敏捷开发是一种以人为核心、迭代、循序渐进的开发方法。在敏捷开发中,软件项目的构建被切分成多个子项目,各个子项目的成果都经过测试,具备集成和可运行的特征。但是在6-2 敏捷流程的问题和解法中第一步:各个需求和任务之间是有种种复杂的依赖关系,除了优先级之外,我们还要考虑相互的依赖关系),有这个问题 (怎样在计划中体现依赖关系呢?)。 我查了资料,有这些说法(每天跟踪三个时间值:实际剩余时间,预估剩余时间,实际花费时间。这样才能在实践中脱颖而出。一个敏捷的团队要怎么衡量,包括下面的条件:1.自主管理。2.自我组织。3.多功能型。但是一个团队只有在团队很强的基础上才能转变为敏捷团队。),根据我的实践,我得到这些经验(在开发的过程中,我们会遇到很多问题,所以我们要不断地进行自我总结。首先要学会把一个任务从产品层级的描述逐步细化到技术实现层面,是很需要技术能力和交流能力的,我们要在实践中学会根据我们每个人的能力分配给每个人不同的任务以保证能够取得更高的效率;其次是每时每刻确定好自己的任务,一个坚定的目标,犹如一盏指路明灯,有了它,才能顺利地完成每一项任务;最后,是一项长期任务,更是一个冲刺阶段,在这个时候,我们要不断地修复软件中的bug,学会如何测试,是检验一个程序员是否优秀的唯一标准,在这个过程中,我们可以不断完善自己的程序,改进原来的计划,从而制作出更好的软件。)。 但是我还是不太懂,我的困惑是(看了很多的方法以及理论知识,我们到底应该在遇到什么情况时才是适合敏捷开发的)。 
  • 3.软件有很多种:包装在盒子里的软件、基于网页的软件、企业或学校或某组织内部的软件、游戏、手机应用、操作系统、工具软件,选取三种软件,请分析它们各自的特点。
  • 1)这些软件开发者是怎么说服你(陌生人)成为他们的用户的?他们的目标都是盈利么?他们的目标都是赚取用户现金么么?还是别的?
  • 2)这些软件是如何到你手里的(邮购,下载,互相拷贝)
  • 3)这些软件是如何处理Bug的?又是如何更新新的版本的?
  • 4) 同一类型的软件之间是如何竞争的?
  • 软件一:网易有道词典
  • (1)是在经朋友介绍开始使用的,感觉很方便,他们的目标是盈利,有道的做法是,选择在国内外有成功经验的范例作为模仿对象,从市场规模还没被做大的词典和笔记入手,明晰自己的用户群体——学生、白领等中端知识层级人群。在保证较好的用户体验的前提下,借助网易自身的推广平台,将产品逐级做大。最后,再试着赚钱,他们的目标是为了通过网上来赚取用户现金。
  • (2)我是在手机商场里面下载的。
  • (3)通过追踪管理,发现bug然后及时反馈,修复bug并进行更新维护。
  • (4)通过广告以及新闻来吸引用户的注意,扩大用户的范围。
  • 软件二:photoshop
  • (1)是在上课的时候第一次接触,感觉很有用,对自己的专业也是有帮助,自我感觉它的目标应该不是盈利,是一种帮助增加学习技巧的软件,可以掌握一种技巧。
  • (2)我是在上课时老师提供的安装包进行下载安装的。
  • (3)在开发新功能时测试人员测试软件,经用户使用后将发现的bug及时反馈,软件开发人员去修复bug。
  • (4)通过完善本身具有的功能以及开辟更多的技巧来吸引更多的人关注。
  • 软件三:手机淘宝
  • (1)是在进入大学之后感觉自我需要,然后自己进行安装的,它的目标是盈利,就是为了购物而设的一款软件,但它并不是以赚取用户的现金,而是通过网银来进行网上支付,它的盈利模式主要来自两大块:广告收入和增值服务费收入。
  • (2)我是在手机商场里面下载的。
  • (3)系统维护人员会定期的进行修复软件,是否存在bug以及哪些方面不够完善,然后再结合用户的意见,进行升级维护。
  • (4)有时会举行各种的促销来博得用户的眼球,从而让更多的用户接受它,对它感兴趣。
  • 4.列举你在使用上述软件时观察到的“特殊”现象,它们和硬件有什么不同?这些能说明软件的某些本质特性么?
  •  软件有很多的广告,需要花时间寻找进入软件的方式,只能以视觉来进行感知。而硬件是可以摸得着的物理部件或设备,更具有真实性。软件大多存在人们的脑袋里,它的正确与否,是好是坏,一直要到程序在机器上运行才能知道。这就给设计、生产和管理带来许多困难。同时这也说明了软件的不可见性,复杂性以及一致性。

 

你可能感兴趣的:(软件工程第一次作业)