软件研发的特点

深度学习基于Resnet18的图像多分类--训练自己的数据集(超详细 含源码) 阅读详情

追本溯源是人类的天性。当面对问题时,人们都会问,为什么这样做不行?为什么那样做就行?谈及软件研发过程中的问题和改善措施,需要首先分析其问题的本质,究竟是什么原因造成了软件研发过程的众多问题。这样我们才能说服自己,也说服别人,从根本上做些改变。

 

 

在分析软件研发特点之前,让我们首先讨论一下人类另外两大类主要活动:一类是物质财富生产,另一类是科学技术研究。物质生产的特点是大部分活动日复一日的重复性,比如我们生产汽车,制造电视,耕种庄稼等等。虽然每一次生产周期可能有些过程改进、技术进步,但是其本质上的创新还是很少。而科学技术研究,特别是基础研究,其突出的特点就是创新性。如相对论,宇宙起源,黑洞理论等等。开创性是这类活动的最大特点。比较这两类活动有很多角度,单从过程控制来看,生产控制远比基础研究控制来的容易,现代化生产管理的宗旨就是设法以最高的效率、最高的质量,稳定地大规模生产产品。我们今天极大丰富的物质生活,很大程度上依赖于各行各业行之有效的重复的物质生产过程。而基础研究,因其天然的不确定性和巨大的风险性,虽然也有一定的规律可循,但是如果试图对基础研究过程进行完全地精确控制却仍是十分困难,或者根本不可能。很难想象我们能对霍金先生目前的黑洞研究提出一个有明确研究计划和日程安排的黑洞理论2.0项目。

 

作为信息时代重要组成部分的软件,作为后来者,从其萌芽到今天发展成为一个巨大的产业并彻底改变了人们日常生活和工作方式,它至始至终都受到既有理论和工作方法的影响。最初,软件研发基本没有过程控制,软件研发被看做是一群“艺术家”的活动,基本没有管理的痕迹。目前在一些小公司还存在这种作坊式的软件研发模式,它的问题就是软件研发的质量进度高度不可控、不可知。随着软件规模的日益扩大,所谓的软件危机爆发。人们为了加强过程控制,求助于生产领域的既有经验,提出了所谓的瀑布式软件研发流程。在我看来,瀑布式流程基本上是工厂产品生产过程在软件研发活动中的模仿。其基本思路是,类似于工厂产品生产流程,把整个软件研发生命周期划分成前后衔接、日期任务明确定义的若干阶段(就像工厂生产产品的各个工序)、并对每次阶段跳转进行严格控制(就像工厂生产产品时每个工序的质量检验)。人们寄希望于这个结构定义清晰,责任划分明确的软件研发模式,把以前混乱的软件研发过程改造好,使之可以像工厂生产电视、汽车那样,质量稳定地、进度可控地进行软件研发。虽然目前在许多软件公司还能看到这种瀑布模型的影子,但是无数的实践证明,这种仿效工厂产品生产流程的软件研发模型,在大规模、逻辑复杂、市场状况瞬息万变的现代软件研发环境中,却屡屡难以奏效。

 

瀑布模型最根本的问题在于,虽然它定义了严格的阶段跳转验收标准,却没有回答一旦在一阶段末期,发现该阶段验收指标没有达到,或者在一个阶段发现前面阶段的错误时,如何回溯,如何可控地解决问题。瀑布模型缺乏有效的弥补机制,它往往是在项目后期才发现软件研发的进度和质量远远未达预期。那时,除了项目延期、增加投入这些不得已而为之的选择之外,不再有更早发现问题的机制和优雅的补救措施。所以,我经常说,瀑布模型基本上就是一锤子买卖或者赌博式的研发方式,凭运气,要么成功,要么成仁。

 

那为什么软件研发即不能被当作纯粹基础理论研究来对待,也不能当作物质产品生产来对待呢?因为软件研发,究其本质,是一种既有一定创新性、又有成本、资源和市场限制的、介于科学研究和物质产品生产之间的一种特殊的生产活动。承认其创新性,就要求以一种灵活的方式来对待;认识其投入和日程限制的商业性,又要求对其过程进行严密有效的监控,以最高可能的稳定性,规模化地生产软件产品,达到各软件研发机构合理的投入产出预期。

 

下面较详细地阐述软件研发的几大特点:

 

