zoukankan      html  css  js  c++  java
  • 201771010142-张燕 实验一 软件工程准备—<软件工程的初步了解和学习目标>

    实验一 软件工程准备

    项目 内容
    课程班级博客 https://edu.cnblogs.com/campus/xbsf/nwnu2020SE
    作业要求 https://www.cnblogs.com/nwnu-daizh/p/12369881.html
    课程学习目标 使用Markdown排版以写博客形式来拟定3个准备从课程学习中找到答案的问题
    这个作业在哪些方面帮助我实现学习目标 自主提出问题并解答困惑的能力
    作业正文 ①学习博客园软件开发者学习社区使用技巧和经验;②了解Github的基本操作
    参考文献 ①邹欣. 构建之法—现代软件工程[M]. 人民邮电出版社, 2014.②邹欣老师博客

    问题一 软件工程是什么?

    问 题 :在开始学习软件工程这门课之前,我最想了解的是软件工程这门课的性质,以及我们学这门这门课的用处和意义是什么?

    解决方案:我先通过学习老师给出的课件,对软件工程的本质特性及其基本原理有了基本的了解,软件工程包括技术和管理两方面的内容,是技术与管理紧密结合所形成的工程学科和交叉学科。同时,我还学习了软件工程方法学的三要素是方法,工具和过程。简要总结三要素的基本解释如下:

    • 方法:完成软件开发的各项任务的技术方法,回答“怎样做”的问题。
    • 工具:为运用方法而提供的自动的或半自动的软件工程支撑环境。
    • 过程:为了获得高质量的软件所需要完成的一系列任务的框架,它规定了完成各项任务的工作步骤。
      课件上的内容虽然专业,但语言不够通俗易懂,我又去阅读了邹欣老师的相关博客,其中有篇文章《现代软件工程讲义 1 软件工程概论》,下面这段话对软件工程的核心部分做了详细的解释

    程序,在这里指的是源程序,就是一行一行的代码。仔细看过去,它们的确是建立在数据结构上的一些算法。但是光有代码还是不行的,这些一行一行的代码不会自己运行,得有人编译成机器能懂的目标代码,而编译不仅仅是 cc 和 link 命令,对于一个复杂的软件,我们不但要有合理的软件架构(Software Architecture), 软件设计和实现 (Software Design & Implementation), 我们还要用各种文件来描述各个程序文件之间的依赖关系,编译参数,链接参数,等等。这些都是软件的构建。
    软件团队的各个人员每天都在不断地修改各种源代码,怎么保证软件在不断的修改中能保证质量,不至于崩溃? 有些时候,我们要为某个需求写一些特殊功能,然后不久要把这些功能再合并回主要版本。有些程序还有32 位版本, 64位版本, 等等。 这是源代码管理 (Source Code Control) 的问题 – 有时候也叫配置管理 (Software Configuration Management)。我们还有一系列的工具和程序来保证程序的正确性,这些工具和程序本身应该更正确,才能保证别的软件的质量,对么? 这质量保证的工作叫Quality Assurance, 也叫软件测试 (Testing).
    一个软件要有人买,就得先找到顾客,顾客有各种需求,有些靠谱,有些不靠谱,我们要把这些靠谱的需求都实现了,一群人要从需求分析 (Requirement Analysis) 开始,忙碌各种事情, 例如设计(软件架构),实现(写数据结构和算法),测试,到最后发布软件, 软件在运行过程中还会出这样那样的问题, 也许我们要时不时给软件打一个补丁, 这叫软件的维护(Software Maintenance)。这一系列过程就是软件的生命周期 (Software Life Cycle, SLC), 有人得负责软件项目的管理 (Software Project Management)。

    上面的这些和软件开发活动(构建管理源代码管理软件设计, 软件测试项目管理)是软件工程的核心部分。广泛意义上的软件工程也包用户体验 (User Experience), 用户界面设计 (User Interface Design) 等。所以,我觉得可以理解为:软件 = 程序 + 软件工程
    一个扩展的理论是:软件企业 = 软件 + 商业模式
    此外,我想知道我们之前所学的计算机类课程和软件工程课的不同在哪 ,托尼·霍尔关于计算机工程和软件工程的不同侧重点分析解答了我这一疑惑,如下图所示:

    问题二 软件工程学习方法

    问题:现在已经步入大三第二学期的学习,总结之前两年半的学习,虽然学习了很多的专业课和实验课,好像编程能力并没有太大的提升。尽管有学过c语言和Java两门编程语言,但只是了解了基本的算法和数据结构。尤其是之前的很多课程设计要求做软件时,不知从何下手,也不知道怎么把学到的书面知识运用进去,只能参照别人的模板阅读代码做出修改。所以,针对本学期的软件工程这门课,很想提升自己相应的代码编写及应用能力。

    解决方案:因此,我去阅读了邹欣老师的相关文章,想了解这门课正确的学习方法和侧重点,内心有个基本的框架和认知。

    其中,有篇文章《对大学 IT 专业教育的反馈》, 讲到了为什么,学生上了很多课,反而觉得很迷茫,这些课的意义是什么? 为什么有这么多的原理,却不知道我学的东西有什么用,怎么用。更不了解这些课程在实践中的意义。我们大多都是通过只有死记硬背来应付考试,考试后全忘记。IT 教育不光是代码! 软件教育不是孤立体,希望在软件教育中把文科的知识联系进来,和设计联系起来; 把软件/IT 行业有趣的发展历史放进来。培养学生对这个行业的兴趣、热情和敏感。 提倡互动,介绍同学上相关的论坛,网站,开拓视野。
    其中有个关于软件工程设计的三文鱼模型,针对学校教育安排和企业要求的不同,为提高学生的综合能力提出的关于软件工程授课的方法流程:

    • 开始维护以前同学开发出来的程序,理解程序。
    • 找bug,改bug,重构小部分代码,以满足用户的需求。
    • 一部分同学可以开发测试用例
    • 在现有版本的基础上做增量开发
      • a) 理解需求 (这个时候理解了客户需求是什么)
      • b) 设计
      • c) 开发
      • d) 回归测试 (用到上面开发的测试用例来保证软件质量)

    问题三 关于团队项目分工问题的疑问

    问题:上了大学之后,最深刻的感受就是除了要提高实践能力之外,必不可少的还有对团队协作能力的考核和提升。基本所有课的课程设计都是通过分组的形式去完成,老师的想法是通过分组的方法可以提升我们的团队协作能力并且可以提升项目的质量。但就我自己而言,这方面的能力并未得到太大的提升其中主要存在两方面的问题。

    • ①不知道该如何协调分工合作的问题,即分工合作的不明确。

    • ②在协作的过程中,总会出现较多的问题和矛盾,不知道该怎样去协调处理。即团队成员之间不可避免的矛盾冲突。

    解决方案:我希望可以在这门课的学习中,可以对团队项目分工问题得到相应的解决,能够在以后的项目设计中对大概的框架和每一步的计划都有较为合理并明确的计划分工。因此,我去学习参考了邹欣老师的博客,希望从中找到对自己这个疑惑的解答。其中有篇文章《现代软件工程讲义 11 项目管理 - 事后诸葛亮会议》,有一个现代软件工程 项目Postmortem 模板详细的介绍了软件设计中分工合作的内容,如下所示:

    设想和目标

    • 我们的软件要解决什么问题?是否定义得很清楚?是否对典型用户和典型场景有清晰的描述?
    • 我们达到目标了么(原计划的功能做到了几个? 按照原计划交付时间交付了么? 原计划达到的用户数量达到了么?)
    • 和上一个阶段相比,团队软件工程的质量提高了么? 在什么地方有提高,具体提高了多少,如何衡量的?
    • 用户量, 用户对重要功能的接受程度和我们事先的预想一致么? 我们离目标更近了么?

    团队的角色,管理,合作

    • 团队的每个角色是如何确定的,是不是人尽其才?
    • 团队成员之间有互相帮助么?
    • 当出现项目管理、合作方面的问题时,团队成员如何解决问题?
    • 有什么经验教训? 如果历史重来一遍, 我们会做什么改进?

    这些问题对我有很大的帮助,尤其是设想和目标解答了我对项目初期如何合理地制定计划的困惑,首先一定要从软件本身出发,对要解决的问题,需求,目标等做深入的分析讨论。我仔细对比思考了之前分工合作时存在的问题,所暴露出来的分工合作的不明确以及不可避免的冲突矛盾这两类问题。我个人觉得,最后产生的冲突矛盾很大一部分是因为前期分工合作存在一定的不合理,因此我认为在项目制定初期,具体的任务分配要考虑到每个成员的可能性和优势,做到人尽其才,得到一个较为合理的安排。此外,在项目推动的过程中,最重要的是沟通交流,一旦出现问题要及时的和团队成员反馈,虚心接受意见并做出改变,团队成员之间还要能够互帮互助,尽力去推动项目的完成。希望在以后进行设计的时候,能够把这些想法都落实,逐渐提升团队协作方面的能力。

    总结

    这是软件工程这门课的第一个实验,首先进行了博客园班级加入,github的注册及基本功能的了解这些基本的准备。此外,之前虽然有博客园的使用经验,但Markdown写博客是第一次实践,通过结合老师给的基本功能的介绍和实践,对Markdown写博客这个方法已经有了更多的使用经验,体会到了Markdown工具带来的便利和页面美观性的提升。
    此次实验最重要的就是浏览邹欣老师博客,参照参考文章的提问模板,拟定了3个准备从课程学习中找到答案的问题。我通过结合老师给出的课件和邹欣老师的相关博客,对这门课有了大概的构想并做出了三个想从课程学习中得到问题的答案。在这个过程中,最重要的是提出问题的过程,因为之前的学习太没做过这样的训练,我深刻感受到了这种提出问题能力的重要性。通过自主思考解答困惑是一个逐渐进步的过程,随着不断提出新的问题,经过主动思考之后,能够解答自己的困惑,这样的提问对培养思考能力会非常有价值,以后会按照这种思维去处理更多的问题。

  • 相关阅读:
    LinkedList的实现源码分析
    ArrayList实现源码分析
    探索HashMap实现原理及其在jdk8数据结构的改进
    Maven的安装使用以及 Maven+Spring hello world example
    RedisHelper帮助类
    Stream 和 byte[] 之间的转换
    WCF For Silverlight跨域策略
    Linq Query常见错误
    Linq to Sharepoint--如何获取Linq Query 生成的CALM
    如何使用代码备份SQL Server数据库
  • 原文地址:https://www.cnblogs.com/zyan---/p/12374368.html
Copyright © 2011-2022 走看看