李佩杉

导航

201771030109-李佩杉 实验一 软件工程准备—对《构建之法——现代软件工程》的思考

实验一 软件工程准备—对《构建之法——现代软件工程》的思考

项目 内容
这个作业属于哪个课程 https://www.cnblogs.com/nwnu-daizh/
这个作业的要求在哪里 https://www.cnblogs.com/nwnu-daizh/p/12369881.html
作业学习目标 (1)学习博客园软件开发者学习社区使用技巧和经验;
(2)了解Github的基本操作;
(3)如何提出有深度的问题。
作业参考文献 邹欣.构建之法——现代软件工程:现代软件工程[M].人民邮电出版社,2014

任务5:

问题一:通过阅读了邹欣老师博客中的《结对编程和两人合作》中,提出结对编程存在驾驶员和领航员的身份,但是当团队人数教多时,是否也存在一定的分工方案能使团队能够高效率的工作?

个人理解:我认为当人数较少的队伍,容易管理,但是在面对大型软件开发时不免会产生因人数太少,软件功能需求较大,导致工程的交付时间会有所拖延;但是,如果人数过于庞大,虽然可能会解决时间的问题,但是也会出现管理的不便,甚至于内部出现矛盾等不可控因素的出现......

我查到[资料](https://www.construx.com/blog/productivity-variations-among-software-developers-and-teams-the-origin-of-10x/)显示:曾经在20世纪60年代末期(1968),Sackman, Erikson和Grant研究发现个人的编程生产力有巨大差异。他们研究了平均有7年经验的程序员,最好与最差的程序员在初部编程时间的比例是 20:1;debug 时间的比例超过 25:1 ;程序大小比例是 5:1;程序执行时间是 10:1;他们发现程序员的经验与代码质量、生产力之间没有任何联系。

Harlan Mills的提供了一个崭新的、创造性的解决方案——“外科手术队伍”,该方案建议大型项目的每一个部分由一个团队解决,但是该队伍以类似外科手术的方式组建,而并非一拥而上。

  • 外科医生。首席程序员,此角色需要极高的天分、十年的经验和应用数学、业务数据处理或其他方面的大量系统知识和应用知识。
  • 副手。外科医生的副手,能完成任何一部分工作,但相对具有较少的工作经验。
  • 管理员。外科医生是老板,他可以在人员、薪酬、办公空间具有完全的决定权,但它绝对不能在这些方面浪费时间,所以需要管理员来帮助解决这些问题。
  • 编辑。外科医生负责文档的生成,处于最大透明度考虑,需要大量的文档,这些文档都需要编辑来完成。
  • 两个文秘。
  • 程序职员。他负责编程产品库中所有团队的技术记录。
  • 工具维护人员。负责保障团队能高效的利用工具工作。
  • 测试人员。协助外科医生进行相关测试用例的操作。
  • 语言专家。负责精通编程语言,提供有用的咨询。
    除此之外还存在明星模式、社区模式、业余剧团模式、秘密团队、特工团队、交响乐团模式、爵士乐模式、功能团队模式、官僚模式等。

问题二:在周二的课程中,老师对于软件工程的介绍让我对于本门课将要学习的知识与上学期开设的工程经济所学有点混淆,我认为工程经济也是对于整个软件开发过程的介绍,工程经济也是针对开发,维护过程的介绍,所以我对于本门课的具体学习的内容有些不清晰。

解决方案:老师上节课的ppt,大概浏览《软件工程导论(第六版)》,《构建之法》的第一章,《工程经济》以及网上查阅资料。

工程经济:
工程经济学是工程与经济的交叉学科,是研究工程技术实践活动经济效果的学科。即以工程项目为主体,以技术一经济系统为核心,研究如何有效利用资源,提高经济效益的学科。工程经济学研究各种工程技术方案的经济效益,研究各种技术在使用过程中如何以最小的投入获得预期产出或者说如何以等量的投入获得最大产出;如何用最低的寿命周期成本实现产品、作业以及服务的必要功能。

软件工程:
软件工程是指导计算机软件开发和维护的一门工程学科。采用工程的概念、原理、技术和方法来开发与维护软件,把经过时间考验而证明正确的管理技术和当前能够得到的最好的技术方法结合起来,以经济地开发出高质量的软件并有效地维护它,这就是软件工程。

除此之外,我还了解了一些关于软件工程的其他相关内容:
软件工程的核心部分是构建管理,源代码管理,软件设计, 软件测试,项目管理。

软件工程过程应该具备以下三种特点:

  • 明确的工作步骤。
  • 详细具体的规范化文档。
  • 明确的质量评价标准。


软件工程的七条基本原理:

  • 用分阶段的生命周期计划严格管理
  • 坚持进行阶段评审
  • 实行严格的产品控制
  • 采用现代程序设计技术
  • 结果应能清楚地审查
  • 开发小组的人员应该少而精
  • 承认不断改进软件工程实践的必要性

问题三:在邹欣老师的《构建之法》的第三章第三节软件工程师的职业发展中提出了精和专的关系和“全栈”,那么我们怎么处理学习的深度和广度呢?

个人理解:我认为的“全栈”应该是对于各种问题应该都存在解决的能力,但是,在时间、精力有限的情况下,要同时做到深度和广度是一件很困难的事情,如果追求广度,那么或许涉及的范围较多,但是对自己所学的内容没有一个明确定位;如果追求深度,在当今社会上,一个人应该是全面发展的,如果只在一个知识上过于探究,其他方面却不怎么了解,势必会影响后续学习的内容。

在邹欣老师的书中举了一个关于作曲家的例子,给出了“全栈工程师”究竟是“交响乐作曲家写各个乐器的乐谱”还是“演奏家满场奔走,操作各种乐器”的疑问,随后给出了“全栈”的表现,即当一个运维工程师在维护一套系统的时候,运维团队要了解各个模块的作用、维护知识以及和硬件、商业模式相关的各种事件的需求。如果这大部分运维工作都是由一个运维工程师来完成,那么这位工程师的确是“全栈”。这就要求了该工程师的学习广度。 知识深度创造价值 ,知识深度一定是属于某一个专业的领域。 知识广度创造机会,广度一方面来源于知识的深度。 ![](https://img2018.cnblogs.com/blog/1946330/202002/1946330-20200228213336921-1507666450.jpg) 针对自己的期望选择深度或者广度,如果是以致用或者叫以解决自身问题与困惑为中心的学习,在这类学习模式下学习者首先是具备独立思考能力的。只需在当前遇到问题的情况下解决当前问题即可;如果是以知识为中心的学习模式,这种模式下,学习一定要强调知识体系、知识结构、知识的完整性,那么对于学习的广度和深度都有一定的要求。

###实验总结: 通过《实验一 软件工程准备》我注册好了博客园以及Github,同时也对于Github有了一定的了解,也通过老师提供的网址、视频对于Github中的一些操作和概念有了一定的理解。通过任务五我学会了一些关于学习中的提问方法,怎么能让老师迅速理解你所提问的内容,同时让自己对于问题有一个探究的过程。对于MarkDown排版也有了具体的实践。更重要的是,通过本次实验我对于软件工程这门课有了一个新的定位,也了解到了自己思考、查询资料的重要。

posted on 2020-03-01 11:27  李佩杉  阅读(245)  评论(4编辑  收藏  举报