我所看到的传统软件工程学

第1章 软件工程学概述 文章目录1.1 软件危机1.1.1 软件危机的介绍1.1.2 产生软件危机的原因1.1.3 消除软件危机的途径1.2 软件工程1.2.1 软件工程介绍1.2.2 软件工程基本原理1.2.3 软件工程方法学1.3 软件生命周期1.4 软件过程1.4.1 瀑布模型1.4.2 快速原型模型1.4.3 增量模型1.4.4 螺旋模型1.4.5 喷泉模型1.4.6 Rational统一过程1.4.7 敏捷过程与极限编程1.4.8 微软过程1.5 小结 1.1 软件危机 1.1.1 软件危机的介绍 1.1.2 产生软件危 阅读详情
     这篇blog我早就想些了,也是因为工作的关系耽搁了,在看这篇blog之前,希望你能先看一下Martin Fowler于6月3日在中国的演讲:http://news.youkuaiyun.com/n/20050603/21874.html
      这篇blog的实质是要引出敏捷开发,还是按照我一贯的风格,在说明一个概念之前,先讨论一下需求。鉴于我只有一年的工作经验,可能我会对一些问题的看法很肤浅,但至少这就是我现在感受到的客观事实。让我们谈一下现在的软件开发过程的一些问题。
      在Martin Fowler的演讲里提到了计划驱动,传统的瀑布式的开发方式就是计划驱动,而一些软件开发的认证几乎也都是计划驱动,包括我们熟知的cmm。为什么会有计划驱动?那是因为前人把工程学代入了软件开发,工程学本身就是讲究计划驱动的。造房子先要实地考察,建筑师做设计,打好地基,最后才有工人开始造。这就是工程学里所提倡的一环扣一环,并且先后顺序分明。
      的确工程学在一段时间里给开发大型软件产品和项目带来了效率,至少表面上是如此的,老板总觉得这样更科学,更健壮,更严密,况且由于有文档的关系,也不担心更换团队(甚至有文档驱动的概念)。但是真的是这样吗?传统的工程学真的给软件开发带来了效率吗?或者我也许该这样更直白的说,传统的工程学真的给软件产品和项目带来了质量上的提高,以及开发人员技术水平上的提高吗?
      关于这个质量和效率问题,我想大家都心理很明白,事实上工程学真正带来的是一种软件产品和项目大量的按照一种固定模式的量产化得到可能。它真正做到的是我们大多数人能按一定要求实现这个需求。但是究竟实现的好不好,或者说即使实现了,版本的升级,平台的迁移是否要额外的花费更多的成本,如果没有需求,它不会管。量产化的东西只是会按部就班的达到需求,而不会超越需求。这里有一点可能觉得超越需求是一种完美主义的想法。然而这正是软件产品的特点,因为事实上客户在这个系统没有出来之前,是永远也不知道他究竟最终想要的是什么的。往往当系统出来以后,他才发现这不是他想要的东西!
      至于关于开发者技术水平的问题,我想工程学带来的结果是显而易见的。那就是极其严重的两级分化,甚至总体水平在降低!但是讽刺的是,这似乎是符合中国国情的!什么国情?人多!毕业生多!但是研发不需要这么多人!工程学带来的结果是,软件开发工程中一道道工序所需要的不同角色。而显然,程序员被放在了最底层,就像造房子的工人。或者更直白点,程序员这个单词的解释已经发生了变化,现在处于传统开发模式下最底层的程序员,只不过是在写一些包含许多重复劳动的简单的代码罢了,比如从数据库取数据,放数据等等。于是在中国就有了所谓的软件蓝领的称呼,并且直接导致了对程序员的不尊重,更为严重的是,这种不尊重许多来自程序员本身,因此就有了程序员到30岁还做不到项目经理(管理层)就是没出息的这种畸形,变态的想法!(本人严重BS这种想法,所以用了严厉的形容词)。而目前在这些底层“程序员”之上的所谓的有了几年(比如5年)工作经验的开发人员,所架构,设计出来的框架真的优秀吗?(事实上因为有了上述的变态想法,所以很难在中国找到比5,6年更久的程序员了,虽然我曾经遇到几个,他们是真正的程序员!)我可以说,那不可能!一个真正优秀的架构师,设计师,没有10年以上的开发经验是不可能的?在microsoft,在google,在ibm,在sun,他们真正的财富是什么?正是这些写了几十年程序的开发人员!为什么常说中国的软件业不行?那正是因为你们本身不尊重程序员!你看到过有30以下的大师吗?erich gamma,kent benk,richard stallman哪一个是在30岁以下就成名的?
      需求就谈到这里,否则再说下去要成了一篇批判blog了,提出这些complains的理由正是为了要让敏捷开发来解决上述的问题。下面的一篇blog就要谈一下敏捷开发。
 
