.NET应用迁移到.NET Core(二)风险评估

2016年12月1日下午微软技术大会Microsoft Ignite China,有幸和大家分享一门课程,课程信息如下,欢迎大家到时来捧场。本文介绍下应用迁移的风险评估。


很多移植项目超出预算或未能按时完成,主要是因为没有很好地管理移植过程中可能遇到的风险。风险是在估计进度和资源时要考虑的一个重要因素。在应用程序移植项目中,这些风险来自与移植相关的不同方面,主要包括下面几种:

  • 移植工程师的技能水平和移植经验。

  • 使用的编译器。

  • 使用的编程语言。

  • 第三方软件和中间件的可用性。

  • 编译环境和工具。

  • 平台依赖的结构。

  • 平台和硬件依赖的代码。

  • 需要搭建的测试环境。

  • 用户界面需求。

依赖于要移植的具体应用程序,以上各个方面的每一个都可能给移植项目带来不同的复杂度和风险。评估这些复杂度和风险的级别,可以帮助你确定它们是不是可管理的。

技能水平和移植经验

         应用程序移植和软件开发最明显的区别就是编程人员所掌握的技能。虽然软件开发人员往往是某一领域内比较专业的人员,但是要做软件移植的开发人员却需要更宽广的知识和技能。一个应用程序开发人员可以是Windows开发环境上的.NET专家,或者是Windows操作系统上SQL Server的数据库专业开发人员;但是,从事代码移植工作的工程师却通常需要时两个或者更多操作系统、编程语言、编译器、调试器、数据库、中间件或最新的基于网页的技术方面的专家。他们还需要知道怎样安装和配置第三方数据库或中间件。

         应用程序开发人员需要的往往是专才,而移植工程师则多是通才。应用程序开发人员可以为一个软件工作18个月,但是移植工程师在一个项目上往往只需要工作3~6个月,并且在上一个项目完成以后,即可投入下一个新的移植项目中。为一个移植项目找到完全适合的移植工程师有时候是很困难的,从老的技术移植到新的技术上时尤其如此。

编译器

         Windows平台上使用的编译器和编译器框架,与Linux平台上使用的有很大不同。如果在Windows平台和Linux平台上使用的是相同的编译器,移植工作将会变得容易一些,例如在两个平台上都是用的是GNU编译器,除了-g-c标志外,不同的编译器使用的编译器标志可能大不相同,尤其是应用程序使用C++语言的时候。

         另外一个需要考虑的事情是编译器的版本。要移植的代码可能是几年前使用老版本的编译器编译的,这些代码可能使用了与新的编译器不同的语法,这就使得在不同的编译器上移植程序比较困难,因为这些编译器可能支持也可能不支持老的标准,即使新的编译器支持老的标准,不同编译器对这些标准的支持方式也可能不太相同。

.NET Core项目的C# 编译器的实现非常完整,和.NET编译器实现遵循同样的ECMA标准的“Roslyn”新编译器,大大降低了移植.NET项目的难度。

第三方软件和中间件的可用性

         当待移植的应用程序使用了第三方软件或中间件时,移植的复杂度会随之增加,尤其是在目标平台上没有这些第三方产品时,移植的难度会更大。可能会出现在Linux 平台上没有可用的第三方产品。在过去的几年中,一些中间件厂商,例如IBMOracle等都把他们的中间件产品移植到了Linux上。他们花了一些功夫,使那些已经使用或者准备使用Linux作为企业平台的公司在Linux上可以使用它们的中间件产品。这也是为什么越来越多的公司愿意把应用程序从Windows移植到Linux上的部分原因。

编译环境和工具

         编译环境越简单,理解如何编译源代码所需的时间也就越少。需要多遍编译的编译环境往往都很复杂。在这些多遍编译中,使用不同的编译器标志来编译目标文件,以便解决模块间的互相依赖。第一遍编译一些模块,第二遍可能会编译更多的模块,但是第二次编译使用了前面的编译的结果,以此类推,直到整个编译过程结束。有时候,根据一些非标准的配置文件,编译脚本会调用其他脚本来自动生成一些文件。这些文件的大部分可以和待移植的文件一样看待,但是事实上,这些脚本工具和配置文件才是要移植到目标平台上的内容、这种类型的工具往往会在评估和分析时漏掉了,进而可能会破坏已经制定的进度计划。

         源代码控制是另一个必须考虑的。在Linux环境下,SubversionGit是应用最广泛的源代码控制工具,在一个移植项目中,如果有多个工程师同时来移植相同的模块,那么就需要进行源代码控制。

平台依赖的结构

         当从基于x86Windows平台移植到基于RISC/ARM结构的Linux平台上时,需要检查应用程序对字节序的依赖和字母大小写敏感,例如,为了计算或数据操作而是用了字节交换的应用程序。在没有正确修改字节交换逻辑的情况下,调试问题将变得非常麻烦,因为很难找到数据在哪里出了问题,这主要是因为问题的根源通常是在发生问题的代码之前很远的地方。在调查和分析阶段,一定要找出平台依赖的结构。