软件研发是一定程度上的开创性、创新性活动

软件研发有时具有一定的重复性,但是完全重复的劳动却极少。绝大部分软件研发活动是做新功能。因为如果某功能以前已经做过了,完全可以直接复用原来的模块或者把原来模块适当改造成可复用的模块,从而避免重复劳动。因为软件是软的。这点是软件研发跟物理产品重复生产最大的区别。物理产品生产,比如制造汽车,虽然每一辆汽车完全相同,却也要经历一个全新的花费相当成本的生产过程。而软件产品的复制,如软件安装程序的复制、传播,相对于软件研发本身来说,基本可以忽略其工作量。所以人们常说软件设计开发即是生产。

 

软件需求经常是不完整的或者经常发生变化的

软件之所以叫做软件,就是其软的特性。由于软,人们经常很难在研发之初提出或得到完整正确的、符合最终用户需要的需求全集。用户经常不擅于表达对软件功能的需求,往往等到看到实在的软件产品时,才意识到某些功能不完整或者有更好的想法。也是由于软件软的特点,很难限制用户对软件功能提出修改的冲动。这方面也是软件研发和一般产品生产很大的区别。比如盖一幢楼,盖好后,其实用户也有可能对楼房设计有新的更好的想法,但是改造已经盖好的楼房却十分困难或者根本不可能,这一定程度上也就限制了用户天马行空的改造动机。而软件却没有这么幸运。

 

对软件需求的理解,最终用户和研发团队比较容易不吻合

软件由于其前期不可触摸性,再加上最终用户和研发人员的知识背景,语言习惯、表达方式上的不同,很容易造成对同一个功能理解上的差异。即便有完备的文档帮助大家理解、澄清需求,甚至双方都签字画押,但自然语言毕竟不是程序代码,而且自然语言本身也可能有二意性,因此功能需求误解也是软件研发过程中比较容易发生的事情。

 

软件研发过程中,进度和质量比较难以正确衡量、跟踪

软件由于其设计和代码的不容易直观接触性,在较长的研发过程中,极有可能进入一种神秘的不可知的状态。不同于生产线上的产品,生产线上每个工序每个环节都可能定义出明确的操作规范和质量进度控制指标。而软件研发过程中的进度和质量控制,如果没有真正有效的方法,很容易流于形式。我曾经多次见过简单无效的进度跟踪方法,比如进入写代码阶段后,我们经常简单地让程序员定期地报告其完成百分比,10%,20%...100%。这样的百分数很难真实反映软件研发进度。我们往往在听到每个程序员都报告百分之百完成开发任务,想当然认为可以向下一阶段系统测试前进时,才发现那时的软件质量根本不够进行系统测试。很多基本的功能都无法运行。系统测试随即陷入无穷无尽的找bug修改bug再找bug无限循环的状态。软件一旦进入这样的状态,严重的日程延期,严重的超预期投入,甚至于最终项目被取消几乎成了不可避免的结局。

 

软件研发是商业行为,有时效性和投入产出的要求和限制

市场经济条件下,软件研发基本都是公司行为。作为商业软件公司,软件研发活动必定要符合商业活动的基本要求,软件公司才能在市场上生存。因此软件的发布时间(周期)、投入产出比就成了衡量软件研发是否成功的重要指标。在这样的商业环境下,用对待纯粹基础研究的态度对待软件研发显然不适合。

 

本章首先通过对比软件研发与物质产品生产、基础研究之间的不同之处,分析了软件研发的特点,让我们认识到,要改善和提高软件研发的生产率和过程控制,就必须采用适应软件研发特点的新思维和新方法。为后续章节讨论具体改善措施做了思想理论铺垫。

告别信号干扰!用Altium Designer 19搞定4层/6层PCB叠层设计的保姆级流程 本文详细介绍了如何使用Altium Designer 19进行4层/6层PCB叠层设计,解决信号干扰问题。通过实际案例和系统方法论,涵盖高速数字电路、混合信号系统等典型场景的设计优化,帮助硬件工程师和学生掌握电磁兼容(EMC)与信号完整性(SI)的核心技术。 阅读详情

相关推荐

Arm A-profile架构RAS系统设计:可靠性、可用性与可服务性解析

