Part 1       No Silver Bullet - Essence and Accidents of Software Engineering
软件工程中没用通用的方法或者技术让软件工程在短时间内快速进步,这一点其实我也没有很明确的概念。其实近几年的敏捷开发框架,mvc结构,rest风格,这些的出现都大大提高了软件工程的效率,在我看来银弹的出现也是不无可能,毕竟单纯一个rest风格结合html5,给我的感觉让开发效率提高了起码百分之三十。
Part 2  big ball of mud你的项目有一个大泥球么? 有什么解决办法?
所谓大泥球,是指杂乱无章、错综复杂、邋遢不堪、随意拼贴的大堆代码。其实在一开始写工程的是偶,就是我大一的时候,我写的代码都是这种大泥球式的代码,我觉得这种代码的产生主要是由于开发人员没有开发经验和合作编程经验,有要急于完成任务。解决这种代码的方法就是要做好分层解耦和回调,拿后端来说,我们起码要做到的一点是,逻辑处理和数据模型的分离,之后可以进一步解耦,前后端交接的api分离为路由,数据的处理逻辑主体分离为控制器,参数的预处理逻辑分离为中间件,后端的整体动作分离为系统服务和触发器,数据的处理分离为模型,数据库结构和填充分离为数据迁移和数据填充。这样就很好的保证了代码的条理清晰,重用性,易于维护。
Part 3  CatB – Cathedral and the Bazaar
关于教堂和大集市,这是对开源软件开发模式的分类,教堂模式,源码公开,但是开发过程有一个团体控制;市集模式,同源源码公开,且源码放在互联网上供人阅览,并可以贡献代码,进行开发。提倡市集模式,认为在足够的人的检视之下,BUG将无处藏身。我是认同作者的观点的,举个例子,国内的大部分开源cms都是大教堂模式,或者说连大教堂模式都不能算,由顶层控制太严重。可以说这些cms的安全性是非常差的,但是反观国外的开源项目,大部分都是在github上让众人一起维护,包括php这种非常流行的语言(尽管php的漏洞略多,或者我接触的比较多。。。),其安全性与国内的cms相比高了一个层次。
Part 4  Lost in CatB这些情况在你的团队中出现过么?
过度依赖的问题并没有出现在我们的开发中,因为在一开始制定api和开发文档时,我就为团队成员撰写了环境搭建的教程和要求,并规范了各种数据的存储形式和结构,在我们的项目中,数据都是存储在数据库中,进行报告生成的数据都是以文件形式。
其实唯一出现过一次依赖问题是这样的,我们需要用latex进行报告生成,我们调试脚本时发现,在普通用户下执行是可以成功的,然而通过php调用生成脚本时却一直在报so库文件引用错误,之后我放了一个木马获得apache守护进程用户的权限,发现在该用户下运行是不成功的,之后我用ldd看那个出错的so库的引用指向,发现,他竟然指向了apache的库文件,也就是说py的库和apache的库有重名冲突,之后发现apache会给他的用户自动添加他自己的lib路径到ld_library_path,然而php的命令执行是不起bash的,所以无法添加环境变量,最后我写了一个sh起一个bash把/lib路径添加到环境变量里最终解决了依赖问题。。。。。。
Part 5  Managing the development of large software systems: concepts and techniques
瀑布模型在我们的工程中是得到了充分的使用,一开始是制定计划和需求分析,之后计划其实对我来说只是一个大体的概念,知道大家会在大体什么时间做什么就好,因为如果是针对我的计划时间,我一般会超前完成很多,之后需求分析交到我手中后,我根据他们的网站原型进行后端路由和api的设计,之后交给前端和后端开发人员,我们一起进行开发,最后完成后进行对接,之后进行测试,上线后维护。
Part 6  软件工程的方法论到底有多少用处?
他其实可以指导大多数的合作项目,有通用性。
-----------------------------我是优雅不要污的分割线-------------------------
其实写到最后我还想写一点其他和作业无关的事情,您在我们团队的博客下评论,用户名密码的传输过程没有加密,后端存储时是不是也是明文。先说明一点的是,后端是采用加密的,并且加密方式是动态salt之后进行hash,以我的认知水平来看,在我们规定的最小密码长度6位下,这个加密方式是无法破解的。
之后是关于明文传输的问题,我的主业的搞信息安全的,其实我遇到很多很多人跟我提漏洞的时候都是跟我说,这个密码是明文传输的,我其实很不理解,就这样来说,单纯在前端做一次加密是没有任何卵用的,我遇到过很多网站,他们前端做了md5,之后进行传输,但是这个传输过程中我如果嗅探到数据包,照样可以拿这个数据包进行登录,并且,这些网站在拿到他们的数据库权限或者注入得到密码后,发现起码有七成是直接拿前端传过来的md5进行存储的,这是一种愚蠢到爆的方式。如果前后端都做加密,安全性确实会好一点,但是我同样可以拿数据包登录。
我能提出来的唯一一种可靠的前端加密方式就是使用时间戳作为动态salt,也就是说,我们拿一个时间间隔比如15s作为单位,来用时间戳计算出一个salt之后与密码做hash,后端同样拿这个方法进行校验,这样可以保证每个数据包的有效时间最多是15s,但是,就算是这样,也会出现随机的验证失败(比如验证时间刚好在更换salt的一瞬间),并且,我完全可以使用脚本,在嗅探到数据包后立即重放攻击,甚至不需要重发,我既然可以嗅探到你发出的包,同样可以嗅探到你接收的包,普通用户的密码并不重要,重要的是登录后开放的接口,这样才有更多的漏洞暴露,也就是说,重要的是cookie和session。然而,这是任何前端加密都不能解决的安全问题。
并且,还有一个很重要的成本问题,我能想到的最有效的办法就是如上的时间戳方案,但是,这个方案也是个可以被轻易攻破的方案,然而,实现这个方案也是需要成本,如果这个应用真的有这么高的安全需求,他不会去付出如此的成本去实现一个破绽百出的方案,而一定会使用ssl。然而没有这种安全需求的网站也不会去付出这个成本。
以上的讨论都是站在一个黑客或者运维的角度出发的,我的确没有为用户暴露明文密码着想,因为我觉得,用户密码被嗅探,无论如何都是极小范围内的,如果嗅探者是在服务器C段,那我觉得服务器安全是岌岌可危的,并且关键并不是在传输中。密码并不重要,密码是为了得到权限,数据和权限才是一个黑客想要得到的。
综上。
谢谢。

