final个人阅读作业

一、软件工程M1/M2总结


 

1、M1阶段总结:

  我们团队的软件工程开发是按照前后端来分别开发的,我是负责后端的。我们的项目是做一个北航的社团平台,是一个网站。在后端我们使用的是ruby on rails。一开始对于ruby是没有什么经验的,因为之前没有过什么接触,之前只是接触过Python。刚开始的时候,我有去图书馆借书,不过后来发现书中的内容已经有些旧了,稍微有点过时了。后来在网上找了一些教程,以及一个叫做《Web开发敏捷之道_应用Rails进行敏捷Web开发》的PDF,然后才慢慢开始熟悉。我比较喜欢从整体去了解,然后再开始关注细节,所以在M1阶段我的开发进度是比较慢的,之前一直在学习整个工程构建,然后各个层次之间的关系等。之后就对于rails的体系有了一定的理解,然后才效率高了起来。在M1我们的进度总体上是很顺利的,没有遇到什么大的问题,整体项目的进程和我们的预想和安排基本一致。在第一轮,我们的整体项目是按照API文档来实现的,项目PM先拿出了一份简版的API文档设计,然后后端和前端分别按照API文档的设计开始实现。然后在我们都熟悉了这样的开发模式以后,设计API文档的工作就交给了后端补充,在一轮,我记得我大概是实现了设计到用户状态信息验证的部分API,以及活动名单等API的实现。总体而言,在一轮的收获,我觉得主要是这些吧:首先,单单从技术上来说,我学习并了解了ruby语言和rails,了解了什么是BS架构程序,什么是web开发。另外,我觉得我对于软件工程的敏捷开发有了一点点的理解吧,因为rails很方便地提供了一种敏捷开发的方式。不过我们的开发实际上不能完全算是敏捷开发,就是不能说我们是完全做到随时跟随需求改变程序然后就很快拿出来demo那种,我们的开发和敏捷开发是有一定区别的。不过对于rails的理解,对于我对敏捷开发的理解有许多帮助。

 

2、M2阶段总结:

       在M2阶段,可能所有人都会提到就是任务量时间的安排吧。我当然也不例外...因为在M2阶段,说实话真的和M1比起来,学习到的知识上的东西并不是很多,主要的都是在学习如何应对各种各样的压力,各种各样的事情接踵而来,如何在这些事情权衡。对于软工来说,我觉得就是学习了如何在各种事情打断,对于你的节奏不连贯的情况下,调整自己的节奏来面对这种随时会被打断的情况。在M2的开始时候,我实际上是有转过去前端来帮忙,我自己也是希望能够学习了解更多的知识。在第一轮的时候我们就发现实际上前端压力远比后端大,所以第二轮的时候我们是认为应该对于前端更重视的,所以当时我们的设想就是从后端拿一个人去前端。然后刚好我有想学习前端的想法,我就转去前端了。在M2开发阶段,我们的第一周是用来学习第二轮用到的各种新的东西的。在我们最开始的设计中,M2开发中,前端会学习使用Vue.js和React的,后端是需要学习一下learncloud,还有对于rails服务器的模式的调整。然后我在这一周的时间是需要去了解前端开发的基本知识的,当时我一直在看html5,css等,当时的感觉就是,实在是太杂了。感觉看了那么多收获也不是很大,然后那两个框架我也看的不是很明白。那一周对我来说,收获是比较小的,也没有取得什么成果。然后这周过去我们正式开始准备开发以后,当时我们经过讨论,发现我们所面临的问题和我们之前的设想差的很远。因为在十二月,我们开发软工的这两周,需要面对数据库大作业,数据库答辩,数学建模大作业,编译实验等。这些东西全都挤在十二月,直接和我们的软工开发是凑在一起的。然后我们当时汇报之前一周的学习状况的时候,大家状况都不是很好,所以我们经过讨论还是沿用了第一轮的开发方式,就是还是按照原来的方式实现。然后我也就转回了后端,还是继续实现后端的功能。然后就正式开始开发,前两天我主要负责后端数据库的设计和API文档的设计。哦对了在第二轮我们相比于第一轮,还引入了github的成分。在M2阶段,我们的文档是以markdown然后发送到github项目的wiki中的。当然代码同步等等。然后当时那一周的开发还算比较连续,然后就开始断断续续了,尤其是编译的第一次测试,然后还有就是数据库大作业到了不能再拖的时候...软工当时的进度真的是断续的特别厉害,前端负责开发的一些同学实在是没办法继续下去,就是我们的PM还在继续开发前端的用户界面。当时那段时间过的比较艰苦,好吧其实一直到今天答辩之前,这一整段的时间我们过的都十分艰苦......软工的开发都是掺杂在这些考试和大作业deadline中的。中间也不知道刷过多少夜了。总的说起来,在M2轮的话,技术上的收获,可能就是对于github的使用了吧。对于git的clone,commit,branch操作,还有就是当时使用的时候造成了很大困扰的merge,这些都有了一定的了解。不过我还是觉得,这轮开发,最大的收获,还是在面对压力上的。就是这种苦熬的感觉,在面对各种事情接踵而来,感觉没有一个时候是头的感觉,但是还是得继续坚持的感觉,我觉得这种坚持对我来说是一个很有意义的经历。

 

