关于软件开发本质和开发方法的一些文章的读后感

       看了几篇与软件工程的瀑布、大泥球、教堂、集市和银弹等概念相关的经典文章,简单的谈一下自己的一些理解。

一、银弹

从自然法则上来说,我不相信银弹不会出现。或许银弹的发现会是软件工程发展的分水岭,只是不知道会不会到来,什么时候会到来。

这篇文章存在也不是一年两年了,而文章所提出的问题却还是没有得到根本性的改变。在做了这几次简单的只算得上编程而称不上软件项目的作业后,感触尤为深刻。

作者首先提出一个问题:软件开发技术的落后是由于存在软硬件发展的不协调和畸形。软件的发展远跟不上硬件。一开始看这个问题的时候,是存有质疑的。苹果一面世,就有大量的优秀的软件硬性地或间接地植入系统,在前不久苹果开发者大会(2014年6月2日)上,苹果马不停蹄的上马Swift编程语言,用于搭建寄语苹果平台的应用程序。这速度不算慢吧。但是后来想想,又不是那么回事。

软件的诞生往往是落后于硬件的。有幸在isense登陆中国之前就见识到了这个可以附在ipad上使用的3D扫描仪。其开发公司 3D Systems公司在推出这款扫描仪的同时也配备了很多软件,但是也只是公司自己说的而已,用起来却并不如此,扫描并不稳定,成像并不精确,图像处理完全属于初级阶段。当然这些问题可能会包含硬件本身的一些问题看,但是从用户体验上来看,这很大一部分要归咎于其软件系统及配套的各种软件功能。在软硬件畸形这个问题上,体现最明显的就是这种具有开创性的硬件的发展了。

复杂度,一致性,可变性和不可见性是现代软件系统中无法规避的内在特性,正因为说是特性,就意味着这是现代软件系统天生的残缺。

如果把软件当做一个实体,那我也想不到它可以扩展出多少个子实体了,而每个实体之间的联系,每个实体本身的属性又都是异常复杂的。一个老师所谓的谈不上软件项目的程序作业——电梯调度,其中的各种状态之间的转换就让人晕头转向,常常是顾此而失彼,要想得到一个能够较为理想的程序实现需要做大量的论证工作。而且大多数情况都不是最优的。在这次结对编程项目中,也正因为是复杂度的存在,使得与同伴在交流的时候出现许多分歧和不理解,尤其是最开始的设计阶段,完全不能十分清楚地理解对方的程序,不一样的代码风格造成了项目初期的低效率发展,直到慢慢融合才使得效率开始提高起来。

而软件的一致性和可变性也是一个十分令人头疼的事情。没有一款软件在推出以后就永远保持它最初的样子,总会有alpha版,beta版,beta.1版等等。或许只有同时用过Python2.x和Python3.x的程序员才能明白有的时候软件项目就是一个充满了分岔路的羊肠小道,而可变性就在于你走得越远,分岔路愈多,而过多的选择并不是好事。Ubuntu的各个版本则说明,对软件的任何再设计,都会直接影响接口实现问题。

增量开发,作者在这篇文章中谈到是银弹的希望。我没有足够的见识和实践能力去判别这个问题的答案,只是就我们这次团队项目谈谈自己的看法。

一个MOOC的项目,要在Android客户端实现,而基础是Mac版的MOOC 实现。不知道我的理解是否正确,这可不可以算得上是一个横向的增量开发。头痛的是编译环境和实现过程截然不同,令人好受的是这不是一个开创性的课题。现在还只是Alpha阶段,只能想办法帮助原先的项目适应新的家庭环境,这其实是一个关于软件系统多样性的问题,而Beta版就要实现他的自我保护和自我更新能力的发展。

当然希望我们团队在最开始设计这个项目的运行轨迹的时候就是正确的。

二、大泥球

大泥球,在软件项目中指的就是一堆杂乱无章的代码。可读性差,可移植性差,可增生性也差,封装效果不好。这样的代码会大大地降低测试人员的效率,更不利于程序的修改和更新,往往会形成牵一发而动全身的后果,一处修改就可能影响到整个程序的实现。