在计算机体系结构中,可靠性(Reliability)、可用性(Availability)和可服务性(Serviceability)是构建高可信系统的核心要素。RAS系统通过硬件错误检测、隔离和恢复机制,确保系统持续稳定运行。其技术原理包括ECC内存纠错、冗余执行单元和错误传播阻断等关键技术,可显著降低数据中心等关键业务场景的故障率。现代芯片设计中,Arm A-profile架构提供标准化的RAS框架,涵盖从内存子系统到计算单元的全方位错误管理。通过分层防御策略和统一错误记录格式,实现硬件错误可追溯、可修复。

weixin_30920853的博客 358

程序员生存定律--细论软件这个行当的根本特征

程序员生存定律这系列的目录在这里:程序员生存定律--目录喜欢从头瞄的,可以移步。------------------------------------------------------------------------------规律是必须顺应而不能改变的,但除此之外现实中还有一些事实也是无法改变的,这两者都很像程序中的常量,想提高人生的高度则需要同时驾驭这两者,而不能试图为两者赋值。下面我

理想流 9065

MacOS蓝牙连接疑难杂症:从基础排查到高级修复全攻略

本文提供了一份全面的MacOS蓝牙故障排查与修复指南。从基础的菜单栏检查、终端命令诊断,到软/硬重启蓝牙服务、删除配置文件,再到使用blueutil工具、重置NVRAM等高级方法,系统性地解决了蓝牙无法连接、连接不稳定等常见问题。最后还分享了环境干扰排查、预防措施及硬件故障自检方法,帮助用户彻底解决Mac蓝牙连接难题。

weixin_29271263的博客 450

企业级软件研发特点

流程 特点与难点 流程 与互联网不同的是,企业级的产品服务中,销售、用户支持都占据重要的地位。 特点与难点 灾备 严格的版本管理,补丁管理 个性化的需求比较多,同时更切合IT即服务的定义,客户需要的就是定制IT服务,这对设计上的可复用性,可扩展性都提出了较高要求。面对不同的客户需求,可复用性强,能极大降低成本;面对同一个客户,可扩展性强,降低了用户二次开发,二次升

meiwlong的专栏 935

记录一下本地部署Dify的坑

1. 截止2025-3-4为止,请注意,不要直接拉Dify的1.0.0版本。请先试用0.15.3版本。1.0.0有一个bug需要解决。3. 请使用docker-ce 新版本,docker-engine等老版本可能会有部分容器启动脚本执行莫名报错。2. 注意,请使用docker-compose V2版本,或者V1较高版本,否则会导致解析官方yml模板错误。

哈利路亚的收藏夹 5346

从零开始解析N-CMAPSS数据集:航空发动机健康管理的入门指南

本文详细解析了N-CMAPSS数据集在航空发动机健康管理中的应用,从数据集的构成、关键变量到实际数据分析方法,为初学者提供了全面的入门指南。通过Python代码示例,展示了如何加载、探索和建模这一复杂数据集,帮助读者掌握航空发动机性能预测的核心技术。

weixin_29063979的博客 323

中美两国软件开发管理的比较与启示

目前国内软件业中充斥着对模式、创意的顶礼膜拜,对流程、管理、量化的无视;认为软件工程师也是吃青春饭的,持续做技术没有出息,稍有成绩就考虑向管理转,非要弄一个Manager头衔才显得牛X;实际发现无论美国、还是中国,真正成功的软件企业都是关注创意的同时,也非常关注创意的实现过程的规范化,因为只有过程规范,才能真正保证创意的实现; 推荐一本配置管理的好书:《CVS和Nightly Build技术》,

董奎Tiger 1717

从零开始用QP框架开发STM32:事件驱动编程实战指南(附状态机设计技巧)

本文详细介绍了如何使用QP框架在STM32上实现事件驱动编程,包括状态机设计技巧和嵌入式开发实践。通过对比传统前后台系统和RTOS,展示了QP框架在资源占用、实时性和代码可维护性方面的优势,并提供了从环境搭建到高级状态机设计的完整指南。

h6i7j8的博客 1173

企业内部软件开发的特点和模式

 在现代企业中,信息系统已经越来越成为企业管理的重要支撑。因应各种业务需求对软件系统的要求,大多数企业都形式不同地建立了自己的软件开发团队,视企业的规模从一两个兼顾支援网络硬件、进行简单开发的人员到大规模的专业软件开发组织都有。通常说来,大多数企业内部开发团队是企业内部辅助主营业务的、非赢利性的组织。这类带有普遍性的企业内部软件团队是本文的关注点。 和专业软件公司开发过程一样,企业内部软件