平台/硬件依赖的代码

         需要内核扩展和设备驱动程序支持的应用程序时最难移植的。所有平台的内核API都不遵循任何标准。因此,API调用、参数个数,甚至是怎样把这些扩展装载到内核,在各个平台上都是不同的。多数情况下,都需要在Linux上开发新的代码。不过有一件事可以肯定,内核代码通常是使用C语言或者平台相关的汇编语言编写的。

搭建测试环境

         移植工作完成以后,如果项目的范围还包括系统测试和验证,测试代码所需要的设备可能也会增加移植的复杂度。如果应用程序需要在复杂的集群或网络环境中测试,设置环境和调配资源也会增加项目的时间。

         测试也可能包括性能测试。通常,性能测试都需要运行最大配置,以便检测应用程序在满负载下的运行情况。

         移植应用程序测试工具的工作也需要包含在移植进度计划中。需要对包括软件测试和专用硬件配置的测试工具进行评估,以确定其需要多长时间进行移植和配置。

用户界面需求

         移植用户界面可能很简单,也可能很复杂。基于ASP.NET的用户界面比较容易移植,基于WPF/WinForm技术的用户界面就难以移植了,.NET Core不支持WPF/WinForm

 

下面的表总结了需要考虑的各个方面,各个方面都根据其使用的技术列出了难、中、易。

 

内容

容易

中等复杂度

高复杂度

编译器/编程语言

C#F#

使用的语言在.NET Core上支持有限

待移植代码的是C++/CLI

使用第三方产品或中间件

None

.NET Core上支持的和可用的

Linux上不支持的;

使用了C++编写的第三方工具

编译环境和工具

Msbuild 脚本

Msbuild 脚本和编译脚本组合在一起


平台/硬件依赖的代码

非平台/硬件依赖的代码

平台/硬件依赖的代码来自第三方产品,而且已经移植到了.NET Core

使用了内核扩展及设备驱动代码

测试环境及其搭建

独立的

客户端/服务器设置

网络、高可用行,集群;需要外部设备来测试,如打印机、光纤连接通道磁盘等

用户界面

ASP.NET MVC

ASP.NET WebForm

不可移植的用户界面,例如WPF

         经验表明,整个移植项目所需的实际工作量,在移植项目开始的前两三周,就可以评估出来。这段时间是待移植代码刚交付给移植项目组,而且移植工程师刚开始熟悉该软件程序,也可能是移植工程师刚开始移植该软件程序。他们开始分解应用程序组件,并搭建最初的编译环境。在最初的两三周内,移植工程师会完成编译环境的配置,并开始编译一些模块。

         过了最初的两三周后,最好重新检查原先评估的进度计划,并根据刚得到的实际经验决定是否对计划进行调整。



.NET社区新闻,深度好文,微信中搜索dotNET跨平台或扫描二维码关注

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/327773.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

.NET应用迁移到.NET Core(一)

2016年12月1日下午微软技术大会Microsoft Ignite China,有幸和大家分享一门课程,课程信息如下,欢迎大家到时来捧场。本文介绍下应用迁移的一个过程。 把一个运行在某个操作系统和硬件结构上的软件,在另一个操作系统和硬件结构上重…

WIN10的IE错误代码inet_e_resource_not_found解决办法

WIN10的IE错误代码inet_e_resource_not_found解决办法 原创 候鸟307183846 最后发布于2019-08-27 13:31:54 阅读数 2413 收藏 展开 解决方案: 1、在Internet选项里,点《连接》标签,按下《局域网设置》按钮,在对话框里&#…

404问题

、配置Tomcat 启动测试! 可能遇到的问题:访问出现404,排查步骤: 查看控制台输出,看一下是不是缺少了什么jar包。如果jar包存在,显示无法输出,就在IDEA的项目发布中,添加lib依赖&…

@Valid注解的使用---SpringMvc中的校验框架@valid和@validation的概念及相关使用

https://www.cnblogs.com/charlypage/p/9385146.html 第5章—构建Spring Web应用程序—关于spring中的validate注解后台校验的解析 关于spring中的validate注解后台校验的解析 在后台开发过程中,对参数的校验成为开发环境不可缺少的一个环节。比如参数不能为null&…

java中的AIO

转载自 java中的AIO简介jdk7中新增了一些与文件(网络)I/O相关的一些api。这些API被称为NIO.2,或称为AIO(Asynchronous I/O)。AIO最大的一个特性就是异步能力,这种能力对socket与文件I/O都起作用。AIO其实是一种在读写操作结束之前允许进行其他操作的I/O…

Mybatis+MySQL动态分页查询数据经典案例(含代码以及测试)

