微信小程序制作
当前位置:网站首页 > 软件开发制作 > 西安软件开发成本高低与什么有关系呢 返回列表

西安软件开发成本高低与什么有关系呢

作者:admin 时间:2023-10-17 浏览量:107
西安软件开发成本高低与什么有关系呢?软件开发项目中,一个常见的争论是花时间提高软件质量还是专注于发布更有价值的功能。通常,功能的交付压力会主导着讨论,导致许多开发人员抱怨他们没有时间提升架构和代码质量。这句谚语说的是任何以问号结尾的文章标题都可以用“否”来概括。了解我的人知道我会颠覆这样的规律,但是这篇文章讨论的更进一步:它颠覆了问题本身。这个问题假定了质量和成本之间的权衡,通过本文,我将解释这种权衡并不适用于软件,高质量的软件实际上更便宜。虽然我大部分的文章都是针对专业软件开发人员的,但本文并不需要具有软件开发的专业知识。我希望这篇文章对任何关注软件工作的人都有价值,特别是那些软件开发团队客户的商业领袖。
我们习惯于在质量和成本之间进行权衡。当我更换智能手机时,可以选处理器更快、屏幕更好、内存更大但同时也更昂贵的机型,或者可以放弃一些质量换取更低的价格。但事无绝对,有时候我们也可以花更少的钱买到高质量的东西。我们往往对质量有不同的定义:有些人并没有真正注意到一个屏幕比另一个更好。但多数情况下,更高的质量意味着更多的花费。
在谈西安软件开发质量之前,需要先来解释下什么是软件质量。这是第一个复杂问题,很多东西可以算作软件的质量。从用户界面的角度来看:它是否能便捷的引导我完成某项任务,使我更有效率且不会遇到阻碍?从可靠性的角度来看:它是否包含导致错误和崩溃的缺陷?从架构的角度来看:源代码是否分为明确的模块,以便程序员可以轻松找到并理解本周需要处理的代码?这三个质量的例子并不是一个详尽的列表,但它们足以说明一个重要的观点。如果我是软件的客户或用户,我并不理解我们称之为“质量”的一些东西。用户可以判断用户界面是否良好,一位管理者可以判断该软件是否使他的员工工作更有效率,用户和客户会注意到缺陷,特别是损坏数据或使系统暂时无法运行的缺陷,但是客户和用户无法理解软件的架构。
因此,我将软件质量属性划分为外部(例如UI和缺陷)和内部(架构)。区别在于,用户和客户可以理解什么样的软件产品具有高外部质量,但无法区分内部质量的高低。
乍一看,内部质量和客户没有关系
既然客户或用户看不到内部质量,那么它重要吗?想象一下我和Rebecca各自写了一个跟踪和预测航班延误的应用程序。我们的应用程序核心功能相同,都有同样优雅的用户界面,并且几乎没有任何缺陷。唯一的区别是她的内部源代码整洁有序,而我的却是混乱的。另外一个区别是:我的产品售价6美元,她的产品售价10美元。
由于客户不会看到源代码,并且它不会影响应用程序的运行,为什么有人会为Rebecca的软件额外支付4美元?通俗的讲,没有必要为更高的内部质量支付更多的钱。
换句话说,为外部质量买单是有意义的,但为内部质量买单是没意义的。用户可以判断他是否要为更好的用户界面支付更多的费用,因为他们能够评估用户界面的好坏。但是用户无法看到软件内部模块化的结构,更不用说判断它的好坏了。既然如此,为什么西安软件开发者要花时间和精力来提高软件的内部质量呢?
提升内部质量使软件改进更加便捷
为什么软件开发人员会在内部质量上大做文章呢?程序员大部分时间都在修改代码。即使在新系统中,几乎所有编程都是在现有代码库上完成的。当我想为软件添加新功能时,第一个任务就是弄清楚这个功能如何适应现有应用程序的流程,然后我需要更改该流程以使适应我的功能。我经常需要使用已经在应用程序中的数据,因此我需要了解这些数据代表什么,它与周围数据的关系以及需要为新功能添加哪些数据。
所有这些都是有关理解现有代码的。但是软件很难理解。逻辑可能变得纠结,数据可能难以理解,某个命名可能六个月前对Tony有意义,但对我来说,这和他离开公司的理由一样神秘。凡此种种,开发人员称之为cruft(1),即当前代码与理想情况之间的差异。
内部质量的一个主要特点是让我更容易弄清楚应用程序的工作原理,这样就可以知道如何添加内容。如果将软件很好地划分为独立的模块,就不必阅读全部500,000行代码,我可以在几个模块中快速找到几百行。如果我们将精力放在明确的命名上,我可以快速了解代码的各个部分,而不必阅读细节。如果数据合理地遵循基础业务的语言和结构,我可以很容易地理解它与客户服务端的请求之间的关系。技术债使我需要花费更多的时间理解如何做出更改,也提升了犯错误的概率。如果发现问题,则需要花费更多的时间去定位和解决问题。如果没有发现这些问题,它们就会成为线上问题,以后会花更多的时间来修理。
我的改动也会影响未来。我可能会找到一种快速添加这个功能的方式,但这会违背程序模块化结构,增加了技术债。如果我这样做了,虽然今天可以更快的完成,但是在未来几周和几个月里,其他所有必须处理此代码的人都只能放慢速度。一旦团队中的其他成员也决定用这种快捷的方法来完成功能,一个易于修改的应用程序会变得任何一个微小的改动都要耗费数周的时间。
客户确实会关心新功能的快速引入
在这方面内部质量对用户和客户至关重要。更好的内部质量使得添加新功能更容易、更快、更便宜。可能现在我和Rebecca的应用程序是相同的,但在接下来的几个月里,由于Rebecca的高内部质量,她可以每周都添加新功能,而我却一直努力试图在这些技术债中增加新功能。我的生产速率在降低,很快她的软件就比我的软件有更多的功能了。然后,即便她提升价格,客户也都删除了我的应用程序,用了Rebecca的。
内部质量影响的可视化
内部质量的基本作用是降低未来变化的成本,但是编写好的软件需要额外的努力,这在短期内会产生一些成本。一种可视化的方法是使用以下伪图(pseduo-graph),纵坐标为软件累积的功能,横坐标为实现它的时间(成本)。对于大多数软件工作,曲线看起来像这样。内部质量较差时如上图所示。最初进展很快,但随着时间的推移,添加新功能变得更加困难。即使很小的变化也需要程序员理解大量晦涩难懂的代码。修改代码时,会产生意外的破坏,导致需要长时间来测试,且有很多缺陷要修复。专注于高内部质量就是减少生产力的下降。事实上,有些产品会产生相反的效果,开发人员可以利用先前的工作轻松构建新功能。这种情况是一种罕见的情况,因为它需要一支技术精湛,训练有素的团队来实现这一目标。但我们偶尔会遇到。微妙之处在于,在一段时间内,低内部质量比高内部质量的生产力更高。在此期间,在质量和成本之间存在某种权衡。问题是:两条线交叉前的这段时间有多长?
此时我们可以明白为什么这是一个伪图。因为无法量化软件团队所交付的功能。由于无法量化产出,从而无法衡量生产率,因此无法对低内部质量的后果进行可靠的量化。无法衡量产出在专业工作中非常普遍,比如我们如何衡量律师或医生的生产力?我通过收集我所知道的熟练开发人员的意见来评估两条线交叉点。答案让很多人感到惊讶。开发人员发现质量差的代码会在几周内显着降低开发速度。因此,内部质量和成本之间的权衡取舍并不多。即使很小的软件工作也会受益于对良好软件实践的关注,当然我可以从我的经验中证明这一点。
即使最好的团队也会产生技术债
许多非开发人员倾向于认为只有当开发团队粗心大意或犯错时才会发生这种事情,但即使是最优秀的团队也会在工作时不可避免地产生一些技术债。我想用一个和我们最好的技术团队负责人聊天的故事来说明这一点。他刚刚完成了一个被广泛认为是非常成功的项目。无论是在功能,时间和成本方面,客户都对交付的系统感到满意。同事们对在此项目的工作经验给出了非常积极的评价。技术负责人非常高兴,但承认系统的架构并不那么好。我的反应是“怎么可能,你是我们最好的架构师之一?”他的答复是任何一位经验丰富的软件架构师都熟悉的答案:“我们做出了很好的决策,但现在才明白应该如何构建它”。许多人,包括软件行业的一些人,将构建软件比作建造教堂或摩天大楼,这也是为什么我们称资深程序员为“架构师”。但构建软件相比于物理世界不同,它是存在于未知的不确定世界中。软件的客户只是粗略地了解他们在产品中需要哪些功能,并在构建软件时了解更多信息(特别是一旦早期版本发布给用户后)。软件开发的构建模块(语言,库和平台)每隔几年就会发生重大变化。映射到物理世界中就是,当建筑物被建造和使用后,客户要添加新楼层并改变楼层平面图,混凝土的基本属性也每隔一年就会发生变化。鉴于这种程度的变化,软件项目总是推陈出新。我们几乎不会去主动了解那些已经被轻易解决的问题。当我们构建解决方案时,自然会了解它,所以我常常听到,团队只有在花了一年左右的时间构建它之后,才能真正理解软件的架构。即使是最好的团队在他们的软件中也会有技术债。不同的是,最好的团队其技术债较少,同时也会偿还技术债,以便继续快速添加功能。他们花时间完成自动化测试,以便能够快速解决问题并减少时间的浪费。他们经常进行重构,以便持续的偿还技术债。当团队成员工作目标相互冲突时,持续集成可以最大限度地减少技术债。一个常见的比喻就是清理厨房的工作台面和厨具。你做饭时不得不弄脏东西,但是如果不快速清理东西,淤泥干涸,更难去除,所有肮脏的东西会妨碍烹饪下一道菜。
即使最优秀的团队也会产生技术债,但是通过保持高内部质量可以使其变得可控高内部质量可以最小化技术债,使得添加新功能的工作量、时间和成本都更少
可悲的是,西安软件公司人员通常不会很好地解释这种情况。我多次和开发团队谈过,他们说“他们(管理层)不会让我们写出高质量的代码,因为这需要太长时间”。开发人员通常需要适当的专业性来关注质量。但是,这种道德主义的论证意味着高质量是有代价的,这使他们的论点失败了。令人讨厌的是,低质量的代码既使得开发人员的生活更加艰难,又让客户付出了更多成本。在考虑内部质量时,我强调我们应该使用经济论证的方法。高内部质量降低了未来功能的成本,这意味着花时间编写好的代码实际上降低了成本。
联系方式:18066528545   029-89298792

