Visual Studio 2010 Ultimate敏捷测试驱动开发

【鸿蒙专题与实战】测试体系:单元测试、组件测试与 UI 测试 本文系统讲解鸿蒙开发中的三层测试实践:底层单元测试(用Hypium框架,优先覆盖纯函数、边界与异常)、中层ViewModel逻辑、顶层仅测3-5条关键UI路径。强调测试应“越往下写得越多”,因单元测试快且成本低,而UI测试慢易出错。通过实例说明断言拆分提升定位效率,结合覆盖率报告(hvigorwtest --coverage)发现盲区,核心是“用覆盖率找漏测,而非追求数字”。附五步落地清单:建测试文件、按优先级补用例、精简UI测试、生成报告、定位未覆盖行。下一篇将开启实战项目:从需求到上架全流程。 阅读详情
     在微软Visual Studio 2010 Ultimate Beta2版本中,MSF for Agile Software Development 5.0过程框架,是以Scrum模型为基础导向扩展,并且结合了VSTS2010工具的众多测试功能特性,为更多的从事微软.NET技术相关的开发人员以实现高质量的 软件产品。

  在本文中,笔者将介绍Visual Studio 2010 Ultimate Beta2版本中的MSF for Agile的Scrum和XP敏捷思想与VSTS2010强大的测试功能,通过对这些内容的阐述,让读者了解在VSTS2010中的敏捷测试驱动开发方法,以便于.NET开发人员能把敏捷驱动开发为导向的技术,应用在自己的项目和团队中,从而构筑出敏捷的开发团队。

  1.引言

  在前几篇的文章中提到过的Scrum,相信读者们都应该已经不陌生了,它的核心在于迭代,并且以每个sprint时间段的周期进行产品功能迭代。团队首先浏览开发需求,考虑可用技术,并对自身技术及能力做出评估,所有实践就是围绕着一个迭代和增量的过程来展开,而在每个迭代内部,可以使用测试驱动和持续集成的XP(eXtreme Programming,极限编程)工程实践。

  XP,是最轻量级的开发流程,其最主要的精神是“在客户有系统需求时,给予及时满意的可执行程序”,所以最适合需求快速变动的方案。Scrum与XP所不同的是,Scrum只是一个敏捷过程框架,它并没有提供核心的价值观与指导原则,也缺乏具体的实践方法,例如,测试驱动开发、结队编程等。Scrum仅仅规定了实施的基本流程与检查表,它是一个开放的管理框架,重心在于项目管理,而不是指导团队成员如何进行开发。这既是Scrum的优点,因为它很灵活,能够适应大多数场景,也可以兼容并包地引入其他方法学所提倡的实践;同时也是Scrum存在的固有缺陷,使得它难以被实践。如果没有一位优秀的Scrum Master,而团队成员又缺乏自我组织和管理的能力,就会让开发过程变得一团糟,团队成员将会无所适从。

  在团队中开发人员随时可以与客户进行有效沟通,撰写user stories以确认需求。简易快速的系统设计,撰写独立的验证程序以解决特殊困难的问题,并找出演算法即可丢弃验证程式。规划多次小型阶段的方案计划,并且以最快得速度完成每一阶段的程序交付客户,客户负责Acceptance tests;Coding前必须完成Unit Test与Acceptance tests程序,所有模组整合前都须经过Unit Tests;开发人员必须快速回应Bug和需求变更;要求二人一组使用一台电脑设计程序,当一人coding时,另一人负责思考与设计(结对编程);程序必须符合程序规范,并常做程序的重构(Refactoring)。

  在Agile开发实践方面,Scrum可以借鉴XP提倡的结队编程以及测试驱动开发实现编码,通过重构对编码进行调整以适应需求的变化,Scrum为体,XP为用。XP开发流程的基本步骤,如图1所示。