为什么会出现大泥球呢?文章作者指出,一次性代码最有可能形成大泥球。由于是一次性代码,开发者或项目负责人不需要对项目以后的发展进行过多的考虑,只需要实现它现在的功能就行了。但是往往是这种不负责的态度影响了程序结构的合理化设计。要想解决这个问题,就要求项目组的每一位成员养成好的项目开发习惯。在一开始就明确清晰的程序结构,提出合理的算法,为代码的移植和增发做好最充足的准备。

三、The Cathedral and the Bazaar

在90年代末,Eric S. Raymond发表了《大教堂和集市(The Cathedral and the Bazaar)》,说服网景开放源代码。大教堂和集市是开源的两种形式,前者是在软件发行后在公布源代码,而后者是在代码编写和测试的过程中就公开。

开源对于我来说是一个熟悉却陌生的词,因为经常听到看到所以熟悉,但是却从来没有参与过一个开源项目。其实我们这次团队项目也算是一个大教堂形式的开源项目。学长将他所开发完成的项目完全开放给我们,让我们在此基础上完成从Mac到Android的移植。

而我们现在在做的也是一个教堂式的开源,项目进度和项目细节只限于老师,助教和团队成员。我个人其实是比较喜欢这种方式的,或许会缺少一些其它的或许有用的声音,但好处是可以让我们更加专注于自己的项目。而且我也不希望自己的代码莫名其妙地就被别人给改了。换个说法就是集市式是一个完全市场化的软件开源方式,他完全不受各种行为规范的的制约,而项目工程是一项工程,它需要的恰恰是一些可以量化,可以规范化的可操作方式。

(未完待续)

时间: 2024-09-30 18:39:46

关于软件开发本质和开发方法的一些文章的读后感的相关文章

阅读一些关于软件开发本质和开发方法的文章的体会与心得

在本次软件工程课程当中,我已经经历了一次比较成功的个人项目,一次比较失败的结对编程项目,以及即将开始的团队项目alpha阶段.在这段时间,应教师的要求,我开始阅读一些有关软件开发本质和开发方法的文章,在此记录一些体会与心得. 文章一: No Silver Bullet: Essence and Accidents of Software Engineering by Frederick P. Brooks, Jr. 文章网址: http://www.cs.umd.edu/class/spring

Atitit. 提升软件开发效率and 开发质量---java 实现dsl 4gl 的本质and 精髓 O725

Atitit. 提升软件开发效率and 开发质量---java 实现dsl 4gl 的本质and 精髓  O725 1. DSL主要分为三类:外部DSL.内部DSL,以及语言工作台. 1 2. DSL规则 2 2.1. DSL = 整洁的代码 2 2.2. DSL必须以文本代码的形式出现 2 2.3. DSL的语法应该尽可能地接近英语或者其他自然语言 2 3. DSL 文本形式 or 图形标识 2 4. 实现方式 2 4.1. 2. 管道抽象 2 4.2. 3. 层次结构抽象 3 4.3. 4.

基于软件开发对嵌入式开发的思考

由于本人专业方向是计算机体系结构方向的,平时做嵌入式方面的实验以及项目较多,这个学期又学习了软件工程的课程,因此想借此机会,总结下在软件工程上面学习到的知识,并看看是否有什么能够借鉴到嵌入式方向的开发上面去. 首先我想总结下,软件开发与嵌入式开发的不同之处.作为软件开发,首先应当从用户或者用户的需求入手,明白用户想让你去实现什么功能,而到了具体的实现,有时却限制的不是那么的死.而至于嵌入式的开发,从需求入手是相同的,但是对于实现的方式,却明显不同于传统的软件开发.对于编程语言,不同的嵌入式开发平

结构化系统开发和面向对象开发方法