一、软件工程学概述 指在计算机软件的和过程中所遇到的一系列严重问题。:1 对软件开发成本和进度的估计常常很不准确。2. 用户对“已完成”的软件系统不满意的现象经常发生。3. 软件产品的质量往往靠不住。4. 软件常常是不可维护的。5. 软件通常没有适当的文档资料。6. 软件成本在计算机系统总成本中所占的比例逐年提升。7. 软件开发生产率提高的速度,远远跟不上需求。:1软件本身的特点有关2软件开发和维护的方法不正确(忽视需求分析,轻视软件维护)3面对日益增长的软件需求,人们显得力不从心。...... 阅读详情

相关推荐

《软件工程导论》第一章-软件工程学概述-笔记整理

参考教材:《软件工程导论》-张海藩第6版

a1818618的博客 1807

关于软件工程

软件工程是应用计算机科学、数学及管理科学等原理,开发软件的工程。软件工程借鉴传统工程的原则、方法,以提高质量、降低成本。其中,计算机科学、数学用于构建模型与算法,工程科学用于制定规范、设计范型(paradigm)、评估成本及确定权衡,管理科学用于计划、资源、质量、成本等管理。

xouxz的专栏 604

蚂蚁区块链第20课 可信存证司法链从入门到实施

1. 摘要 杭州互联网法院和司法区块链平台的技术建设方都是蚂蚁金服区块链。那么,如何借助蚂蚁的技术能力和服务能力,快速对接上司法链,便于后续打通存证/维权的闭环流程。本文介绍蚂蚁区块链可信存证的业务及特点,费用及接入方法等,具有实战指导意义。 2. 蚂蚁区块链可信存证的介绍 蚂蚁区块链可信存证具备全链路可信,司法权威节点见证,安全隐私保护,一站式接入能力,全国首家法律认可的区块链存证平台。 2...

辉哥的技术投资路 6089

软件工程:传统软件工程 vs 敏捷软件开发

转自我的博客园文章:http://www.cnblogs.com/katniss-smile/p/5982643.html首先给出软件工程和敏捷软件开发的定义: 软件工程(Software Engineering): 是一种层次化技术。 将系统化的、规范的、可量化的方法应用于软件的开发、运行和维护,即将工程化的方法应用于软件。 研究”建立和使用一套合理的工作原则,以便经济地获得可靠的

//Katniss的征程 4467

Kubernetes集群环境搭建与初始化

Kubernetes是Google开源的一个容器编排引擎,它支持自动化部署、大规模可伸缩、应用容器化管理。在生产环境中部署一个应用程序时,通常要部署该应用的多个实例以便对应用请求进行负载均衡。在Kubernetes中,我们可以创建多个容器,每个容器里面运行一个应用实例,然后通过内置的负载均衡策略,实现对这一组应用实例的管理、发现、访问,而这些细节都不需要运维人员去进行复杂的手工配置和处理。

m0_75254642的博客 1526

无感无刷电机三段式启动避坑指南:从预定位到闭环切换的STM32代码实现

本文深入解析无感无刷电机的三段式启动流程,涵盖预定位、启动加速与闭环切换三大阶段。重点对比了恒频升压、恒压升频与升频升压三种核心启动策略的优劣,并提供了基于STM32的详细状态机代码实现与关键参数调试指南,帮助工程师有效规避启动失步、线圈过热等常见问题,实现稳定可靠的无感驱动。

herb5的博客 535

软件工程(六)第一代软件工程(传统软件工程)—— 结构化分析与设计

结构化分析与设计的流程 瀑布模型由传统的生存周期过程演变而来。作为一种系统开发方法,结构化分析与设计是瀑布模型的首次实践。根据瀑布模型的上述流程,需求分析与软件设计是进入编码阶段前必须完成的任务。具体来说,系统开发从需求分析开始,首先建立系统的需求模型;接着通过 SD 方法提供的映射规则,把分析模型转化为初始设计模型;然后再优化为系统最终设计模型 基本任务 结构化分析 SA 有两项基本任务,即...