图1 XP开发流程的基本步骤

  测试驱动开发意味着你要先写一个自动测试,然后编写恰好够用的代码,让它通过这个测试,接着对代码进行重构,主要是提高它的可读性和消除重复,这将会对Agile Team整体素质要求较高。

  时至今日,Agile Process的精神已经成为共识,但是没有一种固定的流程可以重复使用在不同的方案上,而且不管是RUP、XP、SCRUM、或其他的开发流程都允许相当大的弹性,我们必须按方案性质的不同,调整或混合出适合的开发流程,并允许团队在进行中做必要的弹性修改,才能够达成目标。


  2.敏捷之驱动开发

  在XP开发实践中的TDD(Test Driven Development),它有一个别称叫 Test-First Programming,要求开发的第一步是根据需求,必须先写单元测试程序,然后再写实现程序让符合需求的测试通过。我们知道XP中的需求是以“用户故事”(User Story)的形式描述的,而用户故事实质上就是一种软件“特性”(Feature)。TDD 讲的是如何通过编写“测试”,尤其是单元测试,来驱动软件的设计和编程。

  系统测试从哪里来?来自系统需求。系统需求从哪里来?来自用户目标,TDD则也不例外。在需求不稳定的情况下,这样的TDD会有什么问题?会不会带来许多冗余的工作?答案是肯定的,这样必然会带来单元测试的不稳定,这就需要敏捷开发人员有相当强的抽象能力,抽象、界定出主要相对稳定需求就可以实施TDD。

  敏捷团队可以采用在软件工程学里有比较成熟的OOAD(Object Orient Analysis & Design,面向对象的分析和设计)软件开发方法(参见笔者著作《我也能做CTO之程序员职业规划》的高级程序员技术能力),在用户需求层面找到,并抽象出相对不变的需求。OOAD科学分析法体现的是‘现实事实的抽象理解能力’,以业务为中心来分析解决问题,不涉及求解方案。分析阶段所做的主要工作是理解问题和需求构模,将现实世界中的问题映射到问题域,从而稳定主要需求。OOAD包括‘设计模式能力’,反映计算机世界来体现现实世界。

  分析阶段主要是明确用户的功能需求,满足用户所需的系统部件及其结构。设计阶段则主要是确定实现用户需求的方法,即怎样做才能满足用户需求,并构造出系统的实现蓝图。

  OOAD方法要求在设计中要映射现实世界中(指问题域,如图2所示)的对象和实体,如程序员、汽车、项目实施人员等。这就需要在设计中尽可能地接近现实世界,以最自然的方式表述实体。所以,面向对象技术的优点就是能够构建与现实世界相对应的问题模型(桥梁),并保持它们的结构关系和行为模式。

  例如,我们通常做的系统分析是在假定需求不变的情况下进行的,这样可以把企业的资源配置到最优的程度,但是企业的需求是变化、不稳定的,那么以变化的需求为基础建立起来的软件系统当然也就不稳定了。需求是项目的根本,既然需求都是不稳定的,那么何以建立起稳定的企业信息系统呢?


图2 软件需求抽象示意图

  采用OOAD开发的方法时的需求不稳定,可分析出这不稳定的东西就是对象。世界都是由对象组成的,而对象都是持久的,例如动物、植物已经有相当长的时间。虽然对象也在变化,动物、植物也在不断进化。但对象在一个相当长的时期内都存在,动植物的存在时间肯定比任何一家企业长久。面向对象开发方法的精髓就是从企业的不稳定需求中分析出企业的稳定对象,以企业对象为基础来组织需求、构架系统。这样得出的系统就会比传统的系统要稳定得多,因为企业的模式一旦变化,只需将稳定的企业对象重新组织就行了。

  在敏捷XP中,采用的是TDD驱动软件的设计和编程实践,即,测试驱动开

  发。笔者负责过很多项目的敏捷实践中,更喜欢UDD(Use Case-Driven Development)比较适合目前的国情。它可根据用户目标,编写软件需求,根据软件需求,编写系统(验收)测试,即,用户目标驱动。利用 UML 对软件的设计进行建模,这部分建模当然是敏捷的(agile)。简单的只需几秒钟可以迅速在人的大脑中完成,复杂的则可以画在纸上、白板上,记录在建模工具生成的电子文档中,当需求稳定后可以迅速转化成软件应用代码,在结合TDD会有很不错的效果,这种理论体系有些像太极原理,需求的变化看似武术中的招式,采用UDD见招破招,无招胜有招,这种客户的需求应变使得UDD更为敏捷。


  3.实战VSTS2010驱动开发

  在Visual Studio 2010中,敏捷测试驱动开发功能非常强大,微软把Scrum和XP敏捷思想融入到Agile过程框架之中。TFS2010中增强了团队源码版本管理、迭代开发和驱动测试开发模型等,从而给微软.Net开发人员非常大的帮助。VSTS2010测试马甲和单元测试过程,如图3所示。