二、《构建之法》阅读作业以及相关问题分析:


 

1、《构建之法》阅读作业链接:

http://www.cnblogs.com/wk1216123/p/4831004.html

 

2、理解的问题

关于代码维护的重要性:

       当时的那个,说代码维护不重要,然后还不如推翻了重写的,是来自我们上个学期的一门课叫做oo,然后当时我们就是因为被各种注释和规范折磨的特别厉害,然后在一个论坛还是什么地方看到的,然后当时在对于代码注释和规范十分厌倦的时候,对于那个观点是比较支持的。不过经过这么多的开发,显然这个问题也没有什么好回答的,显然代码维护是十分重要的,代码的注释和规范对于一个项目的开发效率,尤其是多人合作的项目,影响当然是很大的。

 

关于团队中想法不统一造成效率低的问题:

       其实说实话,现在再回头看当时的那些问题,很多都不是什么问题。好多都感觉可能是当时为了想出问题而想出的问题吧...就拿这个来说,团队中想法不统一是肯定存在的,不过我个人觉得这种情况是积极的。因为想法不统一,就说明大家对于问题都有自己的思考,这是一方面;另一方面,将这些想法都考虑清楚,然后再统一想法然后开始,对于整个项目的理解会有很大的帮助,然后也会利于少犯错误等等。当然,在一个团队中,每个成员都是要学会理解互相的,不能说性格很强,然后就持着自己的想法死不放手这样,还是要学会权衡和接受吧。

 

怎么样的软件是一个好的软件:

       在现在看来,经过这段时间的开发,我觉得一个好的软件是会有这样的一些特点:功能强大,效率高,代价小。这三个我觉得都是很重要的,一个真正好的软件是肯定需要权衡各种因素,使得这三个都在一个很良好的位置上。然后如果再区分的话,个人会觉得功能会更重要一点。

 

3、仍然不理解的问题

关于如何衡量开发成本和收益的问题:

       这个问题我觉得,我觉得主要问题在于,现在所学习的知识还是不够吧。个人觉得在有了一定开发经验的情况下,应该以比较妥当地判断出来开发成本吧。不过对于收益而言,就完全不是很明白了。我觉得还是得接触更多的知识才能解决这个问题吧。

 

关于客户要求如果是错误的,是否还是第一位的:

       这个问题我不是很明白。我个人觉得,可能比较合适的做法是,尽量去和用户解释,然后说明情况,然后如果实在不行,还是得按照客户的要求来吧。不过我并不是很了解,因为我没有足够知识来理解客户要求的重要性到底到了什么地步。

 

三、8篇论文博客阅读作业及相关体会:


 