软工个人博客-week7的更多相关文章

  1. [BUAA软工]第一次博客作业---阅读《构建之法》

    [BUAA软工]第一次博客作业 项目 内容 这个作业属于哪个课程 北航软工 这个作业的要求在哪里 第1次个人作业 我在这个课程的目标是 学习如何以团队的形式开发软件,提升个人软件开发能力 这个作业在哪 ...

  2. 2020BUAA软工个人博客作业-软件案例分析

    2020BUAA软工个人博客作业-软件案例分析 17373010 杜博玮 项目 内容 这个作业属于哪个课程 2020春季计算机学院软件工程(罗杰 任健) 这个作业的要求在哪里 个人博客作业-软件案例分 ...

  3. 2020BUAA软工个人博客作业

    2020BUAA软工个人博客作业 17373010 杜博玮 项目 内容 这个作业属于哪个课程 2020春季计算机学院软件工程(罗杰 任健) 这个作业的要求在哪里 个人博客作业 我在这个课程的目标是 学 ...

  4. [2017BUAA软工助教]博客格式的详细说明

    一.为什么要强调博客格式 可以对比粗读一下这几篇博客然后自己感受一下博客格式对博客阅读体验的影响: MarkDown流:    [schaepher]2017春季 JMU 1414软工助教 链接汇总 ...

  5. 自我介绍&软工实践博客点评

    想想既然写了点评博客,那就顺便向同学们介绍下自己吧. 我是16届计科实验班的,水了两件小黄衫,于是就来当助教了_(:_」∠)_ 实话说身为同届生来当助教,我心里还是有点虚的,而且我还是计科的..感觉软 ...

  6. [敏捷软工团队博客]Beta阶段发布声明

    项目 内容 2020春季计算机学院软件工程(罗杰 任健) 博客园班级博客 作业要求 Beta阶段发布声明 我们在这个课程的目标是 在团队合作中锻炼自己 这个作业在哪个具体方面帮助我们实现目标 对Bet ...

  7. [敏捷软工团队博客]Beta阶段事后分析

    设想和目标 我们的软件要解决什么问题?是否定义得很清楚?是否对典型用户和典型场景有清晰的描述? 我们的软件要解决的问题是:现在的软工课程的作业分布在博客园.GitHub上,没有一个集成多种功能的一体化 ...

  8. [敏捷软工团队博客]Beta阶段项目展示

    团队成员简介和个人博客地址 头像 姓名 博客园名称 自我介绍 PM 测试 前端 后端 dzx 秃头院的大闸蟹 大闸蟹是1706菜市场里无菜可卖的底层水货.大闸蟹喜欢音乐(但可惜不会),喜欢lol(可惜 ...

  9. [敏捷软工团队博客]项目介绍 & 需求分析 & 发布预测

    项目 内容 2020春季计算机学院软件工程(罗杰 任健) 博客园班级博客 作业要求 团队项目选择 我们在这个课程的目标是 在团队合作中锻炼自己 这个作业在哪个具体方面帮助我们实现目标 了解项目整体情况 ...

随机推荐

  1. 使用KeePass管理两步验证

    目录 使用KeePass管理两步验证 两步验证 KeePass中管理两步验证 KeeTrayTOTP插件使用 使用KeePass管理两步验证 文:铁乐与猫 2018-9-9 KeePass 是一款管理 ...

  2. Web服务器的反向代理nginx

    nginx作为web服务器一个重要的功能就是反向代理. Nginx配置详解   序言 Nginx是lgor Sysoev为俄罗斯访问量第二的rambler.ru站点设计开发的.从2004年发布至今,凭 ...

  3. Oracle11g链接提示未“在本地计算机注册“OraOLEDB.Oracle”解决方法

    当 用,Provider=OraOLEDB.Oracle方式访问ORACLE11g数据库.出现 未在本地计算机注册“OraOLEDB.Oracle”提供程序提示.解决方案如下: 客户端环境:Win7 ...

  4. 描述各自页面的 page

    一个小程序页面由四个文件组成(注意:为了方便开发者减少配置项,描述页面的四个文件必须具有相同的路径与文件名).分别是: 页面 Page(JS文件) Page(Object) 函数用来注册一个页面.接受 ...

  5. GUI_键盘事件

    import java.awt.Button; import java.awt.FlowLayout; import java.awt.Frame; import java.awt.TextField ...

  6. android-UI组件(四):AdapterView及其子类

    http://blog.csdn.net/litianpenghaha/article/details/23270881 AdapterView组件是一组重要的组件,AdapterView本身是一个抽 ...

  7. Usaco 2019 Jan Platinum

    Usaco 2019 Jan Platinum 要不是昨天老师给我们考了这套题,我都不知道usaco还有铂金这么一级. 插播一则新闻:杨神坚持认为铂金比黄金简单,原因竟是:铜 汞 银 铂 金(金属活动 ...

  8. eclipse 自动创建web.xml

    eclipse 自动创建web.xml 以前每次创建web项目的时候,总是从其他的项目中拷贝一个web.xml文件到新项目,然后改吧改吧就可以了,但是这终究是一件麻烦的事,要是能够通过软件自动创建,那 ...

  9. 转载 信号量 <第六篇>

    一.ManualResetEvent 该对象有两种信号量状态True和False.构造函数设置初始状态.简单来说, 如果构造函数由true创建,则第一次WaitOne()不会阻止线程的执行,而是等待R ...

  10. oracle 查询非自增长分区的最大分区

    select a.table_owner, a.table_name, a.max_partition  from (select table_owner, table_name, max(parti ...