图3 VSTS2010单元测试过程

  IUT——在生产环境中最终交付而开发的软件。

  Test Environment——测试环境。

  测试驱动开发(TDD)基本过程:

  (1)明确当前要完成的功能。可以记录成一个初始化测试清单(TODO)列表。

  (2)快速完成针对一个功能的测试用例编写。

  (3)测试代码编译通过,但测试用例通不过。

  (4)编写对应的功能代码。

  (5)测试通过。

  (6)对代码进行重构,并保证测试通过。

  (7)循环完成所有功能的开发。

  ·图书收藏实例

  确定好backlog,进行sprint backlog,把story拆分成更小的故事,并在把故事拆分成任务,索引卡片参考图4所示。


图4 图书收藏Story索引卡

  将案例分成任务,我们需要在很大程度上实现读者个人借阅图书的收藏集合。其中之一backlog索引卡,如图4所示。当读者到图书馆进行图书借阅中,会查询图书库所有相关类图书封面并选取其中自己最需要的几本书。这个过程叫做“书签”,图书系统将通过图书管理来支持这个活动。为图书借阅集合初始化测试清单,参考1所示。


表1 为图书借阅夹初始化测试清单


  列出表中完成有关的大部分任务测试清单,测试重点放在确保我们添加和移除图书收藏夹的时候计数是正确的,以及集合的内容和是否可以恢复集合,驱动测试时间持续1到2小时的驱动编程实践中完成这个测试清单,并确保这个测试清单不需要再次分解这个任务,以实现这个目标。

  ·实现第一个测试

  打开Microsoft Visual Studio 2010,创建一个C#测试项目,项目名称为LocalBookCollectionsTests,如图5所示。


图5 创建一个测试项目

  清除原理项目方案自动生成的unit的C#测试文件,建立一个新的名称为CollectionsTests单元测试类,如图6所示。


图6 创建一个单元测试unit类

  先用一些函数代码替换第一个测试中的语句,这样做驱动了产品代码Collections类的创建,并运行其Count属性。在CollectionsTests.cs类添加代码:

   ///
  
/// 创建一个测试清单
  
///
  [TestMethod]
  
public void EmptyCollectionsCountShouldBeZero()
  {
  Collctions collctions
= new Collctions();
  Assert.AreEqual(
0 , collctions.Count);
  }

 

  重新编译生成这个解决方案,你将看到一个错误,因为没有为Collections类定义Count。创建Collections类,填入一下代码:

   ///
  
/// 定义Count
  
///
   private int count;
  
public int Count
  {
  
get
  {
  
return count;
  }
  }

 

  运行这个测试,输出EmptyCollectionsCountShouldBeZero()单元测试成功界面,如图7所示。


图7 EmptyCollectionsCountShouldBeZero单元测试成功


  ·搁置你的测试清单代码

  为你的此次操作添加为一个版本控制搁置,这样就可以在将来常常返回到这个点(版本控制),在VS2010菜单打开View|Other Windows|Pending Changes,如图8所示。


图8 Vsts2010的View|Other Windows菜单

  通常由于你并不想在所有相关单元测试通过之前,与团队的其他成员共享文件,因此保持VSTS存储库中搁置自己的文件版本,而不是将你的变更点签入到团队代码库的分支中。完成所有单元测试后,可以直接点击Check In 按钮将此代码加入到存储库中。Pending Changes搁置窗口,如图9所示。