链接:http://www.cnblogs.com/wk1216123/p/4962653.html

  对于银弹问题,我的理解和之前还是差不多吧,不过可能稍微有一点点的变动。我之前一直单方面地认为附加性问题的影响是要大于本质性问题的,不过后来我觉得本质问题和附加性问题,这两个之间是需要在一定程度上考量的。对于大量程序而言,就是不处于科研前沿的程序,就是只是平时的应用或者是平时这些普通应用而言,我觉得附加性问题的影响是要大于本质性问题的。但是对于科研前沿的问题,比如人工智能等等,在这些领域中,本质性问题当然是最难以解决的方面。所以,这两个概念,是要结合起来看的。我觉得在论文里面,作者所指出的情况,应当是指的是科研前沿而言的吧,所以站在作者角度,是会有这么个东西影响很大的,那就是本质性问题。

  大泥球问题,在经过了软工两轮的开发,对于这个问题的理解和体会还是比较深的。在我们的项目中,大泥球问题是存在的,尤其在第一轮的代码中,一些大泥球问题延续了下来。一个最简单的例子,当时我们对于rails的render理解的不是很清楚,当时我们的理解是render和普通函数的return是一个意思,但是实际上这两个东西是完全不同的。render是一个方法,是去渲染一个返回的表单或者是其他成分,可以是页面等,然后实际上不是return。对于一个API是不可以渲染多次的,然后我们当时就将render理解成了return,然后就会可能导致多次渲染的问题。然后这个问题在第二轮的时候才被发现,当时我们在测试的时候发现一些API出现了两次渲染的问题,然后经过研究才发现了这个问题。但是这个错误已经随着一轮代码的四处拷贝复制等,已经到处都是了。然后改的很费劲。这只是一个简单的例子。我觉得对于大泥球问题,一方面我们需要提升自己的知识水平,对于很多错误需要能够识别,然后我们需要改变很多不良的代码习惯,就是要多考虑代码重用的问题。我在二轮的时候有注意这个,然后将很多我觉得会重复的方法都写成了代码块在一个主类中,然后在分类中就可以直接调用代码块达到目的。

  关于大教堂问题,我觉得这个的话,我们还是会选择大教堂模式的。就拿我们现在的项目来说,我们中间有做实名认证功能,然后这个功能是在教务的支持下完成的。我们是通过token来控制调用另外的API实现的。如果这个token泄露了,那么教务的数据就会泄露了。而这个token是作为代码的一部分的,是不可以公开的 。所以实际上,我们是不可能使用市集模式的。不过当然,市集模式和大教堂模式的区别本质当然不是指保密性,不过我觉得保密性实际上是我们应该考虑的部分。

关于开源,在我们的项目中是没有使用任何的开源项目或者别的开发框架的(就是指比如开发论坛,关注这样系统的框架等)我们当时的考虑就是,一方面我们希望能够自己手动来写,这样可以提升我们的能力。另一方面,如果使用了框架,项目就会受到框架的制约,对于项目的兼容,响应效率等,然后对于一个项目的上限,和今后开发都会有影响的。

  关于简洁最好的话,没有太多特别的体会......

  关于瀑布模型,我觉得其实在我们这个开发中并不是很合适的。因为很多情况下我们需要随时修改我们的设计,所以如果是瀑布模型的话,之前错了我们还要倒退回去,我觉得就不是很合适了

  关于敏捷开发,比如我们的API文档是随时随着需求的变化而变化的,然后我们后端的实现就需要随着API文档的变化而变化。

  软件工程的方法,我觉得是需要我们去体会的。对于软件工程的方法有了足够的了解,自然会起到一个引导的作用。

 

四、项目的 需求/设计/实现/测试/发布/维护 等6个阶段中的学习体会:


 

需求:

在需求阶段,主要学习了一些了解用户需求的方法,比如调查问卷,面谈啊等等。对于需求的详细描述,主要就学到了NABC方法。

设计:

在设计阶段,我们应用过ER图的方法,另外还有做过数据流图。

实现:

在实现阶段,主要学习了代码规范和注释等,另外就是一些实现的方法,比如结对编程等。

测试:

在测试阶段,主要学习使用了单元测试,黑盒测试,兼容性测试,压力测试的方法。

发布:

在发布阶段,主要就是有一个事后分析。

维护:

我们并没有经历维护阶段,不过个人觉得,维护阶段可能需要学会如何合理的解决bug的能力。

转载于:https://www.cnblogs.com/wk1216123/p/5118910.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/471190.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Web框架——Flask系列之Jinja2自带过滤器(三)

一.过滤器概述 过滤器的本质就是函数。有时候我们不仅仅只是需要输出变量的值,我们还需要修改变量的显示,甚至格式化、运算等等,而在模板中是不能直接调用 Python 中的某些方法,那么这就用到了过滤器。 二.两种过滤器 2.1字符串…

LeetCode 2178. 拆分成最多数目的偶整数之和(等差数列求和)

文章目录1. 题目2. 解题1. 题目 给你一个整数 finalSum 。请你将它拆分成若干个 互不相同 的偶整数之和,且拆分出来的偶整数数目 最多 。 比方说,给你 finalSum 12 ,那么这些拆分是 符合要求 的(互不相同的偶整数且和为 finalS…

Web框架——Flask系列之CSRFToken详解(四)

CSRF(理解) 一. 什么是CSRFToken? CSRF全拼为Cross Site Request Forgery,译为跨站请求伪造。CSRF指攻击者盗用了你的身份,以你的名义发送恶意请求。 包括:以你名义发送邮件,发消息,盗取你的账号,甚至于…

apache ab test使用 单独安装ab和htpasswd

apache ab test使用 apache ab test使用 单独安装ab和htpasswd 转载自: http://www.cnblogs.com/super-d2/p/3831155.html#top http://blog.chinaunix.net/uid-20382003-id-3032167.html 注意:ab test是不支持长连接压测的,只支持短连接压测 …

LeetCode 2180. 统计各位数字之和为偶数的整数个数

文章目录1. 题目2. 解题1. 题目 给你一个正整数 num ,请你统计并返回 小于或等于 num 且各位数字之和为 偶数 的正整数的数目。 正整数的 各位数字之和 是其所有位上的对应数字相加的结果。 示例 1: 输入:num 4 输出:2 解释&a…

Web框架——Flask系列之自定义过滤器详解(五)

一.为什么要自定义过滤器 过滤器的本质是函数。当模板内置的过滤器不能满足需求,可以自定义过滤器。 二.自定义过滤器两种方式 方式一 先定义函数后添加到过滤器列表,app.add_template_filter(‘函数名’,‘过滤器名称’) def do_listreverse(li):# 通过原列表…

【BZOJ 3191】[JLOI2013]卡牌游戏

注意 最后一个没有空格!!!!! 题解(摘自网络) 有一个很重要的性质:当前人获胜的概率只与其在排列中与庄家的相对位置和人数有关、、跟具体有哪些人无关、、 那么我们可以用f[i][j]表示还有i人时从庄家开始数…

LeetCode 2181. 合并零之间的节点(链表)

文章目录1. 题目2. 解题1. 题目 给你一个链表的头节点 head ,该链表包含由 0 分隔开的一连串整数。 链表的 开端 和 末尾 的节点都满足 Node.val 0 。 对于每两个相邻的 0 ,请你将它们之间的所有节点合并成一个节点,其值是所有已合并节点的…

Web框架——Flask系列之模板使用练习(六)

一、实现的效果如下: 二、实现要求: 给定如下5条数据,只显示4行数据,背景颜色依次为:黄,绿,红,紫 my_list [{"id": 1,"value": "我爱工作"},{"id": 2,"va…

Android安全研究经验谈

安全研究做什么从攻击角度举例,可以是:对某个模块进行漏洞挖掘的方法,对某个漏洞进行利用的技术,通过逆向工程破解程序、解密数据,对系统或应用进行感染、劫持等破坏安全性的攻击技术等。而防御上则是:查杀…

LeetCode 2182. 构造限制重复的字符串(贪心、map)

文章目录1. 题目2. 解题1. 题目 给你一个字符串 s 和一个整数 repeatLimit ,用 s 中的字符构造一个新字符串 repeatLimitedString ,使任何字母 连续 出现的次数都不超过 repeatLimit 次。你不必使用 s 中的全部字符。 返回 字典序最大的 repeatLimited…

Web框架——Flask系列之WTF表单验证练习(七)

一、Web表单 web表单是web应用程序的基本功能。 它是HTML页面中负责数据采集的部件。表单有三个部分组成:表单标签、表单域、表单按钮。表单允许用户输入数据,负责HTML页面数据采集,通过表单将用户输入的数据提交给服务器。 在Flask中&…

判断字符串是否为空--string.Empty、string=、s.length==0

Console.WriteLine("".Equals(string.Empty));//结果&#xff1a;true String.Empty和string””是一样的&#xff0c;同样都是需要占用内存空间<空字符串>&#xff1b;但优先推荐使用string.Empty 还一种高效判断方法&#xff08;s.length0&#xff09;来判断…

LeetCode 2185. 统计包含给定前缀的字符串

文章目录1. 题目2. 解题1. 题目 给你一个字符串数组 words 和一个字符串 pref 。 返回 words 中以 pref 作为 前缀 的字符串的数目。 字符串 s 的 前缀 就是 s 的任一前导连续字符串。 示例 1&#xff1a; 输入&#xff1a;words ["pay","attention",…

Web框架——Flask系列之Flask-SQLAlchemy安装与使用 定义数据模型(八)

Flask-SQLAlchemy安装及设置 SQLALchemy 实际上是对数据库的抽象&#xff0c;让开发者不用直接和 SQL 语句打交道&#xff0c;而是通过 Python 对象来操作数据库&#xff0c;在舍弃一些性能开销的同时&#xff0c;换来的是开发效率的较大提升SQLAlchemy是一个关系型数据库框架…

多线程篇-NSThread-简单使用

创建的三种方式 第一种 介绍/*alloc init 创建第一个参数&#xff1a;目标对象第二个参数&#xff1a;选择器&#xff0c;线程启动要调用哪个方法第三个参数&#xff1a;前面方法要接收的参数&#xff08;最多只能接收一个参数&#xff0c;没有则传nil&#xff09;*/ NSThread …

LeetCode 2186. 使两字符串互为字母异位词的最少步骤数

文章目录1. 题目2. 解题1. 题目 给你两个字符串 s 和 t 。在一步操作中&#xff0c;你可以给 s 或者 t 追加 任一字符 。 返回使 s 和 t 互为 字母异位词 所需的最少步骤数。 字母异位词 指字母相同但是顺序不同&#xff08;或者相同&#xff09;的字符串。 示例 1&#xf…

Web框架——Flask系列之Flask-SQLAlchemy数据库的基本操作(九)

数据库基本操作 在Flask-SQLAlchemy中&#xff0c;插入、修改、删除操作&#xff0c;均由数据库会话管理。 会话用 db.session 表示。在准备把数据写入数据库前&#xff0c;要先将数据添加到会话中然后调用db.session.commit()方法提交会话。 db.session.add&#xff08;role&…

bash/shell编程学习(2)

先来复习上节重定向的用法&#xff1a; 1.快速清空文件 cat demo.txt < /dev/null注&#xff1a;linux中有一个经典名言【一切皆文件】&#xff0c;/dev/null可以认为是一个特殊的空文件&#xff0c;更形象点&#xff0c;可以理解为科幻片中的黑洞&#xff0c;任何信息重向定…

LeetCode 2187. 完成旅途的最少时间(二分查找)

文章目录1. 题目2. 解题1. 题目 给你一个数组 time &#xff0c;其中 time[i] 表示第 i 辆公交车完成 一趟旅途 所需要花费的时间。 每辆公交车可以 连续 完成多趟旅途&#xff0c;也就是说&#xff0c;一辆公交车当前旅途完成后&#xff0c;可以 立马开始 下一趟旅途。 每辆…