我爱编程持之以恒 2240

基于51单片机的贪吃蛇游戏设计

本科时候做的一个课程作业,自己打一个很简易的电路,比较有意思且易上手,故将之记录下来。(全套的仿真及代码,演示视频,课程报告以及PPT展示上传在优快云下载区) 一. 实验目的 (1) 通过对C51语言的理解,编写程序实现对贪吃蛇的有效控制; (2) 通过对51单片机硬件的学习,学会运用面包板,独立按键、点阵屏等,完成对完整电路的搭建过程; (3) 通过对Proteus仿真软件的学习,实现基于STC89C52单片机的8*8点阵贪吃蛇的硬件电路仿真。 二. 实验介绍 贪吃蛇是一款经典小游戏,其游戏的规则是:玩

山山の十三先生 2万+

Qt Quick (QML) 老年人健康管理

通过 **Qt SQL** 模块将所有健康数据(用药记录、体检数据等)安全地存储在本地 **SQLite** 数据库中。你想用 **Qt C++** 结合 **Qt Quick** (QML) 来开发一个老年人健康管理软件,主要功能包含 **用药提醒** 和 **健康记录** (使用 `Qt SQL` 存储数据)。* **UI 框架**: Qt Quick (QML) - 用于构建流畅、动态的用户界面。**数据模型类 (models/MedicationReminder.h / .cpp)**

寒寒豆豆软件公司的博客 193

软件研发行业防泄密需求特点

最近一直致力研发行业防泄密方案,做源代码加密防泄密的解决方案 目前为止,了解实施了不少项目,概括下来该行业有如下特点: 1、软件研发人员水平比较高,首先得做到不易被破解; 2、软件研发人员的反监控、反加密、反防泄密的水平比较高,比较难防。普通的加密产品,很容易被秒杀。想花时间的人,进程伪造IP伪造dll注入等,懒的人去网上的下点工具,基本上都能搞定。懂安全的人就更不用说了,相信目前市面上...

shenxinda_lu的博客 429

FPGA面试题目笔记(一)——FPGA开发流程、亚稳态和竞争冒险、建立保持时间、异步FIFO深度等

同步异步电路、同步异步复位、时钟偏移和抖动、最小工作周期计算、触发器锁存器

H19981118的博客 1万+

SJT11463-2013软件研发成本度量规范:项目推荐文章

SJT11463-2013软件研发成本度量规范:项目推荐文章 去发现同类优质开源项目:https://gitcode.com/ 项目核心功能/场景 提供软件研发成本度量方法,助力项目管理与决策。 项目介绍 在软件开发领域,成本度量是项目管理的重要环节,它关系到项目的预算控制、资源分配和进度管理。正是为了解决这一问题,我们推荐《SJ/T 11463-2013 软件研发成本度量规范》这一开源项目。该规...

gitblog_06734的博客 870

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

【测试开发学习历程】软件研发流程

莫愁前路无知己 ~ ~

一个小菜鸡的成长历程 1335

OV9734 DATASHEET,完整规格书

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

当「软件研发」遇上 AI 大模型

大家好,我是通义灵码的产品技术负责人陈鑫。过去有八年时间,我都是在阿里集团做研发效能,即研发工具相关的工作。我们从 2015 年开始做一站式 DevOps 平台,然后打造了云效,也就是将 DevOps 平台实现云化。到了 2023 年,我们明显感觉到大模型时代来了以后,软件工具将面临着彻底的革新,大模型和软件工具链的结合,使软件研发进入下一个时代。那它第一个落脚点在哪?实际上就是辅助编程,所以我们...

阿里巴巴中间件 1080

盘点 | 主流敏捷软件研发工具平台比较

无论是创业软件团队,还是企业级规模化软件研发,都会遇到提升管理能力、提升研发效率的问题。为了解决这两个问题,许多软件研发工具平台也营运而生:微软、IBM、HP、Atlassian、Rally、Collabornet、Polarion……等厂商都推出了各具特色的产品,而近年来新生的Slack、teambition等平台也带来了新的理念和产品,受到了许多团队的欢迎。作为软件研发的团队或企业,我们该如何根据自身发展情况,对这些产品和工具进行合理的选择?一个支撑软件高效研发的工具平台应该具备哪些特点...