低吟不作语的博客 3031

保姆级教程:STK 11.0 从下载到安装成功(附Matlab互联配置与常见问题解决)

本文提供STK 11.0的完整安装指南,包括下载、安装步骤、Matlab互联配置及常见问题解决方案。详细介绍了系统要求核查、分步安装流程、关键文件替换和许可证配置,确保用户能够顺利完成STK 11.0的部署并实现与Matlab的无缝对接。

weixin_30698297的博客 347

关于大学中软件工程课程的开设问题——不要把实践性科学当作理论性学科来教授...

本文实际完成时间是2008年03月22日,今日翻看我的稿件存栏时翻到,于是,重新发布出来。里面涉及到我和几位大学讲师或者是教授的对抗性争议,我反对他们的做法和讲课以及定义的方式,但是最后我并不想做无意义的争论,于是退出了那个临时的群。当然,前面他们对我也算是捧了不少,也有一个不了解的上来就和我对抗。本文讨论到的相关内容都在下面这本书里有全面详实的解答,这本书中的一段两页不...

青润心情 763

深入C6678启动流程:从BootRom参数表到多核镜像部署的完整解析

本文深入解析TMS320C6678 DSP的启动流程,从BootRom参数表到多核镜像部署的全过程。详细介绍了七种启动模式的工程选择、多核镜像构建技巧以及二级引导策略,帮助开发者掌握C6678的启动机制与调试方法,提升嵌入式系统开发效率。

weixin_30505225的博客 613

西门子RS485自由口通信Modbus RTU 通信协议

部分西门子的RS485模块不能使用西门子自带的Modbus RTU通信指令,需要通过自己拼接、发送、接收和解析报文完成Modbus RTU通信。通过多次尝试完成该功能: #R_TRIG_Instance(CLK := #触发, Q => #触发上升沿); IF #触发上升沿 THEN // 触发后先将读取完成复位 #读写完成 := 0; END_IF; CASE #功能码 OF 1: // 线圈状态读取 ; 2:

qq_20792765的博客 1万+

软件工程- 第3章 传统软件工程方法学

文章目录软件工程第3章 传统软件工程方法学3.1 结构化设计结构化设计的概念与原理模块化抽象逐步求精信息隐蔽模块独立3.2 模块独立耦合内聚3.3 启发规则3.4 面向数据流设计方法软件结构图信息流类型面向数据流设计过程变换分析事务分析3.5 人机界面设计人机界面设计问题人机界面设计指南3.6 过程设计过程设计任务结构化程序设计结构化程序设计工具程序复杂度3.7 面向数据结构设计方法Jackson方法步骤 软件工程 第3章 传统软件工程方法学 3.1 结构化设计 传统软件工程方法学采用结构化设计技术(SD)

江城暮色 2939

【雷达通信】雷达信号处理仿真【含Matlab源码 2509期】

雷达信号处理仿真 完整的代码,方可运行;可提供运行操作视频!适合小白!

订阅付费专栏Matlab(奶茶价版),可赠送奶茶价版付费专栏指定代码1份; 905

软件工程学基础(初学 连载中)

第一章 软件工程学概述 第一节 软件危机 一. 软件· 定义: 软件: 软件包括程序·相关数据·说明文档; 程序:按事先设计的功能和性能要求执行的指令序列; 数据:是使程序能正常操纵信息的数据结构; 文档:是与程序开发、维护和使用有关的图文材料。 二. 软件· 特点: 软件是一种逻辑实体,具有抽象性; 软件是开发的,而不是制造的; 在软件的运行和使用期间,没有硬件那样的机械磨损,老 化问题...

weixin_44800962的博客 631

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

敏捷式开发与传统软件过程

在六十年代末期提出了软件危机的概念,因此提出了非常有纪律性的方法即软件工程学,试图从电子工程学、技术工程学提炼出一些东西来用于软件工程学,他们想从中提炼出一种方法,使得软件开发的流程更有预测性。但软件业的人在做软件的过程中发现这些方法并没有减少软件开发过程中遇到的问题。近年来有人发现软件工程学里一些基本的假设是不正确的,并使用了一些新的开发方法,称为敏捷式开发。敏捷式开发采用适应性方法,而传统的软

我思故我在,有我更精彩 1078

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

敏捷式开发质疑传统软件过程

