ch2.1-软件技术基础

上传人:tian****1990 文档编号:72961267 上传时间:2019-01-24 格式:PPT 页数:39 大小:351.81KB
返回 下载 相关 举报
ch2.1-软件技术基础_第1页
第1页 / 共39页
ch2.1-软件技术基础_第2页
第2页 / 共39页
ch2.1-软件技术基础_第3页
第3页 / 共39页
ch2.1-软件技术基础_第4页
第4页 / 共39页
ch2.1-软件技术基础_第5页
第5页 / 共39页
点击查看更多>>
资源描述

《ch2.1-软件技术基础》由会员分享,可在线阅读,更多相关《ch2.1-软件技术基础(39页珍藏版)》请在金锄头文库上搜索。

1、专题1:计算机软件技术基础,计算机软硬件技术基础,计算机技术基础与信息系统开发 软件质量工程化软件开发的目标,计算机技术基础与信息系统开发,如何理解计算机技术基础与信息系统开发的关系? 理解计算机原理:开发高质量软件的基础 受限系统上对现实世界的模拟数字化的世界 语言、开发工具的发展降低了软件开发门槛 非规范的开发方式引入了软件缺陷,提高了开发成本,质量工程化软件开发的目标,什么是软件的质量,CMM(Capability Maturity Model能力成熟度模型):一个系统、组件或过程符合特定需求(客户/用户的要求与期望)的程度 思考:是不是运行正确的软件就是高质量的软件?,质量的对立面:缺

2、陷BUG,功能性属性 正确性(精确性) 软件第一质量属性 健壮性(容错/恢复) 航空/金融/军事 可靠性(平均无故障时间) 不可重复的错误难以发现。资源与内存泄漏/数据溢出(如千年虫) 非功能性属性 性能 时间-空间效率 不等于 运行速度 易用性:用户笨还是你笨? 清晰性 安全性(Security, not safety) 平衡:入侵代价获取的利益 可扩展性(适应变化) 兼容性(适应其他系统) 可移植性(适应环境),思考:从程序员的角度来看,如何提高软件质量? 郎中三兄弟与提高软件质量的三个层次 1、高质量的软件开发过程和规范的程序设计 2、定期检查和修正错误 3、对已出现的错误进行修补,改变

3、观念:软件开发不是编程,有设计有实现,高处设计,低处实现 工程思想:标准与规范(过程/方法/工具) 软件开发 等于 编程? 编程 等于 用编程语言表达算法逻辑? 制造业是如何提高产品质量,提高生产效率的? 编程是艺术还是技术?软件开发人员的数量构成大致会是如何?,1、软件开发中的设计,高处设计:不陷于细节,从总体上考虑 能对软件整体架构进行剖析 模块化与开放性思维(系统的思维方式) 模块规模与拆分 考虑程序流程 程序设计之前的可预测性,软件设计:不要重复发明轮子代码重用的方式与模块化思想的演进 重用的好处:质量/效率/成本 重用的方法: COPY & PASTE 模块化:系统的思维方式分而治之

4、,把复杂问题分解为简单问题。 面向对象 组件化,为什么面向对象?,思考:培训班的上课问题,一个讲师在上完自己的课时,通知学员如何找到参加其他课程的教室。,区别:责任的转移学生是对自己负责有行为的主体:对象 优点:如果需求发生变化,现在对参加某类培训的学员有特殊要求,两种设计方式会如何处理?,实验1中,我是怎么做的?,2、软件开发中的实现,用户的思考角度:语言是算法逻辑的表达方式? 思考:不使用第三个变量交换两个整型变量a,b的值,解法1: a=a+b; b=a-b; a=a-b; 很巧妙的算法吗?问题:该方法是否适用于浮点数?(如:a=10.3,b=7.5),计算机设计者的思考角度,代码与数据

5、是在有限的内存空间中的近似表示 数据有字长限制 浮点数有精度限制 地址表示与CPU的高低位 程序结构与缓冲区溢出 解法2: a=ab; b=ab; a=ab;,例:windows的消息机制与程序运行。 .典型的原生Windows程序结构与开发过程,OS设计者思考角度:,RAD背后事件委托,由此想到的:编程语言的比较 语言与开发工具的关系 IDE,Framework以及RAD Visual Basic(Visual Basic) ADO,ActiveX Visual C+(C/C+ - MFC) ODBC,ADO C+ Builder(C/C+ - VCL) BDE,ADO,DBExpress

6、Delphi(OP - VCL) BDE,ADO,DBExpress JBuilder(Java JDK类库) JDBC,跨平台 Power Builder(Power Script - PFC) JSP/ASP/PHP 开发工具间的选择与配合 内部接口 DLL COM(ActiveX) 组件,语言、编译器设计者的角度:,C/C+:char实际上是一个整数 思考:以下代码有何问题? char a=255; /其他代码 if(a=255) DoSomeThing(); ,字节对齐与结构体的空间布局: 思考:求sizeof(MyStruct)的结果: typedef struct int a; c

7、har b; char c; MyStruct; 请在不同的编译器下检验结果。,隐式类型转换难以发现的BUG 思考:下面的C代码有何问题? int number=100; int unit=3; float total=number*11/unit;,多线程中的高级语言单指令: 思考:在系统级多线程程序设计中,下面哪一条C语句需要考虑同步问题? A)x=1; B)x=y; C)x=x+1;,x = 1; Visual C+ 6.0 Debug模式 mov dword ptr ebp-4,1 Borland C+ Builder mov ebp-0x04, 1 x = y; Visual C+