图9 Pending Changes搁置窗口

  Unshelve按钮可以进行版本回卷。点击Shelve按钮进行版本搁置,建立一个Test the Should Be Zero的版本搁置,如图10所示。


图10 创建版本搁置


  ·修复一个失败的测试和重构

  现在我们处理清单上另外几个简单单元测试。它们在Collections对象中添加和删除各种Collection项,并验证Count熟悉返回正确的值。

  首先在CollectionsTests.cs类中添加如下代码:

   ///
  
/// 修复一个失败的测试
  
///
  [TestMethod]
  
public void EmptyCollctionsCountShouldIsOne()
  {
  Collections collections
= new Collections();
  collections.Add(
new Collection( " Label " , new Uri( " db://book0001 " )));
  Assert.AreEqual(
1 , collections.Count);
  }

 

  生成这个项目(生成|生成项目),生成报错是因为Collection类缺少参数,如图11所示。


图11 缺少参数报错界面

  添加一个unit新类Collection.cs,加入一下代码:

   private string label;
  
private Uri uri;
  
public Collection( string label, Uri uri)
  {
  
this .label = label;
  
this .uri = uri;
  }
  
public string Label
  {
  
get
  {
  
return label;
  }
  }
  
public Uri Uri
  {
  
get
  {
  
return uri;
  }
  }

 

  替换Collections.Add()方法,修改Count属性返回count变量值。

   ///
  
/// 增加一个Count实例变量
  
///
   public void Add(Collection collction)
  {
  count
++ ;
  }

 

  再次生成这个项目,输出结果显示成功,如图12所示。


图12 输出单元测试成功结果

  再次重复上面操作,创建一个版本搁置。


  4.确认测试(BVT)

  生成确认测试(BVT)是通过产生测试列表来检查软件,它通常作为一个生成任务在团队生成结束的时候执行。当编写好一个unit测试时,你可以加入到BVT中,确保任何时候在生存库环境下运行集成生成,相同的测试程序都可以依次执行。

  我们可以把上面的EmptyCollctionsCountShouldBeZero()和EmptyCollctionsCountShouldIsOne()测试方法创建生成测试。打开Microsoft Visual Studio 2010菜单,点击Test|Windows,如图13所示。


图13 Test|Windows菜单

  点击菜单项Test|Windows|Test List Editor,打开Test List Editor界面,如图14所示。


图14 Test List Editor界面

  参考图14,点击界面“here”或者菜单Test|Create New Test List,创建一个新的测试列表,测试列表名称为BookCollectionBVT,如图15所示。


图15 创建一个新的BVT


  同理,打开菜单项Test|Windows|Test View,打开Test View浏览框从而显示驱动单元测试程序,从Test View把EmptyCollctionsCountShouldBeZero和EmptyCollctionsCountShouldIsOne拖拽拖到Test List Editor面板中,为了确保这个测试是作为集成测试的一部分运行,点击BookCollectionBVT中所要测试程序的复选框。

  点击Run Checked Tests按钮,运行这个测试程序,如图16所示。


图16 运行这个测试程序

  运行测试结果界面,如图17所示。


