实验一 软件工程准备

项目 内容
软件工程 https://www.cnblogs.com/nwnu-daizh/
软件工程准备要求 https://www.cnblogs.com/nwnu-daizh/p/12369881.html
构建之法与博客首秀 使用Markdown排版以写博客形式来拟定3个准备从课程学习中找到答案的问题

问题一 软件工程是什么?

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

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

  • 方法:完成软件开发的各项任务的技术方法,回答“怎样做”的问题。
  • 工具:为运用方法而提供的自动的或半自动的软件工程支撑环境。
  • 过程:为了获得高质量的软件所需要完成的一系列任务的框架,它规定了完成各项任务的工作步骤。
    课件上的内容虽然专业,但语言不够通俗易懂,我又去阅读了邹欣老师的相关博客,其中有篇文章《现代软件工程讲义 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个准备从课程学习中找到答案的问题。我通过结合老师给出的课件和邹欣老师的相关博客,对这门课有了大概的构想并做出了三个想从课程学习中得到问题的答案。在这个过程中,最重要的是提出问题的过程,因为之前的学习太没做过这样的训练,我深刻感受到了这种提出问题能力的重要性。经过主动思考,并提出一个有深度的问题,这样的提问对培养思考能力会非常有价值,以后会按照这种思维去处理更多的问题。

201771010142-张燕 实验一 软件工程准备—<软件工程的初步了解和学习目标>的更多相关文章

  1. 201771010142 张燕《面向对象程序设计(java)》第一周学习总结

    201771010142 张燕<面向对象程序设计(java)>第一周学习总结 第一部分:课程准备部分 填写课程学习 平台注册账号, 平台名称 注册账号 博客园:www.cnblogs.co ...

  2. 201771010105—达拉草 实验一 软件工程准备—<软件工程构建之法—初步了解和认识>

    项目 内容 这个作业属于哪个课程 https://www.cnblogs.com/nwnu-daizh/ 这个作业的要求在哪里 https://www.cnblogs.com/nwnu-daizh/p ...

  3. 201771010113-李婷华 实验一 软件工程准备-<软件工程的相关了解>

    项目 内容 课程班级博客链接 https://edu.cnblogs.com/campus/xbsf/nwnu2020SE 这个作业要求链接 https://www.cnblogs.com/nwnu- ...

  4. 初窥软件工程 2020BUAA软件工程$\cdot$个人博客作业

    初窥软件工程 2020BUAA软件工程\(\cdot\)个人博客作业 目录 初窥软件工程 2020BUAA软件工程$\cdot$个人博客作业 一.作业要求简介 二.正文 (一) 快速看完整部教材,列出 ...

  5. 实验十四+杜娣+团队项目评审&课程学习总结

    项目 内容 这个作业属于哪个课程 https://www.cnblogs.com/nwnu-daizh/p/11093584.html 这个作业的要求在哪里 https://www.cnblogs.c ...

  6. 201771010142 张燕& 杨蓉庆 实验十一 集合

    实验十一   集合 实验时间 2018-11-8 一  理论知识 一般将数据结构分为两大类:线性数据结构和非线性数据结构.线性数据结构:线性表.栈.队列.串.数组和文件.非线性数据结构:树和图. 线性 ...

  7. 201771010142 张燕《面向对象程序设计(java)》第三周学习总结

    实验三 Java基本程序设计(2) 实验时间 2018-9-13 1.实验目的与要求 (1)进一步掌握Eclipse集成开发环境下java程序开发基本步骤: (2)熟悉PTA平台线上测试环境: (3) ...

  8. 201771010142 张燕 Java的基本程序设计结构第二周学习总结

    第三章 Java的基本程序设计结构 第一部分 理论知识学习部分 一 基本知识: 1.标识符:由字母.下划线,美元符号和数字组成,第一个符号不能为数字,可以用作类名.变量名.方法名.数组名和文件名等. ...

  9. 实验四:Linux系统C语言开发环境学习

    项目 内容 这个作业属于哪个课程 班级课程主页链接 这个作业的要求在哪里 作业要求 学号-姓名 17043133-木腾飞 作业学习要求 1.学习Linux系统中如何查看帮助文档:2.在Linux系统中 ...

随机推荐

  1. Melodic 使用URDF创建简单的机器人模型

    本人Linux版本:Ubuntu 18.04LTS ROS版本:Melodic URDF代码 <?xml version="1.0" ?> <robot name ...

  2. 吴裕雄 Bootstrap 前端框架开发——Bootstrap 表格:边框表格

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...

  3. java学习-初级入门-面向对象③-类与对象-类与对象的定义和使用1

    今天学习类与对象.先大致解释一下类与对象的含义. 对象:object 有物体这一概念,一切皆对象(物体),对象由静态的属性和动态的行为组成. 比如说水杯: 水杯的静态属性:材质,容量,质量,颜色 动态 ...

  4. HTTP和HTTPS的区别,SSL的握手过程

    超文本传输协议HTTP协议被用于在Web浏览器和网站服务器之间传递信息,HTTP协议以明文方式发送内容,不提供任何方式的数据加密,如果攻击者截取了Web浏览器和网站服务器之间的传输报文,就可以直接读懂 ...

  5. SPring整合Mybatis方式一

    Spring整合Mybatis 需要maven包: mysql-connector-java 5.1.47, mybatis 3.5.2, spring-webmvc 5.2.2.RELEASE, s ...

  6. JavaNIO第一话-Buffer

    Buffer是入门Java NIO的基础,本文希望通过一些形象的比喻来解释一下缓冲区的概念,帮助读者快速理解和记忆. 本文灵感来自于Bilibili博主v若水若水分享的尚硅谷Java视频_NIO视频教 ...

  7. spring事务代码实践

    事务一般是指数据库事务,是指作为一个程序执行单元执行的一系列操作,要么完全执行,要么完全不执行.事务就是判断以结果为导向的标准. 一.spring的特性(ACID) (1).原子性(atomicity ...

  8. Git如何修改一个过去的Commit

    假设我的git log 如下: commit 5511533dda6fee6982175fafca1f4bd5692e3d9c (HEAD -> trans, origin/trans) Aut ...

  9. HiBench成长笔记——(9) 分析源码monitor.py

    monitor.py 是主监控程序,将监控数据写入日志,并统计监控数据生成HTML统计展示页面: #!/usr/bin/env python2 # Licensed to the Apache Sof ...

  10. Python测试进阶——(4)Python程序监控、存储、分析并可视化CPU和内存利用率

    monitor190617.py 监控cpu和内存利用率信息,组织成json格式,并写入到 record.txt 文件中: import psutil import time import json ...