8、6.0 Debug模式 mov ecx,dword ptr ebp-0Ch mov dword ptr ebp-8,ecx Borland C+ Builder mov edx,ebp-0x0c mov ebp-0x08,edx x = x +1; Visual C+ 6.0 Debug模式 mov edx,dword ptr ebp-4 add edx,1 mov dword ptr ebp-4,edx Borland C+ Builder inc dword ptr ebp-0x04,分析:高级语言中的一条语句,并不一定对应一条机器指令,在多线程程序中很可能在执行中间被挂起,在普通应用中利

9、用CPU硬件本身的现场保护一般不会出现问题,但在操作系统的开发中就可能出现问题。,例:下面的java代码在多线程应用中是否可能会发生问题? String str = new string(“美利坚合众国”); /其他语句 str = “中华人民共和国”; 分析:同上。,编译器优化 思考:下面代码的输出结果是什么 char str1 = “abc“; char str2 = “abc“; const char str3 = “abc“; const char str4 = “abc“; const char* str5 = “abc“; const char* str6 = “abc“; if(

10、str1=str2) printf(“OK1“); if(str3=str4) printf(“OK2“); if(str5=str6) printf(“OK3“); 请在不同的编译器下检验结果,3、算法、性能与编程技巧,1)编写代码之前先考虑算法的适用性 例:对磁盘文件中的内容(不重复的7位数字的电话号码)进行排序输出到另一个文件,可能有多少种算法? 由于程序运行在受限环境下,可支配的内存约1MB-1.2M左右,要求过程在10秒左右完成(磁盘空间充足)。 分析:用字符串表示号码每个号码7个字节,1MB可存放143000个号码 用整数表示号码每个号码4个字节(32位系统),可存放250000个

11、号码 解法1: 使用临时文件,每次排序250000个号码,使用快速排序等高效算法最后合并 解法2: 位图算法,1MB可表示为一个约有8百万个bit的字符串表示,鉴于号码不会以0开始,一般也会保留某些数字前缀,1.2MB可以容纳全部号码集合。,启示: 学习数据结构不仅要学会算法本身,还应该学会数据结构与算法的特点与适用范围。 应用不是纯数学问题,2)工程思想与性能的平衡 可读性:代码长短与性能不成正比 对于大型的难以维护的系统,在优化算法和升级硬件的选择上,后者是更为稳妥的方法 不要以程序的短小或运行的效率来显示自己的水平,可读性是第一位的 使用常用和公认的算法,除非与小组成员进行交流 不要依赖

12、编译器的某些特点以及未明确未定义的功能 同样,不要依赖操作系统中某些未公开的功能 用户需要的是体贴的功能,不是花哨的界面 不要强迫用户你知道什么是流氓软件吗?如何评价? 程序设计基本原则规范与标准化,一些规范的例子,命名规范 避免关键字 例:在access中建立字段时起名为value, date, time, 然后在应用程序中对该表进行操作. 前缀,大小写与匈牙利命名法,g_,m_,s_, 公司或功能标记? 有意义,简单的名词作变量名(或形+名),动词作函数名 Min-Length & Max-Information原则 可发音的名字 通用性,英文 避免歧义与误识别的字母,如I与l与1 直观的

13、布尔类型,如isEmpty 常量用大写 文件名与小组成员协商制作共同的命名规范,数据类型 避免浮点类型效率与精度,int类型是最有效率的 了解语言的类型兼容性 强类型语言 C+/C#/Java 弱类型语言 VB/VBScript/JavaScript/PHP/Perl 有符号类型与无符号类型 显式类型转换 类型转换会不会丢失数据?,操作符 熟悉优先级,加括号永远是好的习惯 函数 避免参数过多 唯一出口原则? 用函数取代常用的代码段 进入时初始化,退出时清理,内存与指针 malloc 与 free,new 与 delete成对使用(并非数量上的成对,而是逻辑上的) 谁分配,谁释放,否则必则在文档

14、严格说明 指针指向的内存被释放后,应复位其值为NULL C/C+:为字符串结束符占用的空间分配内存 对地址操作一定要小心,因为和机器和硬件相关,可能造成移植性的问题和难以检查的错误。如:高低位字节,对齐方式等,性能效率 goto 的合理使用 循环体内不要定义变量 常用或大尺寸的数据设为全局变量(有争议)或常量 传址与引用 延迟执行(如磁盘写缓冲区),风格与习惯 空行与空格 注释:战略性与战术性(全局与局部)/自解释 缩进 成对原则先封两头,再写中间 代码长度与模块化 100行 还是goto 不要在一行放多条语句,过长语句要分行+缩进 过于复杂的语句分解为几条 错误处理 代码重用不断重构,小结,编码之前先设计(质量目标) 计算机原理也是开发人员的编程基础。 用计算机的方式思考 用操作系统的方式思考 用编译器的方式思考 程序设计必须规范化 编码风格 编程习惯,作业,调试以上内容中的范例 小组为单位制定编码规范 小组讨论,完成开题,实验2,完成一个进制转换程序,将一个十进制整数转换成任意进制数,并测试.,

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

当前位置:首页 > 高等教育 > 大学课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号