图17 运行测试结果界面

  这样,安装Microsoft Visual Studio 2010团队成员,在每个人的本机上开发环境上运行自己的单元测试之后,就可以添加并测试完成余下的那些索引卡下分解出来的测试列表单元测试程序清单,加入到BookCollectionBVT集成测试集合之中。

  五、总结

  Microsoft Visual Studio 2010的集成测试的功能特点结合MSF for Agile Software Development V5.0中的Scrum和XP敏捷过程框架,使从事在微软.NET技术相关工作方向的人们拥有了一把利剑,并且可以充分的协助编程人员开发出高质量的软件产品。

  Scrum专注于聚焦在找到一个最小的迭代式项目管理框架,注重敏捷的计划、跟踪和管理,而没有把它强行绑定在某一种具体的工程技术和做法之上有关,这大概这也是它非常聪明的地方。既然没有明确限定和约束,那么就代表着开放,可以适用于不同类型、不同环境下的项目。

  从Scrum和XP—>OOAD—>UDD和TDD,不禁让笔者想起太极阴阳理论,可以说太极是我们中国人千年的传统智慧,看待宇宙和世界的一种基本观点和思维方式。世界和宇宙是由阴和阳组成,两者既互为对立、矛盾,又相互依存、共生,和谐、统一地构成了整个宇宙。敏捷之道的精髓就在于客户、团队和人与人之间的沟通与互动、协作,所以,作为中国人尤其是中国的软件人,更应该开阔自己的思维,学会运用太极思想。

  孙子兵法有云:兵无常势,水无常形,能因敌变化而取胜者谓之神。很多人都向往用兵如神的境界,想必也知道读万卷书不如行万里路,纸上谈兵的故事更是耳熟能详,除了以上所讲述的内容外,也需要充分的运用敏捷和进行大量的实践。

  敏捷文化也决定管理,管理决定技术,因此实施敏捷应该只有具有先进文化的企业和团队,才能实现真正的敏捷变革,并从中获益……。

  测试代码下载

      我为it168籍稿,原文:http://tech.it168.com/a2009/1207/820/000000820565_1.shtml

 

———————————————————————
任何美好的事物只有触动了人们的心灵才变的美好;
孤独的时候看看天空里的雨,其实流泪的不只是你。

———————————————————————
 

【IIC通信】Chap.1(I2C)IIC通信原理、IIC读写时序详解 IIC通信以两根连线SDA、SCL实现了完善的全双工同步数据传送, 可以方便地构成多机系统和外围器件扩展系统。 阅读详情

相关推荐

STM32实战指南:TFTLCD液晶屏驱动与ILI9341应用解析

本文详细解析了STM32驱动TFTLCD液晶屏的实战技巧,重点介绍了ILI9341控制器的硬件连接、寄存器操作及性能优化方法。通过8080并行接口时序分析、GRAM操作优化和DMA传输应用,帮助开发者高效实现液晶屏驱动,适用于工业控制、智能家居等场景。

weixin_26873711的博客 232

使用Visual Studio Team Explorer管理项目源代码

    最近参与了WPMind站长张欣发起的一个WP7开源项目,其中用到了Visual Studio Team Explorer进行源代码管理。以下是使用Visual Studio Team Explorer管理Codeplex上源代码的一些说明,感谢张欣提供的素材。   1. 设置    CodePlex支持Subversion、Visual Studio Team Explorer和Tea...

weixin_34129145的博客 396

第二次 PX4仿真环境搭建过程全记录

参考链接 https://blog.youkuaiyun.com/yanwumuxi/article/details/80097294 https://www.ncnynl.com/archives/201709/2013.html 一、安装依赖项 我们使用Debian / Ubuntu LTS 作为Linux的标准支持版本,但是也支持Cent OS 和 Arch Linux的发行版本。 权限设置 警告:永远...

移步换景的博客 2262

软件测试基础知识(2)

1.在配置测试中,如何判断发现的缺陷是普通问题还是特定的配置问题?参考答案:在进行配置测试时,测试工程师仍然会发现一些普通的缺陷,也就是与配置环境无关的缺陷。因此判断新发现的问题,需要在不同的配置中重新执行发现软件缺陷的步骤,如果软件缺陷不出现了,就可能是配置缺陷;如果在所有的配置中都出现,就可能是普通缺陷。需要注意的是,配置问题可以在一大类配置中出现。例如,拨号程序可能在所...

weixin_33724046的博客 1776

KLayout教程(二)编辑不同的形状

首先画一个基础的矩形,然后双击他可以定义他的坐标

集成光电子 1万+

数据分析实战:如何用皮尔逊相关系数避免伪相关陷阱(附Python代码)

本文通过实战案例与Python代码,深入解析了皮尔逊相关系数在数据分析中的应用与常见陷阱。文章重点揭示了如何识别与避免由混杂变量导致的伪相关,并介绍了通过可视化、敏感性分析、分层分析与偏相关分析等方法来检验相关性的可靠性,帮助分析师建立严谨的相关性思维。