结构化系统开发方法: 系统分析员.软件工程师.程序员以及最终用户按照用户至上的原则,自顶向下分析与设计和自底向上逐步实施的建立计算机信息系统的一个过程,是组织.管理和控制信息系统开发过程的一种基本框架. 三部分:管理策略部分:强调系统开发的规划.进程安排.评估.监控和反馈.开发策略部分:任务分解结构:WBS优先级结构.开发经验.开发标准. 开发过程分为:系统规划阶段.系统分析阶段.系统设计阶段.系统实施阶段.系统运行与维护阶段结构化开发早期的程序开发,如C语言,都是用结构化开发方法. 面向对象开

IOS开发中重写init方法使用需谨慎

IOS开发中重写init方法使用需谨慎 今天在写一个小软件的时候出现一点问题,这个软件的功能是搜索全国学校,首页就是搜索输入框,在框中输入完要查询的学校所在省份,点击buttom后就会跳转到对应的视图控制器中,然后把搜索结果呈现在一个TableView上,但是我在调试时,每次输入完然后点击搜索按钮时,弹出结果列表总是空的,我需要返回到首页再点击一次搜索才会出现结果,而且我在首页更改搜索关键字之后,点击搜索,结果还是上次的搜索结果,必须返回点击一次才会出现这次的搜索结果. 经过大神指点,原来这个问

[转]软件开发规范—模块开发卷宗(GB8567——88)

做软件开发是有那么一套国准可参照的,当然就是那些文档了,这里列出一下所有软件开发的规范文档: 操作手册 用户手册 软件质量保证计划 软件需求说明书 概要设计说明书 开发进度月报 测试计划文档 测试分析报告 数据库设计说明书 软件配置管理计划 模块开发卷宗 详细设计说明书 项目开发总结报告 我现在再做的东西是数据库设计说明书,两天前才写玩模块开发卷宗,那时候在网上找了一些事例不是很符合规范,而完全对着模块开发卷宗的模板去写真不知道里面要写什么,因为里面有太多概念性的东西都看不懂,在这里贴以下广佛都

软件开发工具(五)——开发与发展

软件开发工具(五)-开发与发展 从前面我们从理论和技术方面了解了软件开发工具,现在我们一起总结总结生活中实 际的.使用者与购买这较多讨论,比如首先是购买商品化的软件开发工具还是自己研发 专用的工具呢?他的历史发展.现在的发展方向并结合Eclipse工作台来详细了解.   一.使用与开发: 1.开发还是购买权衡: 1)软件开发工作性质与要求(一般是小购,大自研发) 2)开发人员实际需要 3)工作环境 4)人员因素 2.选买之前为何要设明确.有限目标? 在选择与购置软件开发工具时,最最重要的就是设置

UML软件建模学习与开发基本概念汇总

UML,统一建模语言,对于软件工程专业的学生而言,是一门非常重要的技术,对于从事软件行业的的开发人员,设计人员等等,更是不可或缺的,同样是为了大学阶段的非常boring的考试,花费了不少时间整理考试资料,现在和大家一起分享. 真题汇总 1. 什么是用例图?用例图有什么作用? 定义:由参与者.用例以及他们之间的关系构成的用于描述系统功能的图称为用例图. 作用: (1) 用例图是从软件需求分析到最终实现的第一步,它显示了系统的用户和用户希望提供的功能,有利于用户和软件开发人员之间的沟通. (2) 用

高效团队开发:工具与方法

这篇是计算机类的优质预售推荐<高效团队开发:工具与方法 >. 提高项目质量,加快开发速度,降低运维成本. 编辑推荐 重要的邮件太多而无从下手 没有能用于验证的环境 覆盖了其他组员修正的代码 无法自信地进行代码重构 不知道bug的修正日期,也不能追踪退化 -- 那么,你可能需要这本书! 系统讲解团队开发所必需的工具和方法 详细介绍各个工具的特性及使用要点,并进行比较 自动化意识贯穿全书,真正实现高效开发 内容摘要: 本书以团队开发中所必需的工具的导入方法和使用方法为核心,对团队开发的整体结构进行