微软程序开发制胜策略微软程序员13条制胜法则cvqw.pptx

上传人:muj****520 文档编号:91060926 上传时间:2023-05-21 格式:PPTX 页数:56 大小:223.65KB
返回 下载 相关 举报
微软程序开发制胜策略微软程序员13条制胜法则cvqw.pptx_第1页
第1页 / 共56页
微软程序开发制胜策略微软程序员13条制胜法则cvqw.pptx_第2页
第2页 / 共56页
点击查看更多>>
资源描述

《微软程序开发制胜策略微软程序员13条制胜法则cvqw.pptx》由会员分享,可在线阅读,更多相关《微软程序开发制胜策略微软程序员13条制胜法则cvqw.pptx(56页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、微软开发制胜策略微软程序员13条制胜法则黄雪斌微软全球技术中心2023/5/171微软高级开发管理峰会主要内容微软开发过程概述微软程序员13条制胜法则编写优质代码四大法则测试代码,安身立命之本四大法则千锤百炼,不败金身五大法则Q&A2023/5/172微软高级开发管理峰会编写优质代码统一代码风格避免冗长代码降低代码间耦合减少冗余代码2023/5/173微软高级开发管理峰会法则1:统一代码风格确定统一的编码风格添加注释起个好名字让一切井井有条2023/5/174微软高级开发管理峰会代码风格一致(Code Style)=public class BugSystem/更多的代码更多的代码=for(i

2、nt i=0;iarray.length;i+)if(arrayi 0)arrayi=-arrayi;/end if/end for=public class BugSystem/更多的代码更多的代码=for(int i=0;iarray.length;i+)if(arrayi BugAge.Old)currentBug.setPriority(BugPriority.URGENT);2023/5/177微软高级开发管理峰会添加注释(续)添加注释的目的使代码易读、易写、易维护如何添加注释代码、数据、算法的解释做标记(时间、所做的改动等)标识代码的功能和目的代码如何调用避免对显而易见的内容进行注

3、释添加大段注释注释的拼写错误例子VS.NET中自带的Duwamish的例子2023/5/178微软高级开发管理峰会起个好名字if(b1.grd()ba.gt()bl_sys.rem(b1);elsebl_sys.rad(b1);2023/5/179微软高级开发管理峰会起个好名字(续)if(bug1.getReactivateDate()BugAge.getToday()bugAlertSystem.removeBug(bug1);else bugAlertSystem.resetActivateDate(bug1);2023/5/1710微软高级开发管理峰会起个好名字(续)/根据Functio

4、n Spec的规则,如果Bug被重新激活,需要发送一份alert/email.重置BugAlertSystem中今天重新激活的Bug的激活日期,以便/统一发送alert email.if(bug1.getReactivateDate()BugAge.getToday()/Bug不是今天重新激活的,将该不是今天重新激活的,将该Bug从从AlertSystem中移走中移走bugAlertSystem.removeBug(bug1);else/Bug今天重新被激活,重置今天重新被激活,重置bug1在在AlertSystem中的激活日期中的激活日期bugAlertSystem.resetActivat

5、eDate(bug1);2023/5/1711微软高级开发管理峰会起个好名字(续)大小写问题Pascal Case:BackColorCamel Case:backColorUpper Case:System.Web.UI避免混淆int myNumber;int MyNumber;使用缩写准则GetWindow vs.GetWin首字母缩写避免使用不被广泛接受的首字母缩写IO vs.InputOut;OLAP vs.On-line Analytical Processing词语的选择2023/5/1712微软高级开发管理峰会起个好名字(续)名字空间、类、接口、方法、参数的命名名字空间:Comp

6、anyName.TechnologyName.Feature.Design 类:使用名词、不要使用前缀、不要使用“_”FileStream、ApplicationException接口:使用名词或形容词、加前缀“I”、不要使用“_”IServiceProvider、IFormatable 方法:使用动词RemoveAll()、GetCharArray()参数:camel Case、“见文知义”Type GetType(string typeName)http:/ class Transmitterstring myDestination;public Transmitter(string aD

7、estination)myDestination=aDestination;public void transmit(string aMessage)openConnection();sendMessage(aMessage);closeConnection();private void openConnection()/ToDo 实现实现openConnection()private void sendMessage(string aMessage)/ToDo 实现实现openConnection()private void closeConnection()/ToDo 实现实现closeC

8、onnection()2023/5/1715微软高级开发管理峰会法则2:避免冗长代码一个method多长合适?曾经看过1400行的一个method1986年对IBM OS/360的统计结果:绝大多数的错误出在大于500行的函数中1991年对148,000行代码的统计结果,在大于143行的函数中修复一个Bug需要多花费2.4倍的代价专家的建议不要超过一屏Method Cohension2023/5/1716微软高级开发管理峰会Method Cohesionpublic void process(string words)/Loop through the array of stringsfor(

9、int i=0;i0;j-)argument+=wordsi.Substring(j-1,1);Console.WriteLine(argument);/Test for two particular stringsif(words.Length=2)if(words0.ToLower().Equals(“coding)&words1.ToLower().Equals(“guru)Console.WriteLine(“Admire);2023/5/1717微软高级开发管理峰会Method Cohesion(续)private string reverseCharacters(string fo

10、rward)string reverse=;for(int j=forward.Length;j0;j-)reverse+=forward.Substring(j-1,1);return reverse;private bool isCodingGuru(string names)bool IsGuru=false;if(names.Length=2)if(names0.ToLower().Equals(“coding)&names 1.ToLower().Equals(“guru)Console.WriteLine(“Admire);2023/5/1718微软高级开发管理峰会Method C

11、ohesion(续)public void process(string words)for(int i=0;iwords.Length;i+)Console.WriteLine(reverseCharacters(wordsi);if(isCodingGuru(words)Console.WriteLine(“Admire);2023/5/1719微软高级开发管理峰会法则3:降低代码间耦合耦合无处不在整体系统的构成依靠耦合松耦合和紧耦合避免紧耦合修改一处代码不会引起更多的变动便于代码重用、维护和扩充类之间的耦合Identity耦合,Representational耦合2023/5/1720微

12、软高级开发管理峰会法则3:降低代码间耦合public class BookShelf/Well use an ArrayList to store our BooksArrayList myBookList=new ArrayList();/Method to add a Book to the internal ArrayListpublic void addBook(Book aBook)myBookList.Add(aBook);/Method to return an iterator of all the Books heldpublic IEnumerator getBooks()

13、return myBookList.GetEnumerator();2023/5/1721微软高级开发管理峰会法则3:降低代码间耦合(续)public class Book/Represents the behaviour Book is designed to deliverpublic void BookyBehavior()Console.WriteLine(Just being a Book.);/Book,responsible for itself,knows how to store itselfpublic void storeSelf(BookShelf wc)wc.addB

14、ook(this);2023/5/1722微软高级开发管理峰会法则3:降低代码间耦合(续)public class BookClientpublic static void main(String args)/Make the ShelfBookShelf myBookShelf=new BookShelf();/Loop 10 timesfor(int i=0;i10;i+)/Make a new Book,and have it store itself in the Shelfnew Book().storeSelf(myBookShelf);2023/5/1723微软高级开发管理峰会法

15、则3:降低代码间耦合(续)耦合关系表ClassCouple toType Book BookShelf Identity,Representational BookShelf BookIdentity BookClient BookIdentity,Representational BookClient BookShelf Identity2023/5/1724微软高级开发管理峰会法则3:降低代码间耦合(续)public class BookShelf/Well use an ArrayList to store our BooksArrayList myBookList=new ArrayL

16、ist();/Method to add a Book to the internal ArrayListpublic void addBook(Book aBook)myBookList.Add(aBook);/Method to return an iterator of all the Books heldpublic IEnumerator getBooks()return myBookList.GetEnumerator();2023/5/1725微软高级开发管理峰会法则3:降低代码间耦合(续)public class Book public void BookyBehavior()

17、Console.WriteLine(Just being a Book.);public class BookClientpublic static void main(String args)BookShelf myBookShelf=new BookShelf();for(int i=0;i 0,FindCustomer出错,customerID应该大于0);/More code.return true;2023/5/1733微软高级开发管理峰会返回值的验证if(SetCustomerValid(customerID)Debug.Assert(CustomerIsValid(custome

18、rID);UserCustomer(customerID);elseDebug.Assert(!CustomerIsValid(customerID);ReleaseCustomer(customerID);2023/5/1734微软高级开发管理峰会数据有效性验证Conditional(DEBUG)private void BugValidate(Bug currentBug)Debug.Assert(currentBug.BugID0,“测试测试Bug有效性有效性”,“BugID应该大于应该大于0);Debug.Assert(currentBug.Status!=null,“测试测试Bug有

19、效性有效性”,“Bug状态不状态不能为空能为空);Debug.Assert(currentBug.Owner!=null,“测试测试Bug有效性有效性”,“Bug负责人负责人不能为空不能为空);/More here.public bool BugOperation(Bug currentBug)/More codeBugValidate(currentBug);ResolveBug(currentBug);BugValidate(currentBug);/More code.return true;2023/5/1735微软高级开发管理峰会算法验证使用Debug代码来验证代码的正确性方法对初始

20、状态、中间状态和最终结果使用断言使用更简单的算法对程序结果进行确认举例排序算法中,排序结果的每一个值都大于等于前一个值压缩算法中,压缩文件解压缩后和原文件匹配加密算法中,密文解密的结果应该等于原文Demo2023/5/1736微软高级开发管理峰会法则7:异常处理异常处理和Debug代码的关系异常处理和返回值的关系编写稳定的应用程序的关键增强了程序的可扩展性AB 扩展到AIB错误的处理更加灵活AIJKB(A可以灵活的处理由B引起的错误)异常不容易被忽视2023/5/1737微软高级开发管理峰会异常处理(续)使用返回值判断使用返回值判断public bool Method()Boolean res

21、ult=false;if(!OpenFile()goto End;if(!ReadFile()goto End;if(!CloseFile()goto End;result=true;End:return result;使用异常处理使用异常处理public void Method()try OpenFile();ReadBytes();CloseFile();catch(FileIOException)/handle failure 2023/5/1738微软高级开发管理峰会抛出异常根据method的功能,在需要的地方抛出异常所有的自定义异常类以Exception结尾自定义异常继承System

22、.ApplicationException,不要继承System.Exceptionpublic class FileNotFoundException:ApplicationException提供详细的异常信息(Exception Message)不要在异常信息中提供敏感的安全内容抛出最为合适的异常2023/5/1739微软高级开发管理峰会抛出异常(续)使用Exception Builder方法class Filestring fileName;public byte Read(int bytes)if(!ReadFile(handle,bytes)throw NewFileIOExcept

23、ion();FileException NewFileException()string description=/build localized stringreturn new FileException(description);2023/5/1740微软高级开发管理峰会处理异常捕获特定的异常不要把异常“吃掉”public void Method()tryFile.Open();catch(Exception e)/所有的异常都被所有的异常都被“吃掉吃掉”了了使用finally释放资源public void UpdateSet()FileStream stream=null;trystr

24、eam=new FileStream(“SomeFile.dat”,FileMode.Open);finallyif(stream!=null)stream.Close();2023/5/1741微软高级开发管理峰会处理异常(续)恢复原来的状态public void DoSomething(FileStream fs)Int64 pos=fs.Position;try/do some reading with fs catchfs.Position=pos;/unwind on the failurethrow;/rethrow添加更加详细的信息public Int32 GetInt(Int3

25、2 array,Int32 index)tryreturn arrayindex;catch(IndexOutOfRangeException e)throw new ArgumentOutOfRangeException(“Parameter index is out of range.”);2023/5/1742微软高级开发管理峰会法则8:编写Unit Test提倡先写Unit Test后写代码测试先行保证程序员在开发前理解Spec确保Unit Test不会因为进度压力而取消先定功能,再定细节不是强制准则如何写Unit Test微软内部工具:TTest其他的.NET Unite Test工

26、具:NUnit,dotNetUnit,HarnessIt,csUnitDemo2023/5/1743微软高级开发管理峰会小结:测试代码,安家立命之本Debug vs.Trace活用断言(Assert)异常处理编写Unit Test2023/5/1744微软高级开发管理峰会千锤百炼,不败金身Verifier,一个都不放过安全至上性能与功能并进代码审核(Code Review)及时修复 Bug2023/5/1745微软高级开发管理峰会法则9:使用Verifier工具一个都不放过2023/5/1746微软高级开发管理峰会法则10:安全至上了解黑客如何攻击产品安全性是微软产品的最大挑战让你的产品防御攻

27、击将安全性看作需要实现的功能之一使用安全攻击模型避免常犯的错误http:/ User Control2023/5/1747微软高级开发管理峰会法则11:性能与功能并进将性能作为需要实现的功能之一分而治之ASP.NET使用Cache在必要的时候使用Session和ViewState使用最适合的认证方式:None,Windows,Forms,Passport ADO.NET尽量使用DataReader尽量使用SQL Provider(System.Data.SqlClient)使用SQL存储过程其他:http:/ ToolsDemo2023/5/1748微软高级开发管理峰会法则12:Code Re

28、view打印代码,阅读,做各种标记使用各种diff工具查看代码的改动伙伴代码审核,小组代码审核Sample你看得出来么?Code Review Checklist2023/5/1749微软高级开发管理峰会法则13:及时修复BugBug数量激增影响产品质量团队态度能否按时发布产品?设置各个准则控制Bug数量控制每个开发人员的Bug控制一个Bug处于“激活”状态的时间根据优先级/严重级“Bug hell”日2023/5/1750微软高级开发管理峰会修复一个Bug的代价Feature completionCostTime2023/5/1751微软高级开发管理峰会修复Bug流程重现Bug理解问题所在是

29、否修复该Bug仔细修复将Bug修复当作功能实现其他地方是否有同样Bug?该Bug是否能被预防?Check-in时记录Bug编号在Bug数据库中将其状态改为修复2023/5/1752微软高级开发管理峰会小结:千锤百炼,不败金身Verifier,一个都不放过安全至上性能与功能并进代码审核(Code Review)及时修复 Bug2023/5/1753微软高级开发管理峰会百尺竿头,更进一步编写优质代码发布优质产品发扬主人翁精神让人信任:按时发布产品,保持良好沟通帮助整个团队提供各种资源与他人愉快合作跟踪最新技术,修炼与提高2023/5/1754微软高级开发管理峰会Q&A2023/5/1755微软高级开发管理峰会

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 考试试题 > 消防试题

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