weixin_29051245的博客 411

idea中好用的git shelve changes和stash changes

两者的区别有: 1、 shelve changes 是idea自带的,会生成default changelist; 2、stash changes 不会生成,如果需要删除需要勾选pop命令行; 3、其他

eclipse1024的博客 4万+

短距激光雷达专业讲解:定义、架构、技术路线与选型逻辑

短距激光雷达,通常指有效探测距离不大于 50 米的激光雷达产品。它主要服务于服务机器人、扫地机器人、AGV/AMR、无人机、智能手机、AR/VR、工业安全等中近距感知场景。它与车载中长距激光雷达的最大区别,不是“探测距离短一点”,而是整套工程目标不同。短距激光雷达的核心诉求是:小体积、低成本、高帧率、强抗光、嵌入式集成。单价从百元级扫地机模组,到数千元级工业 3D 雷达不等。一句话概括:中长距车载激光雷达追求远距离、高可靠、车规寿命;

致力于lidar应用开发 151

BVT测试与冒烟测试

【BVT的释义】 BVT的全称是Build Verification Test。可以说这个全称就是BVT的定义了。 BVT只验证build构建的成功与失败,不深入测试构建好的build的功能、性能等等。 BVT是在所有开发工程师都已经检入自己的代码,项目组编译生成当天的版本之后进行,主要目的是验证最新生成的软件版本在功能上是否完整,主要的软件特性是否正确。如无大的问题,就可以进行

anotherblue的博客 3000

基于语义分割的实时建图:HDMap动态更新

基于语义分割的实时建图:HDMap动态更新​ ,人工智能,计算机视觉,大模型,AI,本文围绕基于语义分割的实时建图技术在HDMap动态更新中的应用展开,介绍了语义分割基础、HDMap概述、相关实时建图技术、动态更新关键技术、系统性能评估指标、实际应用案例、面临的挑战与解决方案及未来发展趋势。阐述了该技术如何利用传感器数据和语义分割算法,解决传统HDMap构建与更新的弊端,分析了其在精度、实时性、鲁棒性等方面的表现,以及在自动驾驶和智能交通中的应用,还探讨了现存问题及未来优化方向。

不踩坑,不知道坑有多深;不总结,踩过的坑白踩。 22万+

Linux----Ubuntu系统官网下载iso镜像文件

Linux----Ubuntu系统官网下载iso镜像文件

MQ0522的博客 5万+

敏捷研发落地之持续集成

目录 一、什么是持续集成 二、持续集成的优势 三、持续集成面板 四、每日构建与持续集成 五、持续集成常见问题解决方案 六、持续集成环境配置 七、公告板插件 一、什么是持续集成 持续集成(CI)是一种软件开发实践,即团队开发成员经常集成他们的工作,通常每个成员每天至少集成一次,也就意味着每天可能会发生多次集成。 每次集成都通过自动化的构建(编译、发布、自动化测试)来验证,从而尽快...

HTZW的博客 617

PyCharm 接入 OpenAI Codex CLI 的 4 步配置与调试实录

揭示 Codex CLI 在 PyCharm 中上下文失稳的四大根源:CLI 启动模式与 IDE 进程模型冲突、stdin/stdout 流式处理不兼容、环境变量污染、AST 注释缺失,并给出基于 Shell 脚本桥接与结构化上下文注入的稳定接入方案。

weixin_42627902的博客 372

训练数据示例

针对“规格书生成测试用例脚本”的任务,在 LLaMA-Factory 中使用即可。关键是把“规格书内容”放进input字段,把“期望的脚本输出”放进output字段。

liuxs2009的专栏 58

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

从瀑布到流水线:DevOps 入门与 GitLab + Jenkins + Docker 落地实践