最近在用Mybatis做项目的时候遇到了不少问题,今天我就在这和大家分享一下,稀稀拉拉的研究了两天,终于搞好了! 开发人员:1111 开发软件:Myeclipse 用到的框架技术:Mybatis 数据库:MyS…

细说ASP.NET Core静态文件的缓存方式

一、前言 我们在优化Web服务的时候,对于静态的资源文件,通常都是通过客户端缓存、服务器缓存、CDN缓存,这三种方式来缓解客户端对于Web服务器的连接请求压力的。 本文指在这三个方面,在ASP.NET Core中静态文件的实现过程和使用方法…

金田项目的总结

一个搜索框对手机、姓名、内容进行搜索 <select id"list" parameterType"java.lang.String" resultMap"BaseResultMap">select<include refid"Base_Column_List"/>from user_backstagewhere 11 and is_deletedN<if te…

文章中文字乱码问题解决办法集合

乱码问题 测试步骤&#xff1a; 1、我们可以在首页编写一个提交的表单 <form action"/e/t" method"post"><input type"text" name"name"><input type"submit"> </form>2、后台编写对应的处理类 …

.NET开源两年之后社区贡献如何

微软在 2014 年开源了 .NET 核心框架&#xff0c;欢迎社区贡献代码。2015 年&#xff0c;一位 .NET 开发者分析了开源一年之后的社区贡献。2016 年年底又到了&#xff0c;这位开发者再次发表文章&#xff0c;分析了 .NET 开源两年之后的情况。 这一次他分析了 15 个 .NET 开源项…

java把控件跑挂了_Java代码动态修改 ConstraintLayout 内控件布局的辅助类

##上图ConstraintUtil.javaimport android.support.annotation.IdRes;import android.support.constraint.ConstraintLayout;import android.support.constraint.ConstraintSet;import android.transition.TransitionManager;/*** Created by xiaolei on 2017/9/8.*/public cla…

Vue动态组件

转载自 Vue动态组件 在动态组件上使用 keep-alive 我们之前曾经在一个多标签的界面中使用 is 特性来切换不同的组件&#xff1a; <component v-bind:is"currentTabComponent"></component> 当在这些组件之间切换的时候&#xff0c;你有时会想保持这些组…

ASP.NET Core Kestrel部署HTTPS

ASP.NET Core配置 Kestrel部署HTTPS。现在大部分网站已经部署HTTPS&#xff0c;大家对于安全越来越重视。 今天简单介绍一下ASP.NET Core 部署HTTPS&#xff0c;直接通过配置Kestrel。大家也可以通过前置Nginx来部署HTTPS。 下面直接进入正题。 新建项目并添加引用 新建一个ASP…

配置phython环境

参考资料 https://www.runoob.com/python/python-install.html https://www.cnblogs.com/huangbiquan/p/7784533.html Python下载 Python最新源码&#xff0c;二进制文档&#xff0c;新闻资讯等可以在Python的官网查看到&#xff1a; Python官网&#xff1a;https://www.py…

ASP.NET Core 之 Identity 入门(三)

前言 在上一篇文章中&#xff0c;我们学习了 CookieAuthentication 中间件&#xff0c;本篇的话主要看一下 Identity 本身。 最早2005年 ASP.NET 2.0 的时候开始&#xff0c; Web 应用程序在处理身份验证和授权有了很多的变化&#xff0c;多了比如手机端&#xff0c;平板等&…

玩物得志Java笔试题_代码规范利器-CheckStyle

本期内容分为五个部分&#xff0c;阅读时长预估7分钟&#xff1a;使用背景CheckStyle使用意义CheckStyle安装与使用CheckStyle检查配置示例落地使用情况及效果使用背景玩物得志目前还处在一个狂奔业务的时期&#xff0c;开发一般都全力支撑业务的快速奔跑&#xff0c;没有太多的…

Json交互处理

Json交互处理 JSON简介 JSON(JavaScript Object Notation, JS 对象标记) 是一种轻量级的数据交换格式&#xff0c;目前使用特别广泛。采用完全独立于编程语言的文本格式来存储和表示数据。简洁和清晰的层次结构使得 JSON 成为理想的数据交换语言。易于人阅读和编写&#xff0…

利用 async amp; await 的异步编程

一、异步编程的简介 通过使用异步编程&#xff0c;你可以避免性能瓶颈并增强应用程序的总体响应能力。 Visual Studio 2012 引入了一个简化的方法&#xff0c;异步编程&#xff0c;在 .NET Framework 4.5 和 Windows 运行时利用异步支持。编译器可执行开发人员曾进行的高难度工…

xml配置文件显示为文本文件问题

idea 新建的xml文件显示为文本问题 原因: 由于新建不带后缀名的文件的时候 idea会相对智能的让你选择 文件规则 解决: settings->File types 中找到对应的文件类型显示 ,把 你不小心添加的 正则 给去除就好了, 我这里的配置如下图 可以自己进行设置&#xff08;&…