MaveDiao的博客 1597

软件研发领域的特征-探讨

以下是我对软件研发领域特征一个简要总结,欢迎大家补充或修正,这也是我下一篇Blog的引子。      古老的中国、新生的行业、年轻的公司、流动的队伍、浮躁的心态、狭小的空间、广阔的天地、自由的思想、多变的技术、不定的需求、频繁的加班、疲惫的身体、高昂的热情...。

leowindcsdn的专栏 397

1_02、软件研发模型

软件研发模型

weixin_42348447的博客 198

软件开发之原型构造

今天,我想谈谈原型构造。在实际工作中,我们重视原型吗?当我深入研读原型的很多论文,再结合自己的项目实践,发现原型在软件研发过程中有举足轻重的作用。编写原型可以作为技术探索、可行性验证和辅助理清思路的手段。但是,显然,选择“编写原型”的时机往往比编写原型本身难,那是因为,我们常常都没有在规范的软件研发流程指导下工作。在我总结的软件研发核心工作流程中,我把原型构造放在全局设计阶段之后是有特殊的...

weixin_34409357的博客 527

软件研发人员的考核

<iframe align="top" marginwidth="0" marginheight="0" src="http://www.zealware.com/46860.html" frameborder="0" width="468" scrolling="no" height="60"></ifra

45

《软件研发成本度量规范》深入解读及应用案例分享

《软件研发成本度量规范》深入解读及应用案例分享 【下载地址】软件研发成本度量规范深入解读及应用案例分享 《软件研发成本度量规范》深入解读及应用案例分享项目,全面解析了该规范的编制背景、核心内容及实际应用。文档详细介绍了规范的编制过程、关键条款与定义,并提供了典型应用场景和成本估算的具体示例。通过丰富的实际案例分享,展示了...

gitblog_06713的博客 489

第二章 软件测试基础 2.4 软件研发组织和流程

如果你决定保留7个模型,不论何时,一旦有变化发生(新需求的提出,原需求的更新,团队接受了一种新方法,采纳了一项新技术...),你就需要考虑变化对这7个模型产生的影响并采取相应的措施。而且,不用在模型中包容所有的细节,只要足够的细节就够了。没有必要试图在一开始就建立一个囊括一切的模型,只要开发一个小的模型,或是概要模型,打下一个基础,然后慢慢的改进模型,或是在不再需要的时候丢弃这个模型。软件开发的主要目标是以有效的方式,制造出满足投资者需要的软件,而不是制造无关的文档,无关的用于管理的工件,甚至无关的模型。

linglong911224的博客 1016

互联网软件研发行业:依然值得深耕的黄金赛道

在人工智能、云计算等技术快速发展的今天,许多人对互联网软件研发行业的前景产生了疑问:这个行业是否还有学习价值?是否还能提供优质的工作机会?本文将通过行业现状分析、典型案例解读和职业发展建议,为你揭示软件研发行业依然蓬勃的生命力。

专注于编程、AI、人工智能等多个领域内容研究和分析 888

首个汽车行业软件研发效能成熟度模型标准研讨会成功举办

2022年伊始,在以往的研究基础上,云上软件工程团队展开面向汽车行业的研发效能调研工作,经过6个月准备,9月22日云计算标准和开源推进委员会召开了《面向行业场景的软件研发效能成熟度模型 第1部分:汽车行业》标准第二次研讨会。

weixin_42556618的博客 308

版本(alpha,beta等)的解释

初夏的专栏 2万+

软件研发项目管理各阶段文档汇总:项目管理全周期文档解决方案

软件研发项目管理各阶段文档汇总:项目管理全周期文档解决方案 去发现同类优质开源项目:https://gitcode.com/ 项目介绍 软件研发项目管理各阶段文档汇总是一款针对软件开发项目管理全生命周期的文档模板集。该集合涵盖了从项目启动、规划、执行、监控到收尾的各个阶段所需的重要文档,旨在帮助项目经理和团队成员高效、有序地推进项目进程。 项目技术分析 本项目采用文档模板的形式,涵盖了项目管理的关...

gitblog_06739的博客 920
上一篇: 敏捷之路——从软件研发者角度看软件研发过程改进
下一篇: 敏捷原则
xiaohaige
博客等级 码龄25年 1粉丝 17原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值