先看清软件开发生命周期(SDLC)的全貌,再对比瀑布模型与敏捷开发,随后进入持续集成与 CI/CD 的机制内核;最后落到实操——在 GitLab、Jenkins、Docker 组成的四机实验环境里,走完源码托管、自动化构建、镜像封装与远程部署,直到参数化构建与版本回滚。概念与命令并重,既是入门地图,也是操作手册。

年轻的时候很穷,经过我多年的努力,终于不再年轻。 250

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

Java EE 进阶:8.MyBatis 操作数据库(入门)(第一弹)

Java EE 进阶:8.MyBatis 操作数据库(入门)(第一弹)

要努力去发光,而不是被照亮~ 125

Statistics and Machine Learning Toolbox

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

DNS 不是把域名翻译成 IP:递归解析、TTL 缓存、CNAME 与报文排错实战

本文通过离线Python实验,拆解DNS递归解析、缓存机制与报文结构,揭示“DNS不是全局映射表”的本质。重点解析递归器角色、TTL衰减、CNAME链处理、负缓存隔离及修改记录延迟生效等核心问题,结合实战排错案例,阐明缓存层级、事务匹配、截断处理与安全边界,强调从应用到权威的逐层排查逻辑,实现可复现、可验证的DNS教学系统。

此人很懒,什么都没有写~~ 348

密码存储不是 MD5 加盐:PBKDF2、scrypt、参数升级与安全验证实战

本文通过实战演示密码存储的正确做法:摒弃MD5加盐,采用PBKDF2与scrypt等高成本密钥派生函数,结合随机盐、版本化记录与严格解析,确保离线破解成本可控。模块实现安全验证、参数校验、透明升级与统一错误处理,强调算法选择需兼顾安全性与可维护性,提供教学级密码存储方案,助力构建可迁移、可审计的认证边界。

此人很懒,什么都没有写~~ 233

【LTE L3 笔记 09】LTE物理信道-PRACH

课程来源:B站《【2022】华为HCIA-LTE无线工程师认证学习中级视频》笔记为个人整理,含课件截图,仅供学习交流。

lyouhuan的博客 188

软件测试用例模板怎么写:从用例设计到执行记录的全套指南

测试用例是测试工作的核心产出,它决定测试覆盖了多少、漏掉了什么。但大多数人的测试用例写得像流水账——只有正常路径,没有异常场景;只有操作步骤,没有预期结果;只有功能测试,没有非功能测试。本文拆解测试用例的标准结构,说明每个字段的含义和写法,给出覆盖功能测试、性能测试、安全测试的完整用例范例,并列出测试用例设计的五个高频遗漏点。

wuwangzhiduoshao的博客 149

MCP实战06:传输实战、测试与部署

你的 MCP Server 写完了,怎么确认它真的能被宿主正确调用?这课给传输层实战三件套:MCP Inspector 可视化调试、协议级自动化测试(pytest 断言 JSON-RPC 报文结构)、stdio/HTTP 双传输部署。测试不是可选项——工具描述错一个字段宿主就调不对,你能给 Server 建起自己的回归测试。

Blockbuster-drug 723

【LTE L3 笔记 05】LTE同步信号

课程来源:B站《【2022】华为HCIA-LTE无线工程师认证学习中级视频》笔记为个人整理,含课件截图,仅供学习交流。

lyouhuan的博客 115

电芯串并联与BMS保护

串联升压、并联扩容,规则一句话,但整包能用多少由最弱的那节电芯说了算。这篇先算最弱电芯的账,再讲清三层保护,最后给对应的BMS测试用例:欠压、压差、均衡怎么测。BMS项目里有个常见场面:两台同配置的样车,电芯是同一批的,跑出来续航和限功率点却对不上。拆包量单体,一台里有一节电芯的容量比其他低了8%。整包表现被一节拖住,就是串并联的规矩在起作用。这篇先把规则和算例讲清,再讲保护分层,最后落到测试用例。

qq_43241255的博客 231
上一篇: Visual Studio 2010 Ultimate敏捷利剑:详解Scrum
下一篇: 在Visual Studio 2010中实现数据驱动Coded UI Tests
Developernet
博客等级 码龄22年 324粉丝 52原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值