阅读过此文章的读者,还阅读过下面的文章

  • 小程序与原生APP那个好?下面我们就来一起了解一下小程序与原生APP那个好。以下是所整理的小程序与原生App的内容,希望对你有所帮助。

    小程序的优点:

    基于微信平台开发,享受微信自带的流量,这个优点最大
    无需安装,只要打开微信就能用,不占手机内存,体验好
    开发周期段,一般最多一个月就可以上线完成
    开发所需的资金少,所需资金是开发原生APP的一半不到
    小程序名称是唯一的,在微信的搜索里权重很高
    容易上手,只要之前有HTML+CSS+JS基础知识,写小程序基本没有大问题
    基本不需要考虑兼容性问题,只要微信可以正常运行的机器,就可以运行小程序
    发布,审核高效,基本上午发布审核,下午就审核通过,升级简单,支持灰度发布
    开发文档完善,社区活跃
    支持插件式开发,一些基本功能可以开发成插件,供多个小程序使用
    小程序的缺点:
    局限性很强(比如页面大小不能超过1M,不能打开超过5个层级的页面,样式单一,小程序的部分组件已经是成型的- 了,样式不能修改,比如幻灯片,导航)只能依赖于微信依托与微信,无法开发后台管理功能
    不利于推广,推广面窄,不能分享朋友圈,只能分享给朋友,附近小程序推广,其中附加小程序也收到微信限制
    后台调试麻烦,因为API接口必须https请求,且公网地址,也就是说后台代码必须发布到远程服务器上;当然我们可以修改host进行dns映射把远程服务器转到本地,或者开启tomcat远程调试;不管怎么说终归调试比较麻烦
    前台测试有诸多坑,最头疼莫过于模拟器与真机显示不一致
    js引用只能使用绝对路径,不能操作DOM
    原生App优点:
    原生的相应速度快
    对于有无网络操作时,譬如离线操作基本选用原生开发
    需要调用系统硬件的功能(摄像头,拨号,短信蓝牙…)
    在无网络或者弱网情况下体验好
    原生App缺点:
    开发周期长,开发成本高,需要下载
  • 小程序和Vue写法的区别?下面我们就来一起了解一下小程序和Vue写法的区别。以下是我所整理的小程序和Vue写法的区别,希望对你有所帮助。

    遍历的时候:

    • 小程序wx:for=“list”,
    • 而Vue是v-for=“item in list”

    调用data模型(赋值)的时候:

    • 小程序:this.data.item // 调用,

    • 小程序:this.setDate({item:1})//赋值

    • Vue:this.item //调用,

    • Vue:this.item=1 //赋值

  • 小程序调用后台接口遇到那些问题?下面我们就来一起了解一下小程序调用后台接口遇到那些问题。以下是所整理的小程序调用后台接口遇到的问题,希望对你有所帮助。

    数据的大小限制,超过范围会直接导致整个小程序崩溃,除非重启小程序

    小程序不可以直接渲染文章内容这类型的html文本,显示需要借助插件
    注:插件渲染会导致页面加载变慢,建议在后台对文章内容的html进行过滤,后台直接处理批量替换p标签div标签为view标签,然后其他的标签让插件来做
  • 分析微信小程序的优劣势?下面我们就来一起简单的了解一下微信小程序的优劣势。下面是所整理的微信小程序的优劣势,希望对你有所帮助。

    优势:

    容易上手,基础组件库比较全,基本不需要考虑兼容问题
    开发文档比较完善,开发社区比较活跃,支持插件式开发
    良好的用户体验,无需下载,通过搜索和扫一扫就可以打开,打开速度快,安卓上可以添加到桌面,与原生APP差不多
    开发成本比APP要低
    为用户提供良好的保障(小程序发布,严格是审查流程)

    劣势:
    限制较多,页面大小不能超过1M,不能打开超过5个层级的页面
    样式单一,部分组件已经是成型的,样式不可修改,例如:幻灯片,导航
    推广面窄,不能分享朋友圈,只能通过分享给朋友,附加小程序推广
    依托与微信,无法开发后台管理功能
    后台调试麻烦,因为api接口必须https请求且公网地址
    真机测试,个别安卓和苹果表现迥异,例如安卓的定位功能加载很慢

  • 简单描述下微信小程序的 相关文件类型。下面我们就来一起了解一下微信小程序的 相关文件类型。以下是所整理的微信小程序的 相关文件类型,希望对你有所帮助。

    wxml 模板文件,是框架设计的一套标签预言,结合基础组件,事件系统,可以构建出页面的结构

    wxss 样式文件,是一套样式语言,用于描述WXML的组件样式
    js脚本逻辑文件。逻辑处理网络请求
    json配置文件,小程序设置,如页面注册,页面标题及tabBar
    app.json 整个小程序的全局配置,包括:
    pages:\[所有页面路径]
    网络设置(网络超时事件)
    页面表现(页面注册)
    window:(背景色,导航样式,默认标题)
    底部tab等
    app.js 监听并处理小程序的生命周期函数,声明全局变量等
    app.wxss 全局配置的样式文件

  • 请谈谈原生开发小程序,wepy,mpvue的对比?下面我们就来一起了解一下原生开发小程序,wepy,mpvue的对比。个人认为,如果是新项目,且没有旧的 h5 项目迁移,则考虑用小程序原生开发,好处是相比于第三方框架,坑少。

    而如果有 老的 h5 项目是 vue 开发 或者 也有 h5 项目也需要小程序开发,则比较适合 wepy 或者 mpvue 来做迁移或者开发,近期看wepy几乎不更新了,所以推荐美团的mpvue。
    而如果如果团队前端强大,自己做一套框架也没问题。

029-86195145 180 6652 8545 西安嘉瑞德网络科技公司
工作时间:周一到周六 8:30-18:30
邮箱:2528823962@qq.com
QQ:2528823962
地址:陕西省西安市未央元朔路明丰伯马都A座10820室
  • 微信小程序制作微信二维码
    扫码咨询
Copyright © 2015 西安嘉瑞德网络科技有限公司 陕ICP备17015187号-1