开发之乱 -- 变化 (序)

本文探讨了软件开发中存在的种种混乱现象,尤其是与盖房子等工程项目的对比,揭示了软件开发中进度预估困难的原因,并深入分析了导致这些混乱的根本因素——变化。

开发之乱 -- 变化 (序)


  很多人喜欢把软件开发比作盖房子,两者都需要需求分析、架构设计、具体实现,整个过程还贯穿质量

检查。软件行业中很关键的一个职位:架构师(architect)就来源于建筑行业。


  可是自从1946年第一天计算机问世以来,60多年过去了,软件开发还是存在着种种混乱。绝大部分的

软件都没法按照预期估计的时间发布,以至于每次预期进度的时候都需要加上一些缓冲时间来应付突发事

件。而盖房子基本上都能按预期盖好,甚至还能提前。


  仔细想想,盖房子所需的周期比较长,而且盖房子的成本跟房子数目是呈正比的;而软件开发就不太一

样,软件开发完后只需简单复制就可以制造出任意多份软件。时间上大部分房子盖得都差不多,而大部分

的软件都不太一样。经验没法快速的累积,导致盖房子的人可以随时换,而软件开发的人员却不好随意更

换。软件开发过多的依赖于人。但某样事物过多的依赖于主观意识,不混乱才怪呢。


  软件开发中进度预估是非常重要的,决定了什么时候市场部门开始做策略,什么时候销售部门开始销售。

可是由于人的因素,即使是相同的项目,相同的团队,在不同的时间开发所需要的时间还是不同的。某个

人感个冒,或者吵个架,工作效率就不一样,最终结果就是开发的进度受到影响。只有拥有足够多的经验,

成熟的团队才有可能将软件进度预估的稍微不离谱些。


  当然如果只有这些的话,软件开发还不会那么混乱,毕竟经验可以积累,团队可以锻炼。导致开发混乱

的最本质的因素是变化。和盖房子一样,造桥也是一种公认的设计精密、执行无误的工程项目。可是《梦

断代码》里面提到的美国旧金山海湾大桥,最后也严重延期,开支暴增多倍。主要原因工程设计比原计划

有变化(希望提升工程质量和大桥防震加固能力),工程师们对当初的设计做出不少变动。


  而软件开发面临更多变化:新技术的使用,软硬件的更新换代,需求的改变,人员的变动等等。最终导

致了开发的混乱。


随后我将以经历的一个项目讲讲这些变化。

### 常见的图像置算法及其实现 #### 行列置方法 行列置是一种通过改变图像矩阵中的行和列来达到置效果的技术。具体来说,可以通过随机打图像矩阵的行或列来进行操作[^3]。这种方法简单易行,能够有效破坏原始图像的空间结构。 以下是基于 Java 的行列置示例代码: ```java import java.util.Random; public class ImageScrambling { public static int[][] scrambleRows(int[][] image) { Random rand = new Random(); int rows = image.length; int cols = image[0].length; int[] order = generateRandomOrder(rows, rand); int[][] scrambledImage = new int[rows][cols]; for (int i = 0; i < rows; i++) { scrambledImage[i] = image[order[i]]; } return scrambledImage; } private static int[] generateRandomOrder(int size, Random rand) { int[] order = new int[size]; for (int i = 0; i < size; i++) { order[i] = i; } for (int i = size - 1; i > 0; i--) { int j = rand.nextInt(i + 1); swap(order, i, j); } return order; } private static void swap(int[] array, int i, int j) { int temp = array[i]; array[i] = array[j]; array[j] = temp; } } ``` 上述代码实现了对二维数组(模拟图像数据)的行进行随机排列的功能[^1]。 --- #### 向量化置方法 另一种常见的方式是将二维图像转化为一维向量后再对其进行位置上的随机置换。这种方式可以进一步增强加密的效果,因为不仅改变了像素之间的相对空间关系,还扰了一维列本身的顺[^2]。 下面是一个简单的 MATLAB 实现例子用于说明该过程: ```matlab function scrambledVector = vectorScramble(imageMatrix) % 将二维图像转为一维向量 originalVector = imageMatrix(:); % 随机生成一个新的索引顺 randomIndices = randperm(length(originalVector)); % 使用新索引重新排列原向量 scrambledVector = originalVector(randomIndices); end ``` 此函数接受输入的一个二维图像矩阵 `imageMatrix` 并返回经过随机重排的一维向量形式的结果。 --- #### 利用固定大小子块变换法 最后提到的是利用特定尺寸的小方阵作为基本单元实施整体映射调整策略之一——即采用预先定义好的小型混淆模板作用于目标区域内的每一个局部范围完成最终的整体变化模式构建工作流程设计思路下的实际应用案例展示如下所示伪代码片段表示形式呈现出来供大家参考学习借鉴之用: ```pseudo for each block of the image do: apply predefined scrambling matrix transformation to this block. end loop ``` 这种技术特别适合硬件加速环境下的快速执行需求场景下使用。 --- ### 总结 以上介绍了几种主流类型的图片加扰手段以及它们各自的优缺点比较情况分析结论得出,在实际项目开发过程中可以根据具体的业务应用场景特点灵活选用合适的方案组合起来综合考虑各方面因素之后再做出最佳决策判断依据标准是什么?这取决于多个方面考量维度指标体系建立完善程度如何衡量评估有效性等问题都需要深入探讨研究解决办法措施才行!
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值