201771010142-张燕 实验一 软件工程准备—<软件工程的初步了解和学习目标>
实验一 软件工程准备
项目 | 内容 |
软件工程 | 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-张燕 实验一 软件工程准备—<软件工程的初步了解和学习目标>的更多相关文章
- 201771010142 张燕《面向对象程序设计(java)》第一周学习总结
201771010142 张燕<面向对象程序设计(java)>第一周学习总结 第一部分:课程准备部分 填写课程学习 平台注册账号, 平台名称 注册账号 博客园:www.cnblogs.co ...
- 201771010105—达拉草 实验一 软件工程准备—<软件工程构建之法—初步了解和认识>
项目 内容 这个作业属于哪个课程 https://www.cnblogs.com/nwnu-daizh/ 这个作业的要求在哪里 https://www.cnblogs.com/nwnu-daizh/p ...
- 201771010113-李婷华 实验一 软件工程准备-<软件工程的相关了解>
项目 内容 课程班级博客链接 https://edu.cnblogs.com/campus/xbsf/nwnu2020SE 这个作业要求链接 https://www.cnblogs.com/nwnu- ...
- 初窥软件工程 2020BUAA软件工程$\cdot$个人博客作业
初窥软件工程 2020BUAA软件工程\(\cdot\)个人博客作业 目录 初窥软件工程 2020BUAA软件工程$\cdot$个人博客作业 一.作业要求简介 二.正文 (一) 快速看完整部教材,列出 ...
- 实验十四+杜娣+团队项目评审&课程学习总结
项目 内容 这个作业属于哪个课程 https://www.cnblogs.com/nwnu-daizh/p/11093584.html 这个作业的要求在哪里 https://www.cnblogs.c ...
- 201771010142 张燕& 杨蓉庆 实验十一 集合
实验十一 集合 实验时间 2018-11-8 一 理论知识 一般将数据结构分为两大类:线性数据结构和非线性数据结构.线性数据结构:线性表.栈.队列.串.数组和文件.非线性数据结构:树和图. 线性 ...
- 201771010142 张燕《面向对象程序设计(java)》第三周学习总结
实验三 Java基本程序设计(2) 实验时间 2018-9-13 1.实验目的与要求 (1)进一步掌握Eclipse集成开发环境下java程序开发基本步骤: (2)熟悉PTA平台线上测试环境: (3) ...
- 201771010142 张燕 Java的基本程序设计结构第二周学习总结
第三章 Java的基本程序设计结构 第一部分 理论知识学习部分 一 基本知识: 1.标识符:由字母.下划线,美元符号和数字组成,第一个符号不能为数字,可以用作类名.变量名.方法名.数组名和文件名等. ...
- 实验四:Linux系统C语言开发环境学习
项目 内容 这个作业属于哪个课程 班级课程主页链接 这个作业的要求在哪里 作业要求 学号-姓名 17043133-木腾飞 作业学习要求 1.学习Linux系统中如何查看帮助文档:2.在Linux系统中 ...
随机推荐
- antd组件实现上传证书
- BurpSuite 1.7.32 Cracked 破解版[注册机]下载【无后门版】
首先看一下我的注册后的: 注册机的使用也很简单,首先打开burp-loader-keygen.jar文件,然后随便填写license text,比如我填写的是:mrxn.net效果如下图: 然后点击m ...
- MongoDB in 数量限制
1.查询语句本身其实是一个document, 最大为16MB(3.4,4.0 的限制,官方文档)2.查询语句本身,也就是{ '' : { '$in' : [] }}, 大小为 22字节3.每增加一个字 ...
- Jquery设置完颜色后hover不生效的解决办法
执行完代码后发现写在样式表中的hover效果失效,改了好几遍差点重新写函数,后来发现很简单,是优先级的问题,css()中的内容覆盖了之前的样式 只需要在样式后写!important即可解决! .fil ...
- C语言数组成绩排序
#include<stdio.h> #define N 10 int main() { int s,i,j,tmp; int a[10]={78,56,38,99,81,86,39,100 ...
- vim修改缩进问题
- Arch-base-vs-iso
Arch-base-vs-iso 通常绝大多数的Linux分发版的iso镜像本身(*.iso文件都有约2Gb上下)都可以直接启动电脑并运行完整的Linux桌面系统. 极少数的Linux发行版仅提供命令 ...
- CRC校验算法详解
CRC(Cyclic Redundancy Check)循环冗余校验是常用的数据校验方法,讲CRC算法的文章很多,之所以还要写这篇,是想换一个方法介绍CRC算法,希望能让大家更容易理解CRC算法. 先 ...
- Java日志相关概述
日志是代码调试.生产运维必备工具,基本所有软件都会有日志记录. 1.常用日志框架介绍 1.Logging jdk1.5自带日志工具类,位于java.util.logging; 2.Log4j 市场占有 ...
- 042、Java中逻辑运算之短路或运算“||”
01.代码如下: package TIANPAN; /** * 此处为文档注释 * * @author 田攀 微信382477247 */ public class TestDemo { public ...