敏捷式开发质疑传统软件过程在六十年代末期提出了软件危机的概念,因此提出了非常有纪律性的方法即软件工程学,试图从电子工程学、技术工程学提炼出一些东西来用于软件工程学,他们想从中提炼出一种方法,使得软件开发的流程更有预测性。但软件业的人在做软件的过程中发现这些方法并没有减少软件开发过程中遇到的问题。近年来有人发现软件工程学里一些基本的假设是不正确的,并使用了一些新的开发方法,称为敏捷式开发。敏捷式开发

金庆的专栏 3030

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

软件工程期末复习(一)

软件产品的核心特性是什么?A. 物质性B. 逻辑性C. 可复制性D. 消耗性:B在软件开发过程中,哪个环节最接近于传统制造业中的“生产”过程?A. 需求分析B. 编码C. 测试D. 研制(研发):D(虽然编码也是生产的一部分,但研制更全面地涵盖了从需求到实现的整个过程)软件工程学的出现主要是为了应对什么问题?A. 程序设计方法的落后B. 计算机硬件的快速发展C. 软件危机D. 信息安全问题:C软件工程的核心目标是什么?

m0_74107848的博客 1119

《软件工程导论》(第6版)第1章 软件工程学概述 复习笔记

软件危机 软件工程 软件生命周期 软件过程

m0_70617423的博客 1473

软件工程是一门研究如何以系统化、规范化、可量化的过程管理方法来开发和维护软件的学科

软件工程学是将工程学的原理、方法和技术系统化地应用于软件开发、运维与管理的学科,旨在提高软件质量、降低开发成本并控制项目风险。其核心目标是通过规范化流程解决“软件危机”(如需求失控、代码冗余、维护困难等问题)。

[Blog][Domain] programb.blog.youkuaiyun.com 1559

第一章 软件工程学概述

第1章 软件工程学概述 1.1 软件危机 1.1.1 软件危机简介 软件危机: 指在计算机软件开发和维护过程中所遇到的一系列严重问题。 包含以下两个方面的问题 如何开发软件,以满足社会对软件日益增长的需求。 如何更有效地维护数量不断膨胀的已有软件。 1.1.2 产生软件危机的原因 软件是计算机的逻辑部件,缺乏“可见性” 软件规模庞大,程序复杂性指数速度上升 1.1.3 软件是程序、数据及文档的完整集合。 程序是能够完成预定功能和性能的可执行的指令序列。 数据是使程序能够适当地处理信息的数据结构。

吃豆人编程的博客 283

软件工程学

软件工程 概述——软件工程是指导计算机软件开发和维护的学科 软件工程的产生 软件工程的发展史 软件危机产生并越来越严重,因为逐步形成了研究如何消除软件危机,以及如何合理的开发和维护软件的学科——软件工程学 软件危机 软件危机是指在计算机软件开发和维护时所遇到的一系列问题。 1、 软件危机产生的原因 软件危机的产生的原因与软件的特点有关,也与软件开发的方式、方法、技术和软件开发人员本身的素质有关。具体来说,有以下几点: 1> 软件是计算机系统中的逻辑部件,软件产品往往规模庞大,给软件的开发和维护带来客观

qq_44809293的博客 1174

软件工程导论—软件与软件工程

文章目录1. 软件与软件危机1.1. 软件的概念和特点1.2. 软件规模的分类与发展阶段1.3. 软件危机1.3.1. 软件危机的表现1.3.2. 软件危机产生的原因1.3.3. 软件危机如何解决2. 软件工程学2.1. 软件工程学的概念2.2. 软件工程项目的基本目标2.3. 软件工程的八项原则2.4. 软件工程的本质特征2.5. 软件工程的七条基本原理3. 软件工程方法学3.1. 软件工程方法...

白水的博客 7558

软件工程期末考试复习(一)

软件工程学概述 软件危机 1、软件危机是指在计算机软件的开发和维护过程中所遇到的一系列严重问题。 2、软件危机的主要典型表现: 对软件开发成本和进度的估计常常不准确 用户对已完成的软件系统不满意现象经常发生 软件产品的质量往往靠不住 软件常常是不可维护的 软件通常没有适当的文档资料 软件成本在计算机系统中所占的比例逐年上升 软件开发生成和计算机应用更新的速度不匹配 3...

weixin_30391339的博客 760
上一篇: 经历了两个月应聘生活后的总结和心得
下一篇: 敏捷开发-开